توضيح معاني Override / Abstract / Dynamic / Virtual
#1
السلام عليكم و رحمة الله و بركاته .

ماهي هده التوجيهات :
1- Override : (اظن انها للدلالة على أن الإجراء سيكون موروث ؟؟؟ بـ Inherited)
2- ي Abstract يعني أن الدالة سيعاد تعريفها من جديد في كل صنف يشتق
من الصنف الدي تنتمي إليه ؟؟
3- virtual / dynamic : للتحميل المتأخر + خاصية المرجعيه لكن ما الفرق ؟؟ أهو الترتيب في الذاكرة ؟؟

بارك الله فيكم :monster2:.
I'M Fly Like A G6

الرد
#2
إقتباس :- Override : (اظن انها للدلالة على أن الإجراء سيكون موروث ؟؟؟ بـ Inherited)

الدالة التى تكون override يجب ان تكون تحت صنف مورث من صنف اخر يحتوى على على دالة لها نفس اسم الدالة التى تكون override
بحيث تكون تلك الدالة (dynamic او virtual)
بحيث يمكن استدعاء الدالة (dynamic او virtual) من الدالة override عن طريق الكلمة inherited
بحيث هذه الكلمة تقوم باستدعاء الدالة (dynamic او virtual) التى لها نفس اسم الدالة override
و ادا اردنا استدعاء دالة اخرى ليست لها نفس اسم الدالة override نقوم بكتابة اسمها عادى او نكتب
inherited ثم اسم الدالة .
مثلا
PHP كود :
type
  TFigure 
= class
    
procedure Dessiner1; virtual;
    
procedure Dessiner2; virtual;
  
end;
  
TRectangle = class(TFigure)
    
procedure Dessiner2; override;
  
end; 

PHP كود :
procedure TRectangle.Dessiner2;
begin
  inherited
;
  
ShowMessage('TRectangle[override]');
end; 

PHP كود :
procedure TForm1.FormCreate(Sender: TObject);
var
  
Figure: TFigure; {or Figure: TRectangle}
begin
 Figure 
:= TRectangle.Create;
  
Figure.Dessiner2;
end; 

سيتم استدعاء الدالة
كود :
TFigure.Dessiner[color=Red]2[/color];
ثم
كود :
TRectangle.Dessiner2;
=================

بالنسبة ل Abstract ... الله اعلم ... لم افهم اهميتها .

=================

بالنسبة virtual و dynamic الله اعلم لا يوجد فرق بينها سوى virtual مخصصة للسرعة و dynamic مخصصة لحجم الكود . و فى كثير من الاحيان من المستحسن استعمال virtual
هدا ما جاء به هالب
كود :
Remarque N'utilisez les méthodes dynamiques que s'il existe un avantage clair et observable. Utilisez habituellement les méthodes virtuelles.

و الله اعلم . :unsure:
الرد
#3
بارك الله فيك أخي hanipino لو عندك وقت ممكن مزيد من الأمثلة ؟؟؟
جازاك الله خيرا ,,
I'M Fly Like A G6

الرد
#4
وعليكم السلام ورحمة الله وبركاته
إقتباس :بالنسبة ل Abstract ... الله اعلم ... لم افهم اهميتها .
توجيه Abstract يستخدم للدلالة على أن المنهج يجب تعريفه في كل الأصناف المورثة، ولا يمكن تعريفه في الصنف الحالي (أي لا يمكن عمل Implement له).
ملاحظة: مثلما يمكن إنشاء مناهج Abstract (ليس لها Implement في الصنف الحالي). يمكن إنشاء صنف بكامله Abstract (أي ليس له Implement). إذا ما الفرق بينه وبين Interface؟ الجواب: الأصناف المعرفة Abstract يمكن أن تحوي حقول (Fields) بينما Interface لا، الرسم النحوي بهذا الشكل:
PHP كود :
type
  TAbstractedClass
= class abstract (TObject)
   
Field: integer;
   
procedure DoSomething;
end; 

بنفس الطريقة يمكن جعل الصنف "عقيم" لا يمكن توريثه باستخدام الموجه sealed بهذا النحو:
PHP كود :
type
  TSealedClass
= class sealed (TObject)      
  
end;
   
//Error occured here
  
TImpossibleClass= class (TSealedClass)
  
end; 
يمكن تعريف المنهج بتوجيه Final (تضاف بعد override) لمنع الأصناف المورثة من العبث بها.
أهميته (كأهيمة OOP عموما) تظهر وتتضح عندما نعمل في فريق برمجة متكامل، ونتبادل الأصناف والمناهج فيما بيننا...
استخدام منهج Virtual يعني للـ Compiler التركيز على السرعة أكثر (Optimized for Speed)، واستخدام Dynamic يعني التركيز على الحجم بشكل أكبر (Optimized for Size)، إذا لم يكن المنهج Dynamic أو Virtual فهو إذا Static ولا حاجة لكتابة هذه الأخيرة (أي أنها الحالة الافتراضية لكل منهج)، ولها استعمال خاص متعلق بالعناصر المعرفة بشكل variable class. حيث variable class هي المناهج أو الحقول التي يمكن استخدامها دون إنشاء نسخة (Instance) من الصنف، (وهو ما يقابله Static Method في لغة NET.) مثال:
كود :
type MyClass = class (TObject) [color=Red]class var[/color] MyStringVar: string; [color=Red]class procedure[/color] PopupMessage(Msg: string); end; //... procedure TForm1.FormCreate(Sender: TObject); begin [color=Red]MyClass.MyStringVar[/color] := 'Hi TF6M!'; [color=Red]MyClass.PopupMessage[/color](MyClass.MyStringVar); end; { MyClass } class procedure MyClass.PopupMessage(Msg: string); begin ShowMessage(Msg); end;
ملاحظة:
- لا فرق بين Virtual و Dynamic في Delphi .NET
- المكتوب بهذا اللون خاص بإصدارات Delphi 2006 فما فوق فقط.
بالتوفيق.
اللهم احقن دماء المسلمين، لا تنسوهم بالدعاء...
الرد
#5
اليوم فقط إطلعت على ردك الاكثر من رائع
شكرا على التوضيح الجميل و المهم ... بالتوفيق ,,
I'M Fly Like A G6

الرد
#6
إقتباس :منهج Virtual يعني للـ Compiler التركيز على السرعة أكثر (Optimized for Speed)، واستخدام Dynamic يعني التركيز على الحجم بشكل أكبر (Optimized for Size)،

Virtual Methods هي مصممة للسرعة على حساب الحجم بينما Dynamic Methods تأخذ حجم أقل في الكود التنفيذي لكنها ابطاً في التنفيذ.

Virtual Methods يتم بناء جدول لها في الذاكرة يسمى VMT والذي يتضمن فهرس يحتوي اسماء الطرق Methods الموجودة في هذا الصنف، بينما Dynamic Methods يكون لها جدول يسمى DMT ولا يكون لديها فهرس لذا يتم البحث بطريقة خطية ضمن الطرق الموجودة في الصنف وإن لم يجد يبحث في الصنف الأب وهكذا لذا فهي لا تاخذ مساحة أكثر لعدم وجود الفهرس لكنها ابطاً بسبب طريقة البحث.

لذا يفضل في معظم الحالات ان يتم إستخدام ال Virtual للسرعة
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم