التنبيهات التالية ظهرت :
Warning [2] count(): Parameter must be an array or an object that implements Countable - Line: 864 - File: showthread.php PHP 7.4.33 (Linux)
File Line Function
/showthread.php 864 errorHandler->error



تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
الفصل (11) :oop بالتفصيل ..الجزء الاول
#1
صاحب الموضوع الأخ :- Mohammed Asaad

OOP

_______________________________________

ملاحظة:
كاتب هذا الدرس الاستاذ أحمد نجم

_______________________________________


عندما نتحدث عن الـ OOP أو ما يسمى بالـ [ Object-Oriented Programming ] ، فهنا نحن بصدد الحدي عن البرمجة الكائنية التوجهية او ما يسمى بالبرمجة الموجهة للكائنات. يتناول هذا الموضوع باذن الله تعالى مميزات وسمات ومبادئ الـ OOP والكامنة في الثلاث مبادئ الأساسية كما يلي :

الوراثة ... Inheritance
التغليف ... Encapsulation
التعدد أو تعدد الأوجه ... Polymorphism

هذا بالإضافة لعدة مميزات أو مبادئ أخرى منبثقة من تلك الأساسية التي سبق وأن ذكرناها ، يمكنك متابعة ومعرفة الكثير عن الفئات أو ما يسمى بالـ Class في الدرس رقم ( 10 ) على الرابط
الفصل(10):مدخل الى الفئات..الجزء الثاني

ولكن دعونا نبدأ من هنا ، فأولاً كي نتعامل مع الفئات فيجب أن يكون لكل فئة أحداثها وخصائصها وطرقها ( وظائفها ). فلو تناولنا عناصر الفئة الثلاث المذكورين فيما سبق فسيكون الآتي :

الخاصية [ Property ] ... الخاصية هي إحدى الطرق التي عن طريقها يتم تخزين نوع أو شكل معين من أنواع البيانات ، ومن الممكن أن تكون هذه القيمة بسيطة كاسم أو رقم أو تاريخ ، ومن الممكن أن تكون معقدة نسبياً كالمصفوفات أو تكون الخاصية أساسا عبارة عن كائن مستقل له خصائصه وأحداثه وطرقه أو وظائفه. للعلم هناك خصائص من النوع ( Read/Write ) وهناك نوع آخر وهو ( Read-Only ).

الطريقة أو الوسيلة [ Method ] ... تمثل الطريقة دالة أو إجراء ( Function Or Subroutine ). وتعتبر الطريقة أو الوظيفة كجزء من الكود داخل الفئة Class مما يضفي عليها السمة الأساسية للفئات وكذلك تواجد الطرق داخل الفئات لتنفيذ مجموعة من سطور الكود ضمنياً وتنفيذ وظيفة أو مهمة معينة ظاهرياً.

الحدث [ Event ] ... الحدث بكل بساطة هو عبارة عن إخطار حركي. يعني هذا أن الحدث يستدعي قطع أو إجراءات معينة من الكود داخل الـ Class كي يخبرها أن بعض الأحداث أو الشروط داخل الفئة قد وقعت بالفعل.


اعلم بالطبع أني لم أضف لديك جديداً بل بكل تأكيد قد شوشت عقلك وأذهبت لديك ببعض المفاهيم إلى حيث لا تدري ، ولكن أصغ لي مرة أخيرة وتخيل معي هذا المثال البسيط.
بفرض مثلاً أنه لدينا فئة أو Class بالمسمى ( Job ) ، فهيا بنا نحلل ما جاء بها كما يلي :

أولاً - الخواص [ Properties ] :

JobDescription ( وصف أو تعريف الوظيفة ) = وهي خاصية تحتوي على وصف نصي للوظيفة.
WorkHours ( ساعات العمل ) = وهي خاصية تحتوي على عدد ساعات العمل لتلك الوظيفة.
JobCustomer ( المتقدم للوظيفة ) = وهنا ستختلف نوع الخاصية فهنا سنقوم بتعريف الخاصية JobCustomer على أنها عبارة عن كائن مشتق من فئة Class آخر بالاسم Customer. والفئة Customer تحتوي على خصائص وأحداث وطرق ووظائف ومتغيرات وكذلك دوال وإجراءات.
EstimatedHours ( الساعات المُقدرة ) = عدد الساعات المبدئية المُقدرة لأداء هذه الوظيفة.


ثانياً – الطرق أو الوسائل [ Methods ] :

AssignJob (اعتماد الوظيفة ) = هذا الإجراء يقوم بتنفيذ اعتماد الوظيفة من الموظف المختص بالتعيين إلى العميل المتقدم للوظيفة.
BillJob ( كشف حساب ) = يقوم مثلا هذا الإجراء بطباعة كشف حساب على سبيل المثال للشخص المتقدم للوظيفة.
EstimatedCost ( التكلفة المقدرة ) = دالة تقوم بالرجوع بالتكلفة المُقدرة بناءا على ما ورد في عقد خدمات العميل أو المتقدم للوظيفة وكذلك الساعات المُقدرة التي وردت بالخصائص سابقاً EstimatedHours.


