giriiş
"İki kere ölç, bir kere kes" sözünü sanırım herkes duymuştur. Programlamada gerçek bir tavsiye. Bunu gerçekleştirmek için herhangi bir zaman harcamadan önce uygulamayı düşünmek her zaman daha iyidir. Uygulama sırasında, genellikle sınıflar oluşturmanız ve nasıl etkileşim kuracaklarını düşünmeniz gerekir. Hepsinin görsel bir temsili, genellikle en doğru çözümü bulmanıza yardımcı olabilir. UML Sınıf Diyagramının yardımımıza geldiği yer burasıdır.UML nedir?
Arama motorlarında ilgili resimlere bakarsanız, UML'nin diyagramlar, oklar ve karelerle ilgili olduğunu görürsünüz. UML'nin Birleşik Modelleme Dili anlamına geldiğini bilmeniz gerekir. Birleşik burada önemli kelimedir. Bu, görsellerimizin sadece bizim tarafımızdan değil, UML'yi bilen herkes tarafından anlaşılacağı anlamına gelir. Diyagram çizmek için ortak dildir.Wikipedia'ya göre,
"UML, bir sistemin tasarımını görselleştirmek için standart bir yol sağlamayı amaçlayan, yazılım mühendisliği alanında genel amaçlı, gelişimsel bir modelleme dilidir."Herkesin tahmin edemeyeceği en ilginç şey, UML'nin spesifikasyonlara sahip olmasıdır. Ve hatta bir UML 2 özelliği bile var. Spesifikasyon hakkında daha fazla bilgi Object Management Group web sitesinde mevcuttur. Aslında, bu grup UML belirtimlerini geliştirir. UML'nin sınıfların yapısını açıklamakla sınırlı olmaması da ilginçtir. Pek çok UML diyagramı türü vardır. Vikipedi'de çeşitli UML diyagramı türlerinin kısa bir açıklaması vardır: UML diyagramları . UML sınıf diyagramlarına dönersek, tasarım modellerini göstermek için UML diyagramlarını kullanan "Head First Design Patterns" kitabından bahsetmeye değer . Sonuç olarak, UML gerçekten kullanılıyor. Ve bunu bilmenin ve nasıl kullanılacağını anlamanın oldukça faydalı olduğu ortaya çıktı.
Başvuru
Bir IDE'de UML ile çalışabileceğimizi bulalım. IDE olarak IntelliJ IDEA kullanacağız. IntelliJ IDEA Ultimate kullanıyorsanız, "kutudan çıkar çıkmaz" "UML Desteği" eklentisini yüklemiş olacağız. Otomatik olarak güzel sınıf diyagramları oluşturmanıza olanak tanır. Örneğin, ArrayList sınıfına gitmek için Ctrl+N veya "Gezin" -> "Sınıf" menü öğesini kullanın. Şimdi sınıf adının içerik menüsünde "Diyagram" -> "Diyagram açılır penceresini göster"i seçin. Sonuç olarak, güzel bir diyagram elde ediyoruz.

@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
Sonucu IDEA'da görmek için "Görünüm" -> "Araç Pencereleri" -> "PlantUML" öğesini seçin. Sınıfları temsil eden iki kare elde ederiz. Bu sınıfların her ikisinin de List arabirimini uyguladığını biliyoruz . Bu sınıf ilişkisine gerçekleştirme denir. Bu ilişki noktalı çizgili bir ok kullanılarak temsil edilir. Hadi çizelim:
interface List
List <|.. ArrayList
List <|.. LinkedList
List , Koleksiyon sınıfının çocuklarından biridir . Yani, Koleksiyonu devralır . Bu ilişkiye genelleme denir. Sıradan bir sürekli çizgiye sahip bir oka benziyor. Hadi çizelim:
interface Collection
Collection <|-- List
Bir sonraki ilişki türü için, ArrayList sınıf açıklamasına bir paket özel öğe dizisi hakkında bir giriş ekleyin :
~Object[] elementData
Şimdi ArrayList'in bazı nesneler içerdiğini göstermek istiyoruz . Bu durumda, bir toplama ilişkisi olacaktır. Dizi Listesibaşka nesneler içerdiğinden bir kümedir. Toplama diyoruz çünkü listenin nesneleri liste olmadan var olabilir: onlar listenin ayrılmaz parçaları değildir. Ömürleri listenin ömrüne bağlı değildir. "Agrega" kelimesi bize Latince'den gelir ve "birleştirilmiş", yani bir şeyden oluşan bir şey olarak tercüme edilir. Örneğin, hayatta bir pompa ve bir motordan oluşan bir pompa tertibatımız (agrega) vardır. Düzeneğin kendisi demonte edilebilir ve bazı bileşenlerini olduğu gibi bırakabiliriz. Örneğin satmak veya başka bir meclise sokmak. Bir listede aynı şekilde. Bu, toplamda boş bir eşkenar dörtgen ve sürekli bir çizgi ile ifade edilir. Bunu aşağıdaki gibi temsil edeceğiz:
class Object{
}
ArrayList o- Object
Şimdi, ArrayList'ten farklı olarak LinkedList sınıfının , depolanan verilere başvuran Node s kapsayıcıları içerdiğini göstermek istiyoruz . Bu durumda, Düğümler LinkedList'in parçasıdır ve bağımsız bir varlıkları yoktur. Düğüm , içeriğin kendisi değildir. Yalnızca içeriğe bir referans içerir. Örneğin, bir LinkedList'e bir dize eklediğimizde , dizeye bir referansın yanı sıra önceki ve sonraki Düğüme bir bağlantı içeren yeni bir Düğüm ekliyoruz.. Bu ilişkiye kompozisyon denir. Bileşik (kurucu parçalardan yapılmış bir şey) üzerine doldurulmuş bir eşkenar dörtgen ile sürekli bir çizgi çizilerek tasvir edilmiştir. Şimdi ilişkiyi metin olarak göstereceğiz:
class Node{
}
LinkedList *-- Node
Ve şimdi başka bir önemli ilişki türünü nasıl tasvir edeceğinizi öğrenmeniz gerekiyor: bağımlılık. Bir sınıf diğerini kullandığında kullanılır, ancak sınıf kullanılan sınıfı içermez veya miras almaz. Örneğin, LinkedList ve ArrayList, bir ListIterator oluşturmayı bilir . Bunu noktalı çizgili oklar olarak gösteriyoruz:
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
Tüm bunları yaptıktan sonra şunu elde ederiz: 
Otomasyon
PlantUML diyagramlarını otomatik olarak oluşturmanın çeşitli yolları vardır. Örneğin, IDEA'nın SketchIT eklentisi vardır, ancak diyagramları tamamen doğru şekilde çizmez. Diyelim ki arayüzlerin uygulanması yanlış çizildi (kalıtım olarak gösteriliyor). İnternette bunu projenizin yapım sürecine nasıl entegre edebileceğinize dair örnekler var. Örneğin, uml-java-docklet'in Maven ile nasıl kullanılacağını bulabilirsiniz . Göstermek için, hızlı bir şekilde bir Maven projesi oluşturmak için Maven Arketipini kullanacağız . Koşmak
mvn archetype:generate
Numara seç veya filtre uygula'ya yanıt olarak, varsayılanı bırakın - sadece Enter'a basın. Her zaman "maven-arketip-hızlı başlangıç" olacaktır. En son sürümü seçin. Ardından, bazı soruları cevaplayacağız ve projeyi oluşturmayı bitireceğiz: Maven bu makalenin konusu değil, bu nedenle Maven ile ilgili sorularınızın yanıtlarını Maven Kullanıcı Merkezi'nde
mvn clean install
Ve
mvn javadoc: javadoc
Şimdi oluşturulan belgeleri (explorer target\site\apidocs\index.html) açarsak, UML diyagramlarını göreceğiz. Bu arada, uygulama ilişkisi artık doğru bir şekilde görüntüleniyor :)
GO TO FULL VERSION