إعلان
دورة تطوير التطبيقات باستخدام لغة JavaScript في هذه الدورة ستتعلم لغة جافا سكريبت, استخدام مكتبة React.js, بناء API الموقع بواسطة Node.js, تطوير تطبيق جوال باستخدام React Native, و في نهاية الدورة ستتعلم تطوير تطبيق محادثة شبيه بتطبيق WhatsApp. تعلم الآن
دورة تطوير واجهات المستخدم في هذه الدورة ستتعلم لغة HTML و لغة CSS و لغة JavaScript. من ناحية التطبيق العملي ستتعلم طريقة بناء واجهة متجر إلكتروني مكون من ست صفحات, تحويل خمسة تصاميم PSD إلى صفحات ويب, بناء واجهة مستخدم تشبه موقع يوتيوب, بناء لوحة تحكم إحترافية. تعلم الآن
تطوير تطبيقات باستخدام لغة بايثون في هذه الدورة ستتعلم أساسيات البرمجة بلغة بايثون وصولاً إلى التعامل مع أشهر أطر العمل (Flask و Django) و ستتعلم كيف تبني متجر إلكتروني يمكن للمستخدمين البيع و الشراء من خلاله. تعلم الآن
دورة تطوير تطبيقات الويب باستخدام لغة PHP في هذه الدورة ستتعلم لغة PHP من الصفر, استخدام إطار العمل Laravel بشرح مفصّل و عملي, كيفية تطوير شبكة اجتماعية تشبه Instagram, بناء API لتطبيق جوال وفق أسلوب RESTful, تطوير موقع إعلانات مبوبة, تطوير نظام إدارة محتوى CMS كامل. تعلم الآن
دورة تطوير تطبيقات الويب باستخدام لغة Ruby في هذه الدورة ستتعلم البرمجة بلغة Ruby إنطلاقاً من أبسط المفاهيم وحتى بناء تطبيق حقيقي, إستخدام إطار العمل Ruby on Rails بشرح مفصّل و عملي, بناء تطبيق حقيقي عبارة عن شبكة اجتماعية تشبه تويتر, تطوير مجتمع الكتروني يشبه حسوب I/O. تعلم الآن
دورة علوم الحاسوب هذه الدورة معدة لتكون مدخل لعلوم الحاسوب و لغات البرمجة حيث ستتعرف فيها على أنظمة التشغيل و ستتعمق في نظام لينكس و في كيفية التعامل معه من خلال موجه الأوامر, بالإضافة إلى قواعد البيانات و أساسيات الشبكات و الخوادم و مبادئ الحماية والأمان في الويب. تعلم الآن

    بايثون التجريد

    مفهوم التجريد

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

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

    إذاً التجريد هو أسلوب يقضي بتعريف دوال مجرّدة ( Abstract Methods ) في الكلاس الأب و إجبار الكلاس الإبن على أن يفعل Override لهذه الدوال بالشكل الذي يناسبه.
    و بالتالي عندما تنشئ كلاس يرث من كلاس فيه دوال مجرّدة سيظهر أمامك تحذير ينبهك أنك يجب أن تفعل Override لهذه الدوال حتى لا يظهر لك خطأ وقت التشغيل.


    مصطلحات تقنية

    • الكلاس العادي يقال له Concrete Class.
    • الكلاس المعرف ككلاس مجرّد يقال له Abstract Class.
    • الدالة المعرفة كدالة مجرّدة يقال لها Abstract Method أو Function Method.

    تعريف Abstract Class

    لتحويل الكلاس العادي إلى كلاس مجرّد, يجب جعل الكلاس يرث من كلاس إسمه ABC الموجود في الأساس في موديول جاهز إسمه abc.
    معلومة: الكلاس ABC تم تسميته هكذاً إختصاراً لجملة ( Abstract Base Classes ) التي تعني الكلاس الأب لجميع الكلاسات المجرّدة.


    نقاط مهمة حول الكلاس المجرّد

    • الكلاس المجرّد يمكنه أن يحتوي على دوال عادية, و يمكنه أن يحتوي على دوال نوعها Abstract.
    • الكلاس المجرّد لا يمكن إنشاء كائنات منه في حال كان يحتوي على دوال نوعها Abstract.
    • بما أنه لا يمكن إنشاء كائنات من الكلاس المجرّد في جميع الحالات, فهذا يعني أن الإستفادة الحقيقية من هذا الكلاس تكون بوراثته.
    • الكلاس الذي يرث من كلاس مجرّد مجبر على أن يفعل Override لجميع الدوال المعرفة فيه Abstract.


    تعريف كلاس مجرّد

    في المثال التالي قمنا بتعريف كلاس مجرّد إسمه ParentClass يحتوي على دالة إسمها print_msg.
    بعدها قمنا بإنشاء كلاس إسمه ChildClass يرث من الكلاس ParentClass.

    ملاحظة: الكلاس ChildClass غير مجبر على أن يفعل Override للدالة print_msg() لأنها ليست معرفة كدالة مجرّدة.

    مثال

    ParentClass.py
    # حتى نستطيع الوراثة منه abc الموجود في الموديول ABC هنا قمنا بتضمين الكلاس
    from abc import ABC
    
    
    # حتى يصبح كلاس مجرّد ABC و جعلناه يرث من الكلاس ParentClass هنا قمنا بإنشاء كلاس إسمه
    class ParentClass(ABC):
    
    	# هنا قمنا بتعريف دالة عادية تطبع جملة عند إستدعائها
        def print_msg(self):
            print('Normal method defined in an abstract class')
    		

    ChildClass.py
    # حتى نستطيع الوراثة منه ParentClass الموجود في الموديول ParentClass هنا قمنا بتضمين الكلاس
    from ParentClass import ParentClass
    
    
    # ParentClass يرث من الكلاس ChildClass هنا قمنا بإنشاء كلاس فارغ إسمه
    class ChildClass(ParentClass):
    	pass
    		

    Test.py
    # حتى نستطيع إنشاء كائن منه ChildClass هنا قمنا بتضمين الكلاس
    from ChildClass import ChildClass
    
    
    # منه print_msg() بعدها قمنا باستدعاء الدالة .obj إسمه ChildClass هنا قمنا بإنشاء كائن من الكلاس
    obj = ChildClass()
    obj.print_msg()
    		

    سنحصل على النتيجة التالية عند تشغيل الملف Test.

    Normal method defined in an abstract class

    ملاحظة

    في المثال السابق كنت تستطيع إنشاء كائن من الكلاس ParentClass لأنه لا يحتوي على دوال مجرّدة.
    لكن كما سبق و قلنا أنه بشكل عام يتم إنشاء الكلاس المجرّد في الأساس حتى يتم وراثته و ليس من أجل إنشاء كائنات منه.

    تعريف Abstract Method

    إذا كنت تريد بناء دالة فارغة و جعل الكلاس الذي يرثها مجبر و مسؤول عن كتابة محتواها, قم بوضع الكلمة @abstractmethod فوقها و فيها ضع الكلمة pass فقط.
    و إذا كنت تريد بناء دالة و جعل الكلاس الذي يرثها مجبر على تعريفها من جديد مع إمكانية الإستفادة من الكود الموجودة فيها, قم بوضع الكلمة @abstractmethod فوقها فقط.


    نقاط مهمة حول الدوال المجرّدة

    • إذا وضعت الكلمة @abstractmethod فوق الدالة, فهذا يعني أنها دالة مجرّدة و ليس دالة عادية.
    • الكلاس الذي يرث من كلاس مجرّد, يجب أن يفعل Override لكل الدوال المجرّدة التي ورثها منه.


    تعريف دوال مجرّدة

    في المثال التالي قمنا بتعريف كلاس مجرّد إسمه ParentClass يحتوي على 3 دوال كالتالي:

    • دالة عادية إسمها m1.
    • دالة مجردة و فارغة إسمها m2.
    • دالة مجردة و فيها محتوى إسمها m3.

    بعدها قمنا بإنشاء كلاس إسمه ChildClass يرث من الكلاس ParentClass.

    ملاحظة: الكلاس ChildClass مجبر على أن يفعل Override لكل دالة مجرّدة ورثها من الكلاس ParentClass.

    مثال

    ParentClass.py
    # حتى نستطيع استخدامهما abc الموجودين في الموديول @abstractmethod و الكلمة ABC هنا قمنا بتضمين الكلاس
    from abc import ABC, abstractmethod
    
    
    # حتى يصبح كلاس مجرّد ABC و جعلناه يرث من الكلاس ParentClass هنا قمنا بإنشاء كلاس إسمه
    class ParentClass(ABC):
    
    	# m1 هنا قمنا بتعريف دالة عادية إسمها
        def m1(self):
    		print('m1: Normal method defined by ParentClass')
    		
    	# m2 هنا قمنا بتعريف دالة مجردة و فارغة إسمها
    	@abstractmethod
        def m2(self):
    		pass
    		
    	# m3 هنا قمنا بتعريف دالة مجردة و فيها أمر طباعة إسمها
    	@abstractmethod
        def m3(self):
    		print('m3: Default content is written by ParentClass')
    		

    ChildClass.py
    # حتى نستطيع الوراثة منه ParentClass الموجود في الموديول ParentClass هنا قمنا بتضمين الكلاس
    from ParentClass import ParentClass
    
    
    # ParentClass يرث من الكلاس ChildClass هنا قمنا بإنشاء كلاس إسمه
    class ChildClass(ParentClass):
    	
    	# ParentClass لأن هذه الدالة كانت معرفة كدالة مجرّدة في الكلاس m2() للدالة Override هنا فعلنا
        def m2(self):
    		print('m2: Its content is written by ChildClass')
    		
    	# ParentClass لأن هذه الدالة كانت معرفة كدالة مجرّدة في الكلاس m3() للدالة Override هنا فعلنا
        def m3(self):
    		super().m3()      # و بعدها قمنا بإضافة أمر طباعة ParentClass الموجودة في الكلاس m3() لاحظ أننا قمنا باستدعاء الدالة
    		print('m3: ChildClass add his own code too')
    		

    Test.py
    # حتى نستطيع إنشاء كائن منه ChildClass هنا قمنا بتضمين الكلاس
    from ChildClass import ChildClass
    
    
    # obj إسمه ChildClass هنا قمنا بإنشاء كائن من الكلاس
    obj = ChildClass()
    
    # obj هنا قمنا باستدعاء الدوال الثلاثة الموجودة في الكائن
    obj.m1()
    obj.m2()
    obj.m3()
    		

    سنحصل على النتيجة التالية عند تشغيل الملف Test.

    m1: Normal method defined by ParentClass
    m2: Its content is written by ChildClass
    m3: Default content is written by ParentClass
    m3: ChildClass add his own code too

    أمثلة تطبيقية على التجريد


    وضعنا هنا مثال بسيط حول Abstract Class يرث من Abstract Class.

    شاهد المثال »


    وضعنا هنا مثال مهم يوضح لك متى يتم يفضل أن يتم إنشاء الكلاس كـ Abstract Class.

    شاهد المثال »


    سترى فائدة الـ Abstraction أيضاً في دروس متقدمة عندما تستخدم كلاسات جاهزة تتيح لك التعامل مع الشبكات (Networks), الواجهات (GUI) و قواعد البيانات (DataBases) بكل سهولة. كما أنك ستراها عندما تعمل على بناء مشاريع كبيرة, تجبرك على إستخدام هذا الأسلوب لتسهيل العمل في المشروع.

    إعلان

    Eqla3Tech.com

    شروحات مكتوبة حول لغات البرمجة و تقنية المعلومات باللغة العربية مقدمة من إقلاع تك.

    لغة جافا لغة ++C قواعد البيانات نظام ويندوز نظام لينكس الشبكات تقنية المعلومات الأمن السيبراني

    الدورات

    أدوات مساعدة

    الأقسام

    دورات
    مقالات أسئلة مشاريع كتب