ثالثاً – الأحداث [ Events ] :

Created ( إنشاء الوظيفة ) = يوفر هذا الحدث إمكانية التحكم بالفئة أو التطبيق عند إنشاء الوظيفة عن طريق كتابة ما يشاء في هذا الحدث.
Assigned ( التعيين ) = يتم تنفيذ ما ورد في هذا الحدث عند موافقة الموظف على العميل المتقدم للوظيفة وإعطاء أمر التعيين.
Rejected ( الرفض أو ترك المهمة ) = يتم تنفيذ هذا الحدث عند رفض إكمال المهمة من قِبَل الموظف ، ربما حدث هذا لعدم اكتمال أوراق العميل او ربما لظروف طارئة للموظف او عدم تواجد الخبرة الكافية للقيام بهذه المهمة.
Canceled ( إلغاء الأمر ) = وهذا مثلاً يتم من قِبَل العميل قبل إصدار أمر التعيين.


كانت هذه نظرة سريعة على فئة أو Class تحتوي على أحداث وخصائص ودوال وإجراءات وهذا فقط على سبيل المثال. نأتي بعد ذلك لملحوظة مهمة وهي مجمل ما سبق فتعريف الفئة هي عبارة عن مصدر أو كيان أو شخصية برمجية مستقلة تغلف او تحتوي على مجموعة من التعليمات البرمجية على اختلاف أنواعها ( خصائص أو أحداث أو دوال وإجراءات ). لا يعني ما سبق هو شرط تواجد الثلاث مكونات السابقة داخل كل فئة ، ولكن نحن نتحدث عن الأحوال القياسية.
بعد الحصول على نسخة من الفئة ووضع محتوياتها داخل كيان آخر عن طريق جمل التصاريح مهما اختلفت صيغتها كمثل :
كود :
[b][SIZE=4][color=#0000ff]Dim [/color]MyObj[color=#0000ff] As New [/color][color=#add8e6]Class1[/color][/SIZE][/b]


فهنا يتضح الفرق بين
الكائن والفئة على النحو التالي ، فهنا الفئة هي المسماة Class1 ، أما إن الكائن فهو المقصود به الكيان البرمجي الذي قمنا بوضع كافة خصائص الفئة بداخله وهو المسمى في مثالنا MyObj.

___________________________

** ملحوظة مهمة **
___________________________

يعتبر الـ Visual Basic .NET مكتظ بالفئات ، فعلى سبيل المثال تعتبر كل أداة موجودة داخل الـ Component عبارة عن Class مستقلة لها أحداثها وخصائصها وطرقها ، وتعتبر الفئة الأب هي الفئة المسماة Control. وعند استخدامك لهذه الأدوات فما أنت تعمل إلا مع كائنات مشتقة من مصدرها الأساسي ، فلو فرضنا أننا لدينا TextBox على الـ Form فمربع النص هذا عبارة عن كائن مشتق من الفئة المسماة TextBox ويحمل هذا الكائن كافة ما يميز هذه الفئة المشتق منها. باختصار وكما يقول البعض [ Visual Basic .NET is jam-packed with classes ].

___________________________


التغليف [ Encapsulation ]

الواجهة العامة للفئات Class's Interface تتكون مما سبق ذكره وهي الخصائص وكذلك الطرق والأحداث ، وعندما أتحدث عن الواجهة العامة أقصد بذلك الوظائف والأحداث والخصائص التي تظهر للمستخدم خارج الفئة.

كود :
[b][SIZE=4][color=#0000ff]Dim [/color]CN [color=#0000ff]As New[/color] SqlClient.[color=#add8e6]SqlConnection[/color][/SIZE][/b][b][SIZE=4]
[/SIZE][/b][b][SIZE=4]CN.Open()[/SIZE][/b]


لو نظرنا في هذين السطرين السابقين فسيتضح ما يلي ... أولاً الفئة المسماة SqlConnection عبارة عن فئة مشتقة من مكتبة أو فئة كبرى مسماة SqlClient ، أما عن الكائن CN فهو كائن يحمل خصائص الفئة SqlConnection فإذا كتبت في محرر VB .NET اسم الكائن CN ثم ضغطت علامة ( . ) ستظهر كافة الخصائص والطرق الخاصة بالفئة SqlConnection ولكن ستظهر أسماء تلك الخصائص والطرق وليس الأكواد التي كُتبت بها تلك الطرق والخصائص.

تعال نضرب مثال آخر .. في مثالنا السابق عن الفئة المسماة Job فهناك طريقة أو أجراء بالاسم AssignJob ولكن من الطبيعي لتنفيذ هذه الوظيفة السابق ذكرها أن يكون هناك دالة أثناء التنفيذ بأن يقوم البرنامج بفحص مؤهلات أحد الموظفين للقيام بمتابعة تعيين العميل المتقدم للوظيفة كي ينفذ الوظيفة الرئيسية وهي التعيين ولتكن مثلاً اسم الدالة الفرعية او الثانوية هذه بالاسم FindQualifiedEmployee. وفيما سبق قصدت بأن الدالة المسماة FindQualifiedEmployee غير ظاهرة لمستخدم الـ Class لذا فهي تم تعريفها أو التصريح عنها بالمفتاح Private أما عن الإجراء AssignJobفتم التصريح عنه بالمفتاح Public. طبقاً لما سبق فإن مستخدم الفئةJobستظهر له الطريقة AssignJob عند التصريح عن كائن كنسخة من الفئة ، أما الدالة FindQualifiedEmployee فهي خاصة بالفئة فقط ولا تظهر للمستخدم للفئة.
بكل اختصار في حديثنا عن التغليف أو الـ
Encapsulation ، أنت تتحكم فيما يظهر لمستخدم الفئة وفيما لا يظهر من خصائص وطرق وأحداث. وما يظهر فهو يؤدي الوظيفة التي وُجِدَت من أجلها الفئة ( Class ) ، أما ما لا يظهر للمستخدم من أحداث وخصائص وطرق فهو يخدم ما يظهر مما سبق.
يمكنك الاستفادة من مميزات التغليف
Encapsulation بعيداً عن الفئات. في العِقد السابق قبل اعتماد بعض اللغات لمبادئ الـ Object-Oriented كان المبرمجين يقومون بصناعة مكتبات الكود أو تطبيقات معينة وتدعم أيضاً التغليف وبنفس المفهوم الحالي ولكن كان آنذاك بمعنى آخر . على سبيل المثال : لو لدينا مكتبة تحتوي على وظائف ودوال لعلم المثلثات Trigonometry مثلدوالالـ Sines أو Cosines أو Tangents أو Ar ctagents ...الخ ، ولتنفيذ هذه الحسابات فيجب أن تحتوي المكتبة على وظائف ودوال مساعدة خفيّة تساهم في الوصول لنتائج الدوال الأساسية السابق ذكرها.


الوراثة [ Inheritance ]

الوراثة ضمن مبادئ الـ OOP عبارة عن اشتقاق فئة من فئة أخرى. وتكون الفئة الجديدة المشتقة ( ChildClass or DerivedClass or SubClassing ) تحتوي على كافة خصائص وأحداث وطرق الفئة الأب ParentClass. هذا بالإضافة إلى انك تستطيع إضافة أحداث وخصائص ودوال وإجراءات جديدة إضافة لما حصلت عليه عن طريق الوراثة من الفئة الأب من الخصائص والأحداث والدوال والإجراءات.

على سبيل المثال : لدينا فئة بالاسم Person ولهذه الفئة بعض المتغيرات كـ ( FirstName , LastName , Age , Address , EMail ) ، ومثلاً هناك وظيفة اسمها DialPhone وهذه تختص بقيام التطبيق بالاتصال تليفونياً بالشخص وكذلك وظيفة أخرى اسمها SendMail وهذه تُمكن المستخدم من إرسال بريد إلكتروني للشخص.

_______
التتمة بالاسفل...
Big Grin
<---------------------------------------------------------------->

الرد }}}
تم الشكر بواسطة:


