الثلاثاء، 14 يوليو 2015

مقدمة في لغة ++c

تعتبر  لغةC++   من أشهر اللغات التي تتمتع بطابع القوة والمرونة لإنتاج أسرع برامج وأفضلها أداءاً. وعلى الرغم من وجود العديد من لغات البرمجة الأخرى إلا أنها تفتقر شمولية لغة  C++ وقوتها . فاللغة C++ تتميز بقابليتها على معالجة التطبيقات الكبيرة والمعقدة، والقوة في صيانة البرامج المكتوبة بها مما يوفر وقتاً في تصميم البرامج وتطويرها .
تعتبر اللغة C++ امتداداً للغة C. وقد أنشأها Bjarne Stroustrup عام 1979 م، وكانت تسمى حينها  C مع فئات( C with classes)، وتغير اسمها إلى C++ في العام 1983م.
تعتمد اللغة C++ أسلوب البرمجة كائنية المنحى Object Oriented Programming، والذي يعرف اختصاراً بـ (OOP)، والذي تم تطويره بسبب قيود كانت أساليب البرمجة القديمة المتمثلة في اللغات الإجرائية تفرضها على المبرمجين. ولكي نتعرف على طبيعة تلك القيود يجب أن نلقى الضوء على ما يحدث في اللغات الإجرائية.
اللغات الإجرائية:
لغات Pascal،C ،Basic  و Fortran وغيرها من لغات البرمجة التقليدية هي لغات إجرائية (Procedural). أي أن كل عبارة في اللغة هي عبارة عن تعليمة للحاسوب أن ينفذ شيئاً ما : أحصل على دخل أو أجمع أرقام الخ.. .
لذا نجد أن البرنامج المكتوب بلغة إجرائية هو عبارة عن لائحة من التعليمات. لا تبدو هنالك مشكلة مع البرامج الإجرائية الصغيرة، فالمبرمج ينشئ  لائحة التعليمات ويقوم الحاسوب بتنفيذها. ولكن مع كبر حجم البرامج لا تعود لائحة من التعليمات فعالة حيث يصعب فهم برنامج يتألف من مئات من العبارات إلا إذا كانت مقسمة إلى أجزاء أصغر، لذا تم اعتماد أسلوب الدالات (Functions) والإجراءات  (Procedures) كوسيلة لجعل البرامج أسهل للقراءة والفهم، حيث تمتلك كل دالة في البرنامج واجهة محددة، وتنفذ هدفاً محدداً. ولكن المشكلة ما تزال قائمة : مجموعة من التعليمات تنفذ مهاماً محددة.
         و مع تزايد حجم البرامج وتعقيدها، يظهر ضعف الأسلوب الإجرائي، حيث تصبح البرامج الضخمة معقدة إلي حد كبير. من أهم أسباب فشل اللغات الإجرائية هو الدور الذي تلعبه البيانات فيها، حيث تعطى البيانات أهمية ثانوية على الرغم من أنها هي السبب في وجود البرامج، ويكون التشديد على الدالات التي تعمل على هذه البيانات، حيث يتم تعريف البيانات خارج أي دالة لكي يصبح بالإمكان الوصول إليها من كل الدالات في البرنامج، لذا غالباً ما تكون البيانات عرضة للتغيير أو التعديل الخطأ. وعلى الرغم من أن هنالك بعض اللغات كـ Pascal وC تعرف متغيرات محلية (Local )، وهي متغيرات معرفة في دالة واحدة. لكن المتغيرات المحلية غير مفيدة للبيانات المهمة التي يجب الوصول إليها من عدة دالات في البرنامج. أيضاً هناك مشكلة طريقة تخزين البيانات بسبب إمكانية عدة دالات للوصول إليها. لا يمكن تغيير ترتيب البيانات من دون تغيير كل الدالات التي تتعامل معها.
وإذا أضفنا بيانات جديدة نحتاج لتعديل كل الدالات حتى تستطيع هذه الدالات استعمال هذه البيانات الجديدة .
غالباً ما يكون تصميم البرامج الإجرائية صعباً، لأن مكوناتها الرئيسية (الدالات) عبارة عن بنية بيانات لا تقلد العالم الحقيقي جيداً .و يصعب في اللغات الإجرائية إنشاء أي نوع بيانات جديد بخلاف الأنواع المعرفة أصلاً في تلك اللغات ، لكل هذه الأسباب تم تطوير الأسلوب الكائني المنحى.

 الأسلوب الكائني المنحى:-

الفكرة الأساسية وراء اللغات كائنية المنحى هي دمج البيانات والدالات التي تعمل على تلك البيانات في كينونة واحدة تسمى كائن (Object)، وعادة تزود دالات الكائن  -والتي تسمى أعضاء دالية (Member functions)- الطريقة الوحيدة للوصول إلي البيانات، لذا تكون البيانات محمية من التعديلات الخطأ ويقال أن البيانات ودالاتها مغلفة (Encapsulated)   في كينونة واحدة.

مميزات اللغات كائنية المنحى :

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

الفئات والوراثة (Inheritance):

الكائنات في OOP هي مثيلات من الفئات، حيث يمكننا تعريف كثير من الكائنات تابعة لفئة معينة، وتلعب دور خطة أو قالب يتم إنشاء الكائنات على أساسه، وهي التي تحدد ما هي البيانات والدالات التي سيتم شملها في كائنات تلك الفئة. لذا فالفئة هي وصف لعدد من الكائنات المتشابهة. وتؤدى فكرة الفئات إلي فكرة الوراثة، حيث يمكن استعمال فئة OOP كأساس لفئة فرعية واحدة أو أكثر تسمى الفئة القاعدة  (Base class)، ويمكن تعريف فئات أخرى تتشارك في خصائصها مع الفئة القاعدة ولكنها تضيف خصائصها الذاتية أيضاً، تسمى هذه الفئات المشتقة (Derived classes).

قابلية إعادة الاستعمال Reusability:

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

إنشاء أنواع بيانات جديدة:-

من أهم فوائد الكائنات أنها تعطى المبرمج وسيلة لإنشاء أنواع بيانات جديدة، كالأرقام المركبة أو الإحداثيات ثنائية الأبعاد أو التواريخ أو أي نوع من  أنواع البيانات قد يحتاج المبرمج إلي استعمالها.
تعدد الأشكال والتحميل الزائد :       Polymorphism and overloading

يسمى استعمال الدالات والعوامل في أساليب مختلفة  وفقاً لما يتم استعمالها عليه بتعدد الأشكال. لا تضيف اللغة C++ إمكانية إنشاء أنواع بيانات جديدة فقط، بل وتتيح أيضاً للمبرمج القدرة على العمل على أنواع البيانات الجديدة تلك باستعمال نفس العوامل التي تستخدمها الأنواع الأساسية كـ + أو = ويقال عندها أنه تم تحميل هذه العوامل بشكل زائد لتعمل مع الأنواع الجديدة.


ليست هناك تعليقات:

إرسال تعليق