Diagram tried UML; Takto budete mať prehľad o orientácii objektu! naučiť sa programovať

Kľúčové príjmy:

  • Ako zobraziť vzťahy medzi triedami pomocou diagramu tried UML.
  • Čo treba brať do úvahy pri objektovo orientovanom dizajne?
  • Ako zobraziť atribúty a metódy v diagrame triedy.
  • Čo je multiplicita?
  • Ako reprezentujete vzťahy medzi triedami.
  • Aký je rozdiel medzi agregáciou a zložením?
  • Ako predstavuje dedičnosť v schéme tried UML.

Už to vieme.

Pokiaľ to neurobíte zle, skončíte v pekle!

A určite tam nechceme ísť!

Predtým, ako stlačíte kláves, by ste si mali určite urobiť pár myšlienok.

Môžete to urobiť v záhrade s chladnou colou. Hlavné je, aby ste mali po ruke podložku na písanie a ceruzku s gumou.

Alebo môžete použiť bezplatný softvér UMLet.

Pretože veľkou výhodou objektovo-orientovaného dizajnu je, že komponenty a ich vzťahy môžu byť graficky znázornené v softvérovom systéme.

Rovnako ako sme to robili tu s triedou štvornohých priateľov.

tried

Takzvaný diagram tried UML je veľmi inteligentný spôsob vizuálneho znázornenia tried a ich vzťahov. UML znamená Unified Modeling Language.

Diagram triedy je nástroj, ktorý by ste mali urgentne pridať do svojho panela nástrojov.

Ako každý nástroj, aj tu však môžete efektívne používať diagram tried UML, iba ak rozumiete jeho oblasti použitia.

Poďme si teda najskôr povedať, čoho sa musíme v objektovo orientovanom dizajne obávať.

Objektovo orientovaný dizajn s diagramom tried UML

Trieda sa skladá z troch zložiek. Každá trieda má názov, vlastnosti (nazývané tiež atribúty) a metódy.

Vytvárame konkrétne objekty z tried (vytváranie inštancií). Napríklad z triedy psov sa stane inštancia psov s menom Snoopy a hmotnosťou 20 kg.

Atribúty triedy popisujú stav objektu, napríklad meno a hmotnosť psa.

Metódy na druhej strane popisujú správanie sa objektu a dávajú mu schopnosti, napríklad také, že pes môže štekať.

V triedovom diagrame UML sú tieto tri prvky navzájom oddelené vodorovnými čiarami. Pre náš príklad psa vyzerá diagram tried takto:

V hornej časti je názov triedy. V našom prípade sa trieda volá pes.

Stredná časť obsahuje atribúty triedy. Takže meno a váha psa.

Každý atribút má dátový typ, ktorý je za názvom príslušného atribútu oddelený dvojbodkou.

Metódy sú uvedené spolu so zoznamom parametrov a návratovou hodnotou v dolnej časti diagramu tried UML, pričom údajový typ návratovej hodnoty nasleduje za dvojbodkou.

Máme tu do činenia s celkom jednoduchým psom. Okrem metódy štekania obsahuje naša trieda iba atribúty getter a setter.

Nie je tam nič iné?

Určite ste si to už všimli!

Atribúty sme predponovali znamienkom mínus - a metódy znamienkom +.

Ako viete zo základov objektovo orientovaného programovania, inštančné premenné by nemali byť viditeľné zvonka, aby boli chránené pred manipuláciou, t. J. Mali by byť vyhlásené za súkromné.

Odborník v odbore hovorí o zapuzdrení.

A to je presne to, čo znamená znamienko mínus -. Atribút alebo metóda, pred ktorou je znamienko mínus, je vyhlásená za súkromnú, zatiaľ čo znamienko plus + predstavuje atribút alebo metódu definovanú ako verejnú.

Samozrejme je tiež možné definovať atribúty a metódy ako chránené.

Atribúty deklarované ako chránené alebo definované metódy by mali byť viditeľné iba v rámci samotnej triedy a všetkých podtried.

V triedovom diagrame UML označíme viditeľnosť chránenú znakom hash #.

Premenné triedy v schéme tried UML

Doteraz boli našimi atribútmi vždy inštančné premenné. Každá inštancia našej triedy psov zaberá svoju vlastnú samostatnú oblasť pamäte.

Ale čo keď chceme spočítať počet vytvorených psích objektov?

Na tento účel potrebujeme JEDNU celočíselnú premennú, ku ktorej majú prístup všetky inštancie psov.

Takáto premenná sa nazýva premenná triedy a je definovaná v Jave pomocou kľúčového slova static.

V triedovom diagrame UML sú premenné triedy označené podčiarkovníkom.

Poď! Pridajme do diagramu tried vyššie premennú triedy, pomocou ktorej môžeme počítať počet vyprodukovaných psov.

To bolo ľahké, však? Do atribútovej časti diagramu tried UML sme museli pridať iba podčiarkovnú celočíselnú premennú hundZaehler.

