JavaRush /Java Blogu /Random-AZ /UML: nəzəriyyədən praktikaya
Viacheslav
Səviyyə

UML: nəzəriyyədən praktikaya

Qrupda dərc edilmişdir

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.

UML: nəzəriyyədən praktikaya - 1

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:
UML: nəzəriyyədən praktikaya - 2
Bəs onu özünüz çəkmək istəsəniz və İdeyanın Ultimate versiyası belə yoxdursa nə etməli? Əgər biz IntelliJ Idea Community Edition istifadə etsək, onda başqa seçimimiz yoxdur. Bunu etmək üçün belə bir UML diaqramının necə qurulduğunu başa düşməlisiniz. Əvvəlcə Graphviz- i quraşdırmalıyıq . Bu, qrafikləri vizuallaşdırmaq üçün bir sıra köməkçi proqramlardır. İstifadə edəcəyimiz plagin tərəfindən istifadə olunur. Quraşdırıldıqdan sonra siz Graphviz quraşdırma kataloqundan PATH mühit dəyişəninə bin kataloqunu əlavə etməlisiniz . Bundan sonra, IntelliJ Idea-da menyudan Fayl -> Parametrlər seçin. "Parametrlər" pəncərəsində "Pluginlər" kateqoriyasını seçin, "Repozitoriyaları nəzərdən keçirin" düyməsini basın və PlantUML inteqrasiya plaginini quraşdırın . PlantUML niyə bu qədər yaxşıdır ? UML-i təsvir etmək üçün " nöqtə " adlı qrafik təsvir dilindən istifadə edir və bu, onun daha universal olmasına imkan verir, çünki... Bu dil təkcə PlantUML tərəfindən istifadə edilmir. Üstəlik, aşağıda etdiyimiz hər şey təkcə IDE-də deyil, həm də planttext.com onlayn xidmətində edilə bilər . PlantUML plaginini quraşdırdıqdan sonra biz “Fayl” -> “Yeni” vasitəsilə UML diaqramlarını yarada biləcəyik. “UML klassı” tipli diaqramı yaradaq. Bu proses zamanı avtomatik olaraq nümunə ilə şablon yaradılır. Gəlin onun məzmununu silək və Habr-dan məqalə ilə silahlanmış özümüzü yaradaq: Sinif əlaqələri - UML-dən koda . Bunu mətndə necə təsvir edəcəyinizi anlamaq üçün PlantUML təlimatını götürək: plantuml sinif diaqramı . Başlanğıcda əlaqələrin necə təsvir edilməli olduğunu göstərən bir cədvəl var:
UML: nəzəriyyədən praktikaya - 3
Əlaqələrin özlərinə də burada baxa bilərik: " UML-də siniflər arasında əlaqələr. Nümunələr ." Bu materiallara əsaslanaraq, UML diaqramımızı yaratmağa başlayaq. İki sinfi təsvir edən aşağıdakı məzmunu əlavə edək:

@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 ArrayListhaqqı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 LinkedListvar . NodeBu halda Nodeonlar özlərinin bir hissəsidirlər LinkedListvə ayrı yaşaya bilməzlər. Nodebirbaşa saxlanılan məzmun deyil, yalnız ona keçid ehtiva edir. Məsələn, biz LinkedListsətirə əlavə etdikdə yeni əlavə edirik Nodeki, 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ğı LinkedListbilirlər . Bunu nöqtəli xətt ilə oxlar kimi göstərək: ArrayListListIterator
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
Bütün bunlardan sonra belə görünəcək:
UML: nəzəriyyədən praktikaya - 4
Lazım olan qədər təfərrüata girə bilərsiniz. Bütün təyinatlar burada göstərilir: " PlantUML - Sinif Diaqramı ". Bundan əlavə, belə bir diaqramı çəkməkdə fövqəltəbii bir şey yoxdur və tapşırıqlarınız üzərində işləyərkən onu tez bir zamanda əl ilə çəkə bilərsiniz. Bu, tətbiq arxitekturası vasitəsilə düşünmə bacarıqlarınızı inkişaf etdirəcək və səhv modeli tətbiq etməklə gün keçirdikdən sonra deyil, sinif strukturu qüsurlarını erkən aşkarlamağa kömək edəcək. Düşünürəm ki, bu, cəhd etmək üçün yaxşı səbəbdir? )
UML: nəzəriyyədən praktikaya - 5

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:
UML: nəzəriyyədən praktikaya - 6
Maven bu məqalənin diqqət mərkəzində olmadığı üçün Maven suallarınıza cavabları Maven İstifadəçiləri Mərkəzində tapa bilərsiniz . Yaradılmış layihədə redaktə üçün layihə təsviri faylını, pom.xml-i açın . Gəlin məzmunu uml-java-docklet quraşdırmasının təsvirindən kopyalayaq . Təsvirdə istifadə edilən artefakt Maven Mərkəzi anbarında tapılmadı. Ancaq bu mənim üçün işlədi: https://mvnrepository.com/artifact/com.chfourie/uml-java-doclet/1.0.0 . Yəni, bu təsvirdə sadəcə olaraq “ info.leadinglight ”dan groupId-i “ com.chfourie ” ilə əvəz etməli və versiyanı “ 1.0.0 ” olaraq təyin etməlisiniz. Bundan sonra pom.xml faylının yerləşdiyi qovluqda bu əmrləri yerinə yetirə bilərik : və . İndi yaradılan sənədləri açsaq (explorer target\site\apidocs\index.html), UML diaqramlarını görəcəyik. Yeri gəlmişkən, icra artıq burada düzgün göstərilir) mvn clean installmvn javadoc:javadoc

Nəticə

Gördüyünüz kimi, UML sizə tətbiqinizin strukturunu vizuallaşdırmağa imkan verir. Üstəlik, UML təkcə bununla məhdudlaşmır. UML-dən istifadə edərək, siz şirkətinizdəki müxtəlif prosesləri təsvir edə və ya yazdığınız funksiyanın fəaliyyət göstərdiyi iş prosesini təsvir edə bilərsiniz. UML-nin şəxsən sizin üçün nə qədər faydalı olacağına qərar vermək sizin ixtiyarınızdadır, lakin onu daha ətraflı oxumağa vaxt ayırıb istənilən halda faydalı olacaq. #Viaçeslav
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION