هيكل برنامج السى بلس بلس

هذا الفصل يحتوي :

· لماذا نحتاج للبرمجة الكائنية
· اللغات الإجرائية مقابل اللغات الكائنية
· خصائص اللغات الكائنية
· الفئات والكائنات
· التوارث
· السي والسى بلس بلس

يعلمك هذا الكتاب كيف تبرمج بلغة السى بلس بلس وهى لغة تدعم البرمجة الكائنية . فلماذا نحتاج لهذا النوع من البرمجة ؟ ما الذي يمكن لها ان تفعله أكثر مما تفعل اللغات الأخرى كالبيزك والباسكال والسي ؟ وما معني مفهومي الفئات والكائنات التي ترتكز عليهما ؟ وما علاقة هذه اللغة باللغة التقليدية السابقة عليهما , لغة السي ؟
يقدم لك هذا الفصل اجابات على هذه التساؤلات كما يعرض للمبادئ الاساسية التي سنعتمد عليها في بقية الكتاب . وما سوف نقوله هنا سيكون عاما مختصرا بدرجة كبيرة . فاذا بدا لك امر على شيء من التجريد والغموض فلا تشغل نفسك بذلك , حيث سيكون مجالا للتركيز في وقت لاحق .

لماذا نحتاج للبرمجة الكائنية ؟

وضعت البرمجة الكائنية بسبب ما تلاحظ من اوجه قصور في البرمجة التقليدية والتى نعرض لها فيما يلى .

اللغات الإجرائية

يطلق على لغات البيزك والباسكال وغيرها اللغات الإجرائية Languages Procedural بمعنى ان كل تعليمة في البرنامج تخبر الحاسوب بان يقوم بعمل ما , فالبرامج الموضوعة بتلك اللغات تمثل سلسلة من التعليمات .

تجزئة البرامج وظيفيا

حينما تتضخم البرامج يصبح وضع برنامج في قائمة واحدة امرا شاقا من حيث فهمها وتصحيحها ولهذا السبب تقسم البرامج عادة إلى اجزاء وظيفية , يقوم كل جزء بتنفيذ مهمة معينة . ويختلف تسمية هذه الاجزاء فهى في لغة السي دوال Functions وفى غيرها برامج فرعية Subroutines أو إجراءات Proceduralsوتمشيا مع منطق التجزئة يمكن تجميع مجموعة من الدوال في وحدات اكبر تسمى وحدات بنائية modules .
فتقسيم البرامج وظيفيا إلى دوال ووحدات بنائية يعتبر حجر الزاوية في البرمجة المهيكلة Structured Programming أو الهيكلة Structural والتى سيطرت على الفكر البرمجي لعدة عقود .

مشاكل البرمجة المهيكلة

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

التقليل من شأن البيانات

يكون التركيز في اللغات الإجرائية على التعليمات instructions وهى فعل امر بشيء ما , ادخل البيان من لوحة المفاتيح , اظهر النتائج , راجع الخطأ , وهكذا . وتظل عملية تجزئة البرنامج على هذا المنوال تركيز على المهام المطلوب تنفيذها سواء كان البرنامج مكونا من سطر واحد أو العديد من الدوال أو الوحدات البنائية .
ما وضع البيانات في هذا الفكر ؟ ان البيانات أولا واخيرا هي سبب وضع البرامج فبرنامج للرقابة على المخزون اهم ما ينتظر منه هو اظهار قائمة الاصناف محدثة , وليس المهام الفرعية التي يفعلها لتنفيذ ذلك ومع ذلك فان البيانات تعطي وضع مواطن من الدرجة الثانية في البرمجة الإجرائية .
فعلى سبيل المثال قد تعرف بيانات الاصناف في برنامج رقابة على المخزون كمتغيرات عامة global variable بمعنى انه يمكن لكافة الدوال الوصول إليها والتعامل معها , دالة للتحديث واخرى للتصنيف وثالثة للاضافة .. الخ ( من المهم في هذا الخصوص ان نبين ان اغلب اللغات تتيح تعريف متغيراتها كمتغيرات محلية Local بمعنى أنها لا تكون متاحة إلا للدوال التي تتعامل معها كما هو مبين في شكل 1 - 1 )
Global and local variables
لنفترض الان ان مبرمجا جديدا طلب منه اضافة مهام جديدة للبرنامج أو تطويره فلنا ان نتصور انه قد يتسبب في تشويه البيانات بسبب عدم المامه التام بخفايا البرنامج كما وضعها المبرمج الاصلي , ان الأمر اشبه بتركك لاوراق عملك في ردهة المكتب , متاحة للكافة للعبث بها .
ومن جهة أخرى , فلكون البيانات متاحة لكافة الدوال فان أسلوب تخزينها يكون حساسا فلا يمكن تغيير وسيلة التخزين إلا بتغيير كافة الدوال التي تتعامل معها واذا تصورنا تعديلا لمواصفات صنف ما فعلينا ان نغير من كافة الدوال التي تتعامل معه ومن المشقة بمكان ان نعرف كافة هذه الدوال والاكثر مشقة ان نقوم بتعديلها جميعا ويبين شكل 1 - 2 الاسلوب الاجرائي في البرمجة .
The procedural paradigm

العلاقة بالعالم الواقعي

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

الحاجة لانواع جديدة من البيانات

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

التسميات: