JavaRush /Блоги Java /Random-TG /UML: аз назария ба амалия
Viacheslav
Сатҳи

UML: аз назария ба амалия

Дар гурӯҳ нашр шудааст

Муқаддима

Ман фикр мекунам, ки ҳама дар кӯдакӣ чунин мақолеро шунидаанд, ки " Ду бор чен кунед, як бор буред ". Дар барномасозӣ низ ҳамин тавр аст. Пеш аз он ки барои иҷрои он вақт сарф кунед, ҳамеша беҳтар аст, ки дар бораи татбиқ фикр кунед. Аксар вақт ҳангоми татбиқ шумо бояд синфҳо эҷод кунед ва ҳамкории онҳоро ихтироъ кунед. Ва аксар вақт тасвири визуалии ин метавонад ба ҳалли дурусти мушкилот кӯмак кунад. Дар ин ҷо UML ба мо кӯмак мекунад .

UML чист?

Агар шумо ба тасвирҳо дар системаҳои ҷустуҷӯ нигаред, маълум мешавад, ки UML чизе дар бораи диаграммаҳо, тирҳо ва квадратҳо мебошад. Муҳим он аст, ки UML ба забони ягонаи моделсозӣ тарҷума мешавад . Дар ин ҷо калимаи Unified муҳим аст. Яъне расмҳои моро на танҳо мо, балки дигарон, ки UML-ро медонанд, мефаҳманд. Маълум мешавад, ки ин забони байналмилалӣ барои кашидани диаграммаҳост.

UML: аз назария ба амалия - 1

Тавре ки Википедиа мегӯяд

UML забони тавсифи графикӣ барои моделсозии an objectҳо дар таҳияи нармафзор, моделсозии равандҳои бизнес, тарҳрезии системаҳо ва намоиши сохторҳои ташкилӣ мебошад.
Аҷибтарин чизе, ки на ҳама дар бораи он фикр мекунанд ё дарк мекунанд, ин аст, ки UML дорои мушаххасот аст. Ғайр аз он, ҳатто як мушаххасоти UML2 вуҷуд дорад. Тафсилоти бештарро дар бораи мушаххасот дар вебсайти Идоракунии Гурӯҳи Объектҳо пайдо кардан мумкин аст . Дар асл, ин гурӯҳ мушаххасоти UML-ро таҳия мекунад. Инчунин ҷолиб он аст, ки UML бо тавсифи сохтори синфҳо маҳдуд намешавад. Намудҳои зиёди диаграммаҳои UML мавҷуданд. Тавсифи мухтасари намудҳои диаграммаҳои UML-ро дар ҳамон Википедия дидан мумкин аст: диаграммаҳои UML ё дар видеои Тимур Батыршинов Баррасии диаграммаҳои UML . UML инчунин барои тавсифи равандҳои гуногун ба таври васеъ истифода мешавад, масалан, дар ин ҷо: Воридшавӣ ба ягона бо истифода аз JWT . Бозгашт ба истифодаи диаграммаҳои синфи UML, бояд китоби Head First: Design Patterns -ро қайд кард , ки дар он намунаҳо бо ҳамон диаграммаҳои UML тасвир шудаанд. Маълум мешавад, ки UML воқеан истифода мешавад. Ва маълум мешавад, ки дониш ва дарки истифодаи он як маҳорати хеле муфид аст.

Ариза

Биёед бубинем, ки чӣ тавр шумо метавонед бо ҳамин UML аз IDE кор кунед. Биёед IntelliJ Idea-ро ҳамчун IDE гирем . Агар мо IntelliJ Idea Ultimate -ро истифода барем , пас мо плагини " UML Support " -ро аз қуттӣ насб мекунем. Он ба шумо имкон медиҳад, ки ба таври худкор диаграммаҳои синфҳои зебо эҷод кунед. Масалан, бо истифода аз Ctrl+N ё банди менюи "Навигат" -> "Класс" мо ба синфи ArrayList меравем . Акнун, тавассути менюи контекстии номи синф, "Диаграмма" -> "Намоиши диаграммаи поп-ап" -ро интихоб кунед. Дар натиҷа, мо диаграммаи зебо мегирем:
UML: аз назария ба амалия - 2
Аммо чӣ мешавад, агар шумо хоҳед, ки онро худатон кашед ва шумо ҳатто versionи ниҳоии Idea надоред? Агар мо IntelliJ Idea Community Edition -ро истифода барем, пас мо дигар илоҷ надорем. Барои ин, шумо бояд фаҳмед, ки чунин диаграммаи UML чӣ гуна сохтор шудааст. Аввалан, мо бояд Graphviz -ро насб кунем . Ин маҷмӯи утorтаҳо барои визуализатсияи графикҳо мебошад. Он аз ҷониби плагин, ки мо истифода хоҳем кард, истифода мешавад. Пас аз насб, шумо бояд феҳристи биниро аз директорияи насби Graphviz ба тағирёбандаи муҳити PATH худ илова кунед . Пас аз он, дар IntelliJ Idea, аз меню Файл -> Танзимотро интихоб кунед. Дар равзанаи "Танзимотҳо" категорияи "Плагинҳо" -ро интихоб кунед, тугмаи "Мураббии анборҳо" -ро клик кунед ва плагини ҳамгироии PlantUML -ро насб кунед . Чаро PlantUML ин қадар хуб аст ? Он забони тавсифи графикиро бо номи " нуқта " барои тавсифи UML истифода мебарад ва ин имкон медиҳад, ки он универсалтар бошад, зеро... Ин забон на танҳо аз ҷониби PlantUML истифода мешавад. Ғайр аз он, ҳама чизеро, ки мо дар зер мекунем, на танҳо дар IDE, балки инчунин дар хидмати онлайни planttext.com иҷро кардан мумкин аст . Пас аз насб кардани плагини PlantUML, мо метавонем диаграммаҳои UML-ро тавассути "Файл" -> "Нав" созем. Биёед диаграммаи навъи "класси UML"-ро созем. Дар давоми ин раванд ба таври худкор шаблон бо намуна тавлид мешавад. Биёед мундариҷаи онро нест кунем ва худамонро эҷод кунем, ки бо мақолаи Habr: Муносибатҳои синфӣ - аз UML то code . Ва барои фаҳмидани он ки чӣ тавр инро дар матн тасвир кардан мумкин аст, биёед дастури PlantUML-ро гирем: plantuml class-diagram . Дар ибтидо ҷадвале мавҷуд аст, ки нишон медиҳад, ки чӣ гуна пайвастшавӣ бояд тавсиф карда шавад:
UML: аз назария ба амалия - 3
Мо инчунин метавонем ба худи пайвандҳо дар ин ҷо назар кунем: " Муносибатҳои байни синфҳо дар UML. Намунаҳо ." Дар асоси ин мавод, биёед ба сохтани диаграммаи UML-и худ шурӯъ кунем. Биёед мундариҷаи зеринро бо тавсифи ду синф илова кунем:

@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
Барои дидани натиҷа дар Idea, "Намоиш" -> "Windows Tool" -> "PlantUML" -ро интихоб кунед. Мо танҳо ду квадратеро мегирем, ки синфҳоро намояндагӣ мекунанд. Тавре ки мо медонем, ҳардуи ин синфҳо интерфейси Рӯйхатро амалӣ мекунанд. Ин муносибати синфӣ амалӣ номида мешавад. Барои тасвир кардани чунин пайвастшавӣ, тирчаи дорои хати нуқтаро истифода баред. Биёед онро тасвир кунем:
interface List
List <|.. ArrayList
List <|.. LinkedList
List- яке аз синфҳои кӯдакона Collection. Яъне, он аз Коллексия мерос мегирад. Ин робитаро умумї меноманд. Он ба тирчаи дорои хати доимии доимӣ монанд аст. Биёед онро тасвир кунем:
interface Collection
Collection <|-- List
Барои намуди зерини пайвастшавӣ, ба тавсифи синф ArrayListворидотро дар бораи массиви хусусии элементҳо илова кунед:
~Object[] elementData
Ҳоло мо мехоҳем нишон диҳем, ки ArrayListкадом an objectҳоро дар бар мегирад. Дар ин ҳолат, намуди пайвастшавӣ ҷамъоварӣ хоҳад буд . Воҳиди дар ин ҳолат аст ArrayList, зеро он an objectхои дигарро дарбар мегирад. Мо ҷамъкуниро интихоб мекунем, зеро an objectҳои рӯйхат метавонанд бидуни рӯйхат зиндагӣ кунанд: онҳо қисмҳои ҷудонашавандаи он нестанд. Умри онҳо ба умри рӯйхат вобаста нест. Агрегат аз лотинӣ ҳамчун "маҷмӯа" тарҷума шудааст, яъне чизе аз чизе иборат аст. Масалан, дар хаёт агрегати насосй мавчуд аст, ки аз насос ва мотор иборат аст. Худи агрегатро ба қисмҳо ҷудо кардан мумкин аст, ки баъзе ҷузъҳои онро боқӣ мемонанд. Масалан, барои фурӯш ё ба воҳиди дигар гузоштан. Рӯйхат низ ҳамин тавр аст. Ва ин дар шакли алмоси холии назди агрегат ва хатти пай дар пай ифода меёбад. Биёед онро чунин тасвир кунем:
class Object{
}
ArrayList o- Object
Ҳоло мо мехоҳем нишон диҳем, ки бар хилофи ArrayList, синф LinkedListдорои Nodeконтейнерҳое мебошад, ки ба маълумоти захирашуда ишора мекунанд. Дар ин ҳолат Nodeонҳо ҷузъи худанд LinkedListва наметавонанд ҷудо зиндагӣ кунанд. Nodeмундариҷаи мустақим нигоҳ дошта намешавад, балки танҳо истиноди онро дар бар мегирад. Масалан, вақте ки мо ба LinkedListяк сатр илова мекунем, мо нав илова мекунем Node, ки дорои истинод ба он сатр ва инчунин истиноди қаблӣ ва оянда Node. Ин навъи муошират таркиб номида мешавад . Барои намоиш додани композитсия (яке, ки аз қисмҳо иборат аст) алмоси ранга кашида мешавад, ки хати пайваста ба он мебарад. Биёед ҳоло инро ҳамчун намоиши матнии пайваст нависед:
class Node{
}
LinkedList *-- Node
Ва акнун мо бояд омӯзем, ки чӣ гуна нишон додани як намуди дигари муҳими муносибат - муносибати вобастагӣ . Он вақте истифода мешавад, ки як синф синфи дигарро истифода мебарад ва синф синфи истифодашавандаро дар бар намегирад ва насли он нест. Масалан, LinkedListонҳо ArrayListмедонанд, ки чӣ тавр сохтани ListIterator. Биёед инро ҳамчун тирчаҳо бо хати нуқта нишон диҳем:
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
Пас аз ин ҳама чунин хоҳад буд:
UML: аз назария ба амалия - 4
Шумо метавонед ба қадри зарурӣ муфассалтар ворид шавед. Ҳама нишонаҳо дар ин ҷо нишон дода шудаанд: " PlantUML - Диаграммаи синф ". Илова бар ин, дар кашидани ин гуна диаграмма ягон чизи ғайриоддӣ вуҷуд надорад ва ҳангоми кор кардан бо супоришҳо шумо метавонед онро дастӣ зуд кашед. Ин малакаҳои шуморо дар тафаккур тавассути меъмории барномаҳо инкишоф медиҳад ва ба шумо кӯмак мекунад, ки камбудиҳои сохтори синфро барвақт муайян кунед, на пас аз он ки шумо рӯзро барои татбиқи модели нодуруст сарф кардед. Ман фикр мекунам, ки ин як сабаби хубест барои санҷидани он? )
UML: аз назария ба амалия - 5

