مفهوم التجريد
التجريد ( Abstraction ) أسلوب مهم جداً في البرمجة و يتم إعتماده بشكل عام لتسهيل كتابة الأوامر على المبرمج و تنظيم عمله, فهو يجعله قادراً على تنفيذ ما يريد دون الحاجة إلى معرفة كافة التفاصيل التي تم فيها ذلك, و بالتالي جعله يتعامل مع الأشياء بسطحية بدل أن يغوص في معرفة تفاصيل الكودات المعقدة.
فمثلاً إذا كنت تنوي بناء تطبيق فيه واجهة مستخدم و هذا التطبيق يحتوي على زر معين, عند النقر على هذا الزر يتم إرسال رسالة إلكترونية إلى صاحب التطبيق. في هذه الحالة لن يكون عليك القلق بتاتاً حول الطريقة التي سيتم فيها ربط الكود الذي يسمح بإرسال الرسالة بالزر الموجود في واجهة المستخدم, لأن مطوري واجهة المستخدم يطلبوا منك تعريف دالة لها شكل معين و وضع الكود الخاص بإرسال الرسالة فيها, و من ثم تمرير هذه الدالة إلى الكائن الذي يمثل الزر الذي يظهر في واجهة المستخدم. عندها سيتم تنفيذ الكود الموجود في الدالة في كل مرة يتم فيها النقر على الزر.
إذاً التجريد هو أسلوب يقضي بتعريف دوال مجرّدة ( Abstract Methods ) في الكلاس الأب و إجبار الكلاس الإبن على أن يفعل Override لهذه الدوال بالشكل الذي يناسبه.
و بالتالي عندما تنشئ كلاس يرث من كلاس فيه دوال مجرّدة سيظهر أمامك تحذير ينبهك أنك يجب أن تفعل Override لهذه الدوال حتى لا يظهر لك خطأ وقت التشغيل.
التجريد ( Abstraction ) أسلوب مهم جداً في البرمجة و يتم إعتماده بشكل عام لتسهيل كتابة الأوامر على المبرمج و تنظيم عمله, فهو يجعله قادراً على تنفيذ ما يريد دون الحاجة إلى معرفة كافة التفاصيل التي تم فيها ذلك, و بالتالي جعله يتعامل مع الأشياء بسطحية بدل أن يغوص في معرفة تفاصيل الكودات المعقدة.
فمثلاً إذا كنت تنوي بناء تطبيق فيه واجهة مستخدم و هذا التطبيق يحتوي على زر معين, عند النقر على هذا الزر يتم إرسال رسالة إلكترونية إلى صاحب التطبيق. في هذه الحالة لن يكون عليك القلق بتاتاً حول الطريقة التي سيتم فيها ربط الكود الذي يسمح بإرسال الرسالة بالزر الموجود في واجهة المستخدم, لأن مطوري واجهة المستخدم يطلبوا منك تعريف دالة لها شكل معين و وضع الكود الخاص بإرسال الرسالة فيها, و من ثم تمرير هذه الدالة إلى الكائن الذي يمثل الزر الذي يظهر في واجهة المستخدم. عندها سيتم تنفيذ الكود الموجود في الدالة في كل مرة يتم فيها النقر على الزر.
إذاً التجريد هو أسلوب يقضي بتعريف دوال مجرّدة ( Abstract Methods ) في الكلاس الأب و إجبار الكلاس الإبن على أن يفعل Override لهذه الدوال بالشكل الذي يناسبه.
و بالتالي عندما تنشئ كلاس يرث من كلاس فيه دوال مجرّدة سيظهر أمامك تحذير ينبهك أنك يجب أن تفعل Override لهذه الدوال حتى لا يظهر لك خطأ وقت التشغيل.
مصطلحات تقنية
- الكلاس العادي يقال له Concrete Class.
- الكلاس المعرف ككلاس مجرّد يقال له Abstract Class.
- الدالة المعرفة كدالة مجرّدة يقال لها Abstract Method أو Function Method.
- الكلاس العادي يقال له Concrete Class.
- الكلاس المعرف ككلاس مجرّد يقال له Abstract Class.
- الدالة المعرفة كدالة مجرّدة يقال لها Abstract Method أو Function Method.
تعريف Abstract Class
لتحويل الكلاس العادي إلى كلاس مجرّد, يجب جعل الكلاس يرث من كلاس إسمه
الموجود في الأساس في موديول جاهز إسمه .
معلومة: الكلاس تم تسميته هكذاً إختصاراً لجملة ( Abstract Base Classes ) التي تعني الكلاس الأب لجميع الكلاسات المجرّدة.
لتحويل الكلاس العادي إلى كلاس مجرّد, يجب جعل الكلاس يرث من كلاس إسمه
الموجود في الأساس في موديول جاهز إسمه .معلومة: الكلاس تم تسميته هكذاً إختصاراً لجملة ( Abstract Base Classes ) التي تعني الكلاس الأب لجميع الكلاسات المجرّدة.
نقاط مهمة حول الكلاس المجرّد
- الكلاس المجرّد يمكنه أن يحتوي على دوال عادية, و يمكنه أن يحتوي على دوال نوعها Abstract.
- الكلاس المجرّد لا يمكن إنشاء كائنات منه في حال كان يحتوي على دوال نوعها Abstract.
- بما أنه لا يمكن إنشاء كائنات من الكلاس المجرّد في جميع الحالات, فهذا يعني أن الإستفادة الحقيقية من هذا الكلاس تكون بوراثته.
- الكلاس الذي يرث من كلاس مجرّد مجبر على أن يفعل Override لجميع الدوال المعرفة فيه Abstract.
- الكلاس المجرّد يمكنه أن يحتوي على دوال عادية, و يمكنه أن يحتوي على دوال نوعها Abstract.
- الكلاس المجرّد لا يمكن إنشاء كائنات منه في حال كان يحتوي على دوال نوعها Abstract.
- بما أنه لا يمكن إنشاء كائنات من الكلاس المجرّد في جميع الحالات, فهذا يعني أن الإستفادة الحقيقية من هذا الكلاس تكون بوراثته.
- الكلاس الذي يرث من كلاس مجرّد مجبر على أن يفعل Override لجميع الدوال المعرفة فيه Abstract.
تعريف كلاس مجرّد
في المثال التالي قمنا بتعريف كلاس مجرّد إسمه
يحتوي على دالة إسمها .
بعدها قمنا بإنشاء كلاس إسمه يرث من الكلاس .ملاحظة: الكلاس
غير مجبر على أن يفعل Override للدالة لأنها ليست معرفة كدالة مجرّدة.
في المثال التالي قمنا بتعريف كلاس مجرّد إسمه
يحتوي على دالة إسمها .بعدها قمنا بإنشاء كلاس إسمه يرث من الكلاس .
ملاحظة: الكلاس
غير مجبر على أن يفعل Override للدالة لأنها ليست معرفة كدالة مجرّدة.مثال
سنحصل على النتيجة التالية عند تشغيل الملف
.
سنحصل على النتيجة التالية عند تشغيل الملف
.ملاحظة
في المثال السابق كنت تستطيع إنشاء كائن من الكلاس
لأنه لا يحتوي على دوال مجرّدة.
لكن كما سبق و قلنا أنه بشكل عام يتم إنشاء الكلاس المجرّد في الأساس حتى يتم وراثته و ليس من أجل إنشاء كائنات منه.
في المثال السابق كنت تستطيع إنشاء كائن من الكلاس
لأنه لا يحتوي على دوال مجرّدة.لكن كما سبق و قلنا أنه بشكل عام يتم إنشاء الكلاس المجرّد في الأساس حتى يتم وراثته و ليس من أجل إنشاء كائنات منه.
تعريف Abstract Method
إذا كنت تريد بناء دالة فارغة و جعل الكلاس الذي يرثها مجبر و مسؤول عن كتابة محتواها, قم بوضع الكلمة
فوقها و فيها ضع الكلمة فقط.
و إذا كنت تريد بناء دالة و جعل الكلاس الذي يرثها مجبر على تعريفها من جديد مع إمكانية الإستفادة من الكود الموجودة فيها, قم بوضع الكلمة فوقها فقط.
إذا كنت تريد بناء دالة فارغة و جعل الكلاس الذي يرثها مجبر و مسؤول عن كتابة محتواها, قم بوضع الكلمة
فوقها و فيها ضع الكلمة فقط.و إذا كنت تريد بناء دالة و جعل الكلاس الذي يرثها مجبر على تعريفها من جديد مع إمكانية الإستفادة من الكود الموجودة فيها, قم بوضع الكلمة فوقها فقط.
نقاط مهمة حول الدوال المجرّدة
- إذا وضعت الكلمة
فوق الدالة, فهذا يعني أنها دالة مجرّدة و ليس دالة عادية.- الكلاس الذي يرث من كلاس مجرّد, يجب أن يفعل Override لكل الدوال المجرّدة التي ورثها منه.
- إذا وضعت الكلمة فوق الدالة, فهذا يعني أنها دالة مجرّدة و ليس دالة عادية.
- الكلاس الذي يرث من كلاس مجرّد, يجب أن يفعل Override لكل الدوال المجرّدة التي ورثها منه.
تعريف دوال مجرّدة
في المثال التالي قمنا بتعريف كلاس مجرّد إسمه
يحتوي على 3 دوال كالتالي:- دالة عادية إسمها .
- دالة مجردة و فارغة إسمها .
- دالة مجردة و فيها محتوى إسمها .
بعدها قمنا بإنشاء كلاس إسمه
يرث من الكلاس .ملاحظة: الكلاس
مجبر على أن يفعل Override لكل دالة مجرّدة ورثها من الكلاس .
في المثال التالي قمنا بتعريف كلاس مجرّد إسمه
يحتوي على 3 دوال كالتالي:- دالة عادية إسمها .
- دالة مجردة و فارغة إسمها .
- دالة مجردة و فيها محتوى إسمها .
بعدها قمنا بإنشاء كلاس إسمه
يرث من الكلاس .ملاحظة: الكلاس
مجبر على أن يفعل Override لكل دالة مجرّدة ورثها من الكلاس .مثال
سنحصل على النتيجة التالية عند تشغيل الملف
.
سنحصل على النتيجة التالية عند تشغيل الملف
.أمثلة تطبيقية على التجريد
وضعنا هنا مثال بسيط حول Abstract Class يرث من Abstract Class.
وضعنا هنا مثال مهم يوضح لك متى يتم يفضل أن يتم إنشاء الكلاس كـ Abstract Class.
سترى فائدة الـ Abstraction أيضاً في دروس متقدمة عندما تستخدم كلاسات جاهزة تتيح لك التعامل مع الشبكات (Networks), الواجهات (GUI) و قواعد البيانات (DataBases) بكل سهولة. كما أنك ستراها عندما تعمل على بناء مشاريع كبيرة, تجبرك على إستخدام هذا الأسلوب لتسهيل العمل في المشروع.
وضعنا هنا مثال بسيط حول Abstract Class يرث من Abstract Class.
وضعنا هنا مثال مهم يوضح لك متى يتم يفضل أن يتم إنشاء الكلاس كـ Abstract Class.
سترى فائدة الـ Abstraction أيضاً في دروس متقدمة عندما تستخدم كلاسات جاهزة تتيح لك التعامل مع الشبكات (Networks), الواجهات (GUI) و قواعد البيانات (DataBases) بكل سهولة. كما أنك ستراها عندما تعمل على بناء مشاريع كبيرة, تجبرك على إستخدام هذا الأسلوب لتسهيل العمل في المشروع.
تعليقات
إرسال تعليق