Parça-bütün ilişki kavramlarının bir araya getirilmesi ve bileşimi arasındaki ayrım konusunda bu kadar kafa karışıklığı olması şaşırtıcı . Temel sorun, kompozisyon kavramının, parçaların bütün olmadan var olamayacağı şekilde, bütün ve parçaları arasında bir yaşam döngüsü bağımlılığı anlamına geldiğine dair yaygın yanlış anlaşılmadır (uzman yazılım geliştiricileri arasında ve UML'nin yazarları arasında bile). Ancak bu görüş, parçaların bütünden ayrılabileceği ve bütünün yok edilmesinden sonra hayatta kalabileceği, paylaşılamaz parçalara sahip kısmi-bütün birliktelikleri olgusunu görmezden geliyor.
UML şartname belgesinde, "kompozisyon" teriminin tanımı her zaman paylaşılamayan kısımları ima etmiştir, ancak "kompozisyon" un tanımlayıcı özelliğinin ne olduğu ve sadece isteğe bağlı bir özellik olduğu açık olmamıştır. Yeni sürümde (2015 itibariyle) UML 2.5, "kompozisyon" teriminin tanımını iyileştirme girişiminden sonra bile belirsizliğini koruyor ve paylaşılamaz ile parça-bütün ilişkilerinin nasıl modelleneceği konusunda herhangi bir rehberlik sağlamıyor Parçaların ayrılamadığı ve bütünle birlikte imha edildiği durumun aksine, parçaların bütünden ayrılabildiği ve yok edilmesine dayanabildiği parçalar. Onlar söylüyor
Bileşik bir nesne silinirse, nesneler olan tüm parça örnekleri onunla birlikte silinir.
Ama aynı zamanda diyorlar ki
Bileşik nesne silinmeden önce bir parça nesne, bileşik nesneden kaldırılabilir ve bu nedenle, bileşik nesnenin bir parçası olarak silinemez.
Bu karışıklık, bileşenler ve bileşikler arasındaki yaşam döngüsü bağımlılıklarını hesaba katmayan UML tanımının eksikliğine işaret ediyor. Bu nedenle , bileşenlerin kendi kompozitlerinden ayrılamayacağı ve bu nedenle, kompozitleri yok edildiğinde imha edilmesi gereken << ayrılmaz >> bileşimler için bir UML klişesi getirilerek UML tanımının nasıl geliştirilebileceğini anlamak önemlidir .
Kompozisyon
As Martin Fowler açıkladı , kompozisyon karakterizasyonu için ana konu "bir nesne yalnızca bir kompozisyon ilişkinin parçası olabilir" olmasıdır. Bu aynı zamanda Geert Bellekens tarafından UML Oluşturma, Toplama ve İlişkilendirme arasındaki mükemmel blog gönderisinde de açıklanmıştır . Bir kompozisyonun bu tanımlayıcı özelliğine ek olarak ( münhasır veya paylaşılamaz kısımlara sahip olmak), bir kompozisyon ayrıca kompozit ve bileşenleri arasında bir yaşam döngüsü bağımlılığı ile gelebilir. Aslında, bu tür iki tür bağımlılık vardır:
- Bir bileşenin her zaman bir kompozite iliştirilmesi gerektiğinde veya başka bir deyişle, kompozisyon hattının kompozit tarafındaki "tam olarak bir" çokluk ile ifade edildiği gibi, zorunlu bir kompozite sahip olduğunda , o zaman ya yeniden kullanılmalıdır. başka bir kompozitte (veya yeniden eklenmiş) veya mevcut kompoziti yok edildiğinde tahrip olmuş. Bu, aşağıdaki diyagramda gösterilen
Person
ve arasındaki bileşim ile örneklendirilir Heart
. Bir kalp, sahibi öldüğünde ya yok edilir ya da başka birine nakledilir.
- Bir bileşen her müstakil edilemez olduğunu, diğer bir deyişle kendi kompozit veya gelen ayrılmaz , o zaman, ve ancak ondan sonra, bileşen kompozit yok edilir, imha edilmesi gerekir. Ayrılmaz parçalara sahip böyle bir bileşimin bir örneği,
Person
ve arasındaki bileşimdir Brain
.
Özetle, yaşam döngüsü bağımlılıkları yalnızca belirli kompozisyon durumları için geçerlidir, ancak genel olarak değil, bu nedenle tanımlayıcı bir özellik değildir.
UML spesifikasyonu şunu belirtir: "Bileşik örnek silinmeden önce bir parça bileşik bir örnekten kaldırılabilir ve bu nedenle bileşik örneğin parçası olarak silinemez." Bir örnekte Car
- Engine
aşağıdaki şemada gösterildiği gibi bileşim, bu motoru motor yok değildir ve tekrar kullanılabilir ve bu durumda araç yok olmadan önce, araç, ayrılabilir bu durum net bir şekilde var. Bu, kompozisyon çizgisinin bileşik tarafındaki sıfır veya bir çokluk ile ifade edilir.
Çokluk bileşik tarafında bir bileşimin ilişki ucunun ya 1 ya da 0..1 olup, bileşenler zorunlu bileşik varsa gerçeğine bağlı olarak (bir kompozit bağlanmış olmalıdır) ya da. Bileşenler ayrılamazsa , bu, zorunlu bir bileşime sahip oldukları anlamına gelir.
Toplama
Bir toplama, bir bütünün parçalarının diğer bütünlerle paylaşılabildiği bir parça-bütün ilişkisinin amaçlanan anlamı ile başka bir özel ilişkilendirme biçimidir. Örneğin, sınıflar arasında bir toplama modelleyebilir DegreeProgram
ve Course
aşağıdaki şemada gösterildiği gibi bir ders derece programının bir parçası olan ve bir programı, örneğin, bir mühendislik derecesi C paylaşabilir (iki ya da daha fazla derece programları arasında paylaşılabilir, çünkü, bilgisayar bilimleri derecesi ile programlama kursu).
Bununla birlikte, paylaşılabilir parçalarla bir toplama kavramı gerçekten çok fazla bir şey ifade etmiyor, bu nedenle uygulama üzerinde herhangi bir etkisi yoktur ve bu nedenle birçok geliştirici, sınıf diyagramlarında beyaz elmas kullanmayı tercih etmez, sadece basit bir ilişkilendirmeyi modelleyin. yerine. UML belirtimi şöyle der: "Paylaşılan toplamanın kesin semantiği, uygulama alanına ve modelleyiciye göre değişir".
Çokluk bütün tarafında bir toplama birliği ucunun herhangi bir sayıda (*) bir parçası olan ya çünkü olabilir ortak bütünler, herhangi bir sayıda, yanı.