UML diagram

?
 
Klasser Medlem Relationer Eksport
Navn Type Række Kolonne  



Type Navn Variable Modifier Statisk
Super Sub Type  

Hjælp og detaljer

Dette program kan benyttes til at generere et UML diagram i SVG format.

Konstruktionen af diagrammet følger i 3 trin:

  1. Først tilvælges den benyttede klasse, herunder om det er en abstrakt klasse eller et interface
  2. For hver klasse kan man tilknytte op til 6 metoder og felter
  3. Til sidst vælges relation mellem klasser, herunder om der er tale om nedarvning, komposition, accociation eller realisation

Man kan til enhver tid springe tilbage og rette, for eksempel omdøbe en klasse eller en metode eller flytte placeringen af en klasse.

I det trin, hvor man kan tilføje, redigere og fjerne en klasse, er der i baggrunden indikeret et grid til placering af klassen.

Der gælder at

  • Man kan ikke fjerne klassse, dersom den ingår i en relation. I så fald må man først fjerne relationen.
  • Man vil kun få optegnet nedarvning, dersom sub klasserne er placeret under super klassen i diagrammet

Ved eksport beskræres SVG filen, så ubenyttede plads til højre og i bunden på diagrammet fjernes. Samtidig konverteres diagrammet farvemæssigt efter valgt farve (grøn, orange eller blå).

Design patterns

Det primært formål med dette program, var at kunne optegne simple UML diagrammer, specielt for de kendte Design Patterns. Nedenfor gives en oversigt over de vigtigste og et eksempel på implementering i Java. De benyttede farver viser hvilken type design pattern, der er tale om:

Grøn er behavior pattern
Orange er structural pattern
Blå er creational pattern
Design pattern:

Eksempel på Java implementering:

/** * The State interface describe the Subject state, * which is pushed to the Observer objects. * It can be implemented as a Java been with setters and * getters for appropiate state properties. * In this example there are two state properties: * A state describing current blood sugar level and * a state describing current beta-ketone level. */ public interface State { public double getBloodSugarLevel(); public double getBetaKetoneLevel(); }

public interface Subject { public void attachObserver(Observer o); public void detachObserver(Observer o); public void notifyObservers(); }

public interface Observer { public void update(State state); }

import java.util.ArrayList; import java.util.List; public class SubjectImpl implements Subject, State { private List<Observer> observerList; private double bloodSugarLevel = 0.0; private double betaKetoneLevel = 0.0; public SubjectImpl() { observerList = new ArrayList<Observer>(); } @Override public void attachObserver(Observer observer) { observerList.add(observer); } @Override public void detachObserver(Observer observer) { observerList.remove(observer); } @Override public void notifyObservers() { for(Observer observer: observerList) { observer.update(this); } } @Override double getBloodSugarLevel() { return bloodSugarLevel; } @Override double getBetaKetoneLevel(); return betaKetoneLevel; } public void setBloodSugarLevel()(double bloodSugarLevel) { this.bloodSugarLevel = bloodSugarLevel; } public void setBetaKetoneLevel()(double betaKetoneLevel) { this.betaKetoneLevel = betaKetoneLevel; } }

public class ObserverImpl implements Observer { public ObserverImpl() { } @Override public void update(State state) { // read relevant state properties from State object double bloodSugarLevel = state.getBloodSugarLevel(); double betaKetoneLevel = state.getBetaKetoneLevel(); System.out.println("Current blood sugar level is " + bloodSugarLevel + " mmol/L"); System.out.println("Current beta-ketone level is " + betaKetoneLevel + " mmol/L"); if(bloodSugarLevel < 10 && betaKetoneLevel > 1) { System.out.println("In ketosis :-)"); } } }

public class Example { public static void main(String[] args) { SubjectImpl subjectImpl = new SubjectImpl(); Observer observer = new ObserverImpl(); subjectImpl.attachObserver(observer); subjectImpl.setBloodSugarLevel(4.8); subjectImpl.setBetaKetoneLevel(3.0); subjectImpl.notifyObservers(); } }

Hvis man kompilerer og efterfølgende eksekverer programmet Example vil man få følgende udskrift.

prompt>java Example
Current blood sugar level is 4.8 mmol/L
Current beta-ketone level is 3.0 mmol/L
In ketosis :-)

Brugen af et State objekt er ikke en del af standard observer pattern, men er her medtaget, da man altid implicit vil have brug for at Observer objektet kan få fat i tilstanden for den konkrete instans Subjekt.