الردود في هذا الموضوع
الفصل (11) :oop بالتفصيل ..الجزء الاول - بواسطة Easy 4ever - 30-09-12, 06:35 AM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  الفصل(8): الدوال والاجراءات B3dak Hbebe 3 19,683 15-08-18, 09:20 AM
آخر رد: nagoma
  الفصل(9):مدخل الى الفئاتClasses - الجزء الأول B3dak Hbebe 5 4,332 30-05-17, 01:09 PM
آخر رد: ali hussein
  الفصل(5):صنع القرار...الجزء الأول-الجمل الشرطية Omar Mekkawy 4 4,168 10-08-13, 05:39 PM
آخر رد: Omar Mekkawy
  الفصل(3): التركيبات أنواعها واستخداماتها Omar Mekkawy 4 4,156 10-08-13, 05:32 PM
آخر رد: Omar Mekkawy
  الفصل (1) : الفيجوال بيسك دوت نت (لمحة تعريفية) Omar Mekkawy 2 3,499 27-07-13, 02:39 PM
آخر رد: green.grass52
  الفصل (0) : دورة تعلم معنا فيجوال بيسك دوت نيت Omar Mekkawy 7 4,825 18-07-13, 06:29 PM
آخر رد: el@nsary
  الفصل(16): مدخل لمسارات التنفيذ Threading B3dak Hbebe 3 3,785 27-04-13, 10:58 AM
آخر رد: خليل اسماعيل
  الفصل(15): الفئتان Stack و Queue B3dak Hbebe 2 3,228 27-04-13, 09:20 AM
آخر رد: خليل اسماعيل
  الفصل(12): Oop بالتفصيل...الجزء الثاني B3dak Hbebe 3 3,909 27-04-13, 09:16 AM
آخر رد: خليل اسماعيل
  الفصل(10):مدخل الى الفئات..الجزء الثاني B3dak Hbebe 2 3,205 27-04-13, 08:59 AM
آخر رد: خليل اسماعيل

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


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