CodeGym/Java Blog/Willekeurig/UML-klassendiagram
John Squirrels
Niveau 41
San Francisco

UML-klassendiagram

Gepubliceerd in de groep Willekeurig

Invoering

Ik denk dat iedereen het gezegde "Twee keer meten, één keer knippen" wel eens heeft gehoord. Het is echt advies bij het programmeren. Het is altijd beter om na te denken over de implementatie voordat u er tijd aan besteedt. Tijdens de implementatie moet u vaak klassen maken en bedenken hoe ze op elkaar inwerken. Een visuele weergave van dit alles kan u vaak helpen om de meest correcte oplossing te vinden. Dit is waar UML Class Diagram ons te hulp komt.

Wat is UML?

Als je relevante afbeeldingen in zoekmachines bekijkt, zie je dat UML iets te maken heeft met diagrammen, pijlen en vierkanten. U moet weten dat UML staat voor Unified Modeling Language. Unified is hier het belangrijke woord. Dit betekent dat onze afbeeldingen niet alleen door ons worden begrepen, maar ook door iedereen die UML kent. Het is de lingua franca voor het tekenen van diagrammen.

Volgens Wikipedia,

"UML is een modelleringstaal voor algemene doeleinden op het gebied van software-engineering die bedoeld is om een ​​standaardmanier te bieden om het ontwerp van een systeem te visualiseren."
Het meest interessante, wat niet iedereen zou raden, is dat UML specificaties heeft. En er is zelfs een UML 2-specificatie. Meer informatie over de specificatie is beschikbaar op de website van de Object Management Group . In feite ontwikkelt deze groep de UML-specificaties. Het is ook interessant dat UML niet beperkt is tot het beschrijven van de structuur van klassen. Er zijn veel soorten UML-diagrammen. Wikipedia heeft een korte beschrijving van verschillende soorten UML-diagrammen: UML-diagrammen . Terugkomend op UML-klassediagrammen, is het vermeldenswaard dat het boek "Head First Design Patterns" UML-diagrammen gebruikt om ontwerppatronen te illustreren. Het komt erop neer dat UML echt wordt gebruikt. En het blijkt dat het heel nuttig is om het te weten en te begrijpen hoe te gebruiken.

Sollicitatie

Laten we eens kijken of we met UML in een IDE kunnen werken. We gebruiken IntelliJ IDEA als onze IDE. Als u IntelliJ IDEA Ultimate gebruikt, hebben we de plug-in "UML-ondersteuning" kant-en-klaar geïnstalleerd. Hiermee kunt u automatisch prachtige klassendiagrammen genereren. Gebruik bijvoorbeeld Ctrl+N of het menu-item "Navigeren" -> "Klasse" om naar de klasse ArrayList te gaan. Selecteer nu in het contextmenu van de klassenaam "Diagram" -> "Show diagram popup". Als resultaat krijgen we een prachtig diagram. UML: van theorie naar praktijk - 2 Maar wat als u het diagram zelf wilt tekenen? En wat als je de Ultimate-versie niet hebt? Met IntelliJ IDEA Community Edition hebben we geen andere keuze. We moeten dus begrijpen hoe een UML-diagram is georganiseerd. Eerst,. Het is een set grafische visualisatietools. De plug-in die we zullen gebruiken, hangt ervan af. Na de installatie moet u de map bin uit de installatiemap van Graphviz toevoegen aan de omgevingsvariabele PATH. Selecteer daarna in IntelliJ IDEA Bestand -> Instellingen in het menu. Selecteer in het venster "Instellingen" de categorie "Plug-ins", klik op de knop "Bladeren door repositories" en installeer de PlantUML-integratieplug -in. Wat is er zo goed aan PlantUML? Het beschrijft UML met behulp van een grafiekbeschrijvingstaal genaamd "dot", wat het universeler maakt, aangezien de punttaal door meer dan alleen PlantUML wordt gebruikt. Bovendien kan alles wat we hieronder doen niet alleen in een IDE, maar ook online op planttext.com. Na het installeren van de PlantUML-plug-in kunnen we UML-diagrammen maken met behulp van "Bestand" -> "Nieuw". Laten we een "UML-klasse"-diagram maken. Dit genereert automatisch een sjabloon met een voorbeeld. We zullen de inhoud ervan verwijderen en de onze toevoegen. Bekijk de PlantUML-handleiding om te begrijpen hoe je dit in tekst weergeeft: plantuml class-diagram. UML: van theorie naar praktijk - 3Laten we op basis van deze materialen aan de slag gaan met het maken van ons UML-diagram. Voeg de volgende inhoud toe, die twee klassen beschrijft:
@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
Om het resultaat in IDEA te zien, selecteert u "View" -> "Tool Windows" -> "PlantUML". We krijgen gewoon twee vierkanten die klassen vertegenwoordigen. We weten dat beide klassen de List- interface implementeren. Deze klassenrelatie wordt verwezenlijking genoemd. Deze relatie wordt weergegeven met een pijl met een stippellijn. Laten we het tekenen:
interface List
List <|.. ArrayList
List <|.. LinkedList
List is een van de kinderen van de Collection- klasse. Dat wil zeggen, het erft Collection . Deze relatie wordt generalisatie genoemd. Het ziet eruit als een pijl met een gewone ononderbroken lijn. Laten we het tekenen:
interface Collection
Collection <|-- List
Voor het volgende type relatie voegt u aan de ArrayList- klassebeschrijving een vermelding toe over een privé-array van elementen in een pakket :
~Object[] elementData
Nu willen we laten zien dat ArrayList enkele objecten bevat. In dit geval is er sprake van een aggregatierelatie. ArrayLijstis een aggregaat, omdat het andere objecten bevat. We zeggen aggregatie omdat de objecten van de lijst kunnen bestaan ​​zonder de lijst: ze maken geen integraal deel uit van de lijst. Hun levensduur is niet gebonden aan de levensduur van de lijst. Het woord "aggregaat" komt uit het Latijn en vertaalt zich als "geassembleerd", dat wil zeggen, iets dat uit iets bestaat. In het leven hebben we bijvoorbeeld een pompeenheid (aggregaat), die bestaat uit een pomp en een motor. De assemblage zelf kan worden gedemonteerd en we kunnen sommige componenten met rust laten. Bijvoorbeeld om te verkopen of om in een andere montage te stoppen. Het is op dezelfde manier in een lijst. Dit wordt uitgedrukt met een lege ruit bij het aggregaat en een ononderbroken lijn. We stellen dit als volgt voor:
class Object{
}
ArrayList o- Object
Nu willen we laten zien dat, in tegenstelling tot ArrayList , de klasse LinkedList Node s bevat — containers die verwijzen naar de opgeslagen gegevens. In dit geval maken Node s deel uit van LinkedList en hebben ze geen onafhankelijk bestaan. Een Node is niet de inhoud zelf. Het bevat alleen een verwijzing naar de inhoud. Als we bijvoorbeeld een string toevoegen aan een LinkedList , voegen we een nieuwe Node toe die een verwijzing naar de string bevat, evenals een link naar de vorige en volgende Node. Deze relatie wordt samenstelling genoemd. Het wordt weergegeven door een ononderbroken lijn te tekenen met een gevulde ruit op de composiet (iets gemaakt van samenstellende delen). Nu geven we de relatie weer als tekst:
class Node{
}
LinkedList *-- Node
En nu moet je leren hoe je een ander belangrijk type relatie kunt weergeven: afhankelijkheid. Het wordt gebruikt wanneer de ene klasse de andere gebruikt, maar de klasse de gebruikte klasse niet bevat of overerft. LinkedList en ArrayList weten bijvoorbeeld hoe ze een ListIterator moeten maken . We geven dit weer als pijlen met een stippellijn:
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
Nadat we dit allemaal hebben gedaan, krijgen we: UML: van theorie naar praktijk - 4U kunt zoveel details toevoegen als nodig is. Er is natuurlijk niets bovennatuurlijks aan het tekenen van zo'n diagram. Wanneer u aan uw eigen taken werkt, kunt u deze snel met de hand tekenen. Dit zal je helpen het vermogen te ontwikkelen om de architectuur van een applicatie te doordenken en tekortkomingen in de klassenstructuur in een vroeg stadium te identificeren, niet nadat je al een dag bezig bent geweest met het implementeren van het verkeerde model. Dat lijkt me een goede reden om het te proberen, toch? :)

