JavaRush /Java блогу /Random-KY /UML: теориядан практикага
Viacheslav
Деңгээл

UML: теориядан практикага

Группада жарыяланган

Киришүү

« Эки өлчөп, бир кес » деген сөздү бала кезинде эле ар бир адам уккан деп ойлойм . Программалоодо да ушундай. Аны ишке ашырууга убакыт коротоордон мурун аны ишке ашыруу жөнүндө ойлонгонуңуз жакшы. Көп учурда ишке ашыруу учурунда класстарды түзүүгө жана алардын өз ара аракеттенүүсүн ойлоп табууга туура келет. Жана көбүнчө мунун визуалдык көрүнүшү маселени эң туура чечүүгө жардам берет. Бул жерде UML бизге жардам берет .

UML деген эмне?

Эгер издөө системаларында сүрөттөрдү карасаңыз, UML диаграммалар, жебелер жана квадраттар жөнүндө бир нерсе экени айкын болот. Эң негизгиси, UML бирдиктүү моделдөө тorне которулат . Бул жерде бирдиктүү сөз маанилүү. Башкача айтканда, биздин сүрөттөрдү биз эле эмес, UMLди билген башкалар да түшүнөт. Көрсө, бул диаграммаларды тартуунун эл аралык тor экен.

UML: теориядан практикага - 1

Википедия айткандай

UML бул программалык камсыздоону иштеп чыгууда, бизнес процесстерин моделдөөдө, системаларды долбоорлоодо жана уюштуруу структураларын көрсөтүүдө an objectилерди моделдөө үчүн графикалык сүрөттөмө тor.
Баары эле ойлонбогон же түшүнө бербеген эң кызыктуу нерсе - UMLде спецификациялар бар. Мындан тышкары, ал тургай, UML2 спецификациясы бар. Техникалык мүнөздөмөлөр жөнүндө көбүрөөк маалыматты Object Management Group веб- сайтынан тапса болот . Чынында, бул топ UML спецификацияларын иштеп чыгууда. UML класстардын структурасын сүрөттөп берүү менен эле чектелбестиги да кызыктуу. UML диаграммаларынын көптөгөн түрлөрү бар. UML диаграммаларынын түрлөрүнүн кыскача сүрөттөлүшүн ошол эле Википедиядан көрүүгө болот: UML диаграммалары же Тимур Батыршиновдун видеосунан UML диаграммаларын карап чыгуу . UML ар кандай процесстерди сүрөттөө үчүн да кеңири колдонулат, мисалы, бул жерде: JWT аркылуу бир жолу кирүү . UML класс диаграммаларын колдонууга кайрылып, бул китепти белгилей кетүү керек Head First: Дизайн үлгүлөрү , анда үлгүлөр ошол эле UML диаграммалары менен сүрөттөлөт. Көрсө, UML чындап эле колдонулуп жатат. Жана аны колдонууну билүү жана түшүнүү абдан пайдалуу жөндөм экени көрүнүп турат.

Колдонмо

