![]() |
|
هل هذه الطريقة سليمة من الناحية المنطقية و البرمجية - نسخة قابلة للطباعة +- 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 على النصيحة RE: هل هذه الطريقة سليمة من الناحية المنطقية و البرمجية - Ben.Ja - 15-05-2019 هل قصدت ناحية الOOP؟, لأنك لم توضح ما الذي تريد عمله من الكلاس, تسميتك للمعرفات غير توضيحية, الباقي يبدو سليما, ليس هناك ما يلاحظ سوى نقل تعريف الكلاسات المشتقة الى Unit2, ونقل ما تحت Protected الى Private, ما دام أنهم في نفس الوحدة. |