Муқаддима
Ман фикр мекунам, ки ҳама дар кӯдакӣ чунин мақолеро шунидаанд, ки " Ду бор чен кунед, як бор буред ". Дар барномасозӣ низ ҳамин тавр аст. Пеш аз он ки барои иҷрои он вақт сарф кунед, ҳамеша беҳтар аст, ки дар бораи татбиқ фикр кунед. Аксар вақт ҳангоми татбиқ шумо бояд синфҳо эҷод кунед ва ҳамкории онҳоро ихтироъ кунед. Ва аксар вақт тасвири визуалии ин метавонад ба ҳалли дурусти мушкилот кӯмак кунад. Дар ин ҷо UML ба мо кӯмак мекунад .UML чист?
Агар шумо ба тасвирҳо дар системаҳои ҷустуҷӯ нигаред, маълум мешавад, ки UML чизе дар бораи диаграммаҳо, тирҳо ва квадратҳо мебошад. Муҳим он аст, ки UML ба забони ягонаи моделсозӣ тарҷума мешавад . Дар ин ҷо калимаи Unified муҳим аст. Яъне расмҳои моро на танҳо мо, балки дигарон, ки UML-ро медонанд, мефаҳманд. Маълум мешавад, ки ин забони байналмилалӣ барои кашидани диаграммаҳост.
Тавре ки Википедиа мегӯяд
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 меравем . Акнун, тавассути менюи контекстии номи синф, "Диаграмма" -> "Намоиши диаграммаи поп-ап" -ро интихоб кунед. Дар натиҷа, мо диаграммаи зебо мегирем:
@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
Пас аз ин ҳама чунин хоҳад буд:
Автоматика
Роҳҳои гуногуни тавлиди диаграммаҳои PlantUML вуҷуд доранд. Масалан, Idea дорои плагини SketchIT аст , аммо он онҳоро дуруст ҷалб намекунад. Масалан, татбиқи интерфейсҳо нодуруст кашида шудааст (ҳамчун мерос нишон дода мешавад). Инчунин дар Интернет мисолҳо мавҷуданд, ки чӣ гуна онро дар давраи сохтмони лоиҳаи худ сохтан мумкин аст. Биёед бигӯем, ки барои Maven як мисоли истифодаи uml-java-docklet вуҷуд дорад . Барои нишон додани он, ки ин чӣ гуна анҷом дода мешавад, мо Maven Archetype -ро барои зуд сохтани лоиҳаи Maven истифода хоҳем кард. Биёед фармонро иҷро кунем:mvn archetype:generate
Вақте ки хоҳиш карда мешавад, ки филтрро интихоб кунед ( Рақамро интихоб кунед ё филтрро татбиқ кунед ), бо пахш кардани тугмаи Enter аз пешфарз тарк кунед. Ин ҳамеша " maven-archetype-quickstart " хоҳад буд . Версияи охиринро интихоб кунед. Сипас, мо ба саволҳо ҷавоб медиҳем ва эҷоди лоиҳаро анҷом медиҳем:
mvn clean install
ҷойгир аст, иҷро кунем: ва mvn javadoc:javadoc
. Ҳоло, агар мо ҳуҷҷатҳои тавлидшударо кушоем (explorer target\site\apidocs\index.html), мо диаграммаҳои UML-ро мебинем. Дар омади гап, татбиқ аллакай дар ин ҷо дуруст нишон дода шудааст)
GO TO FULL VERSION