Автоматика

Роҳҳои гуногуни тавлиди диаграммаҳои PlantUML вуҷуд доранд. Масалан, Idea дорои плагини SketchIT аст , аммо он онҳоро дуруст ҷалб намекунад. Масалан, татбиқи интерфейсҳо нодуруст кашида шудааст (ҳамчун мерос нишон дода мешавад). Инчунин дар Интернет мисолҳо мавҷуданд, ки чӣ гуна онро дар давраи сохтмони лоиҳаи худ сохтан мумкин аст. Биёед бигӯем, ки барои Maven як мисоли истифодаи uml-java-docklet вуҷуд дорад . Барои нишон додани он, ки ин чӣ гуна анҷом дода мешавад, мо Maven Archetype -ро барои зуд сохтани лоиҳаи Maven истифода хоҳем кард. Биёед фармонро иҷро кунем: mvn archetype:generate Вақте ки хоҳиш карда мешавад, ки филтрро интихоб кунед ( Рақамро интихоб кунед ё филтрро татбиқ кунед ), бо пахш кардани тугмаи Enter аз пешфарз тарк кунед. Ин ҳамеша " maven-archetype-quickstart " хоҳад буд . Версияи охиринро интихоб кунед. Сипас, мо ба саволҳо ҷавоб медиҳем ва эҷоди лоиҳаро анҷом медиҳем:
UML: аз назария ба амалия - 6
Азбаски Maven дар маркази ин мақола нест, ҷавобҳоро ба саволҳои Maven шумо метавонед дар Маркази корбарони Maven пайдо кунед . Дар лоиҳаи тавлидшуда файли тавсифи лоиҳа, pom.xml -ро барои таҳрир кушоед . Биёед мундариҷаро аз тавсифи насби uml-java-docklet ба он нусхабардорӣ кунем . Артефакте, ки дар тавсиф истифода шудааст, дар анбори марказии Maven ёфт нашуд. Аммо он барои ман бо ин кор кард: https://mvnrepository.com/artifact/com.chfourie/uml-java-doclet/1.0.0 . Яъне, дар ин тавсиф ба шумо танҳо лозим аст, ки groupId-ро аз “ info.leadinglight ” бо “ com.chfourie ” иваз кунед ва versionро ба “ 1.0.0 ” таъин кунед. Пас аз ин, мо метавонем ин фармонҳоро дар директорияе, ки файли pom.xmlmvn clean install ҷойгир аст, иҷро кунем: ва mvn javadoc:javadoc. Ҳоло, агар мо ҳуҷҷатҳои тавлидшударо кушоем (explorer target\site\apidocs\index.html), мо диаграммаҳои UML-ро мебинем. Дар омади гап, татбиқ аллакай дар ин ҷо дуруст нишон дода шудааст)

Хулоса

Тавре ки шумо мебинед, UML ба шумо имкон медиҳад, ки сохтори барномаи худро тасаввур кунед. Гузашта аз ин, UML танҳо бо ин маҳдуд намешавад. Бо истифода аз UML, шумо метавонед равандҳои гуногунро дар дохor ширкати худ тавсиф кунед ё раванди тиҷоратиеро, ки дар он функсияе, ки шумо менависед, тавсиф кунед. То чӣ андоза муфид будани UML барои шумо шахсан ба шумо вобаста аст, аммо вақт ҷудо кунед, то муфассалтар мутолиа кунед, дар ҳар сурат муфид хоҳад буд. #Вячеслав
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION