Toplama vs Kompozisyon


206

Kompozisyonun OOP'de ne olduğunu biliyorum, ancak Toplamanın ne olduğu hakkında net bir fikir edemiyorum. Birisi açıklayabilir mi?

Yanıtlar:


322

Basit kurallar:

  1. Bir "sahibi" B = Kompozisyon: B'nin A olmadan sistemde bir anlamı veya amacı yoktur.
  2. A, "kullanır" B = Birleştirme: B, A'dan bağımsız olarak (kavramsal olarak) bulunur

Örnek 1:

Bir Şirket, İnsanların toplamıdır. Bir Şirket, Hesapların bir bileşimidir. Bir Şirket iş yapmayı bıraktığında, Hesaplar var olmaktan çıkar, fakat Çalışanları var olmaya devam eder.

Örnek 2: (çok basitleştirilmiş)

Bir Metin Düzenleyici'nin bir Tamponu (kompozisyonu) vardır. Bir Metin Düzenleyici, bir Dosya (toplama) kullanır. Metin Düzenleyicisi kapatıldığında, Arabellek imha edilir, ancak Dosyanın kendisi imha edilmez.


11
Peki, bir araba bir agrega mı yoksa parçalarının bir bileşimi mi?
reinierpost

2
Ve topluluğun iki tür varlık arasındaki herhangi bir ilişkiden farkı nedir?
reinierpost

55
@reinierpost Gerçekte , bir araba bir parçaların toplamıdır ve parçalar sadece moleküllerin bir araya getirilmesidir ... Ancak, bir modelde bunların hepsi sizin gereksinimlerinize bağlıdır. Motoru, araçtan bağımsız olarak ömrünü takip edebilmeniz için ayrı bir varlık olarak değerlendirmek önemlidir mi? Aynı motoru başka bir arabada tekrar kullanabilir misiniz? Eğer öyleyse, muhtemelen toplanmasını istersiniz. Aksi taktirde bir kompozisyon istiyorsunuz, çünkü otomobillerin parçası olmayan motorları umursamıyorsunuz veya motorları tekrar kullanıyorsunuz.
Curtis Batt

3
eksik olan, tam bir anlayış için bir uygulama örneğidir ...
Chesnokov Yuriy

1
Bir şirket iş yapmaktan çıktığında çalışandan ne haber? Çalışan ve insanlar farklı varlıklar değil mi? Öyleyse şirketin çalışanların bileşimi olduğunu söyleyebilir miyim?
arjun

36

Gönderen http://en.wikipedia.org/wiki/Object_composition

Toplanma, mülkiyeti ima etmediği için sıradan kompozisyondan farklıdır. Kompozisyonda, sahibi olan nesne yok edildiğinde, içerilen nesneler de öyledir. Toplanmasında, bu mutlaka doğru değil. Örneğin, bir üniversitenin çeşitli bölümleri vardır (örneğin kimya) ve her bölümün bir çok profesörü vardır. Üniversite kapanırsa, bölümler artık yok olacak, ancak bu bölümlerdeki profesörler var olmaya devam edecek. Bu nedenle, bir üniversite bölümlerin bir bileşimi olarak görülebilir, oysa bölümlerin bir profesör toplantısı vardır. Ayrıca, bir Profesör birden fazla bölümde çalışabilir, ancak bir bölüm birden fazla üniversitenin parçası olamaz.

Yani - kompozisyon ile bir sahiplik ilişkiniz olmasına rağmen, sahip olunan nesne, sahip olduğu zaman da imha edilir - bir toplanma (ve içerdiği nesneler) bağımsız olarak bulunabilir.

-

Güncelleme: Özür dilerim - bu cevap uzun zamandır çok basit.

c.batt cevabında mükemmel bir tanım sağlar: Toplama ve Kompozisyon


3
Alıntı verdiğiniz örnekte, bileşimin bire çok olduğu ve toplanmanın da bire çok ilişkiye sahip olduğu, ancak burada toplanmaya yönelik çoktan çoğa bir ilişki olabileceği halde (bunun mümkün olduğunu varsayabiliriz) Bir öğretmen birden fazla bölümde ders verebilir. Oysa bir bölüm birden fazla üniversitenin parçası olamaz. Kompozisyon, birleşme ilişkinin ötesine geçmediği halde mülkiyeti ifade eder. Alıntı doğru ama yorum değil.
Newtopian

1
yıkımla ilgisi yok! UML, çöp toplama sistemini tanımlamaz.
Ekran Adı

2
wikipedia bağlantısının dönüşlü artışlar elde ettiğini düşünüyorum, ancak bu çok kötü bir tanım - @bold bu ilişkilerin GC ile ilgisi olmadığını belirtti. Bu aynı zamanda, bir nesne iki yapay uzuvları birleştiren bir bilyeli mafsaldaki top gibi diğer iki nesnenin bileşeni olduğunda da düşer. Bileşen ilişkisi işlevsel bağımlılıkla ilgilidir.
Steven A. Lowe

1
Cevabımın çok eksik olduğuna katılıyorum - ama
WikiPedia

Bileşim ve toplanma arasındaki fark açıktır. Toplanmayla ilgili sorun, sıradan birliktelikten ne kadar farklı olduğu net değil.
reinierpost


17
  • Kompozisyon bir dernektir

  • Toplama bir dernektir

  • Kompozisyon güçlü bir Birliktir (İçerdiği nesnenin ömrü tamamen konteyner nesnesine bağlıysa, buna güçlü birleşme denir)

  • Toplama zayıf bir Dernektir (İçerilen nesnenin ömrü konteyner nesnesine bağlı değilse, buna zayıf dernek denir)

Örnek:

class Contained {
    public void disp() {
        System.out.println("disp() of Contained A");
    }
}

public class Container {
    private Contained c;

    //Composition
    Container() {
        c = new Contained(); 
    }

    //Association 
    public Contained getC() {
        return c;
    }

    public void setC(Contained c) {
        this.c = c;
    }     

    public static void main(String[] args) {
        Container container = new Container();
        Contained contained = new Contained();
        container.setC(contained);
    } 
}

2
Ne toplama ne de toplama ne toplama ile birleşme arasındaki fark nedir?
reinierpost

11

Kompozisyon (karışım), basit nesneleri veya veri türlerini daha karmaşık olanlarla birleştirmenin bir yoludur. Kompozisyonlar birçok temel veri yapısının kritik bir yapı taşıdır

Toplama (toplama) mülkiyeti ima etmediği için sıradan kompozisyondan farklıdır. Kompozisyonda, sahibi olan nesne yok edildiğinde, içerilen nesneler de öyledir. Toplanmasında, bu mutlaka doğru değil

╔═══════════╦═════════════════════════╦═══════════════════════╗
║           ║       Aggregation       ║      Composition      ║
╠═══════════╬═════════════════════════╬═══════════════════════╣
║ Life time ║ Have their own lifetime ║ Owner's life time     ║
║ Relation  ║ Has                     ║ part-of               ║
║ Example   ║ Car has driver          ║ Engine is part of Car ║
╚═══════════╩═════════════════════════╩═══════════════════════╝

Her ikisi de nesne arasındaki ilişkiyi gösterir ve sadece güçlerinde farklılık gösterir. görüntü tanımını buraya girin

İki sınıf arasında farklı bir bağımlılık türü için UML notasyonları görüntü tanımını buraya girin

Kompozisyon : Motor, Arabanın bir parçası olduğu için, aralarındaki ilişki Kompozisyondur. İşte Java sınıfları arasında nasıl uygulandıklarını.

public class Car {
    //final will make sure engine is initialized
    private final Engine engine;  

    public Car(){
       engine  = new Engine();
    }
}

class Engine {
    private String type;
}

Toplama : Kuruluşun çalışanları olarak bir Personeli olduğu için, aralarındaki ilişki Toplamadır. Java sınıfları açısından nasıl göründükleri

public class Organization {
    private List employees;
}


public class Person {
    private String name;   
}

Kaynak


Bu, önceki 12
cevapta

Oldukça kesin kitaplar, kütüphaneler olmadan var olabilir. Kötü örnek!
Boş

Burada Çalışanların Listesi Organizasyon Nesnesinin bir parçasıdır. Bu nasıl bir araya getirilebilir?
Salman Muhammad Ayub

Dernek toplanmasından nasıl farklıdır?
reinierpost

Bu cevabı seviyorum. Sonunda bana toplama ve kompozisyon arasındaki farkın ne olduğunu düzgün bir şekilde açıkladı.
PandasRocks

6

toplanma mermerler bir çanta gibi basit bir koleksiyon

Kompozisyon, bir kutudaki menteşeler gibi dahili / fonksiyonel bağımlılıkları ifade eder.

otomobiller toplam yolcu; arabanın işlevselliğini bozmadan içeri girip çıkıyorlar

lastikler bileşenlerdir; birini kaldırın ve araç artık doğru çalışmıyor

[not: stepne bir agregadır!]


1

Kompozisyona her zaman 'ihtiyaç' olarak bakarım, yani bir araba bir motora ihtiyaç duyar ve toplanmaya 'bir amaç ile ilgili şeyler' olarak bakarım. Dolayısıyla, araba benzetmesi ile kalmak, benim topluluğum, bir otomobil ve yolcuları bir araya getirmeyi içerebilecek bir yolculuğu temsil etmek olabilir. Yolculuk araca veya yolculara ait değil, belirli bir senaryo ile ilgili verileri topluyorum. Yolculuk tamamlandığında araç ve yolcular devam ediyor. Bir araba sona erdiğinde, araba ve motoru normalde birlikte imha edilir.


0

Anlamsal olarak, tüm kümeler alt kümelerden oluşur, değil mi? Bu nedenle:

  • Toplam, bu alt kümelerin baba kümesinden bağımsız olarak var olduğu zamandır. Bir monitörün bir başkasına bağlanması için bilgisayardan çıkarılabileceği gibi.

  • Kompozisyon, bu alt kümelerin baba kümesinin varlığına bağlı olduğu zamandır. Bir yaprak bir ağacın veya karaciğerin bir parçası olduğu için vücudun bir parçasıdır.

Bu kavramlar, kavramsal olarak iki nesne veya sınıf arasındaki bağımlılık türünden bahsediyor. Doğrudan bir programda, bir toplamda, baba nesnesinin attığı zaman, toplam nesnelerin de atılması gerekir. Bir kompozisyon için aynı senaryoda, birleşik oğul nesneler devam eder, sonra baba nesne dağıtılır.


-1

Peki ya bu basit örnek:

Bir nesne dizisi bir kompozisyondur. Nesnelere yönelik işaretçiler dizisi bir toplamadır.

İlkini silersem, içeriği onunla yok olur. İkincisi ise, işaretçisi silinirken her bir nesneyi silen özel bir yöntem olmadığı sürece, üyelerin varlığını etkilemeden yok olabilir.


3
bu, önceki 11
cevapta

Saygılarımla, katılmıyorum @gnat. Bu, ikisinin nasıl uygulanabileceğinin yararlı bir örneğidir. İnsanlar örneklerle daha iyi öğrenir. (Bir işaretçi üyesinin bir toplama olabileceğini ve bir nesne üyesinin bir kompozisyon olabileceğini anlamamı kontrol etmek için buraya geldim. Doğrudan buna değinecek tek cevap bu.)
Bob Stein
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.