Келгиле, IDEден ушул эле UML менен кантип иштей аларыңызды карап көрөлү. Келгиле, IntelliJ Ideaны IDE катары алалы . Эгерде биз IntelliJ Idea Ultimate колдонсок , анда бизде “ UML Support ” плагини кутудан тышкары орнотулган болот. Ал автоматтык түрдө класстын кооз диаграммаларын түзүүгө мүмкүндүк берет. Мисалы, Ctrl+N же меню пунктун колдонуп "Навигация" -> "Класс" биз ArrayList классына барабыз . Эми класстын аталышы үчүн контексттик меню аркылуу "Диаграмма" -> "Диаграмманын калкып чыкма терезесин көрсөтүү" тандаңыз. Натыйжада, биз кооз диаграмманы алабыз:
UML: теориядан практикага - 2
Бирок, эгер сиз аны өзүңүз тарткыңыз келсе, бирок сизде Ideaнын Ultimate versionсы жок болсочы? Эгерде биз IntelliJ Idea Community Edition колдонсок, анда башка тандообуз жок. Бул үчүн, мындай UML диаграммасы кандайча структураланганын түшүнүшүңүз керек. Биринчиден, биз Graphviz орнотуубуз керек . Бул графиктерди визуализациялоо үчүн утorталардын жыйындысы. Бул биз колдоно турган плагин тарабынан колдонулат. Орнотуудан кийин, Graphviz орнотуу каталогунан PATH чөйрө өзгөрмөсүнө бин каталогун кошушуңуз керек . Андан кийин, IntelliJ Idea ичинде менюдан Файл -> Орнотууларды тандаңыз. "Орнотуулар" терезесинде "Плагиндер" категориясын тандап, "Репозиторийлерди карап чыгуу" баскычын чыкылдатып, PlantUML интеграция плагинин орнотуңуз . Эмне үчүн PlantUML мынчалык жакшы ? Ал UMLди сүрөттөө үчүн " чекит " деп аталган графикалык сүрөттөө тorн колдонот жана бул анын универсалдуу болушуна мүмкүндүк берет, анткени... Бул тил PlantUML тарабынан гана колдонулbyte. Мындан тышкары, биз төмөндө кылган нерселердин бардыгын IDEде гана эмес, ошондой эле planttext.com онлайн кызматында да жасоого болот . PlantUML плагинин орноткондон кийин, биз "Файл" -> "Жаңы" аркылуу UML диаграммаларын түзө алабыз. "UML класс" тибиндеги диаграмманы түзөлү. Бул процесстин жүрүшүндө үлгүсү бар шаблон автоматтык түрдө түзүлөт. Келгиле, анын мазмунун өчүрүп, Habr макаласы менен куралданган өзүбүздү түзөлү: Класс мамилелери - UMLден codeго . Жана муну текстте кантип сүрөттөш керек экенин түшүнүү үчүн, келгиле, PlantUML колдонмосун алалы: plantuml класс-диаграммасы . Эң башында байланыштарды кантип сүрөттөш керек экенин көрсөткөн table бар:
UML: теориядан практикага - 3
Ошондой эле биз бул жерден байланыштарды карап көрсөк болот: “ UMLдеги класстар ортосундагы мамилелер. Мисалдар .” Бул материалдардын негизинде биздин UML диаграммасын түзө баштайлы. Келгиле, эки классты сүрөттөгөн төмөнкү мазмунду кошолу:

@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
Идеядагы натыйжаны көрүү үчүн, "Көрүү" -> "Windows куралы" -> "PlantUML" тандаңыз. Биз класстарды билдирген эки квадратты алабыз. Белгилүү болгондой, бул эки класс тең List интерфейсин ишке ашырат. Бул класстык мамиле ишке ашыруу деп аталат. Мындай байланышты сүрөттөө үчүн чекиттүү сызык менен жебени колдонуңуз. Аны сүрөттөп көрөлү:
interface List
List <|.. ArrayList
List <|.. LinkedList
List- балдар класстарынын бири Collection. Башкача айтканда, ал Коллекциядан мураска калат. Бул байланыш жалпылоо деп аталат. Бул үзгүлтүксүз сызык менен жебеге окшош. Аны сүрөттөп көрөлү:
interface Collection
Collection <|-- List
Байланыштын төмөнкү түрү үчүн, класстын сүрөттөмөсүнө элементтердин жеке массивинин пакетиArrayList жөнүндө жазууну кошуңуз:
~Object[] elementData
Эми биз кээ бир an objectтерди камтыган нерсени көрсөткүбүз келет ArrayList. Бул учурда, байланыш түрү бириктирүү болот . Бул учурда бирдиги болуп саналат ArrayList, анткени ал башка an objectилерди камтыйт. Биз бириктирүүнү тандайбыз, анткени тизмедеги an objectтер тизмесиз жашай алат: алар анын ажырагыс бөлүгү эмес. Алардын өмүрү тизменин өмүрүнө байланган эмес. Агрегат латын тorнен которгондо “чогулган”, башкача айтканда, бир нерседен турган нерсе. Мисалы, турмушта насос жана мотордон турган насостук агрегат бар. Агрегаттын өзүн демонтаждап, анын айрым бөлүктөрүн калтырса болот. Мисалы, сатуу же башка бирдикке салуу. Тизме да ошондой. Ал эми бул бирдиктин жанындагы бош алмаз жана үзгүлтүксүз сызык түрүндө чагылдырылат. Аны мындайча сүрөттөп көрөлү:
class Object{
}
ArrayList o- Object
ArrayListЭми биз класстан айырмаланып, сакталган маалыматтарга шилтеме жасаган контейнерлер LinkedListбар экенин көрсөткүбүз келет . NodeБул учурда, Nodeалар өздөрүнүн бир бөлүгү болуп саналат LinkedListжана өзүнчө жашай алbyte. Nodeтүз сакталган мазмун эмес, бирок ага шилтемени гана камтыйт. Мисалы, биз сапка кошкондо , ошол сапка шилтемени, ошондой эле мурунку жана кийинкиге шилтемени камтыган LinkedListжаңыны кошобуз . Мындай байланыш түрү композиция деп аталат . Композитти (бөлүктөрдөн турган) көрсөтүү үчүн түстүү алмаз тартылып, ага үзгүлтүксүз сызык тартылат. Эми муну байланыштын тексттик дисплейи катары жазалы: NodeNode
class Node{
}
LinkedList *-- Node
Эми биз мамилелердин дагы бир маанилүү түрүн - көз карандылыкты кантип көрсөтүүнү үйрөнүшүбүз керек . Ал бир класс башкасын колдонгондо колдонулат жана класста колдонулуп жаткан класс жок жана анын тукуму эмес. Мисалы, LinkedListалар ArrayListкантип түзүүнү бorшет ListIterator. Келгиле, муну чекиттүү сызык менен жебелер катары көрсөтөлү:
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
Мунун бардыгынан кийин ал мындай болот:
UML: теориядан практикага - 4
Керек болушунча майда-чүйдөсүнө чейин кирсеңиз болот. Бардык белгилер бул жерде көрсөтүлгөн: " PlantUML - Class Diagram ". Кошумчалай кетсек, мындай схеманы чийүүдө табияттан тышкаркы эч нерсе жок, ал эми тапшырмаларыңыз менен иштөөдө сиз аны тез эле кол менен тартсаңыз болот. Бул колдонмо архитектурасы аркылуу ой жүгүртүү жөндөмүңүздү өнүктүрөт жана туура эмес моделди ишке ашыруу менен бир күн өткөргөнүңүздөн кийин эмес, класс структурасынын кемчorктерин эрте аныктоого жардам берет. Мен муну сынап көрүү үчүн жакшы себеп деп ойлойм? )
UML: теориядан практикага - 5