Násobnosť v schéme tried UML

Zatiaľ sme si to uľahčili. Naše atribúty zatiaľ pozostávali iba z primitívnych dátových typov. Čo však robiť, keď chceme použiť polia alebo zoznamy polí?

Na to existuje takzvaná multiplicita.

Náš pes má samozrejme tri obľúbené hračky, a to milenku, lego a bejzbalovú pálku.

A presne v tomto poradí!

Potrebujeme teda pole, ktoré dokáže držať tieto tri prvky v uvedenom poradí.

Za týmto účelom napíšeme takzvanú multiplicitu [1.3] a identifikátor za atribút, ktorý hračky akceptujú.

Kapacitu poľa určujeme pomocou multiplicity [1.3]. Dodatkom naznačujeme, že hračky na pomsty sú usporiadanou dátovou štruktúrou, v ktorej je dôležitá postupnosť.

Pyšný pes si navyše každý deň nájde nové jedlo, ktoré má rád.

Preto potrebujeme tiež dátovú štruktúru, ktorá pojme ľubovoľný počet prvkov. Okrem toho by sa každý informačný kanál mal v dátovej štruktúre uložiť iba raz, t. J. Zreteľne.

UML na tento účel poskytuje multiplicitu [*] a identifikátor.

Poďme teda ešte raz rozšíriť náš diagram tried UML.

Náš pes môže mať teraz ľubovoľný počet obľúbených jedál. Každú potravinu je však možné zreteľne uložiť iba v atribúte obľúbené jedlo. Súhvezdie typu: „Moje obľúbené jedlá sú 1. pizza, 2. pizza a 3. pizza“ nie je možné z dôvodu označenia.

Konštanty v schéme tried UML

Aby ste zvýšili udržiavateľnosť svojich programov, mali by ste definovať hodnoty, ktoré sa nemenia konštantami.

Najznámejšia zo všetkých konštánt je Pi. Namiesto toho, aby sme napísali 3.14 . kdekoľvek počítame s číslom Pi, použijeme konštantu Math.PI .

Konštanty sú v Jave deklarované pomocou kľúčového slova ako konečné a pridané ako dodatok do diagramu tried UML.

Bežné použitie konštánt je číslo verzie. Poďme teda opäť rozšíriť náš diagram tried UML.

Pretože verzia triedy je rovnaká pre každú inštanciu psa, premenná VERSION je premenná triedy, ktorá musí byť v schéme triedy podčiarknutá.

Od diagramu tried UML po programový kód

Cieľom nášho snaženia je spustiteľný program.

Celé naše doterajšie úsilie bude prospešné iba vtedy, ak budeme môcť triedny diagram čo najjednoduchšie preložiť do zdrojového kódu Java.

A práve o toto sa chceme ďalej starať.

Tu je zdrojový kód vygenerovaný z diagramu tried.

V riadkoch dva a tri deklarujeme primitívne atribúty meno a váha .

Potom použijeme zoznam polí na uloženie obľúbených hračiek a sadu HashSet na uloženie obľúbených jedál nášho psa.

Používame na to HashSet, pretože ho musíme zreteľne uložiť v našej dátovej štruktúre kvôli označeniu jedlami.

V neposlednom rade pridáme do riadkov šesť a sedem ako atribúty statickú premennú počítadla hundZaehler a konštantnú VERSION.

Metódy sú uvedené na riadkoch osem až dvanásť.

Z toho bude zrejmé, čo UML diagram tried NEMOŽE robiť. Diagram triedy popisuje iba to, ktoré metódy trieda sprístupňuje. Neposkytuje však nijaké informácie o tom, ako sa musí implementovať funkčnosť týchto metód.

Triedny diagram nám teda nepomáha modelovať algoritmus. Na tento účel však UML poskytuje ďalšie diagramy, ako napríklad sekvenčný diagram.

Takto reprezentujete vzťahy v schéme tried UML

Úprimne! Zatiaľ je to všetko len nepríjemné a vôbec to nepomáha.

Bez všetkej námahy ste mohli do počítača vraziť jednu triedu psa.

Stane sa zaujímavým až vtedy, keď náš softvérový systém nebude obsahovať iba jednu triedu a chceme popísať, ako tieto triedy navzájom súvisia.

Rovnako ako v reálnom živote existujú priateľské, romantické alebo obchodné vzťahy, existujú aj rôzne typy vzťahov v objektovej orientácii.

Začnime prvým typom, a to závislosťami, ktoré sa v odbornej literatúre často nazývajú aj závislosťami.

Závislosti v schéme tried UML

Pes je hladný a žerie z misky s jedlom.

Fressnapf je objekt, ktorý vytvoríme z triedy Fressnapf a eat je metóda triedy psa s inštanciou Fressnapf ako parametrom.

Inštancia Fressnapf nie je neoddeliteľnou súčasťou psa, ale používa sa iba dovtedy, kým nie je spracovaná metóda stravovania.

Takýto vzťah sa nazýva užívateľský vzťah a je znázornený v diagrame tried UML pomocou šípky označenej ako charakteristika.

Asociácie UML

Boli ste už v útulku?

V útulku pre zvieratá sú zvieratá (kto by si to myslel), králiky, mačky, myši a tiež psy, o ktoré sa stará ošetrovateľ.

V útulku zjavne existuje vzťah medzi psom a držiteľom.

Vzťah však nie je taký silný, aby sa jeden bez druhého nezaobišiel.

Zoológ a pes môžu existovať sami.

Pes môže byť šťastne začlenený do rodiny a sú tu aj strážcovia zoo, ktorí sa starajú iba o ľadového medveďa Knuta.

Takéto slabé spojenia sú znázornené pomocou jednoduchej spojovacej čiary medzi triedami.

UML agregácie a kompozície

Často musíme narábať s triedami, ktoré ako atribúty obsahujú inštancie iných tried.

Napríklad v útulku pre zvieratá sú strážcovia a pes.

Aj tu je však dôležité, aby pestúnsky pes aj zoologická záhrada mohli existovať bez útulku pre zvieratá.

Pestún je ešte chudobnejší pes bez útulku a chovateľ zvierat je nezamestnaný strážca zvierat bez útulku.

Ale obaja tam stále sú. Takýto vzťah sa nazýva agregácia a v diagrame tried UML je označený symbolom kosoštvorca.

Zloženie!

Silnejšou asociáciou je zloženie tzv.

Pri tomto type priradenia je vzťah taký silný, že keď sa odstráni „kontajnerový objekt“, zmizne aj integrovaný objekt.

To je presne prípad nášho Fressnapfu!

Pretože ak vyhodíme misku naplnenú jedlom, stratíme aj jedlo, ktoré obsahuje.

Skladbu označíme vyplneným symbolom diamantu.

Ako sa líši agregácia a zloženie pri implementácii?

Rozhodujúcim rozdielom medzi agregáciou a zložením je pevnosť vzťahu.

Pozrime sa na príklad.

Tu vytvoríme inštanciu psa bello, ktorú v domove sochorujeme pomocou konštruktéra triedy útulku pre zvieratá.

Čo sa stane s bello, keď odstránime inštanciu prístrešku?

Nič! Pretože inštancia bello je vo svojej vlastnej pamäťovej oblasti, ktorá je nezávislá od oblasti, v ktorej sa nachádza útulok pre zvieratá.

Inštancia prístrešia obsahuje iba odkaz na objekt bello .

Preto v tomto prípade ide o agregáciu.

Poďme sa pozrieť na zloženie.

Tu vytvoríme misku na jedlo naplnenú jedlom.

Jedlo generujeme v argumente konštruktora Fressnapf, a preto je jedlo v oblasti pamäte vyhradenej pre Fressnapf.

Čo sa teda stane s informačným kanálom, ak odstránime inštanciu misy?

Správne! S miskou tiež prichádzame o jedlo, preto v tomto prípade ide o zloženie.

Dedičnosť v schéme tried UML

Chýba ti niečo? Áno, ja tiež!

Pes je štvornohý priateľ, rovnako ako mačka alebo slon. Preto zavádzame štvornohú triedu, v ktorej implementujeme všeobecné vlastnosti štvornohého priateľa a odvodíme od nich zvieratá pes, mačka atď.

Dedičnosť sa zobrazuje v diagrame tried UML pomocou šípky.

Štvornohý priateľ je vyššia trieda psa, v ktorej implementujeme metódy a vlastnosti, ktoré majú všetci štvornohí priatelia spoločné.

Štvornohý priateľ je vyššia trieda psa, naznačíme to šípkou smerujúcou k štvornohej triede.

teória a prax

Tu popísaný postup sa nazýva model vodopádu.

Pri modeli vodopádu predpokladáme, že všetky požiadavky poznáme od začiatku, a tiež predpokladáme, že sa tieto nezmenia počas celého procesu vývoja.

Táto požiadavka bohužiaľ v praxi často nie je splnená, a preto sa používa iteračný vývoj, pri ktorom prebiehajú typické vývojové práce ako návrh, implementácia a testy paralelne.

V každom kroku iterácie sa spresňujú požiadavky, ktoré by mal softvér spĺňať.

Agilný vývoj softvéru je tu momentálne špičkovým psom.

V neposlednom rade by som vám v nasledujúcom videu chcel ukázať, ako previesť diagram triedy do zdrojového kódu.

Záver: Aj keď sa vytvorenie diagramu tried UML spočiatku javí ako zbytočné ďalšie úsilie, v skutočnosti robíte hodnotné prípravné práce, ktoré vám pri implementácii ušetria veľa opráv chýb.

Pracovali ste už s diagramom tried UML? Aké máš skúsenosti Nechajte mi komentár!

Páčil sa vám článok? Potom nás ihneď sledujte na Facebooku!

Kim Peter

Ahoj, volám sa Kim a chcem sa stať skvelým programátorom. Zúčastňujete sa?