delphi4arab منتديات دلفي للعرب
هل هذه الطريقة سليمة من الناحية المنطقية و البرمجية - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : هل هذه الطريقة سليمة من الناحية المنطقية و البرمجية (/showthread.php?tid=10209)



هل هذه الطريقة سليمة من الناحية المنطقية و البرمجية - sabre - 13-05-2019

السلام عليكم، مرحبا بالجميع.

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

كود :
[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.



RE: هل هذه الطريقة سليمة من الناحية المنطقية و البرمجية - h-farid - 13-05-2019

انت وضعت كود كامل الوحدة . وتريد مننا استنتاج عن ماذا تتحدث انت ؟!
١ ـ لا تضع كل الكود. لا يهم كل الكود .. ضع فقط الاسطر التي لها علاقة .
٢ ـ اشرح عن ماذا تتحدث . وما الذي حدث معك .. لا تتوقع مننا ان نستنتج ماذا تريد .

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

************** رد منقول للفائدة *************


RE: هل هذه الطريقة سليمة من الناحية المنطقية و البرمجية - sabre - 14-05-2019

نعم انا وضعت كود كامل الوحدة
هذا من أجل  أن يفهم الذي يطلع على الكود
هل برمجة بهذه طريقة صحيحة ومقبولة والكود سليم أقصد ليس فيه أخطاء
وهل يجوز البرمجة بهذه الطريقة

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

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

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


RE: هل هذه الطريقة سليمة من الناحية المنطقية و البرمجية - محمد عبد العزيز - 14-05-2019


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

ملاحظة:دائما حاولارفاق الكود كاملا بالمرفقات حتى يسهل تحميله وتجربته.
بالتوفيق



RE: هل هذه الطريقة سليمة من الناحية المنطقية و البرمجية - sabre - 14-05-2019

شكرا للأستاذ 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;



RE: هل هذه الطريقة سليمة من الناحية المنطقية و البرمجية - Ben.Ja - 15-05-2019

هل قصدت ناحية الOOP؟, لأنك لم توضح ما الذي تريد عمله من الكلاس, تسميتك للمعرفات غير توضيحية, الباقي يبدو سليما, ليس هناك ما يلاحظ سوى نقل تعريف الكلاسات المشتقة الى Unit2, ونقل ما تحت Protected الى Private, ما دام أنهم في نفس الوحدة.