Автоматташтыруу

PlantUML диаграммаларын автоматтык түрдө түзүүнүн ар кандай жолдору бар. Мисалы, Ideaда SketchIT плагини бар , бирок ал аларды туура тартпайт. Мисалы, интерфейстерди ишке ашыруу туура эмес тартылган (мурас катары көрсөтүлөт). Интернетте муну сиздин долбоордун жашоо циклине кантип куруу керектиги боюнча мисалдар бар. Мавен үчүн uml-java-docklet колдонгон мисал бар дейли . Бул кантип жасалганын көрсөтүү үчүн, биз Maven долбоорун тез түзүү үчүн Maven Archetype колдонобуз . Келиңиз, буйрукту аткаралы: mvn archetype:generate Чыпканы тандоо суралганда ( Санды тандаңыз же чыпканы колдонуңуз ), жөн гана Enter баскычын басуу менен демейкиден чыгып кетиңиз. Бул ар дайым " maven-archetype-quickstart " болот . Акыркы versionсын тандаңыз. Андан кийин, биз суроолорго жооп берип, долбоорду түзүү аяктайт:
UML: теориядан практикага - 6
Maven бул макаланын максаты болбогондуктан, Maven суроолоруңузга жоопторду Maven Колдонуучуларынын Борборунан тапса болот . Түзүлгөн долбоордо долбоордун сүрөттөмө файлын, pom.xml, түзөтүү үчүн ачыңыз . Келгиле, uml-java-docklet сыпаттамасын ага орнотуудан көчүрүп алалы . Сүрөттөмөдө колдонулган артефакт Maven Борбордук репозиторийинен табылган жок. Бирок бул мен үчүн бул менен иштеген: https://mvnrepository.com/artifact/com.chfourie/uml-java-doclet/1.0.0 . Башкача айтканда, бул сүрөттөмөдө сиз жөн гана " info.leadinglight " ичинен groupIdди " com.chfourie " менен алмаштырып , versionсын " 1.0.0 " кылып коюшуңуз керек. Андан кийин, биз бул буйруктарды pom.xml файлы жайгашкан каталогдо аткара алабыз: жана . Эми, эгерде биз түзүлгөн documentацияны ачсак (Explorer target\site\apidocs\index.html), биз UML диаграммаларын көрөбүз. Айтмакчы, ишке ашыруу мурунтан эле бул жерде туура көрсөтүлгөн) mvn clean installmvn javadoc:javadoc

Корутунду

Көрүнүп тургандай, UML колдонмоңуздун структурасын визуалдаштырууга мүмкүндүк берет. Анын үстүнө, UML муну менен эле чектелбейт. UMLди колдонуу менен, сиз компанияңыздагы ар кандай процесстерди сүрөттөй аласыз же сиз жазып жаткан функция иштеп жаткан бизнес процессин сүрөттөй аласыз. UML сиз үчүн канчалык пайдалуу экенин өзүңүз чечесиз, бирок аны кененирээк окууга убакыт бөлүү кандай болгон күндө да пайдалуу болот. #Вячеслав
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION