2016-04-12 25 views
1

UML Sınıfı şemalarında Java Enums ile ilişkilerin kullanımı konusunda kafam karıştı. Şu anda bazı özelliklere sahip Car sınıfını içeren bir sistemi modelleme yapıyorum. Bazı veya CarBrand FuelKind gibi, aynı zamanda Numaralamalar şunlardır:UML Sınıf diyagramlarında Java Enumlarıyla ilişkilendirme modelleri

enter image description here

Orada veritabanı (Car JPA varlıktır) araçların bir sürü olacak ve ben soruyorum kendim en iyi ilişki ve FuelKind ve CarBrand için asalettir. Şu ana kadar

Düşüncelerim:

  • Enum örnekleri kendi örneklerinin oluşturulduğunu, bu yüzden teknik onlar Car bağlı olmayan. Ayrıca teknik olmayan bu enumlar tüm mevcut 'seçimleri' içerir, dolayısıyla katı bir bağımlılık yoktur. Yani aralarında bir Kompozisyon Birleştirme olamaz.
  • Bir Araba bir CarBrand ve FuelKind birine sahiptir. Ancak diğer taraftan: Bir marka veya yakıt türünde bir araba veya birden fazla araba var mı? Mantıksal olarak birden fazla araba Mercedes'den veya benzinle sürüş olabilir. Ancak teknik olarak bir enum örneğinin bir veya birden fazla arabaya bağlantısı yoktur.

Bu sorunun nasıl çözüleceğine dair bazı önerileriniz ve düşünceleriniz var mı?

cevap

4

Bunu neredeyse doğru yapıyorsunuz. Yönlendirilmiş bir ilişki bu durum için doğru ilişkidir.

Derneğin sınıftaki belirli bir özniteliğe başvurduğunu netleştirmek için bir hedef rol kullanın. Bu, konektörün numaralandırma adında özniteliğin (fuelKind) adıyla (değil sınıf sonu) metin etiketi olarak görüntülenir.

Aynı enum türüne ait iki özniteliğiniz varsa, iki ayrı ilişkilendirme yapmanız gerekir. Ancak, özniteliklerde tür isimlerini kullandığınızdan, aslında hiç bir ilişki çizmenize gerek yoktur. Ancak, bunu yaparsanız, hedef role sahip yönlendirilmiş bir ilişkilendirmenin, öznitelikteki türün adlandırılmasına semantik olarak eşdeğerdir. Seçtiğiniz, bir tarz meselesidir ve eğer her şeyi açıklığa kavuşturmaya yardımcı olursa, bunu yapabilirsiniz.

Diğeriyle olan ilişkide, ilişkinin yönlendirilmiş doğası, ilişkinin tek yönlü olduğu anlamına gelir. Başka bir deyişle, bunu yaptığınız gibi çizmek, enum türlerinden tekrar sınıfa kadar bir ilişki olduğunu göstermez. Ve enum türleri için normalde olmamalı, tamsayılar veya dizgiler için bu türden ilişkiler var.

+0

sayesinde, cevabın oldukça iyi olduğunu duruma açıklık. Ayrıca iki özellik için iki ayrı dernek olacağı da ilginçti, daha önce hiç görmedim. Açıklama amacıyla, isimlendirme isminin benim için yeterli olduğunu düşünüyorum. – jverhoelen

+0

"Eğer herşeyi açıklığa kavuşturmak için her ikisini de yapabilirsen" demek, "şayet yardım edersen, diyagramını dağıtamazsın" demek gibidir. Hem mülkiyet hem de bir dernek ile bir ilişkiyi ifade etmek, kafa karıştırıcı ve cesaretsizdir (son). –

+0

Siz * yardım ederseniz şemayı dağıtabilirsiniz. UML bir tür belgelidir, din değildir. Herhangi bir durumda doğru olan şey hedef kitle dahil olmak üzere çeşitli şeylere bağlıdır. Eğer hedef kitleniz * siz * sizler karışmış olabilirsiniz ve eğer * ben hedef kitle olduğumu söylerseniz bunun gereksiz olduğunu söyleyebilirim. Ancak modelin, UML'yi değil, Java'yı bilen kişiler tarafından okunması isteniyorsa, iki stili aynı anda kullanarak, şemayı okuyabilmelerine yardımcı olabilirler ancak Java'da iki öznenin aynı ada sahip olamayacağını bildikleri için karışıklığa neden olmaz. – Uffe

3

Bu doğru değil. Bir numaralandırma bir veri türü değil, bir veri türüdür. Bu yüzden onu sadece Araba sınıfındaki özniteliğine atarsınız. Bir sınıfta belirli bir enum kullandığınız bağımlılığı belirtebilirsiniz.

enter image description here

+0

Bir ilişkide teknik olarak sorun yok. Diğer özellik türleriyle stilistik olarak tutarsız olabilir, ancak doğrudur. –

+0

Normal (ör., Dizgi değeri) öznitelikler için bile bir ilişkilendirme kullanmak resmi olarak doğrudur, ancak hantal ve en iyi uygulamaları ihlal eder. –

+0

@JimL. Sözdizimsel olarak doğru. Pratik olarak şüphesiz daha fazla. Bu yüzden doğru olmadığını söyledim. UML bir enum özel olarak sunduğundan, bir sınıftan enum tanımlamak da fazladır. –

İlgili konular