سؤال

أعرف عن جمعية وتجميع وتعميم وتعميم ما هي بحكم التعريف. الميراث هو "علاقة" وتكوين "علاقة".

Class A {
}

Class B extends A { // this is Generalization
}

Class C {
 A ob;  // this is composition
}

سؤالي الآن هو كيف تظهر التجميع والاتصالات البسيطة من حيث رمز البرمجة. ب

هل كانت مفيدة؟

المحلول

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

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

لذلك في هذا القضية، يكون المحرك مثالا على التكوين والبطارية مثالا على التجميع.

#include <iostream>

using namespace std;

class Engine
{
   public:

      Engine() {cout << "Engine created\n";};
     ~Engine() {cout << "Engine destroyed\n";};
};


class Battery
{
   public:

      Battery() {cout << "Battery created\n\n";};
     ~Battery() {cout << "\nBattery destroyed\n";};
};

class Car
{
   private:

      Battery *bat;
      Engine  eng;  //Engine will go out of scope with Car

   public:

      Car(Battery* b) : bat(b) {cout << "Car created\n";};
     ~Car() {cout << "Car destroyed\n";};

       void drive(int miles) {/*...*/};
};



int main(int argc, char *argv[])
{
   //a Battery lifecycle exists independently of a car
   Battery* battery = new Battery();

   //but a car needs to aggregate a Battery to run
   Car* car1 = new Car(battery);

   car1->drive(5);

   //car1 and its Engine destroyed but not the Battery
   delete car1;

   cout << "---------------\n";

   //new car, new composed Engine, same old Battery
   Car* car2 = new Car(battery);

   car2->drive(5);
   delete car2;

   //destroy battery independently of the cars
   delete battery;

}

الاعتذار إذا لم يكن هذا هو أفضل مثال ولكن نأمل أن يوضح النقطة الرئيسية.

نصائح أخرى

لست متأكدا تماما ما أنت عليه هنا، لكنني أقترح الأمثلة التالية:

تجميع

public class A { }
public class List<A> { }  // aggregation of A

جمعية (الاستخدامات)

public class A
{
    public void AMethod() { ... }

public class B
{
    public void BMethod( A a )
    {
         a.AMethod();  // B uses A
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top