المشاركات : 563
المواضيع 28
:
: 0
الإنتساب : Dec 2008
18-12-2009, 08:03 PM
(آخر تعديل لهذه المشاركة: 14-09-2010, 07:56 AM بواسطة Admin.)
السلام عليكم و رحمة الله و بركاته .
ماهي هده التوجيهات :
1- Override : (اظن انها للدلالة على أن الإجراء سيكون موروث ؟؟؟ بـ Inherited)
2- ي Abstract يعني أن الدالة سيعاد تعريفها من جديد في كل صنف يشتق
من الصنف الدي تنتمي إليه ؟؟
3- virtual / dynamic : للتحميل المتأخر + خاصية المرجعيه لكن ما الفرق ؟؟ أهو الترتيب في الذاكرة ؟؟
بارك الله فيكم :monster2:.
المشاركات : 378
المواضيع 44
:
: 6
الإنتساب : Feb 2008
إقتباس :- 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:
المشاركات : 563
المواضيع 28
:
: 0
الإنتساب : Dec 2008
بارك الله فيك أخي hanipino لو عندك وقت ممكن مزيد من الأمثلة ؟؟؟
جازاك الله خيرا ,,
المشاركات : 2,293
المواضيع 157
:
: 81
الإنتساب : Dec 2008
19-12-2009, 09:21 PM
(آخر تعديل لهذه المشاركة: 19-12-2009, 11:29 PM بواسطة kachwahed.)
وعليكم السلام ورحمة الله وبركاته
إقتباس :بالنسبة ل 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 فما فوق فقط.
بالتوفيق.
اللهم احقن دماء المسلمين، لا تنسوهم بالدعاء...
المشاركات : 563
المواضيع 28
:
: 0
الإنتساب : Dec 2008
اليوم فقط إطلعت على ردك الاكثر من رائع
شكرا على التوضيح الجميل و المهم ... بالتوفيق ,,
المشاركات : 80
المواضيع 8
:
: 0
الإنتساب : Mar 2009
13-09-2010, 03:50 PM
(آخر تعديل لهذه المشاركة: 14-09-2010, 11:13 AM بواسطة kachwahed.)
إقتباس :منهج Virtual يعني للـ Compiler التركيز على السرعة أكثر (Optimized for Speed)، واستخدام Dynamic يعني التركيز على الحجم بشكل أكبر (Optimized for Size)،
Virtual Methods هي مصممة للسرعة على حساب الحجم بينما Dynamic Methods تأخذ حجم أقل في الكود التنفيذي لكنها ابطاً في التنفيذ.
Virtual Methods يتم بناء جدول لها في الذاكرة يسمى VMT والذي يتضمن فهرس يحتوي اسماء الطرق Methods الموجودة في هذا الصنف، بينما Dynamic Methods يكون لها جدول يسمى DMT ولا يكون لديها فهرس لذا يتم البحث بطريقة خطية ضمن الطرق الموجودة في الصنف وإن لم يجد يبحث في الصنف الأب وهكذا لذا فهي لا تاخذ مساحة أكثر لعدم وجود الفهرس لكنها ابطاً بسبب طريقة البحث.
لذا يفضل في معظم الحالات ان يتم إستخدام ال Virtual للسرعة