تعملنا سابقا بعض العناصر الاساسية في البايثون مثل (strings ,list,dictionary,….) كل هذه العناصر تعتبر objects.
وبما انهم يندرجون تحتى مسمى واحد ، فمن المؤكد ان هناك بعض العوامل والصفات المشتركة فيما بينهم ،هذا الحديث سيقودنا مباشرة الى ال(oop) ، ولكن دعونا في البداية نلقي نظرة على مفهوم ال (functions) .
Functions
تعمل ال(functions) على تقسيم البرنامج الى قطع معية من الكود ، كل قطعة تقوم بعمل خاص ومميز ، هذه القطع تسمى (function) وتعمل بمجرد استدعائك لها في المكان المناسب في كود البرنامج لكي تقوم بالوظيفة المطلوبة في الوقت المناسب اثناء عمل البرنامج .
يحاول المبرمجون -قدر الامكان – تقسيم البرامج الكبيرة الى (functions) وجعل البرنامج في شكل قطع مرتبة من الكود ، وهذا لاسباب عديدة من اهمها
– تسهيل قراءة الكود وتصور ما يمكن ان يقوم به الكود عند تشغيل البرنامج .
– يساعد المبرمج في التعرف على اي جزء من البرنامج في حالة حدوث اخطاء .
– سهولة التعديل والتطوير في الكود فيما بعد اذا لزم الامر .
(حتى الان) تعد هذه مقدمة عامة عن مفهوم ال (oop و ال functions) ، ولكن دعونا نجعل الامر اكثر تخصصية في البايثون ،ولنبدأ بالتحدث عن بعض المفاهيم الاساسية في ال(oop) .
Object
ال(object) يتكون من مجموعة من ال(data) تقوم بتوصيف ال(object) ، ومجموعة من ال(methods) تقوم بتحديد المهمة او الوظيفة التي يؤديها ال(object) .
Class
هو الهيكل العام او القالب الذي يصنع منه ال(object) ، وللتسهيل : اعتبر ان الكلاس عبارة عن وعاء يحتوي على مجموعة من ال(objects) من نفس النوع . وفي الكلاس يتم تعريف ال(methods) والمتغيرات التي تتحكم في ال(object) .كما يمكن تعريف اكثر من object في نفس الكلاس .
في الجزء الثامن من هذه السلسلة تعلمنا كيفية تعريف دالة جديدة ، عن طريق (def) وذكرنا ان ال(def) هي احدى طرق ال(abstraction) .
في الحقيقة تكمن فائدة ال(abstraction) الاساسية وهي تعني “التجريد” في توفيرها للجهد والوقت على المبرمج اثناء كتابة الاكواد الضخمة . وهنا تظهر فكرة ال(function) مرة اخرى ، انك تقوم بتعريف دالة تقوم بوظيفة محددة وتقوم باستدعائها فيما بعد في البرنامج كلما لزم الامر ، او حتى استخدامها في وظائف مشابهة في برامج اخرى ان امكن .
ملحوظة مهمة :
يفضل ان يقوم المبرمج بجعل ال(functions) اقل اعتمادية على البرنامج نفسه ،بحيث يقوم بتحويلها الى (Parametrized Functions) ، وجعلها (Generic) الى اقصى حد ممكن ، وذلك لسهولة استخدامها في برامج اخرى فيما بعد .
والان دعونا نسرد خصائص ال(oop) :
1- Polymorphism:
اصل الكلمة تعني “تعدد الاشكال” ،وتعني في ال (oop) : وجود عملية تؤدي نفس الوظيفة على انواع مختلفة من الكائنات (objects) .
بمعنى انه يمكن استخدام عملية الجمع ،لجمع الارقام ،ويمكن استخدامها ايضا لجمع مجموعة من ال(characters).
مثال :
في البداية : قمنا بتعريف دالة (add) تقوم بعملية جمع شيئين ،وارجاع الناتج .
بعد ذلك تعاملت الدالة مع الارقام وارجعت الناتج ، ثم تعاملت مع الحروف وارجعت الناتج ،وهذا يوضح مفهوم ال(Polymorphism).
2- Encapsulation:
معناها الحرفي هو “التغليف”.
اما في ال(oop) فهو استخدام اي جزء من (object) معين ،سواء كان (method) او (attribute) دون التعرف على محتواه ،ودون التعرف على طريقة تعريفه .
3- Inheritance:
معناها الحرفي هو الوراثة” .
في ال(oop) تعني الوراثة ايضا ولكن بشكل مختلف قليلا. فهي تعني ان يرث الكلاس مجموعة من الخصائص للكلاس الاصلي .لكن ياتي الاختلاف بين الوراثة في الحقيقة وبين الوراثة في ال(oop) في النقطة التالية:
– الوراثة الحقيقية يأخذ الطفل مجموعة من صفات الاب ولكن ليس بالضرورة ان يأخذ جميع الخصائص والصفات .
– في ال(oop) يأخذ الكلاس جميع صفات الكلاس الاصلي + مجموعة من الصفات الخاصة (ان وجدت) .
الى هنا نكون قد وضحنا بعض معالم ال(oop) في البايثون ، نستكمل حديثنا في المرة القادمة ان شاء الله بالتفصيل مع ذكر الامثلة .