اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

الوراثة المتعددة والكونستركتور هما مفهومان مهمان في البرمجة الموجهة للكائنات (OOP). ساشرح كل واحد ببساطة ووضوح.

الوراثة المتعددة

الوراثة المتعددة هي ميزة تسمح لكلاس (صنف) واحد بوراثة ميزات أو خصائص من أكثر من كلاس واحد. يمكنك تخيل الوراثة المتعددة مثل طفل يرث صفات من والده ووالدته معا. هذا يجعل الكود أكثر قابلية لإعادة الاستخدام وتنظيما لأنك تستطيع جمع خصائص ووظائف من كلاسات مختلفة في كلاس واحد.

مثال: لنفترض أن لدينا كلاس للطائر وكلاس للسباح، يمكننا إنشاء كلاس جديد يسمى "Duck" يرث الخصائص من كلا الكلاسين لأن البطة تستطيع الطيران والسباحة.

ومع ذلك، تجدر الإشارة إلى أن بعض لغات البرمجة مثل Java لا تدعم الوراثة المتعددة مباشرة بسبب تعقيدات مثل "مشكلة الماس"، حيث يمكن أن يحصل الكلاس الفرعي على نفس الطريقة من كلاسين أساسيين مختلفين، مما يؤدي إلى الارتباك حول أي طريقة يجب أن تستخدم. في هذه الحالات، يمكن استخدام واجهات(interfaces) أو تكوين بدلا من الوراثة.

الكونستركتور في OOP

الكونستركتور هو طريقة خاصة داخل الكلاس تدعى تلقائيًا عند إنشاء كائن (instance) من ذلك الكلاس. يستخدم الكونستركتور عادة لتهيئة الكائن، مثل تعيين القيم الابتدائية لمتغيرات الكلاس.

مثال: إذا كان لدينا كلاس يمثل كتاب، فقد يحتوي الكونستركتور على معلمات لعنوان الكتاب واسم المؤلف. عند إنشاء كائن جديد من الكلاس، يمكنك تحديد هذه البيانات مباشرة.

class Book {
    String title;
    String author;
    // هذا هو الكونستركتور
    Book(String title, String author) {
        this.title = title;
        this.author = author;
    }
}

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

 

  • 0
نشر

مرحبا
دعني احدثك عن الوراثة المتعددة اولا
الوراثة المتعددة هي مفهوم في برمجة الكائنات (OOP) يسمح لك بإنشاء فئة جديدة ترث السمات والسلوكيات من أكثر من فئة أخرى
بمعني مثال الابناء يرثوا بعض الصفات من الاباء صحيح هنا في برمجة الكائنات  يحصل نفس الشي parent ومنه بعض ال childern  يتيح ذلك إعادة استخدام الكود وتنظيمها بشكل أفضل يمكن للفئة الفرعية (child) استخدام الخصائص والوظائف الموجودة في الفئة الأساسية (parent)
مثال علي ذاللك في لغة البرمجة python

class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        pass

class Mammal(Animal):
    def give_birth(self):
        pass

class Bird(Animal):
    def lay_eggs(self):
        pass

class Bat(Mammal, Bird):
    def fly(self):
        pass

في هذا المثال لدينا Animal (parent)ثم يوجد لدينا فئتين مشتقتين منها Mammal و Bird وأخيرا فئة Bat ترث من كل من Mammal و Bird وهذا يوضح المهوم من الوراثة

كونستركتر في البرمجة الشيئية (OOP)
هو مفهوم من مفاهيم البرمجة الكائينية oop عندما يتم إنشاء object من class في برمجة الكائنات (OOP)  يُستدعى constructor لتهيئة الـ object وتحديد قيم ابتدائية للمتغيرات التي تنتمي إلى الـ class. الـ constructor هو نوع خاص من الـ functions يتم تنفيذها تلقائاعند إنشاء object جديد
مثال علي ذاللك
 

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def display_info(self):
        print(f"Name: {self.name}, Age: {self.age}")

# إنشاء كائن من الفئة Person
person1 = Person("John", 25)

# استدعاء الطريقة display_info
person1.display_info()

 

  • 0
نشر

إن استخدام  الوراثة المتعددة  يمكن أن يؤدي إلى تعقيدات في تصميم البرنامج وفهمه.و يمكن أن يتسبب في تضاربات في الأساليب و الصفات  الموروثة، مما يستلزم معالجة خاصة لحل هذه التعارضات. و لذلك يجب أن نأخذ بعين الاعتبار :
التصميم المناسب:يجب التخطيط الجيد للهيكلية و الترتيب الصحيح للصفوف و تجنب التعارضات و التضاربات في الأساليب و الصفات الموروثة, والتأكد من تنظيم الصفوف بطريقة تجعل الهيكل سهل الفهم والصيانة.
مثال بسيط على التضارب الذي قد يحصل:ليكن لدينا ثلاث صفوف A و B و C الصف  A هو الصف الأساسي و الصفان B و C يرثان منه كالتالي:

class A:
    def method(self):
        print("Method from class A")


class B(A):
    def method(self):
        print("Method from class B")


class C(A):
    def method(self):
        print("Method from class C")

والأن لنقم بإنشاء صف جديد وليكن D يرث من B و C معا و بالتالي سيرث التابع method مرتين مرة من C و مرة من B, فإذا قمنا باستدعاء التابع من الصف D كالتالي:
 

class D(B, C):
    pass


d = D()
d.method()

أي method منهما سيستدعي , هل سيستدعي الmethod الخاصة بالبصف B أم الخاصة بالصف C,هنا سنحصل على خطأ.
ولحل هذا التعارض عن طريق تغيير اسم التابع في كل B و C كالتالي:

class B(A):
    def method_b(self):
        print("Method from class B")


class C(A):
    def method_c(self):
        print("Method from class C")

هكذا عليك أن تكوني حذرة عند استخدام الوراثة المتعددة و خاصة في المشاريع الكبيرة التي قد يصعب فهمها و صيانتها فيما بعد.

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

  • الباني الافتراضي:يقوم بوضع قيم افتراضية لواصفات الصف.
    class MyClass:
        def __init__(self):
            self.my_attribute = 0
    
    # إنشاء كائن باستخدام الباني الافتراضي
    obj = MyClass()

     

  • باني بالقيم:يقمبوضع قيم واصفات الصف بحسب القيم الممررة له.
    class Person:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
    # إنشاء كائن باستخدام الباني بالقيمة
    person = Person("John", 30)

     

  • الباني الناسخ:يقوم بإنشاء نسخة جديدة من الصف ويضع فيها قيم واصفات النسخة الحاليةمن الصف.
    class Point:
        def __init__(self, x, y):
            self.x = x
            self.y = y
    
        def __copy__(self):
            return Point(self.x, self.y)
    
    # إنشاء كائن
    p1 = Point(1, 2)
    
    # إنشاء نسخة باستخدام الباني الناسخ
    p2 = p1.__copy__()
    

     

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...