البرمجة غرضية التوجه في دلفي

بسم الله الرحمن الرحيم

—————-

مقدمة …

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

—————-

مقدمة إلى OOP …

OOP وتعني Object Oriented Programming (أي البرمجة المسيرة بالكائنات) , وهي مختلفة عن النوع الآخر من البرمجة والذي يسمى بالبرمجة الإجرائية

ما هذه المقدمة المعقدة يا علاء ؟!

1- البرمجة الإجرائية :

عندما تريد عمل برنامج بلغة فجوال بيزك 6 مثلا , فانك تستخدم الدوال والإجراءات , وتناديها عند الحاجة لأداء عملية معينة

2- البرمجة الكائنية :

هنا انت تستخدم الكائنات , وتنادي على الوظائف الخاصة بهذه الكائنات للقيام بالعمليات التي تريدها .

والجزء الأساسي في البرمجة الكائنية هو الوحدة Class والتي تمثل الكائن … لنأخذ المثال التالي :

– نفرض ان لدينا كائن (أو وحدة) اسمه إنسان .

– وهذا الكائن لديه خصائص , مثل الطول والاسم والعمل ..الخ .

– ولديه وظائف وطرق يمكنه تأديتها , مثل الأكل والشرب والنوم ..الخ .

وحتى تنفذ عملية معينة موجود في هذا الكائن عليك النداء عليها من خلال هذا الكائن , كقولك في الحياة اليومية :

“أرجو أن تسقني كوب ماء يا محمد” .. هنا الكائن هو محمد , والوظيفة المستخدمة هي طلب الشرب .

هذا بصورة عامة وسريعة , ولتوضيح الصورة في الذهن أكثر

—————-

المفهوم الأول : الوراثة …

في الحياة اليومية , عندما يتوفى احدهم ويترك مالاً مثلاً .. فان هذا المال كان من خصائصة (Man.Money := 50000) وأورثها إلى كائن آخر … هذا تقريبا هو مفهوم الوراثة في البرمجة الكائنية , أي ان يعطي الكائن الأب (Parent) خصائصه ووظائفه إلى كائن آخر ,,, لكن هنا لن يتوفى كائن ان شاء الله 😛 (الا لو انت استعملت عليه دالة الهدم , وسأتطرق لها فيما بعد إن شاء الله تعالى) .

– مثال :

نعود الى الكائن إنسان السابق (لاحظ انه كائن عام فيه كل الخصائص) , وسنقوم بتوريث كائن اخر وهو “علاء” هذه الخصائص من الكائن الأب .

اذا سيصبح للكائن علاء خاصية الاكل والشرب والنوم ..الخ

—————-

المفهوم الثاني : الكبسلة …

لو كان لديك سر برمجي ما , وتتفوق به في برامجك (حركة في الواجهة أو غيرها…) , فعندما تقوم بعمل برنامج واعطائه للزبون فلن يهتم كيف قمت بعمل هذه الحركة , وإنما فقط كيف يستخدمها … وهذا ما يعرف بالإخفاء أو الكبسلة , أي انك تخفي الكود وتترك فقط طريقة استعماله

—————-

المفهوم الثالث : تعدد الأشكال …

نفترض ان هناك كائنين هما “العامل أ” و “العامل ب” , ولكل منهما نفس الخصائص والطرق .. ولدى كل منهم أسلوب اسمه GetIt , لا ستخراج ناتج معين

لكن العامل أ , يستعمل الاسلوب GetIt لضرب ثلاثة أعداد واخراج الناتج , بينما العامل ب يستخدمه لجمع ثلاثة أعداد واخراج المتوسط , وهذا ما يعرف بتعدد الأشكال , أي ان يكون هناك نفس الاسلوب لكلا الكائنين لكنه يؤدي وظيفة مختلفة

—————-

المفهوم الرابع : التجريد …

ويقصد به انك لا تلتفت إلى النقاط الصغيرة في البرنامج , وتشغل نفسك بها مما يعطلك ويعطل البرنامج وقد يظهر لك عديد من المشاكل التي كنت في غنى عنها .

مثلاً لو انك تقوم بعمل برنامج لادخال البيانات الخاصة بسيارة ما , فلست في حاجة إلى حساب عدد أولاد صاحب السيارة , إنما تركز على اشياء اخرى مثل لوحة السيارة , لونها , الشركة المصنعة ..الخ

—————-

المفهوم الخامس : البناء والهدم …

هي دالتين موجودتين داخل كل كائن :

دالة بناء : لإنشاء الكائن , وحجز مكانه في الذاكرة . وهي دالة Create

دالة هدم : لإزالة الكائن من الذاكرة ومن البرنامج . وهي دالة Free

—————-

التطبيق …

بعد هذه المقدمة والشرح , نبدأ مرحلة التطبيق لعمل برنامج بسيط بالبرمجة الكائنية

—————-

إنشاء وحدة في دلفي …

