28

نحو المفهوم الصحيح الى البرمجة الكائنية

هذه المقالة لمن يعرف صيغ كتابة التصنيفات Syntax ولا يعرف متى يحتاج البرمجة الكائنية أو كيف يطبقها.

لماذا نحتاج البرمجة الكائنية (object-oriented) ؟

أهم الاسباب، لكي نقرّب المنطق البرمجي من المنطق البشري، ولتسريع عملية الانتاج.

كيف إذاً يتم ذلك؟

حتى غير المبرمج، يستطيع ان يعرف كيف يتم ذلك!

من هو غير المبرمج الذي يستطيع تصميم الأصناف ؟

لاتتوقع ان تكون الاجابة مهندس البرمجيات بل أي شخص يستطيع أن يفعلها. عادتاً في انتاج البرمجيات للشركات المتقدمة يكون هناك مستنداً كاملاً للمتطلبات، والمتطلبات تكون متطلبات اوليّة من قبل الشركة الزبون اولاً قبل تعديل المتطلبات من قبل الشركة المنتجة للبرمجية. في مستند المتطلبات تكون الشركة الزبون قد اعدت تصميم اولي للاصناف ولا يشترط ان يفعل هذا مهندس برمجيات او هاوي.

هل مفهوم البرمجة الكائنية سهلاً ؟

البرمجة الكائنية جُعلت لتسهّل العمل والتطوير. فكيف يكون مفهومها صعباً ؟

ايهما افضل العمل بالبرمجة الكائنية، أم الاجرائية ؟

الكائنية في كل الحالات الا اذا كانت البرمجية صغيرة جداً ولن تكبر مستقبلاً، أو البرمجيات الاساسية كالتي تكتب بلغة C ولغات المراحل المتدنية low level programming languages

ألى اي درجة هي سهلة ؟

الى درجة اني سوف اشرحها لك في جملة واحدة واعدك ان تفهمها. حتى لا أبالغ! سوف اضع مثال يدعم تلك الجملة.

في المثال أنت المبرمج وأنا الزبون:

المطلوب نظام تدوين فردي.

وصف النظام:

نظام يحتوي على مواضيع، والمواضيع لها عناوين ومحتوياتها والتعليقات التي تليها. وكل تعليق يحتوي على محتوى وأسم الكاتب/ة وبريده/ا الاكتروني.

الجملة: كل (أسم) له افعال في وصف المشكلة (قد) يكون كائناً، وكل فعل ينتمي الى أي اسم قد يكون وظيفة Function في ذات الكائن.

في مثالنا السابق، أنا كزبون سوف اقدم لك هذا التصميم.

http://i.imgur.com/yjFsqmW.png

ثم عليك انت اعادة هندسة التصميم وتحسينة. لكل خطوة يجب ان يكون سبباً. للتسهيل قد يكون هكذا.

http://i.imgur.com/sRv8Vhz.png

ولو اردنا تمثيل احدى التصنيفات في هذا الرسم البياني باحد لغات البرمجة كـ C++ أو PHP يكون كا التالي:

c++

http://www.codeshare.io/GRklk

php

http://www.codeshare.io/NCIHw

ولكن للأمانة العلمية التصميم الاخير غير وافٍ بالمرة، لهذا أتى مفهوم الوراثة! فلو تلاحظ ان Commenter و Auther بينهما تشابه في الخاصيتين Name و Id ويفترقات في الوظيفة writeNewPost - كتابة موضوع جديد بالنسبة للكاتب - و writeNewComment - كتابة تعليق جديد بالنسبة للمعلق -. لذلك لئلا تعيد كتابة الاكواد قد تستخدم الوراثة ولأسباب أخرى ايضاً، سوف اتطرق اليها في موضوع آخر.

أرني انت تصميمك عزيزي. ولتساعدني في تحسين اسلوبي في الشرح أجب على هذا الاستبيان.

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

ملاحظة قد تكون سخيفة

 public function setPosts($posts = []){

بما انك تستخدم اصدار اعلى من 5.4 "[]" وانت تستخدم متغير بنوع مصفوفة يمكنك تحديد النوع كمصفوفة 

  public function setPosts(array $posts = []){

لكي يظهر هذا للمستخدم عند ادخاله متغير بنوع مُختلف مثلًا نوع string

Catchable fatal error: Argument 1 passed to Author::setPosts() must be of the type array, string given, called in

اكرر أعرف ان هذا سخيف :)

انتبه، هذا ليس سخيفاً، بل مهماً (طريقة اجبار ان يكون المدخل من نوع مصفوفة). هذا مهماً هذا مفهوم Casting وهو من مفاهيم OOP المهمة. لاحقاً سوف اشرح في هذه السلسلة مافائدته ولما نحتاجة.

أجد أن المكتوب صف كلام الفراشات الجميلة والأزهار العطرة والأفق البعيد عندما كانت الأحلام اللازوردية تطير جنبا إلى جنب مع الفيلة الزهرية اللون.

البرمجية الكينونية مهمة جدا لأسباب أخرى تتعلق بإعادة استعمال الكود وأنماط التصميم وأشياء أخرى في هندسية البرمجيات والزبائن لا ينظرون هل الكود برمجية كينونية أم سرب على شكل < من البرمجية الدالية functional programming

شرح جميل يا صديقي .. لي مشاركه متواضعه للايضاح فقط

الكائن عند انشاءه يستمر في التغيير متى شئت

علي سبيل المثال

الكود السابق مثال بسيط لا اكثر

وفقت واستمر يا صديقي

جزاك الله خير. فعلا سهلت الموضوع تماماً

الموقع

لايعمل !! هل هو محجوب في الأردن مثلا ؟

أفهم مدى أهميه إستخدام البرمجه الكائنيه ولكني أواجه مشاكل في عمليه استخدامها في البي أتش بي , فهناك الكثير من المزايا التي تريد شرح مطول وربما أمكنك شرحها لنا بطريقه مبسطه مثل

  • إنشاء الكلاس والمتغيرات التي يمكن إستخدامها والدوال الثابته وما عمل كل داله

  • عمل إضافات للكلاس بحيث يمكن إنشاء كلاس آخر يقوم بتنفيذ مهام إضافيه لنفس الكلاس الجذر

  • أي أمور أخرى كافيه لتكوين فكرة كامله حول إستخدام الكلاسات في بي أتش بي