CodeGym /Java-blogg /Tilfeldig /UML klassediagram
John Squirrels
Nivå
San Francisco

UML klassediagram

Publisert i gruppen

Introduksjon

Jeg tror alle har hørt ordtaket "Mål to ganger, klipp en gang". Det er sant råd innen programmering. Det er alltid bedre å tenke på implementeringen før du bruker tid på å gjennomføre den. Under implementeringen må du ofte lage klasser og tenke ut hvordan de vil samhandle. En visuell representasjon av det hele kan ofte hjelpe deg med å finne den mest korrekte løsningen. Det er her UML Class Diagram kommer oss til hjelp.

Hva er UML?

Hvis du ser på relevante bilder i søkemotorer, vil du se at UML har noe med diagrammer, piler og firkanter å gjøre. Du må vite at UML står for Unified Modeling Language. Unified er det viktige ordet her. Dette betyr at bildene våre ikke bare vil bli forstått av oss, men også av alle andre som kan UML. Det er lingua franca for å tegne diagrammer.

I følge Wikipedia,

"UML er et generellt, utviklingsmessig modelleringsspråk innen programvareteknikk som er ment å gi en standard måte å visualisere utformingen av et system på."
Det mest interessante, som ikke alle ville gjette, er at UML har spesifikasjoner. Og det er til og med en UML 2-spesifikasjon. Mer informasjon om spesifikasjonen er tilgjengelig på nettstedet til Object Management Group . Faktisk utvikler denne gruppen UML-spesifikasjonene. Det er også interessant at UML ikke er begrenset til å beskrive strukturen til klasser. Det finnes mange typer UML-diagrammer. Wikipedia har en kort beskrivelse av ulike typer UML-diagrammer: UML-diagrammer . For å gå tilbake til UML-klassediagrammer, er det verdt å nevne boken "Head First Design Patterns" , bruker UML-diagrammer for å illustrere designmønstre. Poenget er at UML virkelig brukes. Og det viser seg at det er ganske nyttig å vite det og forstå hvordan man bruker det.

applikasjon

La oss finne ut at vi kan jobbe med UML i en IDE. Vi vil bruke IntelliJ IDEA som vår IDE. Hvis du bruker IntelliJ IDEA Ultimate, vil vi ha "UML Support"-plugin installert "ut av esken". Den lar deg automatisk generere vakre klassediagrammer. Bruk for eksempel Ctrl+N eller menyelementet "Naviger" -> "Klasse" for å gå til ArrayList-klassen. Nå i kontekstmenyen til klassenavnet, velg "Diagram" -> "Vis diagram popup". Som et resultat får vi et vakkert diagram. UML: fra teori til praksis - 2 Men hva om du vil tegne diagrammet selv? Og hva om du ikke har Ultimate-versjonen? Ved å bruke IntelliJ IDEA Community Edition har vi ikke noe annet valg. Så vi må forstå hvordan et UML-diagram er organisert. Først,. Det er et sett med grafvisualiseringsverktøy. Programtillegget vi skal bruke avhenger av det. Etter installasjonen må du legge til bin-katalogen fra Graphviz-installasjonskatalogen til PATH-miljøvariabelen. Etter det, i IntelliJ IDEA, velg Fil -> Innstillinger i menyen. I vinduet "Innstillinger", velg kategorien "Plugins", klikk på "Bla gjennom repositories"-knappen og installer PlantUML- integrasjonsplugin . Hva er så bra med PlantUML? Den beskriver UML ved å bruke et grafbeskrivelsesspråk kalt "dot", noe som gjør det mer universelt, siden punktspråket brukes av mer enn bare PlantUML. Dessuten kan alt vi gjør nedenfor gjøres ikke bare i en IDE, men også online på planttext.com. Etter å ha installert PlantUML-pluginen, vil vi kunne lage UML-diagrammer ved å bruke "Fil" -> "Ny". La oss lage et "UML-klasse"-diagram. Dette vil automatisk generere en mal med et eksempel. Vi sletter innholdet og legger til vårt eget. For å forstå hvordan du representerer dette i tekst, ta en titt på PlantUML-manualen: plantuml klasse-diagram. UML: fra teori til praksis - 3La oss stole på disse materialene, og la oss begynne å lage UML-diagrammet vårt. Legg til følgende innhold, som beskriver to klasser:

@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
For å se resultatet i IDEA, velg "Vis" -> "Verktøyvinduer" -> "PlantUML". Vi får bare to ruter som representerer klasser. Vi vet at begge disse klassene implementerer List- grensesnittet. Dette klasseforholdet kalles realisering. Dette forholdet er representert ved hjelp av en pil med en stiplet linje. La oss tegne det:

interface List
List <|.. ArrayList
List <|.. LinkedList
List er et av Samlingsklassens barn. Det vil si at den arver Collection . Dette forholdet kalles generalisering. Det ser ut som en pil med en vanlig sammenhengende linje. La oss tegne det:

interface Collection
Collection <|-- List
For neste type relasjon, legg til ArrayList- klassebeskrivelsen en oppføring om en privat pakke med elementer:

~Object[] elementData
Nå ønsker vi å vise at ArrayList inneholder noen objekter. I dette tilfellet vil det være et aggregeringsforhold. ArrayLister et aggregat, siden det inneholder andre objekter. Vi sier aggregering fordi listens objekter kan eksistere uten listen: de er ikke integrerte deler av listen. Levetiden deres er ikke knyttet til listens levetid. Ordet "aggregat" kommer til oss fra latin og oversettes som "samlet", det vil si noe som består av noe. For eksempel, i livet, har vi en pumpeenhet (aggregat), som består av en pumpe og en motor. Selve monteringen kan demonteres, og vi kan la noen av komponentene være i fred. For eksempel å selge eller sette inn i en annen forsamling. Det er på samme måte i en liste. Dette uttrykkes med en tom rombe ved aggregatet og en sammenhengende linje. Vi vil representere dette som følger:

class Object{
}
ArrayList o- Object
Nå ønsker vi å vise at i motsetning til ArrayList , inneholder LinkedList- klassen Node s — beholdere som refererer til de lagrede dataene. I dette tilfellet er Node -er en del av LinkedList og har ikke en uavhengig eksistens. En node er ikke selve innholdet. Den inneholder kun en henvisning til innholdet. For eksempel, når vi legger til en streng i en LinkedList , legger vi til en ny node som inneholder en referanse til strengen, samt en lenke til forrige og neste node. Dette forholdet kalles komposisjon. Det er avbildet ved å tegne en sammenhengende linje med en fylt rombe på kompositten (noe laget av bestanddeler). Nå skal vi representere forholdet som tekst:

class Node{
}
LinkedList *-- Node
Og nå må du lære å skildre en annen viktig type forhold: avhengighet. Den brukes når en klasse bruker en annen, men klassen ikke inneholder eller arver den brukte klassen. For eksempel vet LinkedList og ArrayList hvordan man lager en ListIterator . Vi representerer dette som piler med en stiplet linje:

class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
Etter å ha gjort alt dette får vi: UML: fra teori til praksis - 4Du kan legge til så mange detaljer som nødvendig. Selvfølgelig er det ikke noe overnaturlig ved å tegne et slikt diagram. Når du jobber med dine egne oppgaver, kan du raskt tegne det ut for hånd. Dette vil hjelpe deg å utvikle evnen til å tenke gjennom en applikasjons arkitektur og identifisere mangler i klassestrukturen tidlig, ikke etter at du allerede har brukt dagen på å implementere feil modell. Det virker som en god grunn til å prøve det, ikke sant? :)

Automasjon

Det er forskjellige måter å generere PlantUML-diagrammer på automatisk. IDEA har for eksempel SketchIT- plugin, men den tegner ikke diagrammer helt riktig. La oss si at implementeringen av grensesnitt er tegnet feil (det vises som arv). Internett har eksempler på hvordan du kan integrere dette i prosjektets byggeprosess. For eksempel kan du finne hvordan du bruker uml-java-docklet med Maven. For å demonstrere bruker vi Maven Archetype for raskt å lage et Maven-prosjekt. Løpe

mvn archetype:generate
Som svar på Velg et tall eller bruk filter, la standarden være - bare trykk Enter. Det vil alltid være «maven-archetype-quickstart». Velg den nyeste versjonen. Deretter svarer vi på noen spørsmål og fullfører opprettelsen av prosjektet: UML: fra teori til praksis - 5Maven er ikke emnet for denne artikkelen, så du kan finne svar på spørsmålene dine om Maven i Maven Users Center . I det genererte prosjektet åpner du prosjektbeskrivelsesfilen, pom.xml, for redigering. Vi kopierer innholdet fra uml-java-docklet-installasjonsbeskrivelsen til denne filen. Artefakten som er brukt i beskrivelsen, finnes ikke i Maven Central-depotet. Men følgende fungerte for meg: https://mvnrepository.com/artifact/com.chfourie/uml-java-doclet/1.0.0. Med andre ord, i beskrivelsen trenger du ganske enkelt å erstatte groupId fra "info.leadinglight" til "com.chfourie" og sette versjonen til "1.0.0". Etter det kan vi ekskludere følgende kommandoer i katalogen med pom.xml-filen:

mvn clean install
og

mvn javadoc: javadoc
Hvis vi nå åpner den genererte dokumentasjonen (explorer target\site\apidocs\index.html), vil vi se UML-diagrammene. Forresten, implementeringsforholdet vises nå riktig :)

Konklusjon

Som du kan se, lar UML deg visualisere strukturen til applikasjonen din. Men UML kan mye mer. Du kan bruke UML til å beskrive ulike prosesser i din bedrift eller for å beskrive forretningsprosessen som omfatter en funksjon du skriver verk. Du må selv bestemme hvor nyttig UML er for deg personlig, men uansett hva du bestemmer deg for, vil det være nyttig å finne tid til å lære mer om det.
Kommentarer
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION