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

هل يمكن وضع كائن داخل كائن آخر في البرمجة؟

Hu Puster

السؤال

Recommended Posts

  • 0

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

class MainObject {
    // خصائص الكائن الرئيسي
}

class SubObject {
    // خصائص الكائن الفرعي
}

class ContainerObject {
    MainObject mainObject;
    SubObject subObject;

    public ContainerObject(MainObject mainObject, SubObject subObject) {
        this.mainObject = mainObject;
        this.subObject = subObject;
    }
}

فهنا يحتوي ContainerObject على كائن من النوع MainObject وآخر من النوع SubObject، وتستطيع توسيع ذلك المفهوم وتعقيد العلاقات كما تريد. 

وفي جافاسكريبت كالتالي:

// تعريف كائن أول
let object1 = {
    property1: "Value 1",
    method1: function() {
        console.log("Method 1");
    }
};

// تعريف كائن آخر
let object2 = {
    property2: "Value 2",
    method2: function() {
        console.log("Method 2");
    },
    embeddedObject: object1  // وضع كائن داخل كائن آخر
};

// الوصول إلى الخصائص والأساليب في الكائن الفرعي
console.log(object2.property2);  // سيطبع: Value 2
object2.method1();  // سيطبع: Method 1

وأيضًا من الممكن الإعتماد على الوراثة بواسطة الـprototype في جافاسكريبت لتحقيق تنظيم هرمي للكائنات، وذلك يشمل وضع كائن داخل كائن آخر، أو استخدام مفاهيم مثل الـclass في ECMAScript 6 لتحقيق هيكلة أكثر تنظيمًا للكائنات.

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 9 ساعة قال Hu Puster:
اقتباس

هل يمكن وضع كائن داخل كائن؟  مثلا اكثر من كائن داخل كائن واحد

 

توجد اكثر من علاقه يمكن ان توجد بين الكلاسات.

الوراثة (Inheritance): يمكن لكلاس أن يورث خصائص وسلوكيات من كلاس آخر (الكلاس الأساس).

class Animal {
  public void eat() {
    System.out.println("Eating...");
  }
}

class Dog extends Animal {
  public void bark() {
    System.out.println("Bark!"); 
  }
}

Dog dog = new Dog();
dog.eat(); // inherited from Animal
dog.bark();

التركيب (Composition): عندما يحتوي كلاس على عضو من آخر. مثل كلاس سيارة يحتوي على كلاس محرك. 

class Engine {
  public void start() {...}
}

class Car {
  private Engine engine;

  public void drive() {
    engine.start();
    // use engine
  }
}

الاتحاد (Aggregation): نفس معنى التركيب ولكن العلاقة أضعف. مثل سيارة ومالكها. 

class Car {...}

class Person {
  private Car car;

  public void buyCar(Car c) {
    car = c; 
  }
}

الارتباط (Association): عندما تتعامل كائنات مع بعضها البعض دون تعديل بنيتها الداخلية. مثل طالب ومعلم.

class Student {
  private Teacher teacher;

  public void learn() {
    teacher.teach();
  }
}

class Teacher {
  public void teach() {...} 
}

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...