Klassendiagramm: Unterschied zwischen den Versionen

Aus KGS-Wiki
(Seite begonnen)
 
(So kann mans wohl lassen.)
Zeile 2: Zeile 2:
@startuml
@startuml


class Dummy {
class Bar extends Foo {
  -attribut1: int
  -{static} attribut1: int
  #attribut2: String
  #attribut2: String
  ~methode1()
  ~methode1(parameter: Baz)
  +methode2()
  +methode2()
}
}
abstract class Foo {
  +{abstract} methode3()
  -attribut3: boolean
}
Bar --> Baz


@enduml
@enduml
Zeile 20: Zeile 27:
* ob Klassen und Methoden [[Abstrakte Klasse|abstrakt]] sind
* ob Klassen und Methoden [[Abstrakte Klasse|abstrakt]] sind


UML-Klassendiagramme enthalten nur die oberflächliche Information, welche Klassen, Attribute und Methoden es geben und wie sie heißen sollen, aber keinerlei ausführbare Programmlogik.
UML-Klassendiagramme enthalten nur die oberflächliche Information, welche Klassen, Attribute und Methoden es geben, wie sie heißen sollen und in welcher Beziehung die Klassen zueinander stehen, aber keinerlei ausführbare Programmlogik.


In einer idealen Welt modelliert man nach dem Projektstart und bevor man auch nur ein einziges Mal die Tastatur berührt das komplette Projekt vollständig als Klassendiagramm und hat dadurch einen vollständigen Überblick über alle zu implementierenden Methoden und alle zu erledigenden Aufgaben, die dann umso leichter zu verteilen sind. Soweit die Theorie. In der Praxis ändern sich vor, während und nach einem Projekt fortwährend die Anforderungen, sodass anfangs gezeichnete Diagramme oft wertlos sind.
In einer idealen Welt modelliert man nach dem Projektstart und bevor man auch nur ein einziges Mal die Tastatur berührt das komplette Projekt vollständig als Klassendiagramm und hat dadurch einen vollständigen Überblick über alle zu implementierenden Methoden und alle zu erledigenden Aufgaben, die dann umso leichter zu verteilen sind. Soweit die Theorie. In der Praxis ändern sich vor, während und nach einem Projekt fortwährend die Anforderungen, sodass anfangs gezeichnete Diagramme oft wertlos sind.
Zeile 33: Zeile 40:
@startuml
@startuml


class Dummy {
class Bar extends Foo {
  -attribut1: int
  -{static} attribut1: int
  #attribut2: String
  #attribut2: String
  ~methode1()
  ~methode1(parameter: Baz)
  +methode2()
  +methode2()
}
}
abstract class Foo {
  +{abstract} methode3()
  -attribut3: boolean
}
Bar --> Baz


@enduml
@enduml
</syntaxhighlight>
</syntaxhighlight>
Alle Bezeichner, hinter denen Klammern (ggf. mit Parametern) stehen, werden von PlantUML automatisch als Methoden erkannt, alle anderen als Attribute. Mit den Schlüsselwörtern <code>{static}</code> und <code>{abstract}</code> vor den Namen der Attribute und Methoden können diese als statisch bzw. abstrakt gekennzeichnet werden.


Die Zeichen <code>+</code>, <code>#</code>, <code>~</code> und <code>-</code> stehen dabei für die Sichtbarkeit der Attribute:
Die Zeichen <code>+</code>, <code>#</code>, <code>~</code> und <code>-</code> stehen dabei für die Sichtbarkeit der Attribute:
Zeile 58: Zeile 74:
|}
|}


{{Lückenhaft}}
Die Beziehungen zwischen den Klassen können mit Pfeilen dargestellt werden. Wenn eine Beziehung auf eine nicht ausführlich definierte Klasse verweist, wird eine leere Klassenbox eingefügt.
 
{| class="wikitable"
|+ Beziehungen zwischen den Klassen
|-
! Beziehung !! Darstellung
|-
| A nutzt B || <code>A --> B</code>
|-
| Vererbung || <code><nowiki>A --|> B</nowiki></code> oder <code>A extends B</code>
|-
| Aggregation || <code>A --o B</code>
|-
| Komposition || <code>A --* B</code>
|}


== Weblinks ==
== Weblinks ==

Version vom 14. September 2023, 17:31 Uhr

Ein einfaches Klassendiagramm

Ein Klassendiagramm stellt in einem objektorientierten Programm die enthaltenen Klassen und ihre Beziehungen untereinander dar. Klassendiagramme sind ein Werkzeug, um zu Beginn des Software-Entwicklungsprozesses den Aufbau des fertigen Produktes grob zu umreißen. In einem Klassendiagramm sind die Namen aller Klassen, Attribute und Methoden sowie einige weitere Informationen enthalten. Folgende Informationen kann ein Klassendiagramm enthalten:

  • Datentypen von Attributen
  • Datentyp der Rückgabewerte der Methoden
  • Namen und Datentypen der Parameter der Methoden
  • Sichtbarkeit von Attributen und Methoden
  • ob Attribute und Methoden statisch sind
  • ob Klassen und Methoden abstrakt sind

UML-Klassendiagramme enthalten nur die oberflächliche Information, welche Klassen, Attribute und Methoden es geben, wie sie heißen sollen und in welcher Beziehung die Klassen zueinander stehen, aber keinerlei ausführbare Programmlogik.

In einer idealen Welt modelliert man nach dem Projektstart und bevor man auch nur ein einziges Mal die Tastatur berührt das komplette Projekt vollständig als Klassendiagramm und hat dadurch einen vollständigen Überblick über alle zu implementierenden Methoden und alle zu erledigenden Aufgaben, die dann umso leichter zu verteilen sind. Soweit die Theorie. In der Praxis ändern sich vor, während und nach einem Projekt fortwährend die Anforderungen, sodass anfangs gezeichnete Diagramme oft wertlos sind.

Dennoch sind Klassendiagramme als Dokumentationswerkzeug wertvoll, da man sich durch diese leicht einen Überblick über die Komponenten und den Aufbau eines Softwareprodukts verschaffen kann.

Klassendiagramme mit PlantUML

Die Klassendiagramme in diesem Wiki sind mit PlantUML gezeichnet. PlantUML ist ein Werkzeug, das kompakte und gut lesbare Beschreibungen von UML-Diagrammen in Grafiken umsetzt. Das Diagramm oben auf der Seite ist mit folgendem PlantUML-Code erzegt worden:

@startuml

class Bar extends Foo {
 -{static} attribut1: int
 #attribut2: String
 ~methode1(parameter: Baz)
 +methode2()
}

abstract class Foo {
  +{abstract} methode3()
  -attribut3: boolean
}

Bar --> Baz

@enduml

Alle Bezeichner, hinter denen Klammern (ggf. mit Parametern) stehen, werden von PlantUML automatisch als Methoden erkannt, alle anderen als Attribute. Mit den Schlüsselwörtern {static} und {abstract} vor den Namen der Attribute und Methoden können diese als statisch bzw. abstrakt gekennzeichnet werden.

Die Zeichen +, #, ~ und - stehen dabei für die Sichtbarkeit der Attribute:

Sichtbarkeits-Symbole
Symbol Sichtbarkeit
+ public
~ package
# protected
- private

Die Beziehungen zwischen den Klassen können mit Pfeilen dargestellt werden. Wenn eine Beziehung auf eine nicht ausführlich definierte Klasse verweist, wird eine leere Klassenbox eingefügt.

Beziehungen zwischen den Klassen
Beziehung Darstellung
A nutzt B A --> B
Vererbung A --|> B oder A extends B
Aggregation A --o B
Komposition A --* B

Weblinks