Giriş
Düşünürəm ki, hər kəs uşaqlıqda “ İki dəfə ölç, bir kəs ” kimi bir deyim eşitmişdir. Proqramlaşdırmada da belədir. Onu icra etməyə vaxt sərf etməzdən əvvəl onun həyata keçirilməsi haqqında düşünmək həmişə daha yaxşıdır. Çox vaxt həyata keçirərkən siz siniflər yaratmalı və onların qarşılıqlı əlaqəsini icad etməlisiniz. Və tez-tez bunun vizual təsviri problemi ən düzgün şəkildə həll etməyə kömək edə bilər. Burada UML bizə kömək edir .UML nədir?
Axtarış sistemlərində şəkillərə baxsanız, aydın olacaq ki, UML diaqramlar, oxlar və kvadratlar haqqında bir şeydir. Əsas odur ki, UML vahid modelləşdirmə dilinə tərcümə olunur . Burada Unified sözü vacibdir. Yəni şəkillərimizi təkcə biz yox, UML bilənlər də başa düşəcək. Məlum oldu ki, bu, diaqramların çəkilməsi üçün beynəlxalq dildir.
Vikipediyada deyildiyi kimi
UML proqram təminatının hazırlanmasında, biznes proseslərinin modelləşdirilməsində, sistemlərin dizaynında və təşkilati strukturların nümayişində obyektlərin modelləşdirilməsi üçün qrafik təsvir dilidir.Hər kəsin düşünmədiyi və ya dərk etmədiyi ən maraqlı şey UML-nin spesifikasiyalara malik olmasıdır. Üstəlik, hətta UML2 spesifikasiyası da var. Spesifikasiya haqqında daha ətraflı məlumatı Obyekt İdarəetmə Qrupunun veb saytında tapa bilərsiniz . Əslində, bu qrup UML spesifikasiyalarını inkişaf etdirir. Həm də maraqlıdır ki, UML yalnız siniflərin strukturunu təsvir etməklə məhdudlaşmır. UML diaqramlarının bir çox növləri var. UML diaqramlarının növlərinin qısa təsvirini eyni Vikipediyada görmək olar: UML diaqramlarında və ya Timur Batırşinovun UML diaqramlarının icmalı videosunda . UML də müxtəlif prosesləri təsvir etmək üçün geniş istifadə olunur, məsələn burada: JWT istifadə edərək tək giriş . UML sinif diaqramlarının istifadəsinə qayıdaraq, nümunələrin eyni UML diaqramları ilə təsvir olunduğu Head First: Design Patterns kitabını qeyd etmək lazımdır. Məlum oldu ki, UML həqiqətən də istifadə olunur. Və məlum olur ki, onun tətbiqi haqqında bilik və anlayış kifayət qədər faydalı bir bacarıqdır.
Ərizə
Gəlin IDE-dən eyni UML ilə necə işləyə biləcəyinizi nəzərdən keçirək. Gəlin IntelliJ Idea-nı IDE kimi götürək . Əgər biz IntelliJ Idea Ultimate istifadə etsək, o zaman qutudan kənarda “ UML Support ” plaginini quraşdırmış olacağıq . Bu, avtomatik olaraq gözəl sinif diaqramlarını yaratmağa imkan verir. Məsələn, Ctrl+N və ya menyu elementindən istifadə edərək "Navigate" -> "Sinif" biz ArrayList sinfinə keçirik . İndi sinif adı üçün kontekst menyusu vasitəsilə “Diaqram” -> “Sxem popup-nu göstər” seçin. Nəticədə gözəl bir diaqram alırıq:
@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
Nəticəni Idea-da görmək üçün "Görünüş" -> "Alət Windows" -> "PlantUML" seçin. Biz sadəcə sinifləri təmsil edən iki kvadrat alacağıq. Bildiyimiz kimi, bu siniflərin hər ikisi List interfeysini həyata keçirir. Bu sinif əlaqəsi icra adlanır. Belə bir əlaqəni təsvir etmək üçün nöqtəli bir oxdan istifadə edin. Onu təsvir edək:
interface List
List <|.. ArrayList
List <|.. LinkedList
List
- uşaq siniflərindən biri Collection
. Yəni Kolleksiyadan miras qalır. Bu əlaqə ümumiləşdirmə adlanır. O, müntəzəm davamlı xətti olan oxa bənzəyir. Onu təsvir edək:
interface Collection
Collection <|-- List
Aşağıdakı əlaqə növü üçün sinif təsvirinə paketin şəxsi elementlər massivi ArrayList
haqqında giriş əlavə edin:
~Object[] elementData
İndi biz bəzi obyektləri ehtiva edənləri göstərmək istəyirik ArrayList
. Bu halda, əlaqə növü aqreqasiya olacaqdır . Bu halda vahid ArrayList
, çünki başqa obyektləri ehtiva edir. Biz birləşməni seçirik, çünki siyahıdakı obyektlər siyahısız yaşaya bilər: onlar onun ayrılmaz hissələri deyil. Onların ömrü siyahının ömrü ilə bağlı deyil. Aqreqat latın dilindən "yığılmış", yəni bir şeydən ibarət olan bir şey kimi tərcümə olunur. Məsələn, həyatda bir nasos və mühərrikdən ibarət bir nasos qurğusu var. Bölmənin özü sökülə bilər, onun bəzi hissələri qalır. Məsələn, satmaq və ya başqa bir vahidə qoymaq. Siyahı da belədir. Və bu, vahidin yaxınlığında boş bir almaz və davamlı bir xətt şəklində ifadə edilir. Bunu belə təsvir edək:
class Object{
}
ArrayList o- Object
İndi biz göstərmək istəyirik ki, -dən fərqli olaraq ArrayList
, sinifdə saxlanılan məlumatlara istinad edən konteynerlər LinkedList
var . Node
Bu halda Node
onlar özlərinin bir hissəsidirlər LinkedList
və ayrı yaşaya bilməzlər. Node
birbaşa saxlanılan məzmun deyil, yalnız ona keçid ehtiva edir. Məsələn, biz LinkedList
sətirə əlavə etdikdə yeni əlavə edirik Node
ki, həmin cərgəyə keçidi, həmçinin əvvəlki və sonrakı keçidi ehtiva edir Node
. Bu ünsiyyət növü kompozisiya adlanır . Kompoziti (hissələrdən ibarət olanı) göstərmək üçün ona gedən davamlı xətt ilə rəngli bir almaz çəkilir. İndi bunu əlaqənin mətn ekranı kimi yazaq:
class Node{
}
LinkedList *-- Node
İndi biz başqa bir vacib əlaqə növünü - asılılıq əlaqəsini necə göstərməyi öyrənməliyik . Bir sinif digərindən istifadə etdikdə istifadə olunur və sinifdə istifadə olunan sinf yoxdur və onun nəsli yoxdur. Məsələn, necə yaratmağı LinkedList
bilirlər . Bunu nöqtəli xətt ilə oxlar kimi göstərək: ArrayList
ListIterator
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
Bütün bunlardan sonra belə görünəcək:
Avtomatlaşdırma
PlantUML diaqramlarını avtomatik yaratmaq üçün müxtəlif yollar var. Məsələn, Idea- da SketchIT plagini var , lakin o, onları düzgün çəkmir. Məsələn, interfeyslərin həyata keçirilməsi səhv çəkilir (miras kimi göstərilir). İnternetdə bunu layihənizin tikinti həyat dövrünə necə quracağınıza dair nümunələr də var. Tutaq ki, Maven üçün uml-java-docklet istifadə edən bir nümunə var . Bunun necə edildiyini göstərmək üçün tez bir zamanda Maven layihəsi yaratmaq üçün Maven Archetype- dən istifadə edəcəyik . Gəlin əmri yerinə yetirək:mvn archetype:generate
Filtr seçmək tələb olunduqda ( Nömrə seçin və ya filtr tətbiq edin ), sadəcə Enter düyməsini basaraq defoltdan çıxın. Bu həmişə " maven-archetype-quickstart " olacaq . Ən son versiyanı seçin. Sonra, suallara cavab veririk və layihənin yaradılmasını tamamlayırıq:
mvn clean install
mvn javadoc:javadoc
GO TO FULL VERSION