Automatisering

Er zijn verschillende manieren om automatisch PlantUML-diagrammen te genereren. IDEA heeft bijvoorbeeld de SketchIT- plug-in, maar tekent diagrammen niet helemaal correct. Laten we zeggen dat de implementatie van interfaces verkeerd is getekend (het wordt weergegeven als overerving). Het internet heeft voorbeelden van hoe u dit kunt integreren in het bouwproces van uw project. U kunt bijvoorbeeld vinden hoe u uml-java-docklet gebruikt met Maven. Ter demonstratie gebruiken we Maven Archetype om snel een Maven-project te maken. Loop
mvn archetype:generate
Als reactie op Kies een nummer of pas een filter toe, laat u de standaardwaarde staan ​​- druk gewoon op Enter. Het zal altijd "maven-archetype-quickstart" zijn. Selecteer de nieuwste versie. Vervolgens beantwoorden we enkele vragen en maken we het project af: UML: van theorie naar praktijk - 5Maven is niet het onderwerp van dit artikel, dus u kunt antwoorden op uw vragen over Maven vinden in het Maven Users Center . Open in het gegenereerde project het projectbeschrijvingsbestand, pom.xml, om het te bewerken. We kopiëren de inhoud van de uml-java-docklet-installatiebeschrijving naar dit bestand. Het artefact dat in de beschrijving wordt gebruikt, is niet gevonden in de Maven Central-repository. Maar het volgende werkte voor mij: https://mvnrepository.com/artifact/com.chfourie/uml-java-doclet/1.0.0. Met andere woorden, in de beschrijving hoef je alleen maar de groupId te vervangen van "info.leadinglight" naar "com.chfourie" en de versie in te stellen op "1.0.0". Daarna kunnen we de volgende commando's uitvoeren in de directory met het bestand pom.xml:
mvn clean install
En
mvn javadoc: javadoc
Als we nu de gegenereerde documentatie openen (explorer target\site\apidocs\index.html), zien we de UML-diagrammen. Overigens wordt de implementatierelatie nu correct weergegeven :)

Conclusie

Zoals u kunt zien, kunt u met UML de structuur van uw applicatie visualiseren. Maar UML kan veel meer. U kunt UML gebruiken om verschillende processen binnen uw bedrijf te beschrijven of om het bedrijfsproces te beschrijven dat een functie omvat die u aan het schrijven bent. U moet zelf beslissen hoe nuttig UML voor u persoonlijk is, maar wat u ook beslist, het zal nuttig zijn om de tijd te vinden om er meer over te leren.
Opmerkingen
  • Populair
  • Nieuw
  • Oud
Je moet ingelogd zijn om opmerkingen te kunnen maken
Deze pagina heeft nog geen opmerkingen