CodeGym /Java blogg /Slumpmässig /UML klassdiagram
John Squirrels
Nivå
San Francisco

UML klassdiagram

Publicerad i gruppen

Introduktion

Jag tror att alla har hört talesättet "Mät två gånger, skär en gång". Det är sant råd i programmering. Det är alltid bättre att tänka på implementeringen innan du lägger ner tid på att genomföra den. Under implementeringen behöver du ofta skapa klasser och tänka ut hur de kommer att interagera. En visuell representation av det hela kan ofta hjälpa dig att komma fram till den mest korrekta lösningen. Det är här UML Class Diagram kommer till vår hjälp.

Vad är UML?

Om du tittar på relevanta bilder i sökmotorer ser du att UML har något att göra med diagram, pilar och rutor. Du måste veta att UML står för Unified Modeling Language. Enat är det viktiga ordet här. Det betyder att våra bilder inte bara kommer att förstås av oss, utan också av alla andra som kan UML. Det är lingua franca för att rita diagram.

Enligt Wikipedia,

"UML är ett allmänt utvecklande, modelleringsspråk inom området mjukvaruteknik som är avsett att tillhandahålla ett standardsätt att visualisera designen av ett system."
Det mest intressanta, som inte alla skulle gissa, är att UML har specifikationer. Och det finns till och med en UML 2-specifikation. Mer information om specifikationen finns på Object Management Groups webbplats. Faktum är att denna grupp utvecklar UML-specifikationerna. Det är också intressant att UML inte begränsar sig till att beskriva klassernas struktur. Det finns många typer av UML-diagram. Wikipedia har en kort beskrivning av olika typer av UML-diagram: UML-diagram . För att återgå till UML-klassdiagram, är det värt att nämna boken " Head First Design Patterns" , använder UML-diagram för att illustrera designmönster. Summan av kardemumman är att UML verkligen används. Och det visar sig att det är ganska användbart att veta det och förstå hur man använder det.

Ansökan

Låt oss ta reda på att vi kan arbeta med UML i en IDE. Vi kommer att använda IntelliJ IDEA som vår IDE. Om du använder IntelliJ IDEA Ultimate kommer vi att ha "UML Support"-plugin installerad "out of the box". Det låter dig automatiskt skapa vackra klassdiagram. Använd till exempel Ctrl+N eller menyalternativet "Navigera" -> "Klass" för att gå till klassen ArrayList. Välj nu "Diagram" -> "Visa diagram popup" i snabbmenyn för klassnamnet. Som ett resultat får vi ett vackert diagram. UML: från teori till praktik - 2 Men vad händer om du vill rita diagrammet själv? Och vad händer om du inte har Ultimate-versionen? Genom att använda IntelliJ IDEA Community Edition har vi inget annat val. Så vi måste förstå hur ett UML-diagram är organiserat. Först,. Det är en uppsättning grafvisualiseringsverktyg. Vilket plugin vi kommer att använda beror på det. Efter installationen måste du lägga till bin-katalogen från Graphviz installationskatalog till miljövariabeln PATH. Efter det, i IntelliJ IDEA, välj Arkiv -> Inställningar i menyn. I fönstret "Inställningar", välj kategorin "Plugins", klicka på knappen "Bläddra i arkiv" och installera PlantUML-integrationsplugin . Vad är så bra med PlantUML? Den beskriver UML med hjälp av ett grafbeskrivningsspråk som kallas "dot", vilket gör det mer universellt, eftersom punktspråket används av mer än bara PlantUML. Dessutom kan allt vi gör nedan göras inte bara i en IDE, utan även online på planttext.com. Efter installation av PlantUML-pluginen kommer vi att kunna skapa UML-diagram med "File" -> "New". Låt oss skapa ett "UML-klass"-diagram. Detta genererar automatiskt en mall med ett exempel. Vi tar bort innehållet och lägger till vårt eget. För att förstå hur man representerar detta i text, ta en titt på PlantUML-manualen: plantuml class-diagram. UML: från teori till praktik - 3Förlita oss på dessa material, låt oss börja skapa vårt UML-diagram. Lägg till följande innehåll, som beskriver två klasser:

@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
För att se resultatet i IDEA, välj "Visa" -> "Verktygsfönster" -> "PlantUML". Vi får bara två rutor som representerar klasser. Vi vet att båda dessa klasser implementerar List- gränssnittet. Denna klassrelation kallas förverkligande. Detta förhållande representeras med hjälp av en pil med en prickad linje. Låt oss rita det:

interface List
List <|.. ArrayList
List <|.. LinkedList
List är ett av Samlingsklassens barn. Det vill säga, den ärver Collection . Detta förhållande kallas generalisering. Det ser ut som en pil med en vanlig kontinuerlig linje. Låt oss rita det:

interface Collection
Collection <|-- List
För nästa typ av relation, lägg till i klassbeskrivningen ArrayList en post om en paketets privata array av element:

~Object[] elementData
Nu vill vi visa att ArrayList innehåller några objekt. I det här fallet kommer det att finnas ett aggregeringsförhållande. ArrayListär ett aggregat, eftersom det innehåller andra objekt. Vi säger aggregering eftersom listans objekt kan existera utan listan: de är inte integrerade delar av listan. Deras livstid är inte bunden till listans livstid. Ordet "aggregat" kommer till oss från latin och översätts som "sammansatt", det vill säga något som består av något. Till exempel i livet har vi en pumpenhet (aggregat), som består av en pump och en motor. Själva monteringen kan demonteras, och vi kan lämna några av dess komponenter ifred. Till exempel att sälja eller att sätta in i en annan montering. Det är på samma sätt i en lista. Detta uttrycks med en tom romb vid aggregatet och en kontinuerlig linje. Vi kommer att representera detta på följande sätt:

class Object{
}
ArrayList o- Object
Nu vill vi visa att till skillnad från ArrayList innehåller klassen LinkedList Node s — behållare som refererar till lagrad data. I det här fallet är noder en del av LinkedList och har inte en oberoende existens. En nod är inte själva innehållet. Den innehåller endast en referens till innehållet. Till exempel, när vi lägger till en sträng till en länkad lista lägger vi till en ny nod som innehåller en referens till strängen, samt en länk till föregående och nästa nod. Detta förhållande kallas komposition. Den avbildas genom att rita en kontinuerlig linje med en fylld romb på kompositen (något gjord av beståndsdelar). Nu ska vi representera förhållandet som text:

class Node{
}
LinkedList *-- Node
Och nu måste du lära dig att skildra en annan viktig typ av relation: beroende. Den används när en klass använder en annan, men klassen inte innehåller eller ärver den använda klassen. Till exempel vet LinkedList och ArrayList hur man skapar en ListIterator . Vi representerar detta som pilar med en prickad linje:

class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
Efter att ha gjort allt detta får vi: UML: från teori till praktik - 4Du kan lägga till så mycket detaljer som behövs. Naturligtvis finns det inget övernaturligt med att rita ett sådant diagram. När du arbetar med dina egna uppgifter kan du snabbt rita ut det för hand. Detta kommer att hjälpa dig att utveckla förmågan att tänka igenom en applikations arkitektur och identifiera brister i klassstrukturen tidigt, inte efter att du redan har ägnat dagen åt att implementera fel modell. Det verkar som en bra anledning att prova, eller hur? :)

Automatisering

Det finns olika sätt att automatiskt generera PlantUML-diagram. Till exempel har IDEA plugin-programmet SketchIT , men det ritar inte diagram helt korrekt. Låt oss säga att implementeringen av gränssnitt är felaktigt ritad (det visas som arv). Internet har exempel på hur du kan integrera detta i ditt projekts byggprocess. Du kan till exempel hitta hur du använder uml-java-docklet med Maven. För att demonstrera kommer vi att använda Maven Archetype för att snabbt skapa ett Maven-projekt. Springa

mvn archetype:generate
Som svar på Välj ett nummer eller använd filter, lämna standard - tryck bara på Retur. Det kommer alltid att vara "maven-arketyp-snabbstart". Välj den senaste versionen. Därefter ska vi svara på några frågor och avsluta projektet: UML: från teori till praktik - 5Maven är inte ämnet för den här artikeln, så du kan hitta svar på dina frågor om Maven i Maven Users Center . I det genererade projektet öppnar du projektbeskrivningsfilen, pom.xml, för redigering. Vi kopierar innehållet från installationsbeskrivningen för uml-java-dockan till den här filen. Artefakten som används i beskrivningen kan inte hittas i Maven Central-förvaret. Men följande fungerade för mig: https://mvnrepository.com/artifact/com.chfourie/uml-java-doclet/1.0.0. Med andra ord, i beskrivningen behöver du helt enkelt byta ut groupId från "info.leadinglight" till "com.chfourie" och ställa in versionen till "1.0.0". Efter det kan vi exkludera följande kommandon i katalogen med filen pom.xml:

mvn clean install
och

mvn javadoc: javadoc
Om vi ​​nu öppnar den genererade dokumentationen (explorer target\site\apidocs\index.html), kommer vi att se UML-diagrammen. Förresten, implementeringsrelationen visas nu korrekt :)

Slutsats

Som du kan se låter UML dig visualisera strukturen i din applikation. Men UML kan mycket mer. Du kan använda UML för att beskriva olika processer inom ditt företag eller för att beskriva den affärsprocess som omfattar en funktion du skriver verk. Du måste själv bestämma hur användbar UML är för dig personligen, men oavsett vad du bestämmer dig för kommer det att vara bra att hitta tid att lära dig mer om det.
Kommentarer
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION