JavaRush /Java Blog /Random-TL /UML: mula sa teorya hanggang sa pagsasanay

UML: mula sa teorya hanggang sa pagsasanay

Nai-publish sa grupo

Panimula

Sa palagay ko narinig na ng lahat sa pagkabata ang kasabihang " Sukatin nang dalawang beses, gupitin nang isang beses ." Ganun din sa programming. Laging mas mahusay na isipin ang tungkol sa pagpapatupad bago ka gumugol ng oras sa pagpapatupad nito. Kadalasan sa panahon ng pagpapatupad kailangan mong lumikha ng mga klase at mag-imbento ng kanilang pakikipag-ugnayan. At kadalasan ang isang visual na representasyon nito ay makakatulong sa paglutas ng problema sa pinakatamang paraan. Dito tayo tinutulungan ng UML .

Ano ang UML?

Kung titingnan mo ang mga larawan sa mga search engine, magiging malinaw na ang UML ay tungkol sa mga diagram, arrow at parisukat. Ang mahalaga ay ang pagsasalin ng UML sa Unified Modeling Language . Ang salitang Unified ay mahalaga dito. Ibig sabihin, ang ating mga larawan ay mauunawaan hindi lamang natin, kundi pati na rin ng ibang nakakaalam ng UML. Ito ay lumalabas na ito ay isang internasyonal na wika para sa pagguhit ng mga diagram.

UML: mula sa teorya hanggang sa pagsasanay - 1

Gaya ng sabi ng Wikipedia

Ang UML ay isang graphical na paglalarawan ng wika para sa object modeling sa software development, business process modeling, system design, at pagpapakita ng mga istruktura ng organisasyon.
Ang pinaka-kagiliw-giliw na bagay na hindi iniisip o napagtanto ng lahat ay ang UML ay may mga pagtutukoy. Bukod dito, mayroong kahit isang detalye ng UML2. Ang higit pang mga detalye tungkol sa detalye ay matatagpuan sa website ng Object Management Group . Sa totoo lang, ang pangkat na ito ay bumubuo ng mga pagtutukoy ng UML. Kapansin-pansin din na ang UML ay hindi limitado sa paglalarawan ng istruktura ng mga klase. Maraming uri ng mga diagram ng UML. Ang isang maikling paglalarawan ng mga uri ng mga diagram ng UML ay makikita sa parehong Wikipedia: Mga diagram ng UML o sa video ni Timur Batyrshinov Pagsusuri ng mga diagram ng UML . Ang UML ay malawak ding ginagamit upang ilarawan ang iba't ibang proseso, halimbawa dito: Single sign-on gamit ang JWT . Sa pagbabalik sa paggamit ng mga diagram ng klase ng UML, nararapat na tandaan ang aklat na Head First: Design Patterns , kung saan ang mga pattern ay inilalarawan ng parehong mga diagram ng UML. UML pala talaga ang ginagamit. At lumalabas na ang kaalaman at pag-unawa sa aplikasyon nito ay isang kapaki-pakinabang na kasanayan.

Aplikasyon

Tingnan natin kung paano mo magagawa ang parehong UML mula sa IDE. Kunin natin ang IntelliJ Idea bilang isang IDE . Kung gagamitin namin ang IntelliJ Idea Ultimate , magkakaroon kami ng plugin na " UML Support " na naka-install sa labas ng kahon. Ito ay nagpapahintulot sa iyo na awtomatikong bumuo ng magagandang diagram ng klase. Halimbawa, gamit ang Ctrl+N o ang menu item na "Navigate" -> "Class" pumunta tayo sa ArrayList class . Ngayon, sa pamamagitan ng menu ng konteksto para sa pangalan ng klase, piliin ang "Diagram" -> "Ipakita ang popup ng diagram". Bilang resulta, nakakakuha kami ng magandang diagram:
UML: mula sa teorya hanggang sa pagsasanay - 2
Ngunit paano kung gusto mong iguhit ito sa iyong sarili, at wala ka man lang Ultimate bersyon ng Idea? Kung gagamitin namin ang IntelliJ Idea Community Edition, wala kaming ibang pagpipilian. Upang gawin ito, kailangan mong maunawaan kung paano nakaayos ang gayong diagram ng UML. Una, kakailanganin nating i-install ang Graphviz . Ito ay isang hanay ng mga kagamitan para sa pagpapakita ng mga graph. Ginagamit ito ng plugin na gagamitin namin. Pagkatapos ng pag-install, kailangan mong idagdag ang direktoryo ng bin mula sa direktoryo ng pag-install ng Graphviz sa iyong PATH environment variable . Pagkatapos nito, sa IntelliJ Idea, piliin ang File -> Mga Setting mula sa menu. Sa window ng "Mga Setting," piliin ang kategoryang "Mga Plugin," i-click ang button na "Browse repository" at i-install ang PlantUML integration plugin . Bakit napakahusay ng PlantUML ? Gumagamit ito ng isang wika sa paglalarawan ng graph na tinatawag na " tuldok " upang ilarawan ang UML at ito ay nagpapahintulot na ito ay maging mas pangkalahatan, dahil... Ang wikang ito ay ginagamit hindi lamang ng PlantUML. Bukod dito, lahat ng ginagawa namin sa ibaba ay maaaring gawin hindi lamang sa IDE, kundi pati na rin sa online na serbisyo planttext.com . Pagkatapos i-install ang PlantUML plugin, makakagawa kami ng mga diagram ng UML sa pamamagitan ng “File” -> “Bago”. Gumawa tayo ng diagram ng uri ng "UML class". Sa prosesong ito, ang isang template na may isang halimbawa ay awtomatikong nabuo. Tanggalin natin ang mga nilalaman nito at gumawa ng sarili natin, armado ng isang artikulo mula sa Habr: Mga relasyon sa klase - mula UML hanggang code . At upang maunawaan kung paano ito ilarawan sa teksto, kunin natin ang manwal ng PlantUML: plantuml class-diagram . Sa pinakadulo simula mayroong isang talahanayan na nagpapakita kung paano dapat ilarawan ang mga koneksyon:
UML: mula sa teorya hanggang sa pagsasanay - 3
Maaari din nating tingnan ang mga koneksyon mismo dito: " Mga ugnayan sa pagitan ng mga klase sa UML. Mga Halimbawa ." Batay sa mga materyal na ito, simulan natin ang paggawa ng aming diagram ng UML. Idagdag natin ang sumusunod na nilalaman na naglalarawan sa dalawang klase:

@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
Upang makita ang resulta sa Ideya, piliin ang "View" -> "Tool Windows" -> "PlantUML". Kukuha lang kami ng dalawang parisukat na kumakatawan sa mga klase. Tulad ng alam natin, ang parehong mga klase ay nagpapatupad ng interface ng Listahan. Ang ugnayang ito ng klase ay tinatawag na pagpapatupad. Upang ilarawan ang gayong koneksyon, gumamit ng arrow na may tuldok na linya. Ilarawan natin ito:
interface List
List <|.. ArrayList
List <|.. LinkedList
List- isa sa mga klase ng bata Collection. Ibig sabihin, nagmana ito sa Collection. Ang koneksyon na ito ay tinatawag na generalization. Mukhang isang arrow na may regular na tuloy-tuloy na linya. Ilarawan natin ito:
interface Collection
Collection <|-- List
Para sa sumusunod na uri ng koneksyon, magdagdag sa paglalarawan ng klase ArrayListng isang entry tungkol sa package na pribadong hanay ng mga elemento:
~Object[] elementData
Ngayon gusto naming ipakita kung ano ang ArrayListnaglalaman ng ilang mga bagay. Sa kasong ito, ang uri ng koneksyon ay pagsasama-sama . Ang yunit sa kasong ito ay ArrayList, dahil naglalaman ito ng iba pang mga bagay. Pinipili namin ang pagsasama-sama dahil maaaring mabuhay ang mga bagay sa listahan nang wala ang listahan: hindi sila mahalagang bahagi nito. Ang kanilang buhay ay hindi nakatali sa buhay ng listahan. Ang pinagsama-samang ay isinalin mula sa Latin bilang "binuo," ibig sabihin, isang bagay na binubuo ng isang bagay. Halimbawa, sa buhay, mayroong isang pumping unit, na binubuo ng isang pump at isang motor. Ang yunit mismo ay maaaring i-disassemble, na iniiwan ang ilan sa mga bahagi nito. Halimbawa, ibenta o ilagay sa ibang unit. Ganoon din ang listahan. At ito ay ipinahayag sa anyo ng isang walang laman na brilyante malapit sa yunit at isang tuloy-tuloy na linya. Ilarawan natin ito ng ganito:
class Object{
}
ArrayList o- Object
Ngayon gusto naming ipakita na, hindi tulad ng ArrayList, ang klase LinkedListay naglalaman Nodeng mga lalagyan na tumutukoy sa nakaimbak na data. Sa kasong ito, Nodesila ay bahagi ng kanilang sarili LinkedListat hindi maaaring mamuhay nang hiwalay. Nodeay hindi direktang nakaimbak ng nilalaman, ngunit naglalaman lamang ng isang link dito. Halimbawa, kapag nagdagdag kami sa LinkedListisang row, nagdaragdag kami ng bago Node, na naglalaman ng link sa row na iyon, gayundin ng link sa nakaraan at susunod na Node. Ang ganitong uri ng komunikasyon ay tinatawag na komposisyon . Upang ipakita ang isang composite (isa na binubuo ng mga bahagi), ang isang kulay na brilyante ay iguguhit, na may tuluy-tuloy na linya na humahantong dito. Isulat natin ito ngayon bilang isang text display ng koneksyon:
class Node{
}
LinkedList *-- Node
At ngayon kailangan nating matutunan kung paano magpakita ng isa pang mahalagang uri ng relasyon - dependency relationship. Ito ay ginagamit kapag ang isang klase ay gumagamit ng isa pa, ngunit ang klase ay hindi naglalaman ng klase na ginagamit at hindi ang inapo nito. Halimbawa, alam LinkedListnila ArrayListkung paano gumawa ng ListIterator. Ipakita natin ito bilang mga arrow na may tuldok na linya:
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
Pagkatapos ng lahat ng ito, magiging ganito:
UML: mula sa teorya hanggang sa pagsasanay - 4
Maaari kang pumunta sa mas maraming detalye kung kinakailangan. Ang lahat ng mga pagtatalaga ay ipinahiwatig dito: " PlantUML - Class Diagram ". Bilang karagdagan, walang supernatural sa pagguhit ng gayong diagram, at kapag nagtatrabaho sa iyong mga gawain, maaari mong mabilis na iguhit ito sa pamamagitan ng kamay. Mapapaunlad nito ang iyong mga kasanayan sa pag-iisip sa pamamagitan ng arkitektura ng application at tutulong sa iyo na matukoy ang mga bahid ng istruktura ng klase nang maaga, sa halip na pagkatapos mong gumugol ng araw sa pagpapatupad ng maling modelo. Sa tingin ko magandang dahilan iyon para subukan ito? )
UML: mula sa teorya hanggang sa pagsasanay - 5

Automation

Mayroong iba't ibang mga paraan upang awtomatikong makabuo ng mga diagram ng PlantUML. Halimbawa, ang Idea ay may SketchIT plugin , ngunit hindi nito iginuhit nang tama ang mga ito. Halimbawa, ang pagpapatupad ng mga interface ay hindi iginuhit nang tama (ipinapakita bilang mana). Mayroon ding mga halimbawa sa Internet kung paano ito gagawin sa ikot ng buhay ng pagbuo ng iyong proyekto. Sabihin nating mayroong isang halimbawa para sa Maven gamit ang uml-java-docklet . Upang ipakita kung paano ito ginagawa, gagamitin namin ang Maven Archetype upang mabilis na lumikha ng isang proyekto ng Maven. Isagawa natin ang utos: mvn archetype:generate Kapag hiniling na pumili ng filter ( Pumili ng numero o maglapat ng filter ), iwan ang default sa pamamagitan lamang ng pagpindot sa Enter. Ito ay palaging magiging " maven-archetype-quickstart ". Piliin ang pinakabagong bersyon. Susunod, sinasagot namin ang mga tanong at kumpletuhin ang paglikha ng proyekto:
UML: mula sa teorya hanggang sa pagsasanay - 6
Dahil hindi ang Maven ang focus ng artikulong ito, ang mga sagot sa iyong mga tanong sa Maven ay makikita sa Maven Users Center . Sa nabuong proyekto, buksan ang file ng paglalarawan ng proyekto, pom.xml, para sa pag-edit . Kopyahin natin ang mga nilalaman mula sa paglalarawan ng uml-java-docklet na pag-install dito . Ang artifact na ginamit sa paglalarawan ay hindi matagpuan sa Maven Central repository. Ngunit ito ay nagtrabaho para sa akin gamit ito: https://mvnrepository.com/artifact/com.chfourie/uml-java-doclet/1.0.0 . Ibig sabihin, sa paglalarawang iyon kailangan mo lang palitan ang groupId mula sa “ info.leadinglight ” ng “ com.chfourie ” at itakda ang bersyon sa “ 1.0.0 ”. Pagkatapos nito, maaari nating isagawa ang mga utos na ito sa direktoryo kung saan matatagpuan ang pom.xmlmvn clean install file: at mvn javadoc:javadoc. Ngayon, kung bubuksan natin ang nabuong dokumentasyon (target ng explorer\site\apidocs\index.html), makikita natin ang mga diagram ng UML. Sa pamamagitan ng paraan, ang pagpapatupad ay ipinapakita nang tama dito)

Konklusyon

Tulad ng nakikita mo, pinapayagan ka ng UML na mailarawan ang istraktura ng iyong aplikasyon. Bukod dito, ang UML ay hindi limitado dito lamang. Gamit ang UML, maaari mong ilarawan ang iba't ibang proseso sa loob ng iyong kumpanya o ilarawan ang proseso ng negosyo kung saan gumagana ang function na iyong isinusulat. Kung gaano kapaki-pakinabang ang UML para sa iyo nang personal ay nasa iyo ang pagpapasya, ngunit ang paglalaan ng oras upang basahin ito nang mas detalyado ay magiging kapaki-pakinabang sa anumang kaso. #Viacheslav
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION