هل هذه الطريقة سليمة من الناحية المنطقية و البرمجية
#1
السلام عليكم، مرحبا بالجميع.

هل هذه الطريقة سليمة من الناحية المنطقية و البرمجية
وبماذا تنصحون
وفي الاخير تقبلوا شكري الجزيل

كود :
[align=left]nit Unit1;[/align] [align=left]interface[/align] [align=left]uses[/align] [align=left]  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,[/align] [align=left]  Dialogs, StdCtrls, ComCtrls, Unit2,DateUtils;[/align] [align=left]type[/align] [align=left]  TForm1 = class(TForm)[/align] [align=left]    Button1: TButton;[/align] [align=left]    Edit1: TEdit;[/align] [align=left]    DateTimePicker1: TDateTimePicker;[/align] [align=left]    Label1: TLabel;[/align] [align=left]    Label2: TLabel;[/align] [align=left]    Edit2: TEdit;[/align] [align=left]    Label3: TLabel;[/align] [align=left]    Button2: TButton;[/align] [align=left]    procedure Button1Click(Sender: TObject);[/align] [align=left]    procedure Button2Click(Sender: TObject);[/align] [align=left]  end;[/align] [align=left]  TEnterEmployee = class(Tds)[/align] [align=left]  private[/align] [align=left]   fDateE: TDate;[/align] [align=left]   procedure SetLDate(ALDate: TDate); override;[/align] [align=left]   function GetLDate: TDate; override;[/align] [align=left]  end;[/align] [align=left]  TSortieEmployee = class(Tds)[/align] [align=left]  private[/align] [align=left]   fDateS: TDate;[/align] [align=left]   procedure SetLDate(ALDate: TDate); override;[/align] [align=left]   function GetLDate: TDate; override;[/align] [align=left]  end;[/align] [align=left]var[/align] [align=left]  Form1: TForm1;[/align] [align=left]implementation[/align] [align=left]{$R *.dfm}[/align] [align=left]procedure TForm1.Button1Click(Sender: TObject);[/align] [align=left]var[/align] [align=left] d1: Tds;[/align] [align=left]begin[/align] [align=left] d1:= TEnterEmployee.Create;[/align] [align=left] try[/align] [align=left]   d1.NameFirst := Edit1.Text;[/align] [align=left]   d1.NameLast := Edit2.Text;[/align] [align=left]   d1.LDate := DateTimePicker1.Date;[/align] [align=left]   //[/align] [align=left]   Label1.Caption := d1.NameFirst;[/align] [align=left]   Label2.Caption := d1.NameLast;[/align] [align=left]   Label3.Caption := DateToStr(d1.LDate);[/align] [align=left] finally[/align] [align=left]  d1.Free[/align] [align=left] end;[/align] [align=left]end;[/align] [align=left]procedure TForm1.Button2Click(Sender: TObject);[/align] [align=left]var[/align] [align=left] d1: Tds;[/align] [align=left]begin[/align] [align=left] d1:= TSortieEmployee.Create;[/align] [align=left] try[/align] [align=left]   d1.NameFirst := Label1.Caption;[/align] [align=left]   d1.NameLast := Label2.Caption;[/align] [align=left]   d1.LDate := StrToDate(Label3.Caption);[/align] [align=left]   //[/align] [align=left]   Edit1.Text := d1.NameFirst;[/align] [align=left]   Edit2.Text := d1.NameLast;[/align] [align=left]   DateTimePicker1.Date := d1.LDate;[/align] [align=left] finally[/align] [align=left]  d1.Free[/align] [align=left] end;[/align] [align=left]end;[/align] [align=left]function TEnterEmployee.GetLDate: TDate;[/align] [align=left]begin[/align] [align=left]  Result := fDateE[/align] [align=left]end;[/align] [align=left]procedure TEnterEmployee.SetLDate(ALDate: TDate);[/align] [align=left]begin[/align] [align=left] if YearOf(Now)-YearOf(ALDate)>17 then[/align] [align=left]   fDateE := ALDate;[/align] [align=left]end;[/align] [align=left]function TSortieEmployee.GetLDate: TDate;[/align] [align=left]begin[/align] [align=left]  Result := fDateS[/align] [align=left]end;[/align] [align=left]procedure TSortieEmployee.SetLDate(ALDate: TDate);[/align] [align=left]begin[/align] [align=left]  fDateS := ALDate[/align] [align=left]end;[/align] [align=left]end.[/align] [align=left]-----------[/align] [align=left]unit Unit2;[/align] [align=left]interface[/align] [align=left]uses Controls;[/align] [align=left]type[/align] [align=left]  Tds = class[/align] [align=left]  protected[/align] [align=left]   fNameFirst,fNameLast: string;[/align] [align=left]   procedure SetLDate(ALDate: TDate); virtual; abstract;[/align] [align=left]   function GetLDate: TDate; virtual; abstract;[/align] [align=left]  public[/align] [align=left]   property NameFirst: string read fNameFirst write fNameFirst;[/align] [align=left]   property NameLast: string read fNameLast write fNameLast;[/align] [align=left]   property LDate: TDate read GetLDate write SetLDate;[/align] [align=left]  end;[/align] [align=left]implementation[/align] [align=left]end.[/align]

كود :
nit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrls, ComCtrls, Unit2,DateUtils; type   TForm1 = class(TForm)     Button1: TButton;     Edit1: TEdit;     DateTimePicker1: TDateTimePicker;     Label1: TLabel;     Label2: TLabel;     Edit2: TEdit;     Label3: TLabel;     Button2: TButton;     procedure Button1Click(Sender: TObject);     procedure Button2Click(Sender: TObject);   end;   TEnterEmployee = class(Tds)   private    fDateE: TDate;    procedure SetLDate(ALDate: TDate); override;    function GetLDate: TDate; override;   end;   TSortieEmployee = class(Tds)   private    fDateS: TDate;    procedure SetLDate(ALDate: TDate); override;    function GetLDate: TDate; override;   end; var   Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var  d1: Tds; begin  d1:= TEnterEmployee.Create;  try    d1.NameFirst := Edit1.Text;    d1.NameLast := Edit2.Text;    d1.LDate := DateTimePicker1.Date;    //    Label1.Caption := d1.NameFirst;    Label2.Caption := d1.NameLast;    Label3.Caption := DateToStr(d1.LDate);  finally   d1.Free  end; end; procedure TForm1.Button2Click(Sender: TObject); var  d1: Tds; begin  d1:= TSortieEmployee.Create;  try    d1.NameFirst := Label1.Caption;    d1.NameLast := Label2.Caption;    d1.LDate := StrToDate(Label3.Caption);    //    Edit1.Text := d1.NameFirst;    Edit2.Text := d1.NameLast;    DateTimePicker1.Date := d1.LDate;  finally   d1.Free  end; end; function TEnterEmployee.GetLDate: TDate; begin   Result := fDateE end; procedure TEnterEmployee.SetLDate(ALDate: TDate); begin  if YearOf(Now)-YearOf(ALDate)>17 then    fDateE := ALDate; end; function TSortieEmployee.GetLDate: TDate; begin   Result := fDateS end; procedure TSortieEmployee.SetLDate(ALDate: TDate); begin   fDateS := ALDate end; end.


كود :
unit Unit2; interface uses Controls; type   Tds = class   protected    fNameFirst,fNameLast: string;    procedure SetLDate(ALDate: TDate); virtual; abstract;    function GetLDate: TDate; virtual; abstract;   public    property NameFirst: string read fNameFirst write fNameFirst;    property NameLast: string read fNameLast write fNameLast;    property LDate: TDate read GetLDate write SetLDate;   end; implementation end.
الرد
#2
انت وضعت كود كامل الوحدة . وتريد مننا استنتاج عن ماذا تتحدث انت ؟!
١ ـ لا تضع كل الكود. لا يهم كل الكود .. ضع فقط الاسطر التي لها علاقة .
٢ ـ اشرح عن ماذا تتحدث . وما الذي حدث معك .. لا تتوقع مننا ان نستنتج ماذا تريد .

شكرا لتفهمك . فما طلبي هذا إلا لجعل الموقع اكثر افادة .

************** رد منقول للفائدة *************
من قال حاد عن أصله أو قال مات فقد كذب
[-] كل من 1 user says قال شكرا ل h-farid على المشاركة المفيدة
  • sabre
الرد
#3
نعم انا وضعت كود كامل الوحدة
هذا من أجل  أن يفهم الذي يطلع على الكود
هل برمجة بهذه طريقة صحيحة ومقبولة والكود سليم أقصد ليس فيه أخطاء
وهل يجوز البرمجة بهذه الطريقة

قلت من الناحية المنطقية والبرمجية
...
ممكن أن يكون كود صحيح برمجيا ومقبول
ولكن من فيه أخطاء منطقية أو الاثنين معا

أنا أعتقد أن أي أحد له دراية بالبرمجة يكون باستطاعته
أن يفهم الكود، الكود ليس طويل

انت نقلت تعليق استاذ سامر اسيل
لأنني وضعت السؤال في موقعه
الرد
#4

السلام عليكم
لم اجرب الكود او اطلع عليه و اجيبك عامة
طرق البرمجة مختلفة ما يهم ان يعمل
لا مشاكل مع الCOMPILER
لا مشاكل عندما تجرب تنفيذه انت
لا مشاكل عندما يجربه غيرك

ملاحظة:دائما حاولارفاق الكود كاملا بالمرفقات حتى يسهل تحميله وتجربته.
بالتوفيق
رَبَّنَا اغْفِرْ لِي وَلِوَالِدَيَّ وَلِلْمُؤْمِنِينَ يَوْمَ يَقُومُ الْحِسَابُ
[-] كل من 1 user says قال شكرا ل محمد عبد العزيز على المشاركة المفيدة
  • sabre
الرد
#5
شكرا للأستاذ B.M.AbdelAziZ على النصيحة
و شكرا للأستاذ h-farid على النصيحة

abstract
التجريد، بمعنى دالة أو اجراء  ليس لهما جسم، مجرد رؤوس فقط
virtual
الافتراضي ، بمعنى أن الدالة أو الاجراء يمكن أن نستعمل اسميهما الداخل الفئات المشتقة من الفئة التي هما فيها
override
المهيمن، بمعنى أنه يهيمن على الاجراء أو الدالة افتراضيين

هذه الدالة في الفئة الام
function GetLDate: TDate; virtual;
هذه الدالة في الفئة المشتقة
function GetLDate: TDate; override;

(14-05-2019, 11:52 PM)sabre كتب : شكرا للأستاذ B.M.AbdelAziZ على النصيحة
و شكرا للأستاذ h-farid على النصيحة

abstract
التجريد، بمعنى دالة أو اجراء  ليس لهما جسم، مجرد رؤوس فقط
virtual
الافتراضي ، بمعنى أن الدالة أو الاجراء يمكن أن نستعمل اسميهما الداخل الفئات المشتقة من الفئة التي هما فيها
override
المهيمن، بمعنى أنه يهيمن على الاجراء أو الدالة افتراضيين

هذه الدالة في الفئة الام
function GetLDate: TDate; virtual;
هذه الدالة في الفئة المشتقة
function GetLDate: TDate; override;


الملفات المرفقة
.rar   dd.rar (الحجم : 2.83 ك ب / التحميلات : 7)
الرد
#6
هل قصدت ناحية الOOP؟, لأنك لم توضح ما الذي تريد عمله من الكلاس, تسميتك للمعرفات غير توضيحية, الباقي يبدو سليما, ليس هناك ما يلاحظ سوى نقل تعريف الكلاسات المشتقة الى Unit2, ونقل ما تحت Protected الى Private, ما دام أنهم في نفس الوحدة.
الرد


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


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