OOP'taki kompozisyonun ne olduğunu anlıyorum, ancak Toplamanın ne olduğu hakkında net bir fikir edemiyorum. Birisi açıklayabilir mi?
Basit kurallar:
Örnek 1:
Bir Şirket, Halkların bir araya gelmesidir. Bir Şirket, Hesapların bir bileşimidir. Bir Şirket iş yapmayı bıraktığında, Hesapları ortadan kalkar ancak Çalışanları var olmaya devam eder.
Örnek 2: (çok basitleştirilmiş)
Bir Metin Düzenleyicisi bir Arabelleğe (bileşime) sahiptir. Bir Metin Düzenleyicisi bir Dosya (toplama) kullanır. Metin Düzenleyicisi kapatıldığında, Arabellek yok edilir ancak Dosyanın kendisi yok olmaz.
http://en.wikipedia.org/wiki/Object_composition adresinden
Toplama, sahiplik anlamına gelmediği için sıradan kompozisyondan farklıdır. Kompozisyonda, sahip olan nesne yok edildiğinde, içerilen nesneler de yok olur. Toplamada, bu her zaman doğru değildir. Örneğin, bir üniversitenin çeşitli bölümleri (örn. Kimya) vardır ve her bölümün çeşitli profesörleri vardır. Üniversite kapanırsa, bölümler artık mevcut olmayacak, ancak bu bölümlerdeki profesörler var olmaya devam edecektir. Bu nedenle, bir üniversite bölümlerin bir bileşimi olarak görülebilirken, bölümlerin bir profesör topluluğu vardır. Buna ek olarak, bir Profesör birden fazla bölümde çalışabilir, ancak bir bölüm birden fazla üniversitenin parçası olamaz.
Böylece - kompozisyonla bir sahiplik ilişkiniz olsa da, sahip olunan sahip olunan nesne de yok olur - bir toplama (ve içerilen nesneler) bağımsız olarak var olabilir.
-
Güncelleme: Özür dilerim - bu cevap geçmişte çok basit.
@Curtis Batt cevabında mükemmel bir tanım sunuyor: Toplama ve Kompozisyon
Tek bir açıklama yok. Farklı yazarlar toplama yoluyla farklı şeyler ifade eder. Birçoğu bunun özel bir anlamı yok.
Kompozisyon Bir Birliktir
Toplama bir Birliktir
Kompozisyon bir strong İlişkilendirme (İçerilen nesnenin ömrü tamamen kap nesnesine bağlıysa, buna güçlü ilişkilendirme denir)
Toplama bir zayıf İlişkilendirme (İçerilen nesnenin ömrü kap nesnesine bağlı değilse, zayıf ilişkilendirme olarak adlandırılır)
Misal:
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);
}
}
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 (koleksiyon), sahiplik anlamına gelmediği için sıradan kompozisyondan farklıdır. Kompozisyonda, sahip olan nesne yok edildiğinde, içerilen nesneler de yok olur. Toplamada, bu mutlaka doğru değildir
╔═══════════╦═════════════════════════╦═══════════════════════╗
║ ║ 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.
İki sınıf arasında farklı türden bağımlılıklar için UML gösterimleri
Kompozisyon : Motor Arabanın bir parçası olduğundan, aralarındaki ilişki Kompozisyon'dur. Java dersleri arasında nasıl uygulandıkları aşağıda açıklanmıştır.
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ışan olarak Kişisi olması nedeniyle, aralarındaki ilişki Toplamadır. Java dersleri açısından nasıl göründükleri)
public class Organization {
private List employees;
}
public class Person {
private String name;
}
toplama bir mermerler torbası gibi basit bir koleksiyon
kompozisyon, bir kutudaki menteşeler gibi iç/fonksiyonel bağımlılıkları ima eder
arabalar toplu yolcuları; aracın işlevselliğini bozmadan içeri girip çıkıyorlar
lastikler bileşenlerdir; birini çıkarın ve araç artık doğru çalışmıyor
[not: yedek lastik bir agregadır!]
Kompozisyona her zaman 'bir ihtiyaç', yani bir araba bir motora ihtiyaç duyuyorum ve toplamaya 'bir amaç için ilgili şeyler' olarak bakıyorum. Bu yüzden araba benzetmesini sürdürmek, benim toplantım, bir araba ve yolcuları bir araya getirmeyi içerebilecek bir yolculuğu temsil etmek olabilir. Yolculuk arabaya veya yolculara sahip değil, belirli bir senaryo ile ilgili verileri topluyorum. Yolculuk tamamlandığında araba ve yolcular devam eder. Bir araba bittiğinde, araba ve motoru normalde birlikte imha edilir.
Anlamsal olarak, tüm kümeler alt kümelerden yapılır, değil mi? Bu nedenle:
Toplama, bu alt kümelerin baba kümesinden bağımsız olarak var olduğu zamandır. Monitör başka bir bilgisayara bağlanmak için bilgisayardan çıkarılabilir.
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, iki nesne veya sınıf arasındaki kavramsal olarak bağımlılık türünden bahseder. Doğrudan bir programda, bir toplamada, baba nesnesi elverdiği zaman, toplu nesneler de atılmalıdır. Bir kompozisyon için aynı senaryoda, baba nesnesi dağıtıldıktan sonra kompozit oğul nesneleri devam edecektir.
Bu basit örneğe ne dersiniz:
Bir nesne dizisi bir bestedir. Nesnelere bir işaretçi dizisi bir kümedir.
İlkini silersem, içeriği kaybolur. İkincisi ise, işaretçisi silinirken her bir nesneyi silen belirli bir yöntem olmadığı sürece üyelerinin varlığını etkilemeden yok olabilir.