كما ذكرت سابقاً .. الوحدة في البرمجة الكائنية , هي مثل الخلية في جسم الانسان … فهي وحدة التركيب والوظيفة في بنية البرنامج , لانها تحتوي على الكائنات التي من اجلها سميت OOP بهذا الاسم …

لإنشاء وحدة في دلفي , وبكل بساطة اتبع الخطوات التالية :

– عادة , نضع الكائنات (او كل كائن) في وحدة منفصلة مع خصائصه ووظائفه .. حتى لا يتداخل مع بقية الكود وانما يكتفى بندائه من خلال الوحدة الأساسية ..

لذا ستكون الخطوة الأولى هي إنشاء وحدة جديدة (File –> New –> Unit)

طبعا , سنعمل على Console Application , لأننا لا نحتاج الشغل المرئي هنا …

– الان سنكتب الكود … لكن مهلا ! كود ماذا ؟ لم نحدد بعد ما سنفعل

سنقوم بعمل وحدة اسمها Animal ونتعامل مع هذا الكائن الحيوان 😛 … كمثال بسيط جدا

– سنقوم بكتابة الكود التالي في الوحدة الجديدة :
unit Unit1;
//-
interface
//-
type
Animal = class
//-
Name : String ;
Age : Byte ;
LiveIn : String ;
//-
procedure Speak ;
end;
//-
implementation
//-
{ Animal }
//-
procedure Animal.Speak;
begin
WriteLn('Name : ' + Self.Name) ;
WriteLn(Self.Age ) ;
end;
//-
end.

//———-

نشرح الكود :

Type : وتستخدم للاعلان عن نوع جديد , سجل أو وحدة .

Animal = class : وهنا ننشئ كائن جديد من نوع وحدة .

– بقية الكود متغيرات عادية تمثل خصائص الكائن .

procedure Speak : وظيفة خاصة بالكائن .

Self : تشير إلى الكائن المستعمل , أي انها تشير إلى الكائن الذي تمت مناداة الوظيفة من خلاله

—————-

استعمال الكائن …

نعود الان إلى الوحدة الأساسية لنستعمل الكائن , ونكتب في الوحدة الرئيسية :

program Project1;
//-
{$APPTYPE CONSOLE}
//-
uses
SysUtils,
Unit1 in 'Unit1.pas';
//-
var
Cat : Animal ;
//-
begin
Cat := Animal.Create ;
//-
with Cat do
begin
Name := 'ShoSho' ;
Age  := 3 ;
LiveIn := 'My home' ;
end ;
//-
Cat.Speak ;
//-
Cat.Free ;
//-
ReadLn ;
end.

//———-

نشرح الكود :

Cat : Animal : عرفنا متغير من نوع الكائن الذي أنشأناه للتو .

Cat := Animal.Creat : أنشأنا الكائن ووضعناه داخل المتغير .

– الست أسطر التالية لضبط خصائص الكائن .

Cat.Spreak : استدعاء الإجراء الخاص بعرض قيم خصائص الكائن .

Cat.Free : تفريغ الذاكرة من الكائن بعد استعماله .

—————-

انشاء ابن للكائن Animal …

سننشئ الآن كائناً اسمه LittleAnimal وسيكون ابنا للكائن Animal , وهذا باستخدام الوراثة …

– أضف الكود التالي بعد كلمة “end;” الأولى في الوحدة الخاصة بالكائن :

LittleAnimal = class(Animal)
end ;

//———-

نشرح الكود :

– مرننا اسم الاب الى دالة class , حتى يتم استدعاء خصائص الاب الى الابن

يجب ان نعدل على كود الوحدة الاولى الرئيسية , فيصبح :

program Project1;
//-
{$APPTYPE CONSOLE}
//-
uses
SysUtils,
Unit1 in 'Unit1.pas';
//-
var
Cat : Animal ;
Kitty : LittleAnimal ;
//-
begin
Cat := Animal.Create ;
Kitty := LittleAnimal.Create ;
//-
with Cat do
begin
Name := 'ShoSho' ;
Age  := 3 ;
LiveIn := 'My home' ;
end ;
//-
with Kitty do
begin
Name := 'SeSe' ;
Age  := 1 ;
LiveIn := 'My home' ;
end;
//-
Cat.Speak ;
Kitty.Speak ;
//-
Cat.Free ;
Kitty.Free ;
//-
ReadLn ;
end.

—————-

ملاحظات …

1- لم نهتم بأشياء أخرى غير أساسية كلون الحيوان , أو هل لديه شعر أم لا (التجريد) .

2- وفرنا الوقت باستخدام الوراثة , وستعرف هذا عندما تكتب كائن له كثير من الخصائص , ومن ثم تورثه إلى آخر (الوراثة) .

3- لم نطلع المستخدم على كود إجراء Speak (الكبسلة) .

—————-

أرجو ان يكون الدرس قد افادكم ..

اترك رد

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s