الفلسفة البرمجية … ماذا تخبرنا فلسفة أفلاطون عن البرمجة غرضيّة التوجه ؟؟

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

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

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

ماهي الفلسفة إذاً؟

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

فلسفة الرياضيات إذاً هو ذلك الفرع من الفلسفة الذي يهتم برصد الظواهر المختلفة واستيعابها ليعيد ضبطها وصياغتها في شكل نظم رياضية أكثر دقة وإحكام.

ماهي البرمجة إذاً؟

البرمجة أو علوم الحاسب هي استخدام الطرق والوسائل الرياضية لحل المشكلات باستخدام وسيط (هو الكمبيوتر) يمكنه ترجمة تلك المعادلات الرياضية إلى معلومات مفيدة.

ولكن هل هناك طريقة واحدة (Paradigm) لبرمجة الكمبيوتر؟ أو هل هناك طريقة واحدة لكتابة الأكواد البرمجية؟ بالتأكيد لا. هناك طرق وأساليب عديدة يتبعها المبرمجون في كتابة الأكواد البرمجية (Programming paradigms)، وأحد أبرز تلك الوسائل هي البرمجة الشيئية. وفي هذه المقالة، أحاول أن أسلط الضوء على التشابهات التي لاحظتها بين نظرية المُثل الأفلاطونية وبين البرمجة الشيئية أو البرمجة كائنية التوجّه (Object-oriented programming).

أفلاطون والعالم المحسوس

كان العالم الخارجي وظواهره دوماً محل سؤال وحيرة لفلاسفة الإغريق، لطالما تساءل أولئك المفكرون عن سبب الحركة والتحوّل، ما الذي يجعل الأشياء تبدو على ما تبدو عليه؟ ما الذي يجعلنا ندرك العالم كما هو؟ لماذا نرى الجمال جميلاً؟ لماذا نستشعر الحار والبارد؟ بل ما هي طبيعة الحار والبارد؟ كل تلك الأسئلة وما ترتب عليها من إجابات في تراث الفكر اليوناني، مضافاً عليه نزعة أفلاطون التوفيقية بين المذاهب الفلسفية القديمة والحديثة، جعل أفلاطون يقر بأن العالم المحسوس (الذي ندركه ونتفاعل معه) ليس حقيقياً! وإنما هو انعكاس ناقص لعالم آخر أكثر مثالية وكمال. هو عالم المٌثل الإلهي!

نظرية المُثل (Theory of forms)

بناءً على ملاحظات أفلاطون، فإن ما ندركه في هذا العالم ليس هو الشكل الحقيقي للأشياء، بل أن الشيء في عالمنا هو صورة ناقصة (أو مشوّهه) لأصل أكثر كمالاً وأتم معناً. لنأخذ مثالاً على ذلك، ما الذي يخطر ببالك عندما أقول لك “مكتب خشبي”؟ بالطبع يتبادر إلى ذهنك العديد من الصور التي من المتحمل أن تكون لديك عن المكاتب الخشبية، لكنك في النهاية ستنتهي إلى مفهوم واحد أساسي لا يمكن أن يكون الشيء مكتب خشبي بدونه: وهو شيء له سطح أملس وأرجل تساعده على التوازن.

حسناً، كل تلك الصور التي قد تراها للمكاتب الخشبية في عالمنا المحسوس هي محاولات لتجسيد ذلك المفهوم الأساسي الذي خطر ببالك. كل تلك المحاولات هي صور غير كاملة لذلك المفهوم الكامل. هذا المفهوم هو المثال (Form) وهذا الشيء هو الصورة المقتبسة من هذا المثال. قد تجد مكتب خشبي بسطح خشن، أو قد تجد مكتب خشبي بقدم واحدة، أو غيرها من الصور المختلفة. لكن في النهاية يجب أن يكون هناك مثال ثابت وراسخ تقارن به كل تلك الصور!

البرمجة غرضية التوجه (Object-oriented programming)

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

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

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

البرمجة الشيئية

كما يوضح الشكل، لديك تعريف رئيسي، ولديك كائنات قامت بوراثة هذا التعريف، لكنها لا تشبه بعضها بالضرورة، ولا تقوم باستيفاء كل الشروط المذكورة بالضرورة أيضاً! وهذا هو ما قام أفلاطون بتوضيحه في نظريته عن المُثل وعن العالم الإلهي الآخر!

حسناً، عند المقارنة بين المبدأين يتضح لنا مدى التشابه بين فكرة المثال وفكرة الصنف الرئيسي ( Class — Form ) وبين ما ينحدر منهما: الأشياء الملموسة التي تقتبس صورة المثال، والكائنات التي تقتبس وتحاكي صورة التصنيف الرئيسي!

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

الأفكار الفلسفية والبرمجة

كما رأينا، يمكن تطبيق الأفكار الفلسفية في مناح عدة، ولكني أرى أن علوم الحاسب بمثابة الحقل الخصيب لتوضيح تلك الأفكار، والاستفادة منها بشكل واقعي. أعني، انظر كم البرامج التي تستخدم تلك الطريقة الآن في تحديد وتوضيح طريقة تصميم الأكواد الخاصة بها! إنها حقاً أفكار مفيدة وخلّاقة، إذا استطعنا توظيفها بشكل عملي. فنحن نحتاج دوماً إلى إعادة النظر فيها وتأملها للاستفادة منها قدر المستطاع. لذلك، الفلسفة ليست -كما يردد البعض- مجرد حفنة من الأفكار الفارغة! بل هي طريقة فريدة وتجربة إنسانية بديعة!

راجع أيضًا: أكواد أنيقة وقوية … لمَ يجب أن تكون GoLang لغة البرمجة التالية لتتعلمها؟

0

شاركنا رأيك حول "الفلسفة البرمجية … ماذا تخبرنا فلسفة أفلاطون عن البرمجة غرضيّة التوجه ؟؟"