سلسلة مقالات الـ oop – المقال الثاني

العدد العاشر أضف تعليق

Object Oriented Programming
المدخل إلى البرمجة غرضية التوجه

< محمد حازم عبد الله – لينا نعمان >

- Method: من أهم خصائص البرمجة ومزاياها أنها تتيح لك تقسيم البرنامج إلى دوال صغيرة لتسهيل البرنامج, والكفاءة واكتشاف الأخطاء  بوقت أقل، وبالتالي فالطرق ( Method) هي عبارة عن مجموعة متسلسلة من الجمل (التعليمات)، وإذا كنت مبرمج في إحدى لغات البرمجة الإجرائية كما في c++  أو Visual basic  فيمكن تشبيه الطرق بالتوابع (Function) أو الإجرائيات (Procedure) أو SubRoutine .، تتكون كل method من جزئين رئيسين:

  • اسم الطريقة (Name): يجب أن يكون اسم مختصر ومعبر عن وظيفة هذه الطريقة. مثلاً إذا كان لدينا إحدى الطرق لجمع عددين فسنعطيها الاسم AddTwoDigits.
  • جسم الطريقة (Body): ويحوي عن الأجزاء الأساسية التي ستنفذ عند استدعاء هذه الطريقة.

returnType methodName ( parameterList )
{
// method body statements go here
}

returnType: عبارة عن نوع القيمة المرجعة, وهي القيمة التي تمت معالجتها في هذه الطريقة وتم إرجاعها.
methodName: اسم الطريقة التي تكلمنا عنها.
parameterList: عبارة عن مجموعة من البارامترات للدخل عملها بنفس طريقة البارامترات المستخدمة في البرمجة الإجرائية، ومابين القوسين {} نضع جسم الطريقة.

ملاحظة هامة: اذا عرفنا متحولات ضمن إحدى الطرق فإن مجال رؤية هذه المتحولات هو فقط ضمن هذه الطريقة. تمثل  المعاملات المستخدمة عند تعريف الطريقة متحولات صماء تساعد في تفسير عمل البرنامج من أجل متحولات حقيقية ستحل مستقبلاً  عند استدعاء الطريقة و تنفيذها.

- Overloading: هو عبارة عن مفهوم يسمح ببناء عدة طرق بنفس الاسم تماماً, بشرط أن يتم الاختلاف إما في القيمة المرجعة أو في عدد البارامترات أو في نوعية البارامترات.

// Add() method.
int Add(int x, int y)
{ return x + y; }

// Overloaded Add() method.
double Add(double x, double y)
{ return x + y; }

// Overloaded Add() method again.
int Add(int x, int y,int z)
{ return  x + y+z; }

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

- أنواع المشيدات:

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

ملاحظة: من أسس هندسة البرمجيات تزويد الصنف بمشيّدين على الأقل المشيد الافتراضي ومشيد آخر.

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

الهادم Destructor :
زدوتنا تقنية الـ OOP بإمكانية تفكيك وتحرير الأغراض من الذاكرة, ووظيفة الهادم الأساسية تنظيف مخلفات العمل مما يضمن إكمال العمل دون أخطاء, يستدعى الهادم بعد الانتهاء من العمل مع  الغرض, ويفضل دوماً صنع منهج هادم لكي يقوم بهدم كافة الجداول التي أنشأها الباني.
حيث تلقي بعض لغات البرمجة مسؤولية تحرير مواقع الذاكرة التي تشغلها أغراض غير مفيدة على عاتق المبرمج وبشكل اوتوماتيكي, ويعتبر ذلك مصدراً أساسياً من مصادرالأخطاء التي تحدث عند تشغيل البرنامج, إذ كثيراً ماتبقى أجزاء هامة من الذاكرة محجوزة لأغراض انتهت فترة حياتها واستخدامها, إلا أن المشكلة الحقيقية تبدأ بالظهورمع تراكم هذه الأجزاء مما يؤدي لحدوث ما نسميه تسرب الذاكرة (memory leaks)  وهي تؤثر بالدرجة الأولى على البرنامج الأكثر استخداماً أي نظام التشغيل.
وفي لغات البرمجة الحديثة ظهر مفهوم Garbage collection (برنامج مجمع النفايات) والذي هذه المشكلة بطريقه بسيطة, حيث يعمل تلقائياً عندما يصبح حجم الذاكرة المتاحة أقل من حد معين وبذلك نضمن عدم بقاء الأغراض غيرالضرورية إلى الحد الذي يؤدي لهدر المشكلة.

تعليق واحد على “سلسلة مقالات الـ oop – المقال الثاني”

  1. غريب فلازي يعلق:

    بس استفسار حول التعريف الوارد ذكره للـ
    Overloading
    - Overloading: هو عبارة عن مفهوم يسمح ببناء عدة طرق بنفس الاسم تماماً, بشرط أن يتم الاختلاف إما في القيمة المرجعة أو في عدد البارامترات أو في نوعية البارامترات.

    على حد اللي بعرفه إنو التحميل الزائد بيكون من خلال الاختلاف بالsignature الخاص بالmethod و تحديداً بنوعية البابريميترات و عددها و ترتيبها , مو بالقيمة المرجعة

    و يعطيكن العافية على هالسلسلة المفيدة

أضف تعليق.

اشترك بدون كتابة تعليق

كافة الحقوق محفوظة لموقع مجلة كلية الهندسة المعلوماتية © 2010
التدويناتRSS | التعليقاتRSS | تسجيل الدخول