أساسيات و مفاهيم يجب عليك إدراكها حول البرمجة كائنية التوجه OOP ( الجزء الأول - تمهيد )

أساسيات و مفاهيم يجب عليك إدراكها حول البرمجة كائنية التوجه OOP ( الجزء الأول - تمهيد )

عماد البرمجة و أساسياتها، حين تبدأ في التغلغل قليلا في مجال البرمجة، ستجد الكل يتحدث عن الـ OOP التي يتم إتخاذها إختصارا لعبارة Object-oriented programming و التي يمكن ترجمتها بالعربية لـ " البرمجة كائنية التوجه "، شيئ لا غنى عنه إطلاقا في مجال البرمجة، فهي في الكفة الأولى ضرورية لتسهيل صناعة أي برمجية بأي لغة برمجة كانت، بل و مهمة في تطوير و تحديث لغات البرمجة الى لغات برمجة أكثر إحترافية، و في الكفة الأخرى فهي صعبة الفهم و تعمقة كثيرا و لها اسرار عديدة، أسرار قد يخبرك الخبراء انك غير قادر على كسرها الا بعد سنوات من ممارسة البرمجة و إمتهانها، و بالطبع لن تستطيع كسرها في مقالنا هذا كذلك . 
إذن ما الهدف من المقال ؟ الهدف و كما جاء في العنوان، توفير " أساسيات و مفاهيم " البرمجة الكائنية التوجه، في هذا المقال ( و كذا مقالات اخرى قادمة من نفس الصنف ) سنساعدك على فهم البرمجة كائنية التوجه بأقل الأضرار التفكيرية، حتى يستطيع ابن عمك ذو الـ 7 سنوات فهم أساسياتها، لأن أكوا ويب كانت و لازالت تفسر اي شيئ صعب بالطريقة السهلة و الأمثل .

أساسيات و مفاهيم يجب عليك إدراكها حول البرمجة كائنية التوجه OOP ( الجزء الأول - تمهيد )

- البرمجة بشكل عام : 

في البرمجة، نتعلم 3 أقسام من أي لغة ( إن كانت لغة البرمجة تدعم تلك الأقسام بالطبع )، القسم الأول و هو أساسيات التعامل مع لغة البرمجة و فهم الـ Syntax الخاص بها، في هذا الجزء نتعلم طريقة طباعة كود برمجي معين من لغة برمجة، فكود الطباعة مثلا يختلف من لغة لأخرى، فهذه printf و الأخرى System.out.println و هكذا، في هذا القسم كذلك نتعلم الأساسيات المتوافرة في كل لغة و هي الجمل الشرطية if، الحلقات التكرارية loops و كذا الدوال functions & methodes و غيرها، بعد إكتساب هذه الأساسيات، فأنت قادر حينها على كتابة شفرة برمجية صحيحة بلغة البرمجة تلك . 
في القسم الثاني، تأتي الـ OOP ( و التي شرحناها سابقا ) الـ OOP ميكانيكية فريدة تساعدنا بشكل أكبر على التعامل مع البيانات و المدخلات في أي لغة برمجة، فأنت عندما تبدأ البرمجة بلغة ما، خصوصا في مشروع معين، فأنت تبني مشروعك على العديد من الأشياء، فمثلا مشروع إدارة محل شراء، في هذا المشروع ستكون لديك العديد من البيانات التي يجب عليك التعامل معها مثل الزبائن و الأموال و المنتجات و غيرها، لا يمكنك التعامل معها للأسف بالمتغيرات او Variables كونها بدائية جدا، لذلك سنحتاج لشيئ أكثر قوة و أكثر تصنيف و أكثر فعالية، هنا يتدخل جزء من قسم الـ OOP . 
بالطبع الـ OOP ليس فقط إدارة البيانات المدخلة و غيرها، بل له مفاهيم أعمق بذلك بكثير ( يختلف الأمر حسب لغة البرمجة ) لا تقلق سنراعي ذلك في مقالاتنا القادمة او هذا المقال المخصصين للـ OOP . 
اما القسم الثالث، فهو يتعلق بإدارات البيانات بشكل أبعد، هنا نتحدث عن الإتصال بقواعد البيانات من اجل تخزين البيانات و عدم فقدانها، في هذه المرحلة تكون قادرة على التعامل مع البيانات المدخلة من طرف المستخدم، معالجتها و تصحيحها، ثم تصديرها لقواعد البيانات، بالطبع التعامل مع قواعد البيانات سهل نسبيا، فكل ما عليك إتقانه عن جد هو عمليات الـ CRUD ( Create , Read , Update , Delete ) بالطبع في التعامل العادي، اما إن تعاملت مع الأمر بشكل أعمق فستحتاج إلى ما هو أعمق من ذلك بكثير أيضا . 
اذن هذه هي أساسيات البرمجة او تعلم البرمجة بشكل عام، إن كنت ترى نقصا في المراحل او التقسيمات الثلاث، يسعدنا ان تسقينا من علمك أنت كذلك في التعليقات . 


- البرمجة كائنية التوجه بشكل خاص : 

حين نتحديث عن الـ OOP فنحن نتحدث عن مجال واسع جدا، و كلمات مفتاحية كثيرة جدا (Class , Object , Inheretance, Extends , Polymorphisme , Encapsulation , Interfaces ...) و العديد، سنتحدث عن كل مفهوم على حدة، لكن لنعد للبرمجة كائنية التوجه و التعامل مع البيانات . 

حتى إن كان فهم الـ OOP صعب قليلا، إلا انه سيسهل عليك التعامل مع البرمجة لاحقا بشكل كبير، فالبرمجة كائنية التوجه صعبة التنصيب في المشروع البرمجي الخاص بك، لكن فور الإنتهاء من تحضيرها، ستوفر لك إستخداما اسهل للبرمجية، تطوير أكثر فعالية، تعامل مع البيانات بشكل أكثر هيكلة و تنظيما، و الأهم الحماية و عدم اللخبطة في المشروع البرمجي، فلا تنسى صديقي ان مشروع برمجي سيتضمن آلاف الاكواد البرمجية، و سيكون من الجيد ان تتعامل مع المشروع بإحترافية تامة لسهولة تطويره لاحقا . 
لنفترض و بمثال لفهم أكثر لهذا الأمر، لنفترض ان لديك برنامج محل إدارة المنتجات، في كل مرة يأتي زبون يشتري منتجا عليك تسجيله، و عليك خفظه من المخزون الخاص بالمنتجات ( عملية بسيطة او Task بسيط سيتضمنها مشروعنا البرمجي )، دعونا نحاول برمجة هذا الـ Task بدون إستخدام الـ OOP . 
تقليلا للأضرار، المنتج يتضمن فقط رقم تعريفي id، و إسم المنتج name و الفئة category و السعر الخاص بها، أي ان قطعة جبن بسيطة يمكن تعريفها على أساس : [1 , "Cheese " , "Dairies ", 1.5] اي رقمها 1 ، اسمها جبن، و فئتها " الألبان "، و سعرها 1.5 دولار، سيأتي الزبون الأول و يشتري هذه القطعة، سيتوجب علي تخزين الرقم، الاسم و الفئة و كذا السعر كل على حدة في متغيرات مختلفة، ثم علي البحث عن مجموع الأجبان في المخزون الذي يكون مسبقا عبارة عن متغير يحمل المجموع و علي ان انقص من المجموع واحدا لأقوم بعمل هذا الـ Task، و هو أمر سهل نسبيا و ممكن حاليا أليس كذلك ؟ 

حسنا، لما لا تجرب كتابة كود برمجي يقوم بذلك بدون إستخدام الـ OOP ؟ ثم تعود لقراءة هذا الموضوع لنضيف بعض التحديثات 😜 . 
حسنا، لنفترض ان الزبون لا يأتي فُرَادا، او لا يبتاع في كل مرة جبنة واحدة، ماذا لو كان يبتاع كل زبون 15 جبنة في نفس الوقت؟ هذا ربما سيتطلب مني إنشاء 60 متغير تقريبا ( بحكم ان لكل جبنة 4 متغيرات )، ماذا لو كان أكثر؟ ماذا لو كان هذا الزبون يطلب 15 و الآخر 10 و التالي 20 ؟ ليست بالمستحيلة، لازال بإمكاننا حل المشكل بصعوبة قليلا بإستخدام الـ Arrays، حسنا ماذا لو كان هناك تخفيض على القطع الـ 8 الأولى من الجبنة ؟ كيف سنتعامل مع هذا القرار؟ ماذا لو ابتاع الزبون جبنة ثم تراجع عن قراره ؟ يمكننا ان نجعل المتغيرات فارغة او 0، لكن تم حسابها من المجموع، علينا ان ننشئ كود اخر لإضافتها .... اترى صديقي كم من الـ Use Case او الإحتمالات الموجودة بين أيدينا ؟ و التي بالطبع يمكن إنجازها بصعوبة بدون برمجة كائنية التوجه لكن ربما في 100 او 200 سطر برمجي ثم معالجة بعدها 150 Bug، ليس هذا فقط، بل من الممكن إتلاف البيانات او حدوث خطأ في هيكلتها، و هو أمر لا نريده . 
لنعد الآن الى الـ OOP، يمكنني إنجاز الأمر بسهولة بإستخدام الـ OOP، قد لا يستوعب الكثير هذا الكلام ( لمن لم يتعامل معه يوما ) لكن يمكنني ببساطة إنشاء Class تتضمن " المتغيرات " الخاصة بالمنتج، و أضيف ايضا بعض الـ functions لإدارة المخزون مثل نقص السلعة من المخزون، او استرجاعها من المخزون في حالة لم تعجب الزبون، كما يمكنني إضافة function اخرى تستقبل نسبة مئوية  خاصة بالتخفيض ثم تقوم بخصمه من ثمن المنتج و إدارة المنتجات التي تحصل على ذلك التخفيض، لن يكلفني الأمر كثيرا، فكلاس بسيط قادر على فعل هذا، ثم بعدها، و في كل مرة يأتي زبون معين، أستطيع انشاء Object من الـ Class، ملأ خصائص الـ Object بخصائص المنتج ( السعر، الرقم، الاسم و الفئة )، و أنادي على الدالة الخاصة بحسم المنتج من المخزون، في حالة ارجعها الزبون، أقون باستخدام الدالة لإعادة الرقم إلى أصله، يوجد كوبون أو تخفيض ؟ استدعي الـ Object و أطبق عليه دالة التخفيض، الأمر بسيط و سهلة و أستطيع التحكم و إدارة كل البيانات بشكل آمن و متقن . 
ما هذا الا جزء صغير من الـ OOP، و هي أعمق بذلك بكثير، لكن الأساسيات اساسيات، و المفاهيم مفاهيم، و الجزء الأول تقديمي فقط، باقي الأجزاء أكثر تعمقا بالطبع . 



-  خلاصة الجزء الأول : 

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

في المقال القادم و الجزء الثاني، سنراجع معكم مفهوم الـ Class،  الأداة الأهم في الـ OOP، ماهيتها و كيف تعمل و كل ما تحتاج معرفته، كذلك كيفية كتابة و صناعة كلاس كاملة . 

شاركه على :