<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://ccwiki.digitalcampusvorarlberg.at/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Julian+Walter</id>
	<title>CCWiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://ccwiki.digitalcampusvorarlberg.at/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Julian+Walter"/>
	<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php/Spezial:Beitr%C3%A4ge/Julian_Walter"/>
	<updated>2026-04-14T11:36:14Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=1419</id>
		<title>UML Klassendiagramm</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=1419"/>
		<updated>2021-02-08T19:43:41Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Was ist ein Klassendiagramm? ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm bildet ein Kernstück der &#039;&#039;&#039;U&#039;&#039;&#039;nified &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;L&#039;&#039;&#039;anguage (&#039;&#039;&#039;UML&#039;&#039;&#039;). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsgebiete von Klassendiagramme ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm wird verwendet, um die Programme einfacher und übersichtlicher darzustellen und diese dann anschließend umzusetzen.&lt;br /&gt;
&lt;br /&gt;
== Bausteine eines Klassendiagramms ==&lt;br /&gt;
&lt;br /&gt;
Klassenmodelle unterteilen sich in folgende Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Klassen&lt;br /&gt;
* Schnittstellen&lt;br /&gt;
* Generalisierung&lt;br /&gt;
* Assoziation&lt;br /&gt;
** Komposition&lt;br /&gt;
** Aggregation&lt;br /&gt;
[[Datei:Screenshot 2021-01-08 132401.jpg|mini|UML Klasse aus DIA]]&lt;br /&gt;
==== Klassen ====&lt;br /&gt;
&lt;br /&gt;
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie &amp;quot;{abstrakt}&amp;quot; über dem Namen der Klasse tragen. &lt;br /&gt;
Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039; oder auch &#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
Bei einer &#039;&#039;&#039;public&#039;&#039;&#039; oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.&lt;br /&gt;
* &#039;&#039;&#039;protected&#039;&#039;&#039; oder auch &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;protected&#039;&#039;&#039; Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.&lt;br /&gt;
* &#039;&#039;&#039;private&#039;&#039;&#039; oder auch &#039;&#039;&#039;−&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;private&#039;&#039;&#039; Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden. &lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; oder auch &#039;&#039;&#039;~&#039;&#039;&#039;&lt;br /&gt;
Bei einer Klasse mit einer &#039;&#039;&#039;package&#039;&#039;&#039; Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier wird im Folgenden Klassen anhand von Beispielen gezeigt:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;public&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:2021-01-29 Klasse_public.jpg|links|mini|Public Attribute]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese oben dargestellte Methode verfügt über zwei public Variablen und einer public Methode, wobei der Fokus auf den Variablen liegt. Der Code sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
public class Klasse{&lt;br /&gt;
&lt;br /&gt;
  public int a;&lt;br /&gt;
  public int b;&lt;br /&gt;
&lt;br /&gt;
  public int count(){&lt;br /&gt;
    return this.a + this.b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse public2.jpg|links|mini|Public Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt eine Klasse mit keinen Variablen aber mit einer public Methode. Der Code dieses Bildes wurde folgendermaßen umgesetzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
public class Klasse{&lt;br /&gt;
&lt;br /&gt;
  public int count(int a, int b){&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.count(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;protected&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
[[Datei:2021-01-29 Klasse protected.jpg|mini|links|protected Variablen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt zwei protected Variablen und eine protected Methode. Die Umsetzung des Codes sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
protected class Klasse{&lt;br /&gt;
&lt;br /&gt;
  protected int a;&lt;br /&gt;
  protected int b;&lt;br /&gt;
&lt;br /&gt;
  protected int divide(){&lt;br /&gt;
    return this.a / this.b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse protected2.jpg|mini|links|protected Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt eine protected Methode ohne Klassenvariablen. Die Klasse wurde in folgenden Code umgesetzt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
protected class Klasse{&lt;br /&gt;
&lt;br /&gt;
  protected int divide(int a, int b){&lt;br /&gt;
    return a / b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.divide(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;private&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
[[Datei:2021-01-29 Klasse private.jpg|mini|links|private Variablen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die oben dargestellte UML-Klasse zeigt zwei private Variablen und eine private Methode an. Der Code dieser Klasse sieht wie folgt aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
private class Klasse{&lt;br /&gt;
&lt;br /&gt;
  private int a;&lt;br /&gt;
  private int b;&lt;br /&gt;
&lt;br /&gt;
  private int minus(){&lt;br /&gt;
    return this.b - this.a;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse private2.jpg|mini|links|private Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die im oberen Bild dargestellen Klasse wurde in folgenden Code umgewandelt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
private class Klasse{&lt;br /&gt;
&lt;br /&gt;
  private int count(int a, int b){&lt;br /&gt;
    return b - a;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.count(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:UmlCd Interface-1.svg.png|mini|UML Schnittstelle|100px]]&lt;br /&gt;
&lt;br /&gt;
==== Schnittstellen ====&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Schnittstelle&#039;&#039;&#039; wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort &amp;quot;interface&amp;quot; gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
Hier wird an aus einem UML-Diagramm ein Programm erstellt:&lt;br /&gt;
[[Datei:2021-01-29 Schnittstelle.jpg|mini|links|Interface und Implementierung]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In dem oberen Bild sieht man ein Interface mit mehreren Methoden. Diese Methoden werden von einer Klasse namens &#039;&#039;Rectangle&#039;&#039; implementiert. Die Programmierung zu diesen zwei Elementen sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Moveable.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
interface Moveable {&lt;br /&gt;
&lt;br /&gt;
  int left(int x);&lt;br /&gt;
  int right(int x);&lt;br /&gt;
  int up(int y);&lt;br /&gt;
  int down(int y);&lt;br /&gt;
  int forwards(int z);&lt;br /&gt;
  int backwards(int z);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rectangle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
public class Rectangle implements Moveable{&lt;br /&gt;
&lt;br /&gt;
    int positionx;&lt;br /&gt;
    int positiony;&lt;br /&gt;
    int positionz;&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int left(int x) {&lt;br /&gt;
        return positionx - x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int right(int x) {&lt;br /&gt;
        return positionx + x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int up(int y) {&lt;br /&gt;
        return positiony + y;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int down(int y) {&lt;br /&gt;
        return positiony - y;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int forwards(int z) {&lt;br /&gt;
        return positionz + z;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int backwards(int z) {&lt;br /&gt;
        return positionz - z;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:Generalization (UML class diagram).png|mini|100px|Generalisierung]]&lt;br /&gt;
==== Generalisierung ====&lt;br /&gt;
&lt;br /&gt;
Durch eine &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; &amp;quot;erben&amp;quot; speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse &amp;quot;vererbt&amp;quot;. Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wird ein Beispiel zum besseren Verständnis von Generalisierungen gezeigt:&lt;br /&gt;
[[Datei:2021-01-29 Generalisierung.jpg|mini|links|Generalisierung]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In dem oberen dargestellten Bild sieht man eine Generalisierung zwischen einer abstrakten und einer normalen Klassen. Die Umsetzung in JAVA würde wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Animal.java&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.awi3.swp3.animals;&lt;br /&gt;
&lt;br /&gt;
public abstract class Animal {&lt;br /&gt;
	private String habitat;&lt;br /&gt;
	&lt;br /&gt;
	public Animal(String habitat) {&lt;br /&gt;
		this.habitat = habitat;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public abstract void move();&lt;br /&gt;
	&lt;br /&gt;
	public String getHabitat() {&lt;br /&gt;
		return habitat;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fuchs.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.awi3.swp3.animals;&lt;br /&gt;
&lt;br /&gt;
public class Fuchs extends Animal {&lt;br /&gt;
&lt;br /&gt;
	public Fuchs() {&lt;br /&gt;
		super(&amp;quot;Woods/Forest&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	@Override&lt;br /&gt;
	public void move() {&lt;br /&gt;
		System.out.println(&amp;quot;Running round his &amp;quot; + getHabitat());&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Assoziation ====&lt;br /&gt;
&lt;br /&gt;
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;n-äre Assoziation&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
In folgenden Bild sieht man eine Binäre Assoziation. (Binär, weil zwei Klassen miteinander verbunden wurden)&lt;br /&gt;
[[Datei:1920px-UmlCd Assoziation-1.png|mini|links|Binäre Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;reflexive Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Im hier dargestellten Bild sieht man eine reflexive Assoziation, welche auf sich selbst verweist.&lt;br /&gt;
[[Datei:UmlCd Assoziation-2.png|mini|links|Reflexive Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da Assoziationen durch Linien dargestellt werden, müssen diese durch ein Assoziationsende gekennzeichnet werden. Diese Assoziationsenden können folgende Merkmale aufweisen:&lt;br /&gt;
* Sie können eine Multiplizität besitzen. Diese gibt Informationen über das Beziehungsverhältnis zweier Klassen. Diese Zahlen befinden sich &#039;&#039;&#039;nur&#039;&#039;&#039; im &#039;&#039;positiven&#039;&#039; und &#039;&#039;ganzzahligen&#039;&#039; Bereich, wobei der Beginn bei der Zahl 0 liegt.&lt;br /&gt;
** Multiplizitäten werden im folgenden Format angegeben:&lt;br /&gt;
 untereSchranke..obereSchranke&lt;br /&gt;
** Bei * oder auch 0..* wird die untereSchranke als 0 und die obereSchranke als unendlich angenommen.&lt;br /&gt;
** Beide Schranken dürfen nicht 0 oder unbeschränkt sein. Falls beide Grenzen trotzdem gleich groß sind, wird nur die obereSchranke angegeben. &lt;br /&gt;
** Bei einer Multiplizität von 0..1 wird das Element als &#039;&#039;optional&#039;&#039; bezeichnet.&lt;br /&gt;
** Wenn die obereSchranke über dem Wert 1 liegt, wird das Element als mehrwertiges Element bezeichnet, da mehrere Wert annehmbar sind.&lt;br /&gt;
* Sie können Namen besitzen.&lt;br /&gt;
* Sie können eine Sichtbarkeit aufweisen.&lt;br /&gt;
* Es kann spezifiziert werden, ob das Assoziationsende &amp;quot;ordered&amp;quot; und / oder unique ist. &lt;br /&gt;
&lt;br /&gt;
Zudem Assoziationsende kommen oft Multiplizitäten hinzu, welche die Beziehung zwischen den zwei Instanzen regelt. Im folgenden werden auf zwei Arten der Assoziationen genauer eingegangen.&lt;br /&gt;
&lt;br /&gt;
==== Komposition und Aggregation ====&lt;br /&gt;
&lt;br /&gt;
Um Beziehungen mit &#039;&#039;Ganzen&#039;&#039; und &#039;&#039;Teilen&#039;&#039; darzustellen werden die Aggregation und die Komposition verwendet.&lt;br /&gt;
[[Datei:Komposition Aggregation.png|mini|links|Komposition und Aggregation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Komposition ist eine Linie mit einer ausgefüllten Raute, welche mit der Kardinalität 1 beschriftet wird und mit dem Ganzen Teil der Beziehungspartner verbunden ist. Bei einer Komposition können die &#039;&#039;Teile&#039;&#039; nicht ohne das &#039;&#039;Ganze&#039;&#039; existieren. Das bedeutet, dass das &#039;&#039;Teil&#039;&#039; Element existenziell abhängig von &#039;&#039;Ganz&#039;&#039; Element ist.&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Aggregation ist eine Linie mit einer nicht ausgefüllten Raute, welche die Kardinalität 0..* besitzt und mit dem &#039;&#039;Ganzen&#039;&#039; Teil verbunden ist. Die Elemente in einer Aggregation besitzen keine Exisitenzabhängigkeit, da die &#039;&#039;Teil&#039;&#039; Elemente auch ohne die &#039;&#039;Ganz&#039;&#039; Elemente bestehen können. &lt;br /&gt;
&lt;br /&gt;
Die Assoziationsarten werden prinzipiell mittels der Kardinalität unterschieden. Zudem sind die &#039;&#039;Teil&#039;&#039; Elemente Bestandteil genau eines &#039;&#039;Ganz&#039;&#039; Elementes, da sie NIE zu mehrere &#039;&#039;Ganz&#039;&#039; Elementen gehören.&lt;br /&gt;
&lt;br /&gt;
== Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber == &lt;br /&gt;
&lt;br /&gt;
Diese Umsetzung erfolgte mit der Programmiersprache JAVA.&lt;br /&gt;
[[Datei:Screenshot 2021-01-22 143552.jpg|mini|600px|none|Fahrzeuge in einem UML Klassendiagramm]]&lt;br /&gt;
&#039;&#039;&#039;Vehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle;&lt;br /&gt;
&lt;br /&gt;
public abstract class Vehicle {&lt;br /&gt;
    private int maxSpeed;&lt;br /&gt;
    private int wheels;&lt;br /&gt;
&lt;br /&gt;
    public Vehicle(int maxSpeed, int wheels) {&lt;br /&gt;
        this.maxSpeed = maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void move() {&lt;br /&gt;
        System.out.println(&amp;quot;I am moving at &amp;quot; + maxSpeed + &amp;quot; with &amp;quot; + wheels + &amp;quot; wheels.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public int getMaxSpeed() {&lt;br /&gt;
        return maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public abstract void start();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
public class Bike extends Vehicle {&lt;br /&gt;
    public Bike(int maxSpeed, int wheels) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start to step into the pedals!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rollerblades.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Rollerblades extends Vehicle {&lt;br /&gt;
    public Rollerblades(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 8);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start skate!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Skateboard.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Skateboard extends Vehicle {&lt;br /&gt;
    public Skateboard(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 4);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I step with one feet on the ground to start!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MotorizedVehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public abstract class MotorizedVehicle extends Vehicle {&lt;br /&gt;
    private float kw;&lt;br /&gt;
&lt;br /&gt;
    public MotorizedVehicle(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
        this.kw = kw;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I am starting my engine with &amp;quot; + kw + &amp;quot; kw.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EBike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class EBike extends MotorizedVehicle {&lt;br /&gt;
    public EBike(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 2, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Lkw extends MotorizedVehicle {&lt;br /&gt;
    public Lkw(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Pkw extends MotorizedVehicle {&lt;br /&gt;
    public Pkw(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 4, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language&lt;br /&gt;
&lt;br /&gt;
https://www.sparxsystems.de/ressourcen/literatur/leseprobe-zu-projektabwicklung-mit-uml-und-enterprise-architect/klassendiagramm-class-diagram/&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Assoziation_(UML)&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Multiplizit%C3%A4t_(UML)&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=1418</id>
		<title>UML Klassendiagramm</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=1418"/>
		<updated>2021-02-08T19:42:34Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: /* Bausteine eines Klassendiagramms */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Was ist ein Klassendiagramm? ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm bildet ein Kernstück der &#039;&#039;&#039;U&#039;&#039;&#039;nified &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;L&#039;&#039;&#039;anguage (&#039;&#039;&#039;UML&#039;&#039;&#039;). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsgebiete von Klassendiagramme ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm wird verwendet, um die Programme einfacher und übersichtlicher darzustellen und diese dann anschließend umzusetzen.&lt;br /&gt;
&lt;br /&gt;
== Bausteine eines Klassendiagramms ==&lt;br /&gt;
&lt;br /&gt;
Klassenmodelle unterteilen sich in folgende Komponenten:&lt;br /&gt;
&lt;br /&gt;
* &lt;br /&gt;
#WEITERLEITUNG [[Klassen]]&lt;br /&gt;
* Schnittstellen&lt;br /&gt;
* Generalisierung&lt;br /&gt;
* Assoziation&lt;br /&gt;
** Komposition&lt;br /&gt;
** Aggregation&lt;br /&gt;
[[Datei:Screenshot 2021-01-08 132401.jpg|mini|UML Klasse aus DIA]]&lt;br /&gt;
==== Klassen ====&lt;br /&gt;
&lt;br /&gt;
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie &amp;quot;{abstrakt}&amp;quot; über dem Namen der Klasse tragen. &lt;br /&gt;
Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039; oder auch &#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
Bei einer &#039;&#039;&#039;public&#039;&#039;&#039; oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.&lt;br /&gt;
* &#039;&#039;&#039;protected&#039;&#039;&#039; oder auch &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;protected&#039;&#039;&#039; Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.&lt;br /&gt;
* &#039;&#039;&#039;private&#039;&#039;&#039; oder auch &#039;&#039;&#039;−&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;private&#039;&#039;&#039; Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden. &lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; oder auch &#039;&#039;&#039;~&#039;&#039;&#039;&lt;br /&gt;
Bei einer Klasse mit einer &#039;&#039;&#039;package&#039;&#039;&#039; Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier wird im Folgenden Klassen anhand von Beispielen gezeigt:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;public&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:2021-01-29 Klasse_public.jpg|links|mini|Public Attribute]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese oben dargestellte Methode verfügt über zwei public Variablen und einer public Methode, wobei der Fokus auf den Variablen liegt. Der Code sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
public class Klasse{&lt;br /&gt;
&lt;br /&gt;
  public int a;&lt;br /&gt;
  public int b;&lt;br /&gt;
&lt;br /&gt;
  public int count(){&lt;br /&gt;
    return this.a + this.b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse public2.jpg|links|mini|Public Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt eine Klasse mit keinen Variablen aber mit einer public Methode. Der Code dieses Bildes wurde folgendermaßen umgesetzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
public class Klasse{&lt;br /&gt;
&lt;br /&gt;
  public int count(int a, int b){&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.count(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;protected&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
[[Datei:2021-01-29 Klasse protected.jpg|mini|links|protected Variablen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt zwei protected Variablen und eine protected Methode. Die Umsetzung des Codes sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
protected class Klasse{&lt;br /&gt;
&lt;br /&gt;
  protected int a;&lt;br /&gt;
  protected int b;&lt;br /&gt;
&lt;br /&gt;
  protected int divide(){&lt;br /&gt;
    return this.a / this.b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse protected2.jpg|mini|links|protected Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt eine protected Methode ohne Klassenvariablen. Die Klasse wurde in folgenden Code umgesetzt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
protected class Klasse{&lt;br /&gt;
&lt;br /&gt;
  protected int divide(int a, int b){&lt;br /&gt;
    return a / b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.divide(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;private&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
[[Datei:2021-01-29 Klasse private.jpg|mini|links|private Variablen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die oben dargestellte UML-Klasse zeigt zwei private Variablen und eine private Methode an. Der Code dieser Klasse sieht wie folgt aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
private class Klasse{&lt;br /&gt;
&lt;br /&gt;
  private int a;&lt;br /&gt;
  private int b;&lt;br /&gt;
&lt;br /&gt;
  private int minus(){&lt;br /&gt;
    return this.b - this.a;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse private2.jpg|mini|links|private Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die im oberen Bild dargestellen Klasse wurde in folgenden Code umgewandelt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
private class Klasse{&lt;br /&gt;
&lt;br /&gt;
  private int count(int a, int b){&lt;br /&gt;
    return b - a;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.count(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:UmlCd Interface-1.svg.png|mini|UML Schnittstelle|100px]]&lt;br /&gt;
&lt;br /&gt;
==== Schnittstellen ====&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Schnittstelle&#039;&#039;&#039; wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort &amp;quot;interface&amp;quot; gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
Hier wird an aus einem UML-Diagramm ein Programm erstellt:&lt;br /&gt;
[[Datei:2021-01-29 Schnittstelle.jpg|mini|links|Interface und Implementierung]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In dem oberen Bild sieht man ein Interface mit mehreren Methoden. Diese Methoden werden von einer Klasse namens &#039;&#039;Rectangle&#039;&#039; implementiert. Die Programmierung zu diesen zwei Elementen sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Moveable.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
interface Moveable {&lt;br /&gt;
&lt;br /&gt;
  int left(int x);&lt;br /&gt;
  int right(int x);&lt;br /&gt;
  int up(int y);&lt;br /&gt;
  int down(int y);&lt;br /&gt;
  int forwards(int z);&lt;br /&gt;
  int backwards(int z);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rectangle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
public class Rectangle implements Moveable{&lt;br /&gt;
&lt;br /&gt;
    int positionx;&lt;br /&gt;
    int positiony;&lt;br /&gt;
    int positionz;&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int left(int x) {&lt;br /&gt;
        return positionx - x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int right(int x) {&lt;br /&gt;
        return positionx + x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int up(int y) {&lt;br /&gt;
        return positiony + y;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int down(int y) {&lt;br /&gt;
        return positiony - y;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int forwards(int z) {&lt;br /&gt;
        return positionz + z;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int backwards(int z) {&lt;br /&gt;
        return positionz - z;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:Generalization (UML class diagram).png|mini|100px|Generalisierung]]&lt;br /&gt;
==== Generalisierung ====&lt;br /&gt;
&lt;br /&gt;
Durch eine &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; &amp;quot;erben&amp;quot; speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse &amp;quot;vererbt&amp;quot;. Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wird ein Beispiel zum besseren Verständnis von Generalisierungen gezeigt:&lt;br /&gt;
[[Datei:2021-01-29 Generalisierung.jpg|mini|links|Generalisierung]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In dem oberen dargestellten Bild sieht man eine Generalisierung zwischen einer abstrakten und einer normalen Klassen. Die Umsetzung in JAVA würde wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Animal.java&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.awi3.swp3.animals;&lt;br /&gt;
&lt;br /&gt;
public abstract class Animal {&lt;br /&gt;
	private String habitat;&lt;br /&gt;
	&lt;br /&gt;
	public Animal(String habitat) {&lt;br /&gt;
		this.habitat = habitat;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public abstract void move();&lt;br /&gt;
	&lt;br /&gt;
	public String getHabitat() {&lt;br /&gt;
		return habitat;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fuchs.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.awi3.swp3.animals;&lt;br /&gt;
&lt;br /&gt;
public class Fuchs extends Animal {&lt;br /&gt;
&lt;br /&gt;
	public Fuchs() {&lt;br /&gt;
		super(&amp;quot;Woods/Forest&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	@Override&lt;br /&gt;
	public void move() {&lt;br /&gt;
		System.out.println(&amp;quot;Running round his &amp;quot; + getHabitat());&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Assoziation ====&lt;br /&gt;
&lt;br /&gt;
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;n-äre Assoziation&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
In folgenden Bild sieht man eine Binäre Assoziation. (Binär, weil zwei Klassen miteinander verbunden wurden)&lt;br /&gt;
[[Datei:1920px-UmlCd Assoziation-1.png|mini|links|Binäre Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;reflexive Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Im hier dargestellten Bild sieht man eine reflexive Assoziation, welche auf sich selbst verweist.&lt;br /&gt;
[[Datei:UmlCd Assoziation-2.png|mini|links|Reflexive Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da Assoziationen durch Linien dargestellt werden, müssen diese durch ein Assoziationsende gekennzeichnet werden. Diese Assoziationsenden können folgende Merkmale aufweisen:&lt;br /&gt;
* Sie können eine Multiplizität besitzen. Diese gibt Informationen über das Beziehungsverhältnis zweier Klassen. Diese Zahlen befinden sich &#039;&#039;&#039;nur&#039;&#039;&#039; im &#039;&#039;positiven&#039;&#039; und &#039;&#039;ganzzahligen&#039;&#039; Bereich, wobei der Beginn bei der Zahl 0 liegt.&lt;br /&gt;
** Multiplizitäten werden im folgenden Format angegeben:&lt;br /&gt;
 untereSchranke..obereSchranke&lt;br /&gt;
** Bei * oder auch 0..* wird die untereSchranke als 0 und die obereSchranke als unendlich angenommen.&lt;br /&gt;
** Beide Schranken dürfen nicht 0 oder unbeschränkt sein. Falls beide Grenzen trotzdem gleich groß sind, wird nur die obereSchranke angegeben. &lt;br /&gt;
** Bei einer Multiplizität von 0..1 wird das Element als &#039;&#039;optional&#039;&#039; bezeichnet.&lt;br /&gt;
** Wenn die obereSchranke über dem Wert 1 liegt, wird das Element als mehrwertiges Element bezeichnet, da mehrere Wert annehmbar sind.&lt;br /&gt;
* Sie können Namen besitzen.&lt;br /&gt;
* Sie können eine Sichtbarkeit aufweisen.&lt;br /&gt;
* Es kann spezifiziert werden, ob das Assoziationsende &amp;quot;ordered&amp;quot; und / oder unique ist. &lt;br /&gt;
&lt;br /&gt;
Zudem Assoziationsende kommen oft Multiplizitäten hinzu, welche die Beziehung zwischen den zwei Instanzen regelt. Im folgenden werden auf zwei Arten der Assoziationen genauer eingegangen.&lt;br /&gt;
&lt;br /&gt;
==== Komposition und Aggregation ====&lt;br /&gt;
&lt;br /&gt;
Um Beziehungen mit &#039;&#039;Ganzen&#039;&#039; und &#039;&#039;Teilen&#039;&#039; darzustellen werden die Aggregation und die Komposition verwendet.&lt;br /&gt;
[[Datei:Komposition Aggregation.png|mini|links|Komposition und Aggregation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Komposition ist eine Linie mit einer ausgefüllten Raute, welche mit der Kardinalität 1 beschriftet wird und mit dem Ganzen Teil der Beziehungspartner verbunden ist. Bei einer Komposition können die &#039;&#039;Teile&#039;&#039; nicht ohne das &#039;&#039;Ganze&#039;&#039; existieren. Das bedeutet, dass das &#039;&#039;Teil&#039;&#039; Element existenziell abhängig von &#039;&#039;Ganz&#039;&#039; Element ist.&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Aggregation ist eine Linie mit einer nicht ausgefüllten Raute, welche die Kardinalität 0..* besitzt und mit dem &#039;&#039;Ganzen&#039;&#039; Teil verbunden ist. Die Elemente in einer Aggregation besitzen keine Exisitenzabhängigkeit, da die &#039;&#039;Teil&#039;&#039; Elemente auch ohne die &#039;&#039;Ganz&#039;&#039; Elemente bestehen können. &lt;br /&gt;
&lt;br /&gt;
Die Assoziationsarten werden prinzipiell mittels der Kardinalität unterschieden. Zudem sind die &#039;&#039;Teil&#039;&#039; Elemente Bestandteil genau eines &#039;&#039;Ganz&#039;&#039; Elementes, da sie NIE zu mehrere &#039;&#039;Ganz&#039;&#039; Elementen gehören.&lt;br /&gt;
&lt;br /&gt;
== Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber == &lt;br /&gt;
&lt;br /&gt;
Diese Umsetzung erfolgte mit der Programmiersprache JAVA.&lt;br /&gt;
[[Datei:Screenshot 2021-01-22 143552.jpg|mini|600px|none|Fahrzeuge in einem UML Klassendiagramm]]&lt;br /&gt;
&#039;&#039;&#039;Vehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle;&lt;br /&gt;
&lt;br /&gt;
public abstract class Vehicle {&lt;br /&gt;
    private int maxSpeed;&lt;br /&gt;
    private int wheels;&lt;br /&gt;
&lt;br /&gt;
    public Vehicle(int maxSpeed, int wheels) {&lt;br /&gt;
        this.maxSpeed = maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void move() {&lt;br /&gt;
        System.out.println(&amp;quot;I am moving at &amp;quot; + maxSpeed + &amp;quot; with &amp;quot; + wheels + &amp;quot; wheels.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public int getMaxSpeed() {&lt;br /&gt;
        return maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public abstract void start();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
public class Bike extends Vehicle {&lt;br /&gt;
    public Bike(int maxSpeed, int wheels) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start to step into the pedals!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rollerblades.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Rollerblades extends Vehicle {&lt;br /&gt;
    public Rollerblades(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 8);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start skate!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Skateboard.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Skateboard extends Vehicle {&lt;br /&gt;
    public Skateboard(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 4);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I step with one feet on the ground to start!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MotorizedVehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public abstract class MotorizedVehicle extends Vehicle {&lt;br /&gt;
    private float kw;&lt;br /&gt;
&lt;br /&gt;
    public MotorizedVehicle(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
        this.kw = kw;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I am starting my engine with &amp;quot; + kw + &amp;quot; kw.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EBike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class EBike extends MotorizedVehicle {&lt;br /&gt;
    public EBike(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 2, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Lkw extends MotorizedVehicle {&lt;br /&gt;
    public Lkw(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Pkw extends MotorizedVehicle {&lt;br /&gt;
    public Pkw(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 4, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language&lt;br /&gt;
&lt;br /&gt;
https://www.sparxsystems.de/ressourcen/literatur/leseprobe-zu-projektabwicklung-mit-uml-und-enterprise-architect/klassendiagramm-class-diagram/&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Assoziation_(UML)&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Multiplizit%C3%A4t_(UML)&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=Objektorientiertes_Design_und_UML&amp;diff=1309</id>
		<title>Objektorientiertes Design und UML</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=Objektorientiertes_Design_und_UML&amp;diff=1309"/>
		<updated>2021-02-05T10:47:38Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: /* UML */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Im folgenden wird zuerst auf die Begriffe &#039;&#039;&#039;UML&#039;&#039;&#039; und &#039;&#039;&#039;modellieren&#039;&#039;&#039; eingegangen. In weiterer Folge werden wir uns mit zwei gebräuchlichen Diagrammtypen, dem &#039;&#039;&#039;Klassendiagramm&#039;&#039;&#039; und dem &#039;&#039;&#039;Sequenzdiagramm&#039;&#039;&#039; beschäftigen.&lt;br /&gt;
= Modellieren =&lt;br /&gt;
Hier soll beschrieben werden was &#039;&#039;&#039;modellieren&#039;&#039;&#039; im allgemeinen und dann speziell in der Softwareentwicklung bedeutet. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Modellieren allgemeine Definition: &amp;lt;br&amp;gt;&lt;br /&gt;
plastisch formen, gestallten, bearbeiten, durch Modellieren bilden &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Modellieren in der Softwareentwicklung: &amp;lt;br&amp;gt;&lt;br /&gt;
Modellieren in der Softwareentwicklung wird auch Softwaredesign genannt. Softwaredesign ist oft wichtig wegen der Komplexität der Computerprogramme, um das Risiko der &amp;quot;Fehlentwicklung&amp;quot; zu minimieren. Bevor die Software modelliert wird, werden im Zuge der Anforderungserhebung zunächst die einzelnen Anforderungen designiert. Diese werden meistens von Auftraggeber und Auftragnehmer gemeinsam ausgesucht. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modellieren wird also zur visuellen Darstellung von Programmen verwendet.&lt;br /&gt;
&lt;br /&gt;
= UML =&lt;br /&gt;
&lt;br /&gt;
Die Unified Modeling Language (UML), ist eine grafische Modellierungssprache zur Beschreibung von Softwaresystemen. Der Grundgedanke der UML besteht darin, eine einheitliche Notation für viele Einsatzgebiete zu haben.&lt;br /&gt;
&lt;br /&gt;
UML gilt als Standard zur Analyse und Design Objektorientierter Anwendungen. Sie bietet ein Gerüst, um so unterschiedliche Applikationen wie Datenbankanwendungen, Echtzeitsysteme oder Grafikprogramme einheitlich darstellen zu können. Die Aufgabe der UML ist Spezifikation, Visualisierung und Dokumentation von Modellen für Softwaresysteme.&lt;br /&gt;
&lt;br /&gt;
Die Diagramme in UML lassen sich in zwei Hauptgruppen aufteilen: Strukturdiagramm und Verhaltensdiagramme.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Strukturdiagramme:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*[[UML Klassendiagramm|&#039;&#039;&#039;Klassendiagramm&#039;&#039;&#039;]]&lt;br /&gt;
** Dient zur graphischen Darstellung von Klassen (=abstrakter Oberbegriff für die Beschreibung der gemeinsamen Struktur und des gemeinsamen Verhalten von Objekten), Schnittstellen sowie deren Beziehungen&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Kompositionsstrukturdiagramm&#039;&#039;&#039;&lt;br /&gt;
** Zeigt einheitlich das Innere eines Klassifizierers (Metaklasse = Klasse einer Klasse) und dessen Wechselwirkung mit seiner Umgebung&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Komponentendiagramm&#039;&#039;&#039;&lt;br /&gt;
** Stellt die Zusammenhänge der einzelnen Komponenten einer zu erstellenden Softwarelösung dar.&lt;br /&gt;
** Die Darstellung umfasst dabei typischerweise Komponenten mit deren Schnittstellen bzw. Ports und zeigt auch wie Komponenten über Abhängigkeitsbeziehung und Konnektoren miteinander verbunden sind.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Verteilungsdiagramm&#039;&#039;&#039;&lt;br /&gt;
** Dient zur Darstellung der Verteilung von Komponenten auf Rechenknoten.&lt;br /&gt;
** Zeigt wie Komponenten konfiguriert sind und welche Abhängigkeiten bestehen&lt;br /&gt;
** Die Darstellung umfasst dabei typischerweise Rechnerknoten, Komponenten, Artefakte, Ausprägungsspezifikationen, Verbindungen und Verteilungsbeziehungen.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Objektdiagramm&#039;&#039;&#039;&lt;br /&gt;
** Zeigt die Struktur des modellierten Systems für einen limitierten Zeitabschnitt bzw. konkreten Zeitpunkt (Momentaufnahme).&lt;br /&gt;
** Die Darstellung umfasst dabei typischerweise Ausprägungsspezifikationen von Klassen und Assoziationen.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Paketdiagramm&#039;&#039;&#039;&lt;br /&gt;
** Dient der Strukturierung der verschiedenen Darstellungen.&lt;br /&gt;
** Pakete ermöglichen einen guten Überblick über ein Gesamtsystem (für große Systeme sehr wichtig)&lt;br /&gt;
** Die Darstellung umfasst dabei typischerweise Pakete, Paketverschmelzungen, Paketimports und Abhängigkeitsbeziehungen.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Profildiagramm&#039;&#039;&#039;&lt;br /&gt;
** Wird in der Metamodellebene verwendet, um sogenannte Stereotype mit Klassen anzuzeigen&lt;br /&gt;
** Diese haben dann die Bezeichnung &amp;lt;&amp;lt;stereotype&amp;gt;&amp;gt; oder bei Profilen und Paketen &amp;lt;&amp;lt;profile&amp;gt;&amp;gt; bekommen.&lt;br /&gt;
&#039;&#039;&#039;Verhaltensdiagramme&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Aktivitätsdiagramm&#039;&#039;&#039;&lt;br /&gt;
** Es wird meist der Ablauf eines Anwendungsfalls beschrieben, es eignet sich aber zur Modellierung aller Aktivitäten innerhalb eines Systems.&lt;br /&gt;
* &#039;&#039;&#039;Anwendungsfalldiagramm&#039;&#039;&#039; (Use-Case Diagramm)&lt;br /&gt;
** Beschreibt das Zusammenwirken von Personen (Aktoren) mit einem System.&lt;br /&gt;
** Es stellt Anwendungsfälle und Akteure mit ihren jeweiligen Abhängigkeiten und Beziehungen dar.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Interaktionsübersichtsdiagramm&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Kommunikationsdiagramm&#039;&#039;&#039;&lt;br /&gt;
** Stellt den Austausch von Nachrichten dar.&lt;br /&gt;
&lt;br /&gt;
*[[UML Sequenzdiagramm|&#039;&#039;&#039;Sequenzdiagramm&#039;&#039;&#039;]]&lt;br /&gt;
** Stellt die einzelnen Objekte und ihre Interaktion (auf zeitlichen Ablauf bezogen) dar&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Zeitverlaufsdiagramm&#039;&#039;&#039;&lt;br /&gt;
** Ist ein zweidimensionales Diagramm, wobei auf der x-Achse die Zeit, und auf der y-Achse Zustände von Objekten aufgetragen werden.&lt;br /&gt;
** Dieser Diagrammtyp ähnelt damit der Anzeige eines Oszilloskops, wird also seit langem in der Elektrotechnik verwendet.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Zustandsdiagramm&#039;&#039;&#039;&lt;br /&gt;
** Visualisiert die unterschiedlichsten Zustände, die Objekte in ihrem Leben annehmen können&lt;br /&gt;
** Wird benutzt, um das Verhalten eines Systems oder die zulässige Nutzung der Schnittstellen eines Systems zu spezifizieren&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Diagramme ==&lt;br /&gt;
[[UML_Klassendiagramm|UML Klassendiagramm]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[UML_Sequenzdiagramm|UML Sequenzdiagramm]]&lt;br /&gt;
&lt;br /&gt;
= Bitte Beachten =&lt;br /&gt;
Wenn möglich versuche die Quellen für die Information zu nennen. Wir nehmen das hier nicht so genau, aber es sollte möglich sein die entsprechende Seite aus der die Information entnommen wurde zu finden.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Bilder bitte direkt mit Quelle (Beispiel)&lt;br /&gt;
[[Datei:Bubble-sort-example-300px.gif|mini|none|Funktionsweise Bubblesort. Quelle: https://de.wikipedia.org/wiki/Bubblesort]]&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=Objektorientiertes_Design_und_UML&amp;diff=1308</id>
		<title>Objektorientiertes Design und UML</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=Objektorientiertes_Design_und_UML&amp;diff=1308"/>
		<updated>2021-02-05T10:25:23Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: /* TODO: Bitte Beachten */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Im folgenden wird zuerst auf die Begriffe &#039;&#039;&#039;UML&#039;&#039;&#039; und &#039;&#039;&#039;modellieren&#039;&#039;&#039; eingegangen. In weiterer Folge werden wir uns mit zwei gebräuchlichen Diagrammtypen, dem &#039;&#039;&#039;Klassendiagramm&#039;&#039;&#039; und dem &#039;&#039;&#039;Sequenzdiagramm&#039;&#039;&#039; beschäftigen.&lt;br /&gt;
= Modellieren =&lt;br /&gt;
Hier soll beschrieben werden was &#039;&#039;&#039;modellieren&#039;&#039;&#039; im allgemeinen und dann speziell in der Softwareentwicklung bedeutet. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Modellieren allgemeine Definition: &amp;lt;br&amp;gt;&lt;br /&gt;
plastisch formen, gestallten, bearbeiten, durch Modellieren bilden &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Modellieren in der Softwareentwicklung: &amp;lt;br&amp;gt;&lt;br /&gt;
Modellieren in der Softwareentwicklung wird auch Softwaredesign genannt. Softwaredesign ist oft wichtig wegen der Komplexität der Computerprogramme, um das Risiko der &amp;quot;Fehlentwicklung&amp;quot; zu minimieren. Bevor die Software modelliert wird, werden im Zuge der Anforderungserhebung zunächst die einzelnen Anforderungen designiert. Diese werden meistens von Auftraggeber und Auftragnehmer gemeinsam ausgesucht. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modellieren wird also zur visuellen Darstellung von Programmen verwendet.&lt;br /&gt;
&lt;br /&gt;
= UML =&lt;br /&gt;
&lt;br /&gt;
Die Unified Modeling Language (UML), ist eine grafische Modellierungssprache zur Beschreibung von Softwaresystemen. Der Grundgedanke der UML besteht darin, eine einheitliche Notation für viele Einsatzgebiete zu haben.&lt;br /&gt;
&lt;br /&gt;
UML gilt als Standard zur Analyse und Design Objektorientierter Anwendungen. Sie bietet ein Gerüst, um so unterschiedliche Applikationen wie Datenbankanwendungen, Echtzeitsysteme oder Grafikprogramme einheitlich darstellen zu können. Die Aufgabe der UML ist Spezifikation, Visualisierung und Dokumentation von Modellen für Softwaresysteme.&lt;br /&gt;
&lt;br /&gt;
Die Diagramme in UML lassen sich in zwei Hauptgruppen aufteilen: Strukturdiagramm und Verhaltensdiagramme.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Strukturdiagramme:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Klassendiagramm&#039;&#039;&#039;&lt;br /&gt;
** Dient zur graphischen Darstellung von Klassen (=abstrakter Oberbegriff für die Beschreibung der gemeinsamen Struktur und des gemeinsamen Verhalten von Objekten), Schnittstellen sowie deren Beziehungen&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Kompositionsstrukturdiagramm&#039;&#039;&#039;&lt;br /&gt;
** Zeigt einheitlich das Innere eines Klassifizierers (Metaklasse = Klasse einer Klasse) und dessen Wechselwirkung mit seiner Umgebung&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Komponentendiagramm&#039;&#039;&#039;&lt;br /&gt;
** Stellt die Zusammenhänge der einzelnen Komponenten einer zu erstellenden Softwarelösung dar.&lt;br /&gt;
** Die Darstellung umfasst dabei typischerweise Komponenten mit deren Schnittstellen bzw. Ports und zeigt auch wie Komponenten über Abhängigkeitsbeziehung und Konnektoren miteinander verbunden sind.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Verteilungsdiagramm&#039;&#039;&#039;&lt;br /&gt;
** Dient zur Darstellung der Verteilung von Komponenten auf Rechenknoten.&lt;br /&gt;
** Zeigt wie Komponenten konfiguriert sind und welche Abhängigkeiten bestehen&lt;br /&gt;
** Die Darstellung umfasst dabei typischerweise Rechnerknoten, Komponenten, Artefakte, Ausprägungsspezifikationen, Verbindungen und Verteilungsbeziehungen.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Objektdiagramm&#039;&#039;&#039;&lt;br /&gt;
** Zeigt die Struktur des modellierten Systems für einen limitierten Zeitabschnitt bzw. konkreten Zeitpunkt (Momentaufnahme).&lt;br /&gt;
** Die Darstellung umfasst dabei typischerweise Ausprägungsspezifikationen von Klassen und Assoziationen.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Paketdiagramm&#039;&#039;&#039;&lt;br /&gt;
** Dient der Strukturierung der verschiedenen Darstellungen.&lt;br /&gt;
** Pakete ermöglichen einen guten Überblick über ein Gesamtsystem (für große Systeme sehr wichtig)&lt;br /&gt;
** Die Darstellung umfasst dabei typischerweise Pakete, Paketverschmelzungen, Paketimports und Abhängigkeitsbeziehungen.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Profildiagramm&#039;&#039;&#039;&lt;br /&gt;
** Wird in der Metamodellebene verwendet, um sogenannte Stereotype mit Klassen anzuzeigen&lt;br /&gt;
** Diese haben dann die Bezeichnung &amp;lt;&amp;lt;stereotype&amp;gt;&amp;gt; oder bei Profilen und Paketen &amp;lt;&amp;lt;profile&amp;gt;&amp;gt; bekommen.&lt;br /&gt;
&#039;&#039;&#039;Verhaltensdiagramme&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Aktivitätsdiagramm&#039;&#039;&#039;&lt;br /&gt;
** Es wird meist der Ablauf eines Anwendungsfalls beschrieben, es eignet sich aber zur Modellierung aller Aktivitäten innerhalb eines Systems.&lt;br /&gt;
* &#039;&#039;&#039;Anwendungsfalldiagramm&#039;&#039;&#039; (Use-Case Diagramm)&lt;br /&gt;
** Beschreibt das Zusammenwirken von Personen (Aktoren) mit einem System.&lt;br /&gt;
** Es stellt Anwendungsfälle und Akteure mit ihren jeweiligen Abhängigkeiten und Beziehungen dar.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Interaktionsübersichtsdiagramm&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Kommunikationsdiagramm&#039;&#039;&#039;&lt;br /&gt;
** Stellt den Austausch von Nachrichten dar.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Sequenzdiagramm&#039;&#039;&#039;&lt;br /&gt;
** Stellt die einzelnen Objekte und ihre Interaktion (auf zeitlichen Ablauf bezogen) dar&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Zeitverlaufsdiagramm&#039;&#039;&#039;&lt;br /&gt;
** Ist ein zweidimensionales Diagramm, wobei auf der x-Achse die Zeit, und auf der y-Achse Zustände von Objekten aufgetragen werden.&lt;br /&gt;
** Dieser Diagrammtyp ähnelt damit der Anzeige eines Oszilloskops, wird also seit langem in der Elektrotechnik verwendet.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Zustandsdiagramm&#039;&#039;&#039;&lt;br /&gt;
** Visualisiert die unterschiedlichsten Zustände, die Objekte in ihrem Leben annehmen können&lt;br /&gt;
** Wird benutzt, um das Verhalten eines Systems oder die zulässige Nutzung der Schnittstellen eines Systems zu spezifizieren&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Diagramme ==&lt;br /&gt;
[[UML_Klassendiagramm|UML Klassendiagramm]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[UML_Sequenzdiagramm|UML Sequenzdiagramm]]&lt;br /&gt;
&lt;br /&gt;
= Bitte Beachten =&lt;br /&gt;
Wenn möglich versuche die Quellen für die Information zu nennen. Wir nehmen das hier nicht so genau, aber es sollte möglich sein die entsprechende Seite aus der die Information entnommen wurde zu finden.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Bilder bitte direkt mit Quelle (Beispiel)&lt;br /&gt;
[[Datei:Bubble-sort-example-300px.gif|mini|none|Funktionsweise Bubblesort. Quelle: https://de.wikipedia.org/wiki/Bubblesort]]&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=Objektorientiertes_Design_und_UML&amp;diff=1307</id>
		<title>Objektorientiertes Design und UML</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=Objektorientiertes_Design_und_UML&amp;diff=1307"/>
		<updated>2021-02-05T10:24:56Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: /* Modellieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Im folgenden wird zuerst auf die Begriffe &#039;&#039;&#039;UML&#039;&#039;&#039; und &#039;&#039;&#039;modellieren&#039;&#039;&#039; eingegangen. In weiterer Folge werden wir uns mit zwei gebräuchlichen Diagrammtypen, dem &#039;&#039;&#039;Klassendiagramm&#039;&#039;&#039; und dem &#039;&#039;&#039;Sequenzdiagramm&#039;&#039;&#039; beschäftigen.&lt;br /&gt;
= Modellieren =&lt;br /&gt;
Hier soll beschrieben werden was &#039;&#039;&#039;modellieren&#039;&#039;&#039; im allgemeinen und dann speziell in der Softwareentwicklung bedeutet. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Modellieren allgemeine Definition: &amp;lt;br&amp;gt;&lt;br /&gt;
plastisch formen, gestallten, bearbeiten, durch Modellieren bilden &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Modellieren in der Softwareentwicklung: &amp;lt;br&amp;gt;&lt;br /&gt;
Modellieren in der Softwareentwicklung wird auch Softwaredesign genannt. Softwaredesign ist oft wichtig wegen der Komplexität der Computerprogramme, um das Risiko der &amp;quot;Fehlentwicklung&amp;quot; zu minimieren. Bevor die Software modelliert wird, werden im Zuge der Anforderungserhebung zunächst die einzelnen Anforderungen designiert. Diese werden meistens von Auftraggeber und Auftragnehmer gemeinsam ausgesucht. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modellieren wird also zur visuellen Darstellung von Programmen verwendet.&lt;br /&gt;
&lt;br /&gt;
= UML =&lt;br /&gt;
&lt;br /&gt;
Die Unified Modeling Language (UML), ist eine grafische Modellierungssprache zur Beschreibung von Softwaresystemen. Der Grundgedanke der UML besteht darin, eine einheitliche Notation für viele Einsatzgebiete zu haben.&lt;br /&gt;
&lt;br /&gt;
UML gilt als Standard zur Analyse und Design Objektorientierter Anwendungen. Sie bietet ein Gerüst, um so unterschiedliche Applikationen wie Datenbankanwendungen, Echtzeitsysteme oder Grafikprogramme einheitlich darstellen zu können. Die Aufgabe der UML ist Spezifikation, Visualisierung und Dokumentation von Modellen für Softwaresysteme.&lt;br /&gt;
&lt;br /&gt;
Die Diagramme in UML lassen sich in zwei Hauptgruppen aufteilen: Strukturdiagramm und Verhaltensdiagramme.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Strukturdiagramme:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Klassendiagramm&#039;&#039;&#039;&lt;br /&gt;
** Dient zur graphischen Darstellung von Klassen (=abstrakter Oberbegriff für die Beschreibung der gemeinsamen Struktur und des gemeinsamen Verhalten von Objekten), Schnittstellen sowie deren Beziehungen&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Kompositionsstrukturdiagramm&#039;&#039;&#039;&lt;br /&gt;
** Zeigt einheitlich das Innere eines Klassifizierers (Metaklasse = Klasse einer Klasse) und dessen Wechselwirkung mit seiner Umgebung&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Komponentendiagramm&#039;&#039;&#039;&lt;br /&gt;
** Stellt die Zusammenhänge der einzelnen Komponenten einer zu erstellenden Softwarelösung dar.&lt;br /&gt;
** Die Darstellung umfasst dabei typischerweise Komponenten mit deren Schnittstellen bzw. Ports und zeigt auch wie Komponenten über Abhängigkeitsbeziehung und Konnektoren miteinander verbunden sind.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Verteilungsdiagramm&#039;&#039;&#039;&lt;br /&gt;
** Dient zur Darstellung der Verteilung von Komponenten auf Rechenknoten.&lt;br /&gt;
** Zeigt wie Komponenten konfiguriert sind und welche Abhängigkeiten bestehen&lt;br /&gt;
** Die Darstellung umfasst dabei typischerweise Rechnerknoten, Komponenten, Artefakte, Ausprägungsspezifikationen, Verbindungen und Verteilungsbeziehungen.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Objektdiagramm&#039;&#039;&#039;&lt;br /&gt;
** Zeigt die Struktur des modellierten Systems für einen limitierten Zeitabschnitt bzw. konkreten Zeitpunkt (Momentaufnahme).&lt;br /&gt;
** Die Darstellung umfasst dabei typischerweise Ausprägungsspezifikationen von Klassen und Assoziationen.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Paketdiagramm&#039;&#039;&#039;&lt;br /&gt;
** Dient der Strukturierung der verschiedenen Darstellungen.&lt;br /&gt;
** Pakete ermöglichen einen guten Überblick über ein Gesamtsystem (für große Systeme sehr wichtig)&lt;br /&gt;
** Die Darstellung umfasst dabei typischerweise Pakete, Paketverschmelzungen, Paketimports und Abhängigkeitsbeziehungen.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Profildiagramm&#039;&#039;&#039;&lt;br /&gt;
** Wird in der Metamodellebene verwendet, um sogenannte Stereotype mit Klassen anzuzeigen&lt;br /&gt;
** Diese haben dann die Bezeichnung &amp;lt;&amp;lt;stereotype&amp;gt;&amp;gt; oder bei Profilen und Paketen &amp;lt;&amp;lt;profile&amp;gt;&amp;gt; bekommen.&lt;br /&gt;
&#039;&#039;&#039;Verhaltensdiagramme&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Aktivitätsdiagramm&#039;&#039;&#039;&lt;br /&gt;
** Es wird meist der Ablauf eines Anwendungsfalls beschrieben, es eignet sich aber zur Modellierung aller Aktivitäten innerhalb eines Systems.&lt;br /&gt;
* &#039;&#039;&#039;Anwendungsfalldiagramm&#039;&#039;&#039; (Use-Case Diagramm)&lt;br /&gt;
** Beschreibt das Zusammenwirken von Personen (Aktoren) mit einem System.&lt;br /&gt;
** Es stellt Anwendungsfälle und Akteure mit ihren jeweiligen Abhängigkeiten und Beziehungen dar.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Interaktionsübersichtsdiagramm&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Kommunikationsdiagramm&#039;&#039;&#039;&lt;br /&gt;
** Stellt den Austausch von Nachrichten dar.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Sequenzdiagramm&#039;&#039;&#039;&lt;br /&gt;
** Stellt die einzelnen Objekte und ihre Interaktion (auf zeitlichen Ablauf bezogen) dar&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Zeitverlaufsdiagramm&#039;&#039;&#039;&lt;br /&gt;
** Ist ein zweidimensionales Diagramm, wobei auf der x-Achse die Zeit, und auf der y-Achse Zustände von Objekten aufgetragen werden.&lt;br /&gt;
** Dieser Diagrammtyp ähnelt damit der Anzeige eines Oszilloskops, wird also seit langem in der Elektrotechnik verwendet.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Zustandsdiagramm&#039;&#039;&#039;&lt;br /&gt;
** Visualisiert die unterschiedlichsten Zustände, die Objekte in ihrem Leben annehmen können&lt;br /&gt;
** Wird benutzt, um das Verhalten eines Systems oder die zulässige Nutzung der Schnittstellen eines Systems zu spezifizieren&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Diagramme ==&lt;br /&gt;
[[UML_Klassendiagramm|UML Klassendiagramm]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[UML_Sequenzdiagramm|UML Sequenzdiagramm]]&lt;br /&gt;
&lt;br /&gt;
= TODO: Bitte Beachten =&lt;br /&gt;
Wenn möglich versuche die Quellen für die Information zu nennen. Wir nehmen das hier nicht so genau, aber es sollte möglich sein die entsprechende Seite aus der die Information entnommen wurde zu finden.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Bilder bitte direkt mit Quelle (Beispiel)&lt;br /&gt;
[[Datei:Bubble-sort-example-300px.gif|mini|none|Funktionsweise Bubblesort. Quelle: https://de.wikipedia.org/wiki/Bubblesort]]&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=1305</id>
		<title>UML Klassendiagramm</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=1305"/>
		<updated>2021-02-05T09:26:58Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: /* Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Was ist ein Klassendiagramm? ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm bildet ein Kernstück der &#039;&#039;&#039;U&#039;&#039;&#039;nified &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;L&#039;&#039;&#039;anguage (&#039;&#039;&#039;UML&#039;&#039;&#039;). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsgebiete von Klassendiagramme ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm wird verwendet, um die Programme einfacher und übersichtlicher darzustellen und diese dann anschließend umzusetzen.&lt;br /&gt;
&lt;br /&gt;
== Bausteine eines Klassendiagramms ==&lt;br /&gt;
&lt;br /&gt;
Klassenmodelle unterteilen sich in folgende Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Klassen&lt;br /&gt;
* Schnittstellen&lt;br /&gt;
* Generalisierung&lt;br /&gt;
* Assoziation&lt;br /&gt;
** Komposition&lt;br /&gt;
** Aggregation&lt;br /&gt;
[[Datei:Screenshot 2021-01-08 132401.jpg|mini|UML Klasse aus DIA]]&lt;br /&gt;
==== Klassen ====&lt;br /&gt;
&lt;br /&gt;
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie &amp;quot;{abstrakt}&amp;quot; über dem Namen der Klasse tragen. &lt;br /&gt;
Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039; oder auch &#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
Bei einer &#039;&#039;&#039;public&#039;&#039;&#039; oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.&lt;br /&gt;
* &#039;&#039;&#039;protected&#039;&#039;&#039; oder auch &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;protected&#039;&#039;&#039; Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.&lt;br /&gt;
* &#039;&#039;&#039;private&#039;&#039;&#039; oder auch &#039;&#039;&#039;−&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;private&#039;&#039;&#039; Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden. &lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; oder auch &#039;&#039;&#039;~&#039;&#039;&#039;&lt;br /&gt;
Bei einer Klasse mit einer &#039;&#039;&#039;package&#039;&#039;&#039; Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier wird im Folgenden Klassen anhand von Beispielen gezeigt:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;public&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:2021-01-29 Klasse_public.jpg|links|mini|Public Attribute]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese oben dargestellte Methode verfügt über zwei public Variablen und einer public Methode, wobei der Fokus auf den Variablen liegt. Der Code sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
public class Klasse{&lt;br /&gt;
&lt;br /&gt;
  public int a;&lt;br /&gt;
  public int b;&lt;br /&gt;
&lt;br /&gt;
  public int count(){&lt;br /&gt;
    return this.a + this.b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse public2.jpg|links|mini|Public Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt eine Klasse mit keinen Variablen aber mit einer public Methode. Der Code dieses Bildes wurde folgendermaßen umgesetzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
public class Klasse{&lt;br /&gt;
&lt;br /&gt;
  public int count(int a, int b){&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.count(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;protected&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
[[Datei:2021-01-29 Klasse protected.jpg|mini|links|protected Variablen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt zwei protected Variablen und eine protected Methode. Die Umsetzung des Codes sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
protected class Klasse{&lt;br /&gt;
&lt;br /&gt;
  protected int a;&lt;br /&gt;
  protected int b;&lt;br /&gt;
&lt;br /&gt;
  protected int divide(){&lt;br /&gt;
    return this.a / this.b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse protected2.jpg|mini|links|protected Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt eine protected Methode ohne Klassenvariablen. Die Klasse wurde in folgenden Code umgesetzt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
protected class Klasse{&lt;br /&gt;
&lt;br /&gt;
  protected int divide(int a, int b){&lt;br /&gt;
    return a / b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.divide(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;private&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
[[Datei:2021-01-29 Klasse private.jpg|mini|links|private Variablen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die oben dargestellte UML-Klasse zeigt zwei private Variablen und eine private Methode an. Der Code dieser Klasse sieht wie folgt aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
private class Klasse{&lt;br /&gt;
&lt;br /&gt;
  private int a;&lt;br /&gt;
  private int b;&lt;br /&gt;
&lt;br /&gt;
  private int minus(){&lt;br /&gt;
    return this.b - this.a;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse private2.jpg|mini|links|private Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die im oberen Bild dargestellen Klasse wurde in folgenden Code umgewandelt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
private class Klasse{&lt;br /&gt;
&lt;br /&gt;
  private int count(int a, int b){&lt;br /&gt;
    return b - a;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.count(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:UmlCd Interface-1.svg.png|mini|UML Schnittstelle|100px]]&lt;br /&gt;
&lt;br /&gt;
==== Schnittstellen ====&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Schnittstelle&#039;&#039;&#039; wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort &amp;quot;interface&amp;quot; gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
Hier wird an aus einem UML-Diagramm ein Programm erstellt:&lt;br /&gt;
[[Datei:2021-01-29 Schnittstelle.jpg|mini|links|Interface und Implementierung]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In dem oberen Bild sieht man ein Interface mit mehreren Methoden. Diese Methoden werden von einer Klasse namens &#039;&#039;Rectangle&#039;&#039; implementiert. Die Programmierung zu diesen zwei Elementen sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Moveable.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
interface Moveable {&lt;br /&gt;
&lt;br /&gt;
  int left(int x);&lt;br /&gt;
  int right(int x);&lt;br /&gt;
  int up(int y);&lt;br /&gt;
  int down(int y);&lt;br /&gt;
  int forwards(int z);&lt;br /&gt;
  int backwards(int z);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rectangle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
public class Rectangle implements Moveable{&lt;br /&gt;
&lt;br /&gt;
    int positionx;&lt;br /&gt;
    int positiony;&lt;br /&gt;
    int positionz;&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int left(int x) {&lt;br /&gt;
        return positionx - x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int right(int x) {&lt;br /&gt;
        return positionx + x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int up(int y) {&lt;br /&gt;
        return positiony + y;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int down(int y) {&lt;br /&gt;
        return positiony - y;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int forwards(int z) {&lt;br /&gt;
        return positionz + z;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int backwards(int z) {&lt;br /&gt;
        return positionz - z;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:Generalization (UML class diagram).png|mini|100px|Generalisierung]]&lt;br /&gt;
==== Generalisierung ====&lt;br /&gt;
&lt;br /&gt;
Durch eine &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; &amp;quot;erben&amp;quot; speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse &amp;quot;vererbt&amp;quot;. Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wird ein Beispiel zum besseren Verständnis von Generalisierungen gezeigt:&lt;br /&gt;
[[Datei:2021-01-29 Generalisierung.jpg|mini|links|Generalisierung]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In dem oberen dargestellten Bild sieht man eine Generalisierung zwischen einer abstrakten und einer normalen Klassen. Die Umsetzung in JAVA würde wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Animal.java&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.awi3.swp3.animals;&lt;br /&gt;
&lt;br /&gt;
public abstract class Animal {&lt;br /&gt;
	private String habitat;&lt;br /&gt;
	&lt;br /&gt;
	public Animal(String habitat) {&lt;br /&gt;
		this.habitat = habitat;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public abstract void move();&lt;br /&gt;
	&lt;br /&gt;
	public String getHabitat() {&lt;br /&gt;
		return habitat;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fuchs.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.awi3.swp3.animals;&lt;br /&gt;
&lt;br /&gt;
public class Fuchs extends Animal {&lt;br /&gt;
&lt;br /&gt;
	public Fuchs() {&lt;br /&gt;
		super(&amp;quot;Woods/Forest&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	@Override&lt;br /&gt;
	public void move() {&lt;br /&gt;
		System.out.println(&amp;quot;Running round his &amp;quot; + getHabitat());&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Assoziation ====&lt;br /&gt;
&lt;br /&gt;
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;n-äre Assoziation&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
In folgenden Bild sieht man eine Binäre Assoziation. (Binär, weil zwei Klassen miteinander verbunden wurden)&lt;br /&gt;
[[Datei:1920px-UmlCd Assoziation-1.png|mini|links|Binäre Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;reflexive Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Im hier dargestellten Bild sieht man eine reflexive Assoziation, welche auf sich selbst verweist.&lt;br /&gt;
[[Datei:UmlCd Assoziation-2.png|mini|links|Reflexive Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da Assoziationen durch Linien dargestellt werden, müssen diese durch ein Assoziationsende gekennzeichnet werden. Diese Assoziationsenden können folgende Merkmale aufweisen:&lt;br /&gt;
* Sie können eine Multiplizität besitzen. Diese gibt Informationen über das Beziehungsverhältnis zweier Klassen. Diese Zahlen befinden sich &#039;&#039;&#039;nur&#039;&#039;&#039; im &#039;&#039;positiven&#039;&#039; und &#039;&#039;ganzzahligen&#039;&#039; Bereich, wobei der Beginn bei der Zahl 0 liegt.&lt;br /&gt;
** Multiplizitäten werden im folgenden Format angegeben:&lt;br /&gt;
 untereSchranke..obereSchranke&lt;br /&gt;
** Bei * oder auch 0..* wird die untereSchranke als 0 und die obereSchranke als unendlich angenommen.&lt;br /&gt;
** Beide Schranken dürfen nicht 0 oder unbeschränkt sein. Falls beide Grenzen trotzdem gleich groß sind, wird nur die obereSchranke angegeben. &lt;br /&gt;
** Bei einer Multiplizität von 0..1 wird das Element als &#039;&#039;optional&#039;&#039; bezeichnet.&lt;br /&gt;
** Wenn die obereSchranke über dem Wert 1 liegt, wird das Element als mehrwertiges Element bezeichnet, da mehrere Wert annehmbar sind.&lt;br /&gt;
* Sie können Namen besitzen.&lt;br /&gt;
* Sie können eine Sichtbarkeit aufweisen.&lt;br /&gt;
* Es kann spezifiziert werden, ob das Assoziationsende &amp;quot;ordered&amp;quot; und / oder unique ist. &lt;br /&gt;
&lt;br /&gt;
Zudem Assoziationsende kommen oft Multiplizitäten hinzu, welche die Beziehung zwischen den zwei Instanzen regelt. Im folgenden werden auf zwei Arten der Assoziationen genauer eingegangen.&lt;br /&gt;
&lt;br /&gt;
==== Komposition und Aggregation ====&lt;br /&gt;
&lt;br /&gt;
Um Beziehungen mit &#039;&#039;Ganzen&#039;&#039; und &#039;&#039;Teilen&#039;&#039; darzustellen werden die Aggregation und die Komposition verwendet.&lt;br /&gt;
[[Datei:Komposition Aggregation.png|mini|links|Komposition und Aggregation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Komposition ist eine Linie mit einer ausgefüllten Raute, welche mit der Kardinalität 1 beschriftet wird und mit dem Ganzen Teil der Beziehungspartner verbunden ist. Bei einer Komposition können die &#039;&#039;Teile&#039;&#039; nicht ohne das &#039;&#039;Ganze&#039;&#039; existieren. Das bedeutet, dass das &#039;&#039;Teil&#039;&#039; Element existenziell abhängig von &#039;&#039;Ganz&#039;&#039; Element ist.&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Aggregation ist eine Linie mit einer nicht ausgefüllten Raute, welche die Kardinalität 0..* besitzt und mit dem &#039;&#039;Ganzen&#039;&#039; Teil verbunden ist. Die Elemente in einer Aggregation besitzen keine Exisitenzabhängigkeit, da die &#039;&#039;Teil&#039;&#039; Elemente auch ohne die &#039;&#039;Ganz&#039;&#039; Elemente bestehen können. &lt;br /&gt;
&lt;br /&gt;
Die Assoziationsarten werden prinzipiell mittels der Kardinalität unterschieden. Zudem sind die &#039;&#039;Teil&#039;&#039; Elemente Bestandteil genau eines &#039;&#039;Ganz&#039;&#039; Elementes, da sie NIE zu mehrere &#039;&#039;Ganz&#039;&#039; Elementen gehören.&lt;br /&gt;
&lt;br /&gt;
== Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber == &lt;br /&gt;
&lt;br /&gt;
Diese Umsetzung erfolgte mit der Programmiersprache JAVA.&lt;br /&gt;
[[Datei:Screenshot 2021-01-22 143552.jpg|mini|600px|none|Fahrzeuge in einem UML Klassendiagramm]]&lt;br /&gt;
&#039;&#039;&#039;Vehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle;&lt;br /&gt;
&lt;br /&gt;
public abstract class Vehicle {&lt;br /&gt;
    private int maxSpeed;&lt;br /&gt;
    private int wheels;&lt;br /&gt;
&lt;br /&gt;
    public Vehicle(int maxSpeed, int wheels) {&lt;br /&gt;
        this.maxSpeed = maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void move() {&lt;br /&gt;
        System.out.println(&amp;quot;I am moving at &amp;quot; + maxSpeed + &amp;quot; with &amp;quot; + wheels + &amp;quot; wheels.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public int getMaxSpeed() {&lt;br /&gt;
        return maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public abstract void start();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
public class Bike extends Vehicle {&lt;br /&gt;
    public Bike(int maxSpeed, int wheels) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start to step into the pedals!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rollerblades.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Rollerblades extends Vehicle {&lt;br /&gt;
    public Rollerblades(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 8);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start skate!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Skateboard.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Skateboard extends Vehicle {&lt;br /&gt;
    public Skateboard(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 4);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I step with one feet on the ground to start!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MotorizedVehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public abstract class MotorizedVehicle extends Vehicle {&lt;br /&gt;
    private float kw;&lt;br /&gt;
&lt;br /&gt;
    public MotorizedVehicle(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
        this.kw = kw;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I am starting my engine with &amp;quot; + kw + &amp;quot; kw.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EBike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class EBike extends MotorizedVehicle {&lt;br /&gt;
    public EBike(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 2, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Lkw extends MotorizedVehicle {&lt;br /&gt;
    public Lkw(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Pkw extends MotorizedVehicle {&lt;br /&gt;
    public Pkw(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 4, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language&lt;br /&gt;
&lt;br /&gt;
https://www.sparxsystems.de/ressourcen/literatur/leseprobe-zu-projektabwicklung-mit-uml-und-enterprise-architect/klassendiagramm-class-diagram/&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Assoziation_(UML)&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Multiplizit%C3%A4t_(UML)&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=1304</id>
		<title>UML Klassendiagramm</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=1304"/>
		<updated>2021-02-05T09:26:44Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: /* Komposition und Aggregation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Was ist ein Klassendiagramm? ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm bildet ein Kernstück der &#039;&#039;&#039;U&#039;&#039;&#039;nified &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;L&#039;&#039;&#039;anguage (&#039;&#039;&#039;UML&#039;&#039;&#039;). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsgebiete von Klassendiagramme ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm wird verwendet, um die Programme einfacher und übersichtlicher darzustellen und diese dann anschließend umzusetzen.&lt;br /&gt;
&lt;br /&gt;
== Bausteine eines Klassendiagramms ==&lt;br /&gt;
&lt;br /&gt;
Klassenmodelle unterteilen sich in folgende Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Klassen&lt;br /&gt;
* Schnittstellen&lt;br /&gt;
* Generalisierung&lt;br /&gt;
* Assoziation&lt;br /&gt;
** Komposition&lt;br /&gt;
** Aggregation&lt;br /&gt;
[[Datei:Screenshot 2021-01-08 132401.jpg|mini|UML Klasse aus DIA]]&lt;br /&gt;
==== Klassen ====&lt;br /&gt;
&lt;br /&gt;
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie &amp;quot;{abstrakt}&amp;quot; über dem Namen der Klasse tragen. &lt;br /&gt;
Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039; oder auch &#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
Bei einer &#039;&#039;&#039;public&#039;&#039;&#039; oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.&lt;br /&gt;
* &#039;&#039;&#039;protected&#039;&#039;&#039; oder auch &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;protected&#039;&#039;&#039; Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.&lt;br /&gt;
* &#039;&#039;&#039;private&#039;&#039;&#039; oder auch &#039;&#039;&#039;−&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;private&#039;&#039;&#039; Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden. &lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; oder auch &#039;&#039;&#039;~&#039;&#039;&#039;&lt;br /&gt;
Bei einer Klasse mit einer &#039;&#039;&#039;package&#039;&#039;&#039; Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier wird im Folgenden Klassen anhand von Beispielen gezeigt:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;public&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:2021-01-29 Klasse_public.jpg|links|mini|Public Attribute]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese oben dargestellte Methode verfügt über zwei public Variablen und einer public Methode, wobei der Fokus auf den Variablen liegt. Der Code sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
public class Klasse{&lt;br /&gt;
&lt;br /&gt;
  public int a;&lt;br /&gt;
  public int b;&lt;br /&gt;
&lt;br /&gt;
  public int count(){&lt;br /&gt;
    return this.a + this.b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse public2.jpg|links|mini|Public Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt eine Klasse mit keinen Variablen aber mit einer public Methode. Der Code dieses Bildes wurde folgendermaßen umgesetzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
public class Klasse{&lt;br /&gt;
&lt;br /&gt;
  public int count(int a, int b){&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.count(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;protected&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
[[Datei:2021-01-29 Klasse protected.jpg|mini|links|protected Variablen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt zwei protected Variablen und eine protected Methode. Die Umsetzung des Codes sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
protected class Klasse{&lt;br /&gt;
&lt;br /&gt;
  protected int a;&lt;br /&gt;
  protected int b;&lt;br /&gt;
&lt;br /&gt;
  protected int divide(){&lt;br /&gt;
    return this.a / this.b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse protected2.jpg|mini|links|protected Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt eine protected Methode ohne Klassenvariablen. Die Klasse wurde in folgenden Code umgesetzt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
protected class Klasse{&lt;br /&gt;
&lt;br /&gt;
  protected int divide(int a, int b){&lt;br /&gt;
    return a / b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.divide(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;private&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
[[Datei:2021-01-29 Klasse private.jpg|mini|links|private Variablen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die oben dargestellte UML-Klasse zeigt zwei private Variablen und eine private Methode an. Der Code dieser Klasse sieht wie folgt aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
private class Klasse{&lt;br /&gt;
&lt;br /&gt;
  private int a;&lt;br /&gt;
  private int b;&lt;br /&gt;
&lt;br /&gt;
  private int minus(){&lt;br /&gt;
    return this.b - this.a;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse private2.jpg|mini|links|private Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die im oberen Bild dargestellen Klasse wurde in folgenden Code umgewandelt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
private class Klasse{&lt;br /&gt;
&lt;br /&gt;
  private int count(int a, int b){&lt;br /&gt;
    return b - a;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.count(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:UmlCd Interface-1.svg.png|mini|UML Schnittstelle|100px]]&lt;br /&gt;
&lt;br /&gt;
==== Schnittstellen ====&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Schnittstelle&#039;&#039;&#039; wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort &amp;quot;interface&amp;quot; gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
Hier wird an aus einem UML-Diagramm ein Programm erstellt:&lt;br /&gt;
[[Datei:2021-01-29 Schnittstelle.jpg|mini|links|Interface und Implementierung]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In dem oberen Bild sieht man ein Interface mit mehreren Methoden. Diese Methoden werden von einer Klasse namens &#039;&#039;Rectangle&#039;&#039; implementiert. Die Programmierung zu diesen zwei Elementen sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Moveable.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
interface Moveable {&lt;br /&gt;
&lt;br /&gt;
  int left(int x);&lt;br /&gt;
  int right(int x);&lt;br /&gt;
  int up(int y);&lt;br /&gt;
  int down(int y);&lt;br /&gt;
  int forwards(int z);&lt;br /&gt;
  int backwards(int z);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rectangle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
public class Rectangle implements Moveable{&lt;br /&gt;
&lt;br /&gt;
    int positionx;&lt;br /&gt;
    int positiony;&lt;br /&gt;
    int positionz;&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int left(int x) {&lt;br /&gt;
        return positionx - x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int right(int x) {&lt;br /&gt;
        return positionx + x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int up(int y) {&lt;br /&gt;
        return positiony + y;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int down(int y) {&lt;br /&gt;
        return positiony - y;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int forwards(int z) {&lt;br /&gt;
        return positionz + z;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int backwards(int z) {&lt;br /&gt;
        return positionz - z;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:Generalization (UML class diagram).png|mini|100px|Generalisierung]]&lt;br /&gt;
==== Generalisierung ====&lt;br /&gt;
&lt;br /&gt;
Durch eine &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; &amp;quot;erben&amp;quot; speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse &amp;quot;vererbt&amp;quot;. Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wird ein Beispiel zum besseren Verständnis von Generalisierungen gezeigt:&lt;br /&gt;
[[Datei:2021-01-29 Generalisierung.jpg|mini|links|Generalisierung]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In dem oberen dargestellten Bild sieht man eine Generalisierung zwischen einer abstrakten und einer normalen Klassen. Die Umsetzung in JAVA würde wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Animal.java&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.awi3.swp3.animals;&lt;br /&gt;
&lt;br /&gt;
public abstract class Animal {&lt;br /&gt;
	private String habitat;&lt;br /&gt;
	&lt;br /&gt;
	public Animal(String habitat) {&lt;br /&gt;
		this.habitat = habitat;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public abstract void move();&lt;br /&gt;
	&lt;br /&gt;
	public String getHabitat() {&lt;br /&gt;
		return habitat;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fuchs.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.awi3.swp3.animals;&lt;br /&gt;
&lt;br /&gt;
public class Fuchs extends Animal {&lt;br /&gt;
&lt;br /&gt;
	public Fuchs() {&lt;br /&gt;
		super(&amp;quot;Woods/Forest&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	@Override&lt;br /&gt;
	public void move() {&lt;br /&gt;
		System.out.println(&amp;quot;Running round his &amp;quot; + getHabitat());&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Assoziation ====&lt;br /&gt;
&lt;br /&gt;
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;n-äre Assoziation&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
In folgenden Bild sieht man eine Binäre Assoziation. (Binär, weil zwei Klassen miteinander verbunden wurden)&lt;br /&gt;
[[Datei:1920px-UmlCd Assoziation-1.png|mini|links|Binäre Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;reflexive Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Im hier dargestellten Bild sieht man eine reflexive Assoziation, welche auf sich selbst verweist.&lt;br /&gt;
[[Datei:UmlCd Assoziation-2.png|mini|links|Reflexive Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da Assoziationen durch Linien dargestellt werden, müssen diese durch ein Assoziationsende gekennzeichnet werden. Diese Assoziationsenden können folgende Merkmale aufweisen:&lt;br /&gt;
* Sie können eine Multiplizität besitzen. Diese gibt Informationen über das Beziehungsverhältnis zweier Klassen. Diese Zahlen befinden sich &#039;&#039;&#039;nur&#039;&#039;&#039; im &#039;&#039;positiven&#039;&#039; und &#039;&#039;ganzzahligen&#039;&#039; Bereich, wobei der Beginn bei der Zahl 0 liegt.&lt;br /&gt;
** Multiplizitäten werden im folgenden Format angegeben:&lt;br /&gt;
 untereSchranke..obereSchranke&lt;br /&gt;
** Bei * oder auch 0..* wird die untereSchranke als 0 und die obereSchranke als unendlich angenommen.&lt;br /&gt;
** Beide Schranken dürfen nicht 0 oder unbeschränkt sein. Falls beide Grenzen trotzdem gleich groß sind, wird nur die obereSchranke angegeben. &lt;br /&gt;
** Bei einer Multiplizität von 0..1 wird das Element als &#039;&#039;optional&#039;&#039; bezeichnet.&lt;br /&gt;
** Wenn die obereSchranke über dem Wert 1 liegt, wird das Element als mehrwertiges Element bezeichnet, da mehrere Wert annehmbar sind.&lt;br /&gt;
* Sie können Namen besitzen.&lt;br /&gt;
* Sie können eine Sichtbarkeit aufweisen.&lt;br /&gt;
* Es kann spezifiziert werden, ob das Assoziationsende &amp;quot;ordered&amp;quot; und / oder unique ist. &lt;br /&gt;
&lt;br /&gt;
Zudem Assoziationsende kommen oft Multiplizitäten hinzu, welche die Beziehung zwischen den zwei Instanzen regelt. Im folgenden werden auf zwei Arten der Assoziationen genauer eingegangen.&lt;br /&gt;
&lt;br /&gt;
==== Komposition und Aggregation ====&lt;br /&gt;
&lt;br /&gt;
Um Beziehungen mit &#039;&#039;Ganzen&#039;&#039; und &#039;&#039;Teilen&#039;&#039; darzustellen werden die Aggregation und die Komposition verwendet.&lt;br /&gt;
[[Datei:Komposition Aggregation.png|mini|links|Komposition und Aggregation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Komposition ist eine Linie mit einer ausgefüllten Raute, welche mit der Kardinalität 1 beschriftet wird und mit dem Ganzen Teil der Beziehungspartner verbunden ist. Bei einer Komposition können die &#039;&#039;Teile&#039;&#039; nicht ohne das &#039;&#039;Ganze&#039;&#039; existieren. Das bedeutet, dass das &#039;&#039;Teil&#039;&#039; Element existenziell abhängig von &#039;&#039;Ganz&#039;&#039; Element ist.&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Aggregation ist eine Linie mit einer nicht ausgefüllten Raute, welche die Kardinalität 0..* besitzt und mit dem &#039;&#039;Ganzen&#039;&#039; Teil verbunden ist. Die Elemente in einer Aggregation besitzen keine Exisitenzabhängigkeit, da die &#039;&#039;Teil&#039;&#039; Elemente auch ohne die &#039;&#039;Ganz&#039;&#039; Elemente bestehen können. &lt;br /&gt;
&lt;br /&gt;
Die Assoziationsarten werden prinzipiell mittels der Kardinalität unterschieden. Zudem sind die &#039;&#039;Teil&#039;&#039; Elemente Bestandteil genau eines &#039;&#039;Ganz&#039;&#039; Elementes, da sie NIE zu mehrere &#039;&#039;Ganz&#039;&#039; Elementen gehören.&lt;br /&gt;
&lt;br /&gt;
== Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber == &lt;br /&gt;
&lt;br /&gt;
Diese Umsetzung erfolgte mit der Programmiersprache JAVA.&lt;br /&gt;
[[Datei:Screenshot 2021-01-22 143552.jpg|mini|600px|none|Fahrzeuge in einem UML Klassendiagramm]]&lt;br /&gt;
&#039;&#039;&#039;Vehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle;&lt;br /&gt;
&lt;br /&gt;
public abstract class Vehicle {&lt;br /&gt;
    private int maxSpeed;&lt;br /&gt;
    private int wheels;&lt;br /&gt;
&lt;br /&gt;
    public Vehicle(int maxSpeed, int wheels) {&lt;br /&gt;
        this.maxSpeed = maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void move() {&lt;br /&gt;
        System.out.println(&amp;quot;I am moving at &amp;quot; + maxSpeed + &amp;quot; with &amp;quot; + wheels + &amp;quot; wheels.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public int getMaxSpeed() {&lt;br /&gt;
        return maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public abstract void start();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
public class Bike extends Vehicle {&lt;br /&gt;
    public Bike(int maxSpeed, int wheels) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start to step into the pedals!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rollerblades.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Rollerblades extends Vehicle {&lt;br /&gt;
    public Rollerblades(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 8);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start skate!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Skateboard.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Skateboard extends Vehicle {&lt;br /&gt;
    public Skateboard(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 4);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I step with one feet on the ground to start!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MotorizedVehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public abstract class MotorizedVehicle extends Vehicle {&lt;br /&gt;
    private float kw;&lt;br /&gt;
&lt;br /&gt;
    public MotorizedVehicle(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
        this.kw = kw;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I am starting my engine with &amp;quot; + kw + &amp;quot; kw.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EBike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class EBike extends MotorizedVehicle {&lt;br /&gt;
    public EBike(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 2, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Lkw extends MotorizedVehicle {&lt;br /&gt;
    public Lkw(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Pkw extends MotorizedVehicle {&lt;br /&gt;
    public Pkw(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 4, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language&lt;br /&gt;
&lt;br /&gt;
https://www.sparxsystems.de/ressourcen/literatur/leseprobe-zu-projektabwicklung-mit-uml-und-enterprise-architect/klassendiagramm-class-diagram/&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Assoziation_(UML)&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Multiplizit%C3%A4t_(UML)&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=1303</id>
		<title>UML Klassendiagramm</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=1303"/>
		<updated>2021-02-05T09:26:25Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: /* Generalisierung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Was ist ein Klassendiagramm? ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm bildet ein Kernstück der &#039;&#039;&#039;U&#039;&#039;&#039;nified &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;L&#039;&#039;&#039;anguage (&#039;&#039;&#039;UML&#039;&#039;&#039;). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsgebiete von Klassendiagramme ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm wird verwendet, um die Programme einfacher und übersichtlicher darzustellen und diese dann anschließend umzusetzen.&lt;br /&gt;
&lt;br /&gt;
== Bausteine eines Klassendiagramms ==&lt;br /&gt;
&lt;br /&gt;
Klassenmodelle unterteilen sich in folgende Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Klassen&lt;br /&gt;
* Schnittstellen&lt;br /&gt;
* Generalisierung&lt;br /&gt;
* Assoziation&lt;br /&gt;
** Komposition&lt;br /&gt;
** Aggregation&lt;br /&gt;
[[Datei:Screenshot 2021-01-08 132401.jpg|mini|UML Klasse aus DIA]]&lt;br /&gt;
==== Klassen ====&lt;br /&gt;
&lt;br /&gt;
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie &amp;quot;{abstrakt}&amp;quot; über dem Namen der Klasse tragen. &lt;br /&gt;
Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039; oder auch &#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
Bei einer &#039;&#039;&#039;public&#039;&#039;&#039; oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.&lt;br /&gt;
* &#039;&#039;&#039;protected&#039;&#039;&#039; oder auch &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;protected&#039;&#039;&#039; Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.&lt;br /&gt;
* &#039;&#039;&#039;private&#039;&#039;&#039; oder auch &#039;&#039;&#039;−&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;private&#039;&#039;&#039; Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden. &lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; oder auch &#039;&#039;&#039;~&#039;&#039;&#039;&lt;br /&gt;
Bei einer Klasse mit einer &#039;&#039;&#039;package&#039;&#039;&#039; Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier wird im Folgenden Klassen anhand von Beispielen gezeigt:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;public&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:2021-01-29 Klasse_public.jpg|links|mini|Public Attribute]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese oben dargestellte Methode verfügt über zwei public Variablen und einer public Methode, wobei der Fokus auf den Variablen liegt. Der Code sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
public class Klasse{&lt;br /&gt;
&lt;br /&gt;
  public int a;&lt;br /&gt;
  public int b;&lt;br /&gt;
&lt;br /&gt;
  public int count(){&lt;br /&gt;
    return this.a + this.b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse public2.jpg|links|mini|Public Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt eine Klasse mit keinen Variablen aber mit einer public Methode. Der Code dieses Bildes wurde folgendermaßen umgesetzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
public class Klasse{&lt;br /&gt;
&lt;br /&gt;
  public int count(int a, int b){&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.count(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;protected&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
[[Datei:2021-01-29 Klasse protected.jpg|mini|links|protected Variablen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt zwei protected Variablen und eine protected Methode. Die Umsetzung des Codes sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
protected class Klasse{&lt;br /&gt;
&lt;br /&gt;
  protected int a;&lt;br /&gt;
  protected int b;&lt;br /&gt;
&lt;br /&gt;
  protected int divide(){&lt;br /&gt;
    return this.a / this.b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse protected2.jpg|mini|links|protected Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt eine protected Methode ohne Klassenvariablen. Die Klasse wurde in folgenden Code umgesetzt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
protected class Klasse{&lt;br /&gt;
&lt;br /&gt;
  protected int divide(int a, int b){&lt;br /&gt;
    return a / b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.divide(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;private&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
[[Datei:2021-01-29 Klasse private.jpg|mini|links|private Variablen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die oben dargestellte UML-Klasse zeigt zwei private Variablen und eine private Methode an. Der Code dieser Klasse sieht wie folgt aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
private class Klasse{&lt;br /&gt;
&lt;br /&gt;
  private int a;&lt;br /&gt;
  private int b;&lt;br /&gt;
&lt;br /&gt;
  private int minus(){&lt;br /&gt;
    return this.b - this.a;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse private2.jpg|mini|links|private Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die im oberen Bild dargestellen Klasse wurde in folgenden Code umgewandelt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
private class Klasse{&lt;br /&gt;
&lt;br /&gt;
  private int count(int a, int b){&lt;br /&gt;
    return b - a;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.count(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:UmlCd Interface-1.svg.png|mini|UML Schnittstelle|100px]]&lt;br /&gt;
&lt;br /&gt;
==== Schnittstellen ====&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Schnittstelle&#039;&#039;&#039; wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort &amp;quot;interface&amp;quot; gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
Hier wird an aus einem UML-Diagramm ein Programm erstellt:&lt;br /&gt;
[[Datei:2021-01-29 Schnittstelle.jpg|mini|links|Interface und Implementierung]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In dem oberen Bild sieht man ein Interface mit mehreren Methoden. Diese Methoden werden von einer Klasse namens &#039;&#039;Rectangle&#039;&#039; implementiert. Die Programmierung zu diesen zwei Elementen sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Moveable.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
interface Moveable {&lt;br /&gt;
&lt;br /&gt;
  int left(int x);&lt;br /&gt;
  int right(int x);&lt;br /&gt;
  int up(int y);&lt;br /&gt;
  int down(int y);&lt;br /&gt;
  int forwards(int z);&lt;br /&gt;
  int backwards(int z);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rectangle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
public class Rectangle implements Moveable{&lt;br /&gt;
&lt;br /&gt;
    int positionx;&lt;br /&gt;
    int positiony;&lt;br /&gt;
    int positionz;&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int left(int x) {&lt;br /&gt;
        return positionx - x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int right(int x) {&lt;br /&gt;
        return positionx + x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int up(int y) {&lt;br /&gt;
        return positiony + y;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int down(int y) {&lt;br /&gt;
        return positiony - y;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int forwards(int z) {&lt;br /&gt;
        return positionz + z;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int backwards(int z) {&lt;br /&gt;
        return positionz - z;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:Generalization (UML class diagram).png|mini|100px|Generalisierung]]&lt;br /&gt;
==== Generalisierung ====&lt;br /&gt;
&lt;br /&gt;
Durch eine &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; &amp;quot;erben&amp;quot; speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse &amp;quot;vererbt&amp;quot;. Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wird ein Beispiel zum besseren Verständnis von Generalisierungen gezeigt:&lt;br /&gt;
[[Datei:2021-01-29 Generalisierung.jpg|mini|links|Generalisierung]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In dem oberen dargestellten Bild sieht man eine Generalisierung zwischen einer abstrakten und einer normalen Klassen. Die Umsetzung in JAVA würde wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Animal.java&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.awi3.swp3.animals;&lt;br /&gt;
&lt;br /&gt;
public abstract class Animal {&lt;br /&gt;
	private String habitat;&lt;br /&gt;
	&lt;br /&gt;
	public Animal(String habitat) {&lt;br /&gt;
		this.habitat = habitat;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public abstract void move();&lt;br /&gt;
	&lt;br /&gt;
	public String getHabitat() {&lt;br /&gt;
		return habitat;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fuchs.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.awi3.swp3.animals;&lt;br /&gt;
&lt;br /&gt;
public class Fuchs extends Animal {&lt;br /&gt;
&lt;br /&gt;
	public Fuchs() {&lt;br /&gt;
		super(&amp;quot;Woods/Forest&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	@Override&lt;br /&gt;
	public void move() {&lt;br /&gt;
		System.out.println(&amp;quot;Running round his &amp;quot; + getHabitat());&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Assoziation ====&lt;br /&gt;
&lt;br /&gt;
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;n-äre Assoziation&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
In folgenden Bild sieht man eine Binäre Assoziation. (Binär, weil zwei Klassen miteinander verbunden wurden)&lt;br /&gt;
[[Datei:1920px-UmlCd Assoziation-1.png|mini|links|Binäre Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;reflexive Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Im hier dargestellten Bild sieht man eine reflexive Assoziation, welche auf sich selbst verweist.&lt;br /&gt;
[[Datei:UmlCd Assoziation-2.png|mini|links|Reflexive Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da Assoziationen durch Linien dargestellt werden, müssen diese durch ein Assoziationsende gekennzeichnet werden. Diese Assoziationsenden können folgende Merkmale aufweisen:&lt;br /&gt;
* Sie können eine Multiplizität besitzen. Diese gibt Informationen über das Beziehungsverhältnis zweier Klassen. Diese Zahlen befinden sich &#039;&#039;&#039;nur&#039;&#039;&#039; im &#039;&#039;positiven&#039;&#039; und &#039;&#039;ganzzahligen&#039;&#039; Bereich, wobei der Beginn bei der Zahl 0 liegt.&lt;br /&gt;
** Multiplizitäten werden im folgenden Format angegeben:&lt;br /&gt;
 untereSchranke..obereSchranke&lt;br /&gt;
** Bei * oder auch 0..* wird die untereSchranke als 0 und die obereSchranke als unendlich angenommen.&lt;br /&gt;
** Beide Schranken dürfen nicht 0 oder unbeschränkt sein. Falls beide Grenzen trotzdem gleich groß sind, wird nur die obereSchranke angegeben. &lt;br /&gt;
** Bei einer Multiplizität von 0..1 wird das Element als &#039;&#039;optional&#039;&#039; bezeichnet.&lt;br /&gt;
** Wenn die obereSchranke über dem Wert 1 liegt, wird das Element als mehrwertiges Element bezeichnet, da mehrere Wert annehmbar sind.&lt;br /&gt;
* Sie können Namen besitzen.&lt;br /&gt;
* Sie können eine Sichtbarkeit aufweisen.&lt;br /&gt;
* Es kann spezifiziert werden, ob das Assoziationsende &amp;quot;ordered&amp;quot; und / oder unique ist. &lt;br /&gt;
&lt;br /&gt;
Zudem Assoziationsende kommen oft Multiplizitäten hinzu, welche die Beziehung zwischen den zwei Instanzen regelt. Im folgenden werden auf zwei Arten der Assoziationen genauer eingegangen.&lt;br /&gt;
&lt;br /&gt;
==== Komposition und Aggregation ====&lt;br /&gt;
&lt;br /&gt;
Um Beziehungen mit &#039;&#039;Ganzen&#039;&#039; und &#039;&#039;Teilen&#039;&#039; darzustellen werden die Aggregation und die Komposition verwendet.&lt;br /&gt;
[[Datei:Komposition Aggregation.png|mini|links|Komposition und Aggregation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Komposition ist eine Linie mit einer ausgefüllten Raute, welche mit der Kardinalität 1 beschriftet wird und mit dem Ganzen Teil der Beziehungspartner verbunden ist. Bei einer Komposition können die &#039;&#039;Teile&#039;&#039; nicht ohne das &#039;&#039;Ganze&#039;&#039; existieren. Das bedeutet, dass das &#039;&#039;Teil&#039;&#039; Element existenziell abhängig von &#039;&#039;Ganz&#039;&#039; Element ist.&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Aggregation ist eine Linie mit einer nicht ausgefüllten Raute, welche die Kardinalität 0..* besitzt und mit dem &#039;&#039;Ganzen&#039;&#039; Teil verbunden ist. Die Elemente in einer Aggregation besitzen keine Exisitenzabhängigkeit, da die &#039;&#039;Teil&#039;&#039; Elemente auch ohne die &#039;&#039;Ganz&#039;&#039; Elemente bestehen können. &lt;br /&gt;
&lt;br /&gt;
Die Assoziationsarten werden prinzipiell mittels der Kardinalität unterschieden. Zudem sind die &#039;&#039;Teil&#039;&#039; Elemente Bestandteil genau eines &#039;&#039;Ganz&#039;&#039; Elementes, da sie NIE zu mehrere &#039;&#039;Ganz&#039;&#039; Elementen gehören. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber == &lt;br /&gt;
&lt;br /&gt;
Diese Umsetzung erfolgte mit der Programmiersprache JAVA.&lt;br /&gt;
[[Datei:Screenshot 2021-01-22 143552.jpg|mini|600px|none|Fahrzeuge in einem UML Klassendiagramm]]&lt;br /&gt;
&#039;&#039;&#039;Vehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle;&lt;br /&gt;
&lt;br /&gt;
public abstract class Vehicle {&lt;br /&gt;
    private int maxSpeed;&lt;br /&gt;
    private int wheels;&lt;br /&gt;
&lt;br /&gt;
    public Vehicle(int maxSpeed, int wheels) {&lt;br /&gt;
        this.maxSpeed = maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void move() {&lt;br /&gt;
        System.out.println(&amp;quot;I am moving at &amp;quot; + maxSpeed + &amp;quot; with &amp;quot; + wheels + &amp;quot; wheels.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public int getMaxSpeed() {&lt;br /&gt;
        return maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public abstract void start();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
public class Bike extends Vehicle {&lt;br /&gt;
    public Bike(int maxSpeed, int wheels) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start to step into the pedals!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rollerblades.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Rollerblades extends Vehicle {&lt;br /&gt;
    public Rollerblades(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 8);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start skate!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Skateboard.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Skateboard extends Vehicle {&lt;br /&gt;
    public Skateboard(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 4);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I step with one feet on the ground to start!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MotorizedVehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public abstract class MotorizedVehicle extends Vehicle {&lt;br /&gt;
    private float kw;&lt;br /&gt;
&lt;br /&gt;
    public MotorizedVehicle(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
        this.kw = kw;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I am starting my engine with &amp;quot; + kw + &amp;quot; kw.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EBike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class EBike extends MotorizedVehicle {&lt;br /&gt;
    public EBike(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 2, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Lkw extends MotorizedVehicle {&lt;br /&gt;
    public Lkw(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Pkw extends MotorizedVehicle {&lt;br /&gt;
    public Pkw(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 4, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language&lt;br /&gt;
&lt;br /&gt;
https://www.sparxsystems.de/ressourcen/literatur/leseprobe-zu-projektabwicklung-mit-uml-und-enterprise-architect/klassendiagramm-class-diagram/&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Assoziation_(UML)&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Multiplizit%C3%A4t_(UML)&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=1302</id>
		<title>UML Klassendiagramm</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=1302"/>
		<updated>2021-02-05T09:25:52Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: /* Klassen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Was ist ein Klassendiagramm? ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm bildet ein Kernstück der &#039;&#039;&#039;U&#039;&#039;&#039;nified &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;L&#039;&#039;&#039;anguage (&#039;&#039;&#039;UML&#039;&#039;&#039;). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsgebiete von Klassendiagramme ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm wird verwendet, um die Programme einfacher und übersichtlicher darzustellen und diese dann anschließend umzusetzen.&lt;br /&gt;
&lt;br /&gt;
== Bausteine eines Klassendiagramms ==&lt;br /&gt;
&lt;br /&gt;
Klassenmodelle unterteilen sich in folgende Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Klassen&lt;br /&gt;
* Schnittstellen&lt;br /&gt;
* Generalisierung&lt;br /&gt;
* Assoziation&lt;br /&gt;
** Komposition&lt;br /&gt;
** Aggregation&lt;br /&gt;
[[Datei:Screenshot 2021-01-08 132401.jpg|mini|UML Klasse aus DIA]]&lt;br /&gt;
==== Klassen ====&lt;br /&gt;
&lt;br /&gt;
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie &amp;quot;{abstrakt}&amp;quot; über dem Namen der Klasse tragen. &lt;br /&gt;
Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039; oder auch &#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
Bei einer &#039;&#039;&#039;public&#039;&#039;&#039; oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.&lt;br /&gt;
* &#039;&#039;&#039;protected&#039;&#039;&#039; oder auch &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;protected&#039;&#039;&#039; Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.&lt;br /&gt;
* &#039;&#039;&#039;private&#039;&#039;&#039; oder auch &#039;&#039;&#039;−&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;private&#039;&#039;&#039; Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden. &lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; oder auch &#039;&#039;&#039;~&#039;&#039;&#039;&lt;br /&gt;
Bei einer Klasse mit einer &#039;&#039;&#039;package&#039;&#039;&#039; Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier wird im Folgenden Klassen anhand von Beispielen gezeigt:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;public&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:2021-01-29 Klasse_public.jpg|links|mini|Public Attribute]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese oben dargestellte Methode verfügt über zwei public Variablen und einer public Methode, wobei der Fokus auf den Variablen liegt. Der Code sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
public class Klasse{&lt;br /&gt;
&lt;br /&gt;
  public int a;&lt;br /&gt;
  public int b;&lt;br /&gt;
&lt;br /&gt;
  public int count(){&lt;br /&gt;
    return this.a + this.b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse public2.jpg|links|mini|Public Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt eine Klasse mit keinen Variablen aber mit einer public Methode. Der Code dieses Bildes wurde folgendermaßen umgesetzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
public class Klasse{&lt;br /&gt;
&lt;br /&gt;
  public int count(int a, int b){&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.count(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;protected&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
[[Datei:2021-01-29 Klasse protected.jpg|mini|links|protected Variablen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt zwei protected Variablen und eine protected Methode. Die Umsetzung des Codes sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
protected class Klasse{&lt;br /&gt;
&lt;br /&gt;
  protected int a;&lt;br /&gt;
  protected int b;&lt;br /&gt;
&lt;br /&gt;
  protected int divide(){&lt;br /&gt;
    return this.a / this.b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse protected2.jpg|mini|links|protected Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt eine protected Methode ohne Klassenvariablen. Die Klasse wurde in folgenden Code umgesetzt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
protected class Klasse{&lt;br /&gt;
&lt;br /&gt;
  protected int divide(int a, int b){&lt;br /&gt;
    return a / b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.divide(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;private&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
[[Datei:2021-01-29 Klasse private.jpg|mini|links|private Variablen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die oben dargestellte UML-Klasse zeigt zwei private Variablen und eine private Methode an. Der Code dieser Klasse sieht wie folgt aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
private class Klasse{&lt;br /&gt;
&lt;br /&gt;
  private int a;&lt;br /&gt;
  private int b;&lt;br /&gt;
&lt;br /&gt;
  private int minus(){&lt;br /&gt;
    return this.b - this.a;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse private2.jpg|mini|links|private Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die im oberen Bild dargestellen Klasse wurde in folgenden Code umgewandelt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
private class Klasse{&lt;br /&gt;
&lt;br /&gt;
  private int count(int a, int b){&lt;br /&gt;
    return b - a;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.count(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:UmlCd Interface-1.svg.png|mini|UML Schnittstelle|100px]]&lt;br /&gt;
&lt;br /&gt;
==== Schnittstellen ====&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Schnittstelle&#039;&#039;&#039; wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort &amp;quot;interface&amp;quot; gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
Hier wird an aus einem UML-Diagramm ein Programm erstellt:&lt;br /&gt;
[[Datei:2021-01-29 Schnittstelle.jpg|mini|links|Interface und Implementierung]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In dem oberen Bild sieht man ein Interface mit mehreren Methoden. Diese Methoden werden von einer Klasse namens &#039;&#039;Rectangle&#039;&#039; implementiert. Die Programmierung zu diesen zwei Elementen sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Moveable.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
interface Moveable {&lt;br /&gt;
&lt;br /&gt;
  int left(int x);&lt;br /&gt;
  int right(int x);&lt;br /&gt;
  int up(int y);&lt;br /&gt;
  int down(int y);&lt;br /&gt;
  int forwards(int z);&lt;br /&gt;
  int backwards(int z);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rectangle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
public class Rectangle implements Moveable{&lt;br /&gt;
&lt;br /&gt;
    int positionx;&lt;br /&gt;
    int positiony;&lt;br /&gt;
    int positionz;&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int left(int x) {&lt;br /&gt;
        return positionx - x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int right(int x) {&lt;br /&gt;
        return positionx + x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int up(int y) {&lt;br /&gt;
        return positiony + y;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int down(int y) {&lt;br /&gt;
        return positiony - y;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int forwards(int z) {&lt;br /&gt;
        return positionz + z;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int backwards(int z) {&lt;br /&gt;
        return positionz - z;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:Generalization (UML class diagram).png|mini|100px|Generalisierung]]&lt;br /&gt;
==== Generalisierung ====&lt;br /&gt;
&lt;br /&gt;
Durch eine &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; &amp;quot;erben&amp;quot; speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse &amp;quot;vererbt&amp;quot;. Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wird ein Beispiel zum besseren Verständnis von Generalisierungen gezeigt:&lt;br /&gt;
[[Datei:2021-01-29 Generalisierung.jpg|mini|links|Generalisierung]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In dem oberen dargestellten Bild sieht man eine Generalisierung zwischen einer abstrakten und einer normalen Klassen. Die Umsetzung in JAVA würde wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Animal.java&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.awi3.swp3.animals;&lt;br /&gt;
&lt;br /&gt;
public abstract class Animal {&lt;br /&gt;
	private String habitat;&lt;br /&gt;
	&lt;br /&gt;
	public Animal(String habitat) {&lt;br /&gt;
		this.habitat = habitat;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public abstract void move();&lt;br /&gt;
	&lt;br /&gt;
	public String getHabitat() {&lt;br /&gt;
		return habitat;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fuchs.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.awi3.swp3.animals;&lt;br /&gt;
&lt;br /&gt;
public class Fuchs extends Animal {&lt;br /&gt;
&lt;br /&gt;
	public Fuchs() {&lt;br /&gt;
		super(&amp;quot;Woods/Forest&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	@Override&lt;br /&gt;
	public void move() {&lt;br /&gt;
		System.out.println(&amp;quot;Running round his &amp;quot; + getHabitat());&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Assoziation ====&lt;br /&gt;
&lt;br /&gt;
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;n-äre Assoziation&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
In folgenden Bild sieht man eine Binäre Assoziation. (Binär, weil zwei Klassen miteinander verbunden wurden)&lt;br /&gt;
[[Datei:1920px-UmlCd Assoziation-1.png|mini|links|Binäre Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;reflexive Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Im hier dargestellten Bild sieht man eine reflexive Assoziation, welche auf sich selbst verweist.&lt;br /&gt;
[[Datei:UmlCd Assoziation-2.png|mini|links|Reflexive Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da Assoziationen durch Linien dargestellt werden, müssen diese durch ein Assoziationsende gekennzeichnet werden. Diese Assoziationsenden können folgende Merkmale aufweisen:&lt;br /&gt;
* Sie können eine Multiplizität besitzen. Diese gibt Informationen über das Beziehungsverhältnis zweier Klassen. Diese Zahlen befinden sich &#039;&#039;&#039;nur&#039;&#039;&#039; im &#039;&#039;positiven&#039;&#039; und &#039;&#039;ganzzahligen&#039;&#039; Bereich, wobei der Beginn bei der Zahl 0 liegt.&lt;br /&gt;
** Multiplizitäten werden im folgenden Format angegeben:&lt;br /&gt;
 untereSchranke..obereSchranke&lt;br /&gt;
** Bei * oder auch 0..* wird die untereSchranke als 0 und die obereSchranke als unendlich angenommen.&lt;br /&gt;
** Beide Schranken dürfen nicht 0 oder unbeschränkt sein. Falls beide Grenzen trotzdem gleich groß sind, wird nur die obereSchranke angegeben. &lt;br /&gt;
** Bei einer Multiplizität von 0..1 wird das Element als &#039;&#039;optional&#039;&#039; bezeichnet.&lt;br /&gt;
** Wenn die obereSchranke über dem Wert 1 liegt, wird das Element als mehrwertiges Element bezeichnet, da mehrere Wert annehmbar sind.&lt;br /&gt;
* Sie können Namen besitzen.&lt;br /&gt;
* Sie können eine Sichtbarkeit aufweisen.&lt;br /&gt;
* Es kann spezifiziert werden, ob das Assoziationsende &amp;quot;ordered&amp;quot; und / oder unique ist. &lt;br /&gt;
&lt;br /&gt;
Zudem Assoziationsende kommen oft Multiplizitäten hinzu, welche die Beziehung zwischen den zwei Instanzen regelt. Im folgenden werden auf zwei Arten der Assoziationen genauer eingegangen.&lt;br /&gt;
&lt;br /&gt;
==== Komposition und Aggregation ====&lt;br /&gt;
&lt;br /&gt;
Um Beziehungen mit &#039;&#039;Ganzen&#039;&#039; und &#039;&#039;Teilen&#039;&#039; darzustellen werden die Aggregation und die Komposition verwendet.&lt;br /&gt;
[[Datei:Komposition Aggregation.png|mini|links|Komposition und Aggregation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Komposition ist eine Linie mit einer ausgefüllten Raute, welche mit der Kardinalität 1 beschriftet wird und mit dem Ganzen Teil der Beziehungspartner verbunden ist. Bei einer Komposition können die &#039;&#039;Teile&#039;&#039; nicht ohne das &#039;&#039;Ganze&#039;&#039; existieren. Das bedeutet, dass das &#039;&#039;Teil&#039;&#039; Element existenziell abhängig von &#039;&#039;Ganz&#039;&#039; Element ist.&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Aggregation ist eine Linie mit einer nicht ausgefüllten Raute, welche die Kardinalität 0..* besitzt und mit dem &#039;&#039;Ganzen&#039;&#039; Teil verbunden ist. Die Elemente in einer Aggregation besitzen keine Exisitenzabhängigkeit, da die &#039;&#039;Teil&#039;&#039; Elemente auch ohne die &#039;&#039;Ganz&#039;&#039; Elemente bestehen können. &lt;br /&gt;
&lt;br /&gt;
Die Assoziationsarten werden prinzipiell mittels der Kardinalität unterschieden. Zudem sind die &#039;&#039;Teil&#039;&#039; Elemente Bestandteil genau eines &#039;&#039;Ganz&#039;&#039; Elementes, da sie NIE zu mehrere &#039;&#039;Ganz&#039;&#039; Elementen gehören. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber == &lt;br /&gt;
&lt;br /&gt;
Diese Umsetzung erfolgte mit der Programmiersprache JAVA.&lt;br /&gt;
[[Datei:Screenshot 2021-01-22 143552.jpg|mini|600px|none|Fahrzeuge in einem UML Klassendiagramm]]&lt;br /&gt;
&#039;&#039;&#039;Vehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle;&lt;br /&gt;
&lt;br /&gt;
public abstract class Vehicle {&lt;br /&gt;
    private int maxSpeed;&lt;br /&gt;
    private int wheels;&lt;br /&gt;
&lt;br /&gt;
    public Vehicle(int maxSpeed, int wheels) {&lt;br /&gt;
        this.maxSpeed = maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void move() {&lt;br /&gt;
        System.out.println(&amp;quot;I am moving at &amp;quot; + maxSpeed + &amp;quot; with &amp;quot; + wheels + &amp;quot; wheels.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public int getMaxSpeed() {&lt;br /&gt;
        return maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public abstract void start();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
public class Bike extends Vehicle {&lt;br /&gt;
    public Bike(int maxSpeed, int wheels) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start to step into the pedals!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rollerblades.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Rollerblades extends Vehicle {&lt;br /&gt;
    public Rollerblades(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 8);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start skate!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Skateboard.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Skateboard extends Vehicle {&lt;br /&gt;
    public Skateboard(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 4);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I step with one feet on the ground to start!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MotorizedVehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public abstract class MotorizedVehicle extends Vehicle {&lt;br /&gt;
    private float kw;&lt;br /&gt;
&lt;br /&gt;
    public MotorizedVehicle(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
        this.kw = kw;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I am starting my engine with &amp;quot; + kw + &amp;quot; kw.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EBike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class EBike extends MotorizedVehicle {&lt;br /&gt;
    public EBike(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 2, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Lkw extends MotorizedVehicle {&lt;br /&gt;
    public Lkw(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Pkw extends MotorizedVehicle {&lt;br /&gt;
    public Pkw(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 4, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language&lt;br /&gt;
&lt;br /&gt;
https://www.sparxsystems.de/ressourcen/literatur/leseprobe-zu-projektabwicklung-mit-uml-und-enterprise-architect/klassendiagramm-class-diagram/&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Assoziation_(UML)&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Multiplizit%C3%A4t_(UML)&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=1301</id>
		<title>UML Klassendiagramm</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=1301"/>
		<updated>2021-02-05T09:23:15Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: /* Anwendungsgebiete von Klassendiagramme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Was ist ein Klassendiagramm? ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm bildet ein Kernstück der &#039;&#039;&#039;U&#039;&#039;&#039;nified &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;L&#039;&#039;&#039;anguage (&#039;&#039;&#039;UML&#039;&#039;&#039;). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsgebiete von Klassendiagramme ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm wird verwendet, um die Programme einfacher und übersichtlicher darzustellen und diese dann anschließend umzusetzen.&lt;br /&gt;
&lt;br /&gt;
== Bausteine eines Klassendiagramms ==&lt;br /&gt;
&lt;br /&gt;
Klassenmodelle unterteilen sich in folgende Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Klassen&lt;br /&gt;
* Schnittstellen&lt;br /&gt;
* Generalisierung&lt;br /&gt;
* Assoziation&lt;br /&gt;
** Komposition&lt;br /&gt;
** Aggregation&lt;br /&gt;
[[Datei:Screenshot 2021-01-08 132401.jpg|mini|UML Klasse aus DIA]]&lt;br /&gt;
==== Klassen ====&lt;br /&gt;
&lt;br /&gt;
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie &amp;quot;{abstrakt}&amp;quot; über dem Namen der Klasse tragen. &lt;br /&gt;
Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039; oder auch &#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
Bei einer &#039;&#039;&#039;public&#039;&#039;&#039; oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.&lt;br /&gt;
* &#039;&#039;&#039;protected&#039;&#039;&#039; oder auch &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;protected&#039;&#039;&#039; Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.&lt;br /&gt;
* &#039;&#039;&#039;private&#039;&#039;&#039; oder auch &#039;&#039;&#039;−&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;private&#039;&#039;&#039; Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden. &lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; oder auch &#039;&#039;&#039;~&#039;&#039;&#039;&lt;br /&gt;
Bei einer Klasse mit einer &#039;&#039;&#039;package&#039;&#039;&#039; Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier wird im Folgenden Klassen anhand von Beispielen gezeigt:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;public&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:2021-01-29 Klasse_public.jpg|links|mini|Public Attribute]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese oben dargestellte Methode verfügt über zwei public Variablen und einer public Methode, wobei der Fokus auf den Variablen liegt. Der Code sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
public class Klasse{&lt;br /&gt;
&lt;br /&gt;
  public int a;&lt;br /&gt;
  public int b;&lt;br /&gt;
&lt;br /&gt;
  public int count(){&lt;br /&gt;
    return this.a + this.b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse public2.jpg|links|mini|Public Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt eine Klasse mit keinen Variablen aber mit einer public Methode. Der Code dieses Bildes wurde folgendermaßen umgesetzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
public class Klasse{&lt;br /&gt;
&lt;br /&gt;
  public int count(int a, int b){&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.count(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;protected&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
[[Datei:2021-01-29 Klasse protected.jpg|mini|links|protected Variablen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt zwei protected Variablen und eine protected Methode. Die Umsetzung des Codes sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
protected class Klasse{&lt;br /&gt;
&lt;br /&gt;
  protected int a;&lt;br /&gt;
  protected int b;&lt;br /&gt;
&lt;br /&gt;
  protected int divide(){&lt;br /&gt;
    return this.a / this.b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse protected2.jpg|mini|links|protected Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt eine protected Methode ohne Klassenvariablen. Die Klasse wurde in folgenden Code umgesetzt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
protected class Klasse{&lt;br /&gt;
&lt;br /&gt;
  protected int divide(int a, int b){&lt;br /&gt;
    return a / b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.divide(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;private&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
[[Datei:2021-01-29 Klasse private.jpg|mini|links|private Variablen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die oben dargestellte UML-Klasse zeigt zwei private Variablen und eine private Methode an. Der Code dieser Klasse sieht wie folgt aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
private class Klasse{&lt;br /&gt;
&lt;br /&gt;
  private int a;&lt;br /&gt;
  private int b;&lt;br /&gt;
&lt;br /&gt;
  private int minus(){&lt;br /&gt;
    return this.b - this.a;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse private2.jpg|mini|links|private Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die im oberen Bild dargestellen Klasse wurde in folgenden Code umgewandelt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
private class Klasse{&lt;br /&gt;
&lt;br /&gt;
  private int count(int a, int b){&lt;br /&gt;
    return b - a;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.count(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:UmlCd Interface-1.svg.png|mini|UML Schnittstelle|100px]]&lt;br /&gt;
==== Schnittstellen ====&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Schnittstelle&#039;&#039;&#039; wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort &amp;quot;interface&amp;quot; gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
Hier wird an aus einem UML-Diagramm ein Programm erstellt:&lt;br /&gt;
[[Datei:2021-01-29 Schnittstelle.jpg|mini|links|Interface und Implementierung]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In dem oberen Bild sieht man ein Interface mit mehreren Methoden. Diese Methoden werden von einer Klasse namens &#039;&#039;Rectangle&#039;&#039; implementiert. Die Programmierung zu diesen zwei Elementen sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Moveable.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
interface Moveable {&lt;br /&gt;
&lt;br /&gt;
  int left(int x);&lt;br /&gt;
  int right(int x);&lt;br /&gt;
  int up(int y);&lt;br /&gt;
  int down(int y);&lt;br /&gt;
  int forwards(int z);&lt;br /&gt;
  int backwards(int z);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rectangle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
public class Rectangle implements Moveable{&lt;br /&gt;
&lt;br /&gt;
    int positionx;&lt;br /&gt;
    int positiony;&lt;br /&gt;
    int positionz;&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int left(int x) {&lt;br /&gt;
        return positionx - x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int right(int x) {&lt;br /&gt;
        return positionx + x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int up(int y) {&lt;br /&gt;
        return positiony + y;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int down(int y) {&lt;br /&gt;
        return positiony - y;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int forwards(int z) {&lt;br /&gt;
        return positionz + z;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int backwards(int z) {&lt;br /&gt;
        return positionz - z;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:Generalization (UML class diagram).png|mini|100px|Generalisierung]]&lt;br /&gt;
==== Generalisierung ====&lt;br /&gt;
&lt;br /&gt;
Durch eine &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; &amp;quot;erben&amp;quot; speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse &amp;quot;vererbt&amp;quot;. Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wird ein Beispiel zum besseren Verständnis von Generalisierungen gezeigt:&lt;br /&gt;
[[Datei:2021-01-29 Generalisierung.jpg|mini|links|Generalisierung]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In dem oberen dargestellten Bild sieht man eine Generalisierung zwischen einer abstrakten und einer normalen Klassen. Die Umsetzung in JAVA würde wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Animal.java&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.awi3.swp3.animals;&lt;br /&gt;
&lt;br /&gt;
public abstract class Animal {&lt;br /&gt;
	private String habitat;&lt;br /&gt;
	&lt;br /&gt;
	public Animal(String habitat) {&lt;br /&gt;
		this.habitat = habitat;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public abstract void move();&lt;br /&gt;
	&lt;br /&gt;
	public String getHabitat() {&lt;br /&gt;
		return habitat;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fuchs.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.awi3.swp3.animals;&lt;br /&gt;
&lt;br /&gt;
public class Fuchs extends Animal {&lt;br /&gt;
&lt;br /&gt;
	public Fuchs() {&lt;br /&gt;
		super(&amp;quot;Woods/Forest&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	@Override&lt;br /&gt;
	public void move() {&lt;br /&gt;
		System.out.println(&amp;quot;Running round his &amp;quot; + getHabitat());&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Assoziation ====&lt;br /&gt;
&lt;br /&gt;
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;n-äre Assoziation&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
In folgenden Bild sieht man eine Binäre Assoziation. (Binär, weil zwei Klassen miteinander verbunden wurden)&lt;br /&gt;
[[Datei:1920px-UmlCd Assoziation-1.png|mini|links|Binäre Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;reflexive Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Im hier dargestellten Bild sieht man eine reflexive Assoziation, welche auf sich selbst verweist.&lt;br /&gt;
[[Datei:UmlCd Assoziation-2.png|mini|links|Reflexive Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da Assoziationen durch Linien dargestellt werden, müssen diese durch ein Assoziationsende gekennzeichnet werden. Diese Assoziationsenden können folgende Merkmale aufweisen:&lt;br /&gt;
* Sie können eine Multiplizität besitzen. Diese gibt Informationen über das Beziehungsverhältnis zweier Klassen. Diese Zahlen befinden sich &#039;&#039;&#039;nur&#039;&#039;&#039; im &#039;&#039;positiven&#039;&#039; und &#039;&#039;ganzzahligen&#039;&#039; Bereich, wobei der Beginn bei der Zahl 0 liegt.&lt;br /&gt;
** Multiplizitäten werden im folgenden Format angegeben:&lt;br /&gt;
 untereSchranke..obereSchranke&lt;br /&gt;
** Bei * oder auch 0..* wird die untereSchranke als 0 und die obereSchranke als unendlich angenommen.&lt;br /&gt;
** Beide Schranken dürfen nicht 0 oder unbeschränkt sein. Falls beide Grenzen trotzdem gleich groß sind, wird nur die obereSchranke angegeben. &lt;br /&gt;
** Bei einer Multiplizität von 0..1 wird das Element als &#039;&#039;optional&#039;&#039; bezeichnet.&lt;br /&gt;
** Wenn die obereSchranke über dem Wert 1 liegt, wird das Element als mehrwertiges Element bezeichnet, da mehrere Wert annehmbar sind.&lt;br /&gt;
* Sie können Namen besitzen.&lt;br /&gt;
* Sie können eine Sichtbarkeit aufweisen.&lt;br /&gt;
* Es kann spezifiziert werden, ob das Assoziationsende &amp;quot;ordered&amp;quot; und / oder unique ist. &lt;br /&gt;
&lt;br /&gt;
Zudem Assoziationsende kommen oft Multiplizitäten hinzu, welche die Beziehung zwischen den zwei Instanzen regelt. Im folgenden werden auf zwei Arten der Assoziationen genauer eingegangen.&lt;br /&gt;
&lt;br /&gt;
==== Komposition und Aggregation ====&lt;br /&gt;
&lt;br /&gt;
Um Beziehungen mit &#039;&#039;Ganzen&#039;&#039; und &#039;&#039;Teilen&#039;&#039; darzustellen werden die Aggregation und die Komposition verwendet.&lt;br /&gt;
[[Datei:Komposition Aggregation.png|mini|links|Komposition und Aggregation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Komposition ist eine Linie mit einer ausgefüllten Raute, welche mit der Kardinalität 1 beschriftet wird und mit dem Ganzen Teil der Beziehungspartner verbunden ist. Bei einer Komposition können die &#039;&#039;Teile&#039;&#039; nicht ohne das &#039;&#039;Ganze&#039;&#039; existieren. Das bedeutet, dass das &#039;&#039;Teil&#039;&#039; Element existenziell abhängig von &#039;&#039;Ganz&#039;&#039; Element ist.&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Aggregation ist eine Linie mit einer nicht ausgefüllten Raute, welche die Kardinalität 0..* besitzt und mit dem &#039;&#039;Ganzen&#039;&#039; Teil verbunden ist. Die Elemente in einer Aggregation besitzen keine Exisitenzabhängigkeit, da die &#039;&#039;Teil&#039;&#039; Elemente auch ohne die &#039;&#039;Ganz&#039;&#039; Elemente bestehen können. &lt;br /&gt;
&lt;br /&gt;
Die Assoziationsarten werden prinzipiell mittels der Kardinalität unterschieden. Zudem sind die &#039;&#039;Teil&#039;&#039; Elemente Bestandteil genau eines &#039;&#039;Ganz&#039;&#039; Elementes, da sie NIE zu mehrere &#039;&#039;Ganz&#039;&#039; Elementen gehören. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber == &lt;br /&gt;
&lt;br /&gt;
Diese Umsetzung erfolgte mit der Programmiersprache JAVA.&lt;br /&gt;
[[Datei:Screenshot 2021-01-22 143552.jpg|mini|600px|none|Fahrzeuge in einem UML Klassendiagramm]]&lt;br /&gt;
&#039;&#039;&#039;Vehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle;&lt;br /&gt;
&lt;br /&gt;
public abstract class Vehicle {&lt;br /&gt;
    private int maxSpeed;&lt;br /&gt;
    private int wheels;&lt;br /&gt;
&lt;br /&gt;
    public Vehicle(int maxSpeed, int wheels) {&lt;br /&gt;
        this.maxSpeed = maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void move() {&lt;br /&gt;
        System.out.println(&amp;quot;I am moving at &amp;quot; + maxSpeed + &amp;quot; with &amp;quot; + wheels + &amp;quot; wheels.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public int getMaxSpeed() {&lt;br /&gt;
        return maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public abstract void start();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
public class Bike extends Vehicle {&lt;br /&gt;
    public Bike(int maxSpeed, int wheels) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start to step into the pedals!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rollerblades.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Rollerblades extends Vehicle {&lt;br /&gt;
    public Rollerblades(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 8);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start skate!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Skateboard.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Skateboard extends Vehicle {&lt;br /&gt;
    public Skateboard(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 4);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I step with one feet on the ground to start!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MotorizedVehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public abstract class MotorizedVehicle extends Vehicle {&lt;br /&gt;
    private float kw;&lt;br /&gt;
&lt;br /&gt;
    public MotorizedVehicle(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
        this.kw = kw;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I am starting my engine with &amp;quot; + kw + &amp;quot; kw.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EBike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class EBike extends MotorizedVehicle {&lt;br /&gt;
    public EBike(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 2, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Lkw extends MotorizedVehicle {&lt;br /&gt;
    public Lkw(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Pkw extends MotorizedVehicle {&lt;br /&gt;
    public Pkw(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 4, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language&lt;br /&gt;
&lt;br /&gt;
https://www.sparxsystems.de/ressourcen/literatur/leseprobe-zu-projektabwicklung-mit-uml-und-enterprise-architect/klassendiagramm-class-diagram/&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Assoziation_(UML)&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Multiplizit%C3%A4t_(UML)&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=1300</id>
		<title>UML Klassendiagramm</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=1300"/>
		<updated>2021-02-05T09:07:02Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: /* Was ist ein Klassendiagramm? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Was ist ein Klassendiagramm? ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm bildet ein Kernstück der &#039;&#039;&#039;U&#039;&#039;&#039;nified &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;L&#039;&#039;&#039;anguage (&#039;&#039;&#039;UML&#039;&#039;&#039;). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsgebiete von Klassendiagramme ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm wird verwendet, um die Programme einfacher und übersichtlicher darzustellen und diese dann anschließend umzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bausteine eines Klassendiagramms ==&lt;br /&gt;
&lt;br /&gt;
Klassenmodelle unterteilen sich in folgende Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Klassen&lt;br /&gt;
* Schnittstellen&lt;br /&gt;
* Generalisierung&lt;br /&gt;
* Assoziation&lt;br /&gt;
** Komposition&lt;br /&gt;
** Aggregation&lt;br /&gt;
[[Datei:Screenshot 2021-01-08 132401.jpg|mini|UML Klasse aus DIA]]&lt;br /&gt;
==== Klassen ====&lt;br /&gt;
&lt;br /&gt;
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie &amp;quot;{abstrakt}&amp;quot; über dem Namen der Klasse tragen. &lt;br /&gt;
Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039; oder auch &#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
Bei einer &#039;&#039;&#039;public&#039;&#039;&#039; oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.&lt;br /&gt;
* &#039;&#039;&#039;protected&#039;&#039;&#039; oder auch &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;protected&#039;&#039;&#039; Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.&lt;br /&gt;
* &#039;&#039;&#039;private&#039;&#039;&#039; oder auch &#039;&#039;&#039;−&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;private&#039;&#039;&#039; Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden. &lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; oder auch &#039;&#039;&#039;~&#039;&#039;&#039;&lt;br /&gt;
Bei einer Klasse mit einer &#039;&#039;&#039;package&#039;&#039;&#039; Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier wird im Folgenden Klassen anhand von Beispielen gezeigt:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;public&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:2021-01-29 Klasse_public.jpg|links|mini|Public Attribute]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese oben dargestellte Methode verfügt über zwei public Variablen und einer public Methode, wobei der Fokus auf den Variablen liegt. Der Code sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
public class Klasse{&lt;br /&gt;
&lt;br /&gt;
  public int a;&lt;br /&gt;
  public int b;&lt;br /&gt;
&lt;br /&gt;
  public int count(){&lt;br /&gt;
    return this.a + this.b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse public2.jpg|links|mini|Public Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt eine Klasse mit keinen Variablen aber mit einer public Methode. Der Code dieses Bildes wurde folgendermaßen umgesetzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
public class Klasse{&lt;br /&gt;
&lt;br /&gt;
  public int count(int a, int b){&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.count(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;protected&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
[[Datei:2021-01-29 Klasse protected.jpg|mini|links|protected Variablen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt zwei protected Variablen und eine protected Methode. Die Umsetzung des Codes sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
protected class Klasse{&lt;br /&gt;
&lt;br /&gt;
  protected int a;&lt;br /&gt;
  protected int b;&lt;br /&gt;
&lt;br /&gt;
  protected int divide(){&lt;br /&gt;
    return this.a / this.b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse protected2.jpg|mini|links|protected Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt eine protected Methode ohne Klassenvariablen. Die Klasse wurde in folgenden Code umgesetzt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
protected class Klasse{&lt;br /&gt;
&lt;br /&gt;
  protected int divide(int a, int b){&lt;br /&gt;
    return a / b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.divide(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;private&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
[[Datei:2021-01-29 Klasse private.jpg|mini|links|private Variablen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die oben dargestellte UML-Klasse zeigt zwei private Variablen und eine private Methode an. Der Code dieser Klasse sieht wie folgt aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
private class Klasse{&lt;br /&gt;
&lt;br /&gt;
  private int a;&lt;br /&gt;
  private int b;&lt;br /&gt;
&lt;br /&gt;
  private int minus(){&lt;br /&gt;
    return this.b - this.a;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse private2.jpg|mini|links|private Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die im oberen Bild dargestellen Klasse wurde in folgenden Code umgewandelt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
private class Klasse{&lt;br /&gt;
&lt;br /&gt;
  private int count(int a, int b){&lt;br /&gt;
    return b - a;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.count(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:UmlCd Interface-1.svg.png|mini|UML Schnittstelle|100px]]&lt;br /&gt;
==== Schnittstellen ====&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Schnittstelle&#039;&#039;&#039; wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort &amp;quot;interface&amp;quot; gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
Hier wird an aus einem UML-Diagramm ein Programm erstellt:&lt;br /&gt;
[[Datei:2021-01-29 Schnittstelle.jpg|mini|links|Interface und Implementierung]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In dem oberen Bild sieht man ein Interface mit mehreren Methoden. Diese Methoden werden von einer Klasse namens &#039;&#039;Rectangle&#039;&#039; implementiert. Die Programmierung zu diesen zwei Elementen sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Moveable.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
interface Moveable {&lt;br /&gt;
&lt;br /&gt;
  int left(int x);&lt;br /&gt;
  int right(int x);&lt;br /&gt;
  int up(int y);&lt;br /&gt;
  int down(int y);&lt;br /&gt;
  int forwards(int z);&lt;br /&gt;
  int backwards(int z);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rectangle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
public class Rectangle implements Moveable{&lt;br /&gt;
&lt;br /&gt;
    int positionx;&lt;br /&gt;
    int positiony;&lt;br /&gt;
    int positionz;&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int left(int x) {&lt;br /&gt;
        return positionx - x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int right(int x) {&lt;br /&gt;
        return positionx + x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int up(int y) {&lt;br /&gt;
        return positiony + y;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int down(int y) {&lt;br /&gt;
        return positiony - y;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int forwards(int z) {&lt;br /&gt;
        return positionz + z;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int backwards(int z) {&lt;br /&gt;
        return positionz - z;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:Generalization (UML class diagram).png|mini|100px|Generalisierung]]&lt;br /&gt;
==== Generalisierung ====&lt;br /&gt;
&lt;br /&gt;
Durch eine &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; &amp;quot;erben&amp;quot; speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse &amp;quot;vererbt&amp;quot;. Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wird ein Beispiel zum besseren Verständnis von Generalisierungen gezeigt:&lt;br /&gt;
[[Datei:2021-01-29 Generalisierung.jpg|mini|links|Generalisierung]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In dem oberen dargestellten Bild sieht man eine Generalisierung zwischen einer abstrakten und einer normalen Klassen. Die Umsetzung in JAVA würde wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Animal.java&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.awi3.swp3.animals;&lt;br /&gt;
&lt;br /&gt;
public abstract class Animal {&lt;br /&gt;
	private String habitat;&lt;br /&gt;
	&lt;br /&gt;
	public Animal(String habitat) {&lt;br /&gt;
		this.habitat = habitat;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public abstract void move();&lt;br /&gt;
	&lt;br /&gt;
	public String getHabitat() {&lt;br /&gt;
		return habitat;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fuchs.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.awi3.swp3.animals;&lt;br /&gt;
&lt;br /&gt;
public class Fuchs extends Animal {&lt;br /&gt;
&lt;br /&gt;
	public Fuchs() {&lt;br /&gt;
		super(&amp;quot;Woods/Forest&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	@Override&lt;br /&gt;
	public void move() {&lt;br /&gt;
		System.out.println(&amp;quot;Running round his &amp;quot; + getHabitat());&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Assoziation ====&lt;br /&gt;
&lt;br /&gt;
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;n-äre Assoziation&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
In folgenden Bild sieht man eine Binäre Assoziation. (Binär, weil zwei Klassen miteinander verbunden wurden)&lt;br /&gt;
[[Datei:1920px-UmlCd Assoziation-1.png|mini|links|Binäre Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;reflexive Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Im hier dargestellten Bild sieht man eine reflexive Assoziation, welche auf sich selbst verweist.&lt;br /&gt;
[[Datei:UmlCd Assoziation-2.png|mini|links|Reflexive Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da Assoziationen durch Linien dargestellt werden, müssen diese durch ein Assoziationsende gekennzeichnet werden. Diese Assoziationsenden können folgende Merkmale aufweisen:&lt;br /&gt;
* Sie können eine Multiplizität besitzen. Diese gibt Informationen über das Beziehungsverhältnis zweier Klassen. Diese Zahlen befinden sich &#039;&#039;&#039;nur&#039;&#039;&#039; im &#039;&#039;positiven&#039;&#039; und &#039;&#039;ganzzahligen&#039;&#039; Bereich, wobei der Beginn bei der Zahl 0 liegt.&lt;br /&gt;
** Multiplizitäten werden im folgenden Format angegeben:&lt;br /&gt;
 untereSchranke..obereSchranke&lt;br /&gt;
** Bei * oder auch 0..* wird die untereSchranke als 0 und die obereSchranke als unendlich angenommen.&lt;br /&gt;
** Beide Schranken dürfen nicht 0 oder unbeschränkt sein. Falls beide Grenzen trotzdem gleich groß sind, wird nur die obereSchranke angegeben. &lt;br /&gt;
** Bei einer Multiplizität von 0..1 wird das Element als &#039;&#039;optional&#039;&#039; bezeichnet.&lt;br /&gt;
** Wenn die obereSchranke über dem Wert 1 liegt, wird das Element als mehrwertiges Element bezeichnet, da mehrere Wert annehmbar sind.&lt;br /&gt;
* Sie können Namen besitzen.&lt;br /&gt;
* Sie können eine Sichtbarkeit aufweisen.&lt;br /&gt;
* Es kann spezifiziert werden, ob das Assoziationsende &amp;quot;ordered&amp;quot; und / oder unique ist. &lt;br /&gt;
&lt;br /&gt;
Zudem Assoziationsende kommen oft Multiplizitäten hinzu, welche die Beziehung zwischen den zwei Instanzen regelt. Im folgenden werden auf zwei Arten der Assoziationen genauer eingegangen.&lt;br /&gt;
&lt;br /&gt;
==== Komposition und Aggregation ====&lt;br /&gt;
&lt;br /&gt;
Um Beziehungen mit &#039;&#039;Ganzen&#039;&#039; und &#039;&#039;Teilen&#039;&#039; darzustellen werden die Aggregation und die Komposition verwendet.&lt;br /&gt;
[[Datei:Komposition Aggregation.png|mini|links|Komposition und Aggregation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Komposition ist eine Linie mit einer ausgefüllten Raute, welche mit der Kardinalität 1 beschriftet wird und mit dem Ganzen Teil der Beziehungspartner verbunden ist. Bei einer Komposition können die &#039;&#039;Teile&#039;&#039; nicht ohne das &#039;&#039;Ganze&#039;&#039; existieren. Das bedeutet, dass das &#039;&#039;Teil&#039;&#039; Element existenziell abhängig von &#039;&#039;Ganz&#039;&#039; Element ist.&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Aggregation ist eine Linie mit einer nicht ausgefüllten Raute, welche die Kardinalität 0..* besitzt und mit dem &#039;&#039;Ganzen&#039;&#039; Teil verbunden ist. Die Elemente in einer Aggregation besitzen keine Exisitenzabhängigkeit, da die &#039;&#039;Teil&#039;&#039; Elemente auch ohne die &#039;&#039;Ganz&#039;&#039; Elemente bestehen können. &lt;br /&gt;
&lt;br /&gt;
Die Assoziationsarten werden prinzipiell mittels der Kardinalität unterschieden. Zudem sind die &#039;&#039;Teil&#039;&#039; Elemente Bestandteil genau eines &#039;&#039;Ganz&#039;&#039; Elementes, da sie NIE zu mehrere &#039;&#039;Ganz&#039;&#039; Elementen gehören. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber == &lt;br /&gt;
&lt;br /&gt;
Diese Umsetzung erfolgte mit der Programmiersprache JAVA.&lt;br /&gt;
[[Datei:Screenshot 2021-01-22 143552.jpg|mini|600px|none|Fahrzeuge in einem UML Klassendiagramm]]&lt;br /&gt;
&#039;&#039;&#039;Vehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle;&lt;br /&gt;
&lt;br /&gt;
public abstract class Vehicle {&lt;br /&gt;
    private int maxSpeed;&lt;br /&gt;
    private int wheels;&lt;br /&gt;
&lt;br /&gt;
    public Vehicle(int maxSpeed, int wheels) {&lt;br /&gt;
        this.maxSpeed = maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void move() {&lt;br /&gt;
        System.out.println(&amp;quot;I am moving at &amp;quot; + maxSpeed + &amp;quot; with &amp;quot; + wheels + &amp;quot; wheels.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public int getMaxSpeed() {&lt;br /&gt;
        return maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public abstract void start();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
public class Bike extends Vehicle {&lt;br /&gt;
    public Bike(int maxSpeed, int wheels) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start to step into the pedals!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rollerblades.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Rollerblades extends Vehicle {&lt;br /&gt;
    public Rollerblades(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 8);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start skate!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Skateboard.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Skateboard extends Vehicle {&lt;br /&gt;
    public Skateboard(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 4);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I step with one feet on the ground to start!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MotorizedVehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public abstract class MotorizedVehicle extends Vehicle {&lt;br /&gt;
    private float kw;&lt;br /&gt;
&lt;br /&gt;
    public MotorizedVehicle(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
        this.kw = kw;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I am starting my engine with &amp;quot; + kw + &amp;quot; kw.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EBike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class EBike extends MotorizedVehicle {&lt;br /&gt;
    public EBike(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 2, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Lkw extends MotorizedVehicle {&lt;br /&gt;
    public Lkw(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Pkw extends MotorizedVehicle {&lt;br /&gt;
    public Pkw(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 4, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language&lt;br /&gt;
&lt;br /&gt;
https://www.sparxsystems.de/ressourcen/literatur/leseprobe-zu-projektabwicklung-mit-uml-und-enterprise-architect/klassendiagramm-class-diagram/&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Assoziation_(UML)&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Multiplizit%C3%A4t_(UML)&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=888</id>
		<title>UML Klassendiagramm</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=888"/>
		<updated>2021-01-29T14:55:21Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: /* Assoziantion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Was ist ein Klassendiagramm? ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm bildet ein Kernstück der &#039;&#039;&#039;U&#039;&#039;&#039;nified &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;L&#039;&#039;&#039;anguage (&#039;&#039;&#039;UML&#039;&#039;&#039;). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Anwendungsgebiete von Klassendiagramme ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm wird verwendet, um die Programme einfacher und übersichtlicher darzustellen und diese dann anschließend umzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bausteine eines Klassendiagramms ==&lt;br /&gt;
&lt;br /&gt;
Klassenmodelle unterteilen sich in folgende Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Klassen&lt;br /&gt;
* Schnittstellen&lt;br /&gt;
* Generalisierung&lt;br /&gt;
* Assoziation&lt;br /&gt;
** Komposition&lt;br /&gt;
** Aggregation&lt;br /&gt;
[[Datei:Screenshot 2021-01-08 132401.jpg|mini|UML Klasse aus DIA]]&lt;br /&gt;
==== Klassen ====&lt;br /&gt;
&lt;br /&gt;
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie &amp;quot;{abstrakt}&amp;quot; über dem Namen der Klasse tragen. &lt;br /&gt;
Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039; oder auch &#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
Bei einer &#039;&#039;&#039;public&#039;&#039;&#039; oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.&lt;br /&gt;
* &#039;&#039;&#039;protected&#039;&#039;&#039; oder auch &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;protected&#039;&#039;&#039; Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.&lt;br /&gt;
* &#039;&#039;&#039;private&#039;&#039;&#039; oder auch &#039;&#039;&#039;−&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;private&#039;&#039;&#039; Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden. &lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; oder auch &#039;&#039;&#039;~&#039;&#039;&#039;&lt;br /&gt;
Bei einer Klasse mit einer &#039;&#039;&#039;package&#039;&#039;&#039; Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier wird im Folgenden Klassen anhand von Beispielen gezeigt:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;public&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:2021-01-29 Klasse_public.jpg|links|mini|Public Attribute]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese oben dargestellte Methode verfügt über zwei public Variablen und einer public Methode, wobei der Fokus auf den Variablen liegt. Der Code sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
public class Klasse{&lt;br /&gt;
&lt;br /&gt;
  public int a;&lt;br /&gt;
  public int b;&lt;br /&gt;
&lt;br /&gt;
  public int count(){&lt;br /&gt;
    return this.a + this.b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse public2.jpg|links|mini|Public Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt eine Klasse mit keinen Variablen aber mit einer public Methode. Der Code dieses Bildes wurde folgendermaßen umgesetzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
public class Klasse{&lt;br /&gt;
&lt;br /&gt;
  public int count(int a, int b){&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.count(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;protected&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
[[Datei:2021-01-29 Klasse protected.jpg|mini|links|protected Variablen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt zwei protected Variablen und eine protected Methode. Die Umsetzung des Codes sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
protected class Klasse{&lt;br /&gt;
&lt;br /&gt;
  protected int a;&lt;br /&gt;
  protected int b;&lt;br /&gt;
&lt;br /&gt;
  protected int divide(){&lt;br /&gt;
    return this.a / this.b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse protected2.jpg|mini|links|protected Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt eine protected Methode ohne Klassenvariablen. Die Klasse wurde in folgenden Code umgesetzt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
protected class Klasse{&lt;br /&gt;
&lt;br /&gt;
  protected int divide(int a, int b){&lt;br /&gt;
    return a / b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.divide(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;private&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
[[Datei:2021-01-29 Klasse private.jpg|mini|links|private Variablen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die oben dargestellte UML-Klasse zeigt zwei private Variablen und eine private Methode an. Der Code dieser Klasse sieht wie folgt aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
private class Klasse{&lt;br /&gt;
&lt;br /&gt;
  private int a;&lt;br /&gt;
  private int b;&lt;br /&gt;
&lt;br /&gt;
  private int minus(){&lt;br /&gt;
    return this.b - this.a;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse private2.jpg|mini|links|private Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die im oberen Bild dargestellen Klasse wurde in folgenden Code umgewandelt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
private class Klasse{&lt;br /&gt;
&lt;br /&gt;
  private int count(int a, int b){&lt;br /&gt;
    return b - a;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.count(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:UmlCd Interface-1.svg.png|mini|UML Schnittstelle|100px]]&lt;br /&gt;
==== Schnittstellen ====&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Schnittstelle&#039;&#039;&#039; wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort &amp;quot;interface&amp;quot; gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
Hier wird an aus einem UML-Diagramm ein Programm erstellt:&lt;br /&gt;
[[Datei:2021-01-29 Schnittstelle.jpg|mini|links|Interface und Implementierung]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In dem oberen Bild sieht man ein Interface mit mehreren Methoden. Diese Methoden werden von einer Klasse namens &#039;&#039;Rectangle&#039;&#039; implementiert. Die Programmierung zu diesen zwei Elementen sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Moveable.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
interface Moveable {&lt;br /&gt;
&lt;br /&gt;
  int left(int x);&lt;br /&gt;
  int right(int x);&lt;br /&gt;
  int up(int y);&lt;br /&gt;
  int down(int y);&lt;br /&gt;
  int forwards(int z);&lt;br /&gt;
  int backwards(int z);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rectangle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
public class Rectangle implements Moveable{&lt;br /&gt;
&lt;br /&gt;
    int positionx;&lt;br /&gt;
    int positiony;&lt;br /&gt;
    int positionz;&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int left(int x) {&lt;br /&gt;
        return positionx - x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int right(int x) {&lt;br /&gt;
        return positionx + x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int up(int y) {&lt;br /&gt;
        return positiony + y;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int down(int y) {&lt;br /&gt;
        return positiony - y;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int forwards(int z) {&lt;br /&gt;
        return positionz + z;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int backwards(int z) {&lt;br /&gt;
        return positionz - z;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:Generalization (UML class diagram).png|mini|100px|Generalisierung]]&lt;br /&gt;
==== Generalisierung ====&lt;br /&gt;
&lt;br /&gt;
Durch eine &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; &amp;quot;erben&amp;quot; speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse &amp;quot;vererbt&amp;quot;. Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wird ein Beispiel zum besseren Verständnis von Generalisierungen gezeigt:&lt;br /&gt;
[[Datei:2021-01-29 Generalisierung.jpg|mini|links|Generalisierung]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In dem oberen dargestellten Bild sieht man eine Generalisierung zwischen einer abstrakten und einer normalen Klassen. Die Umsetzung in JAVA würde wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Animal.java&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.awi3.swp3.animals;&lt;br /&gt;
&lt;br /&gt;
public abstract class Animal {&lt;br /&gt;
	private String habitat;&lt;br /&gt;
	&lt;br /&gt;
	public Animal(String habitat) {&lt;br /&gt;
		this.habitat = habitat;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public abstract void move();&lt;br /&gt;
	&lt;br /&gt;
	public String getHabitat() {&lt;br /&gt;
		return habitat;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fuchs.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.awi3.swp3.animals;&lt;br /&gt;
&lt;br /&gt;
public class Fuchs extends Animal {&lt;br /&gt;
&lt;br /&gt;
	public Fuchs() {&lt;br /&gt;
		super(&amp;quot;Woods/Forest&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	@Override&lt;br /&gt;
	public void move() {&lt;br /&gt;
		System.out.println(&amp;quot;Running round his &amp;quot; + getHabitat());&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Assoziation ====&lt;br /&gt;
&lt;br /&gt;
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;n-äre Assoziation&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
In folgenden Bild sieht man eine Binäre Assoziation. (Binär, weil zwei Klassen miteinander verbunden wurden)&lt;br /&gt;
[[Datei:1920px-UmlCd Assoziation-1.png|mini|links|Binäre Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;reflexive Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Im hier dargestellten Bild sieht man eine reflexive Assoziation, welche auf sich selbst verweist.&lt;br /&gt;
[[Datei:UmlCd Assoziation-2.png|mini|links|Reflexive Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da Assoziationen durch Linien dargestellt werden, müssen diese durch ein Assoziationsende gekennzeichnet werden. Diese Assoziationsenden können folgende Merkmale aufweisen:&lt;br /&gt;
* Sie können eine Multiplizität besitzen. Diese gibt Informationen über das Beziehungsverhältnis zweier Klassen. Diese Zahlen befinden sich &#039;&#039;&#039;nur&#039;&#039;&#039; im &#039;&#039;positiven&#039;&#039; und &#039;&#039;ganzzahligen&#039;&#039; Bereich, wobei der Beginn bei der Zahl 0 liegt.&lt;br /&gt;
** Multiplizitäten werden im folgenden Format angegeben:&lt;br /&gt;
 untereSchranke..obereSchranke&lt;br /&gt;
** Bei * oder auch 0..* wird die untereSchranke als 0 und die obereSchranke als unendlich angenommen.&lt;br /&gt;
** Beide Schranken dürfen nicht 0 oder unbeschränkt sein. Falls beide Grenzen trotzdem gleich groß sind, wird nur die obereSchranke angegeben. &lt;br /&gt;
** Bei einer Multiplizität von 0..1 wird das Element als &#039;&#039;optional&#039;&#039; bezeichnet.&lt;br /&gt;
** Wenn die obereSchranke über dem Wert 1 liegt, wird das Element als mehrwertiges Element bezeichnet, da mehrere Wert annehmbar sind.&lt;br /&gt;
* Sie können Namen besitzen.&lt;br /&gt;
* Sie können eine Sichtbarkeit aufweisen.&lt;br /&gt;
* Es kann spezifiziert werden, ob das Assoziationsende &amp;quot;ordered&amp;quot; und / oder unique ist. &lt;br /&gt;
&lt;br /&gt;
Zudem Assoziationsende kommen oft Multiplizitäten hinzu, welche die Beziehung zwischen den zwei Instanzen regelt. Im folgenden werden auf zwei Arten der Assoziationen genauer eingegangen.&lt;br /&gt;
&lt;br /&gt;
==== Komposition und Aggregation ====&lt;br /&gt;
&lt;br /&gt;
Um Beziehungen mit &#039;&#039;Ganzen&#039;&#039; und &#039;&#039;Teilen&#039;&#039; darzustellen werden die Aggregation und die Komposition verwendet.&lt;br /&gt;
[[Datei:Komposition Aggregation.png|mini|links|Komposition und Aggregation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Komposition ist eine Linie mit einer ausgefüllten Raute, welche mit der Kardinalität 1 beschriftet wird und mit dem Ganzen Teil der Beziehungspartner verbunden ist. Bei einer Komposition können die &#039;&#039;Teile&#039;&#039; nicht ohne das &#039;&#039;Ganze&#039;&#039; existieren. Das bedeutet, dass das &#039;&#039;Teil&#039;&#039; Element existenziell abhängig von &#039;&#039;Ganz&#039;&#039; Element ist.&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Aggregation ist eine Linie mit einer nicht ausgefüllten Raute, welche die Kardinalität 0..* besitzt und mit dem &#039;&#039;Ganzen&#039;&#039; Teil verbunden ist. Die Elemente in einer Aggregation besitzen keine Exisitenzabhängigkeit, da die &#039;&#039;Teil&#039;&#039; Elemente auch ohne die &#039;&#039;Ganz&#039;&#039; Elemente bestehen können. &lt;br /&gt;
&lt;br /&gt;
Die Assoziationsarten werden prinzipiell mittels der Kardinalität unterschieden. Zudem sind die &#039;&#039;Teil&#039;&#039; Elemente Bestandteil genau eines &#039;&#039;Ganz&#039;&#039; Elementes, da sie NIE zu mehrere &#039;&#039;Ganz&#039;&#039; Elementen gehören. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber == &lt;br /&gt;
&lt;br /&gt;
Diese Umsetzung erfolgte mit der Programmiersprache JAVA.&lt;br /&gt;
[[Datei:Screenshot 2021-01-22 143552.jpg|mini|600px|none|Fahrzeuge in einem UML Klassendiagramm]]&lt;br /&gt;
&#039;&#039;&#039;Vehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle;&lt;br /&gt;
&lt;br /&gt;
public abstract class Vehicle {&lt;br /&gt;
    private int maxSpeed;&lt;br /&gt;
    private int wheels;&lt;br /&gt;
&lt;br /&gt;
    public Vehicle(int maxSpeed, int wheels) {&lt;br /&gt;
        this.maxSpeed = maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void move() {&lt;br /&gt;
        System.out.println(&amp;quot;I am moving at &amp;quot; + maxSpeed + &amp;quot; with &amp;quot; + wheels + &amp;quot; wheels.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public int getMaxSpeed() {&lt;br /&gt;
        return maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public abstract void start();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
public class Bike extends Vehicle {&lt;br /&gt;
    public Bike(int maxSpeed, int wheels) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start to step into the pedals!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rollerblades.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Rollerblades extends Vehicle {&lt;br /&gt;
    public Rollerblades(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 8);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start skate!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Skateboard.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Skateboard extends Vehicle {&lt;br /&gt;
    public Skateboard(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 4);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I step with one feet on the ground to start!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MotorizedVehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public abstract class MotorizedVehicle extends Vehicle {&lt;br /&gt;
    private float kw;&lt;br /&gt;
&lt;br /&gt;
    public MotorizedVehicle(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
        this.kw = kw;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I am starting my engine with &amp;quot; + kw + &amp;quot; kw.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EBike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class EBike extends MotorizedVehicle {&lt;br /&gt;
    public EBike(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 2, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Lkw extends MotorizedVehicle {&lt;br /&gt;
    public Lkw(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Pkw extends MotorizedVehicle {&lt;br /&gt;
    public Pkw(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 4, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language&lt;br /&gt;
&lt;br /&gt;
https://www.sparxsystems.de/ressourcen/literatur/leseprobe-zu-projektabwicklung-mit-uml-und-enterprise-architect/klassendiagramm-class-diagram/&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Assoziation_(UML)&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Multiplizit%C3%A4t_(UML)&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=869</id>
		<title>UML Klassendiagramm</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=869"/>
		<updated>2021-01-29T13:47:11Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Was ist ein Klassendiagramm? ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm bildet ein Kernstück der &#039;&#039;&#039;U&#039;&#039;&#039;nified &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;L&#039;&#039;&#039;anguage (&#039;&#039;&#039;UML&#039;&#039;&#039;). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Anwendungsgebiete von Klassendiagramme ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm wird verwendet, um die Programme einfacher und übersichtlicher darzustellen und diese dann anschließend umzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bausteine eines Klassendiagramms ==&lt;br /&gt;
&lt;br /&gt;
Klassenmodelle unterteilen sich in folgende Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Klassen&lt;br /&gt;
* Schnittstellen&lt;br /&gt;
* Generalisierung&lt;br /&gt;
* Assoziation&lt;br /&gt;
** Komposition&lt;br /&gt;
** Aggregation&lt;br /&gt;
[[Datei:Screenshot 2021-01-08 132401.jpg|mini|UML Klasse aus DIA]]&lt;br /&gt;
==== Klassen ====&lt;br /&gt;
&lt;br /&gt;
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie &amp;quot;{abstrakt}&amp;quot; über dem Namen der Klasse tragen. &lt;br /&gt;
Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039; oder auch &#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
Bei einer &#039;&#039;&#039;public&#039;&#039;&#039; oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.&lt;br /&gt;
* &#039;&#039;&#039;protected&#039;&#039;&#039; oder auch &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;protected&#039;&#039;&#039; Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.&lt;br /&gt;
* &#039;&#039;&#039;private&#039;&#039;&#039; oder auch &#039;&#039;&#039;−&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;private&#039;&#039;&#039; Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden. &lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; oder auch &#039;&#039;&#039;~&#039;&#039;&#039;&lt;br /&gt;
Bei einer Klasse mit einer &#039;&#039;&#039;package&#039;&#039;&#039; Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier wird im Folgenden Klassen anhand von Beispielen gezeigt:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;public&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:2021-01-29 Klasse_public.jpg|links|mini|Public Attribute]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese oben dargestellte Methode verfügt über zwei public Variablen und einer public Methode, wobei der Fokus auf den Variablen liegt. Der Code sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
public class Klasse{&lt;br /&gt;
&lt;br /&gt;
  public int a;&lt;br /&gt;
  public int b;&lt;br /&gt;
&lt;br /&gt;
  public int count(){&lt;br /&gt;
    return this.a + this.b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse public2.jpg|links|mini|Public Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt eine Klasse mit keinen Variablen aber mit einer public Methode. Der Code dieses Bildes wurde folgendermaßen umgesetzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
public class Klasse{&lt;br /&gt;
&lt;br /&gt;
  public int count(int a, int b){&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.count(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;protected&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
[[Datei:2021-01-29 Klasse protected.jpg|mini|links|protected Variablen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt zwei protected Variablen und eine protected Methode. Die Umsetzung des Codes sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
protected class Klasse{&lt;br /&gt;
&lt;br /&gt;
  protected int a;&lt;br /&gt;
  protected int b;&lt;br /&gt;
&lt;br /&gt;
  protected int divide(){&lt;br /&gt;
    return this.a / this.b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse protected2.jpg|mini|links|protected Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt eine protected Methode ohne Klassenvariablen. Die Klasse wurde in folgenden Code umgesetzt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
protected class Klasse{&lt;br /&gt;
&lt;br /&gt;
  protected int divide(int a, int b){&lt;br /&gt;
    return a / b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.divide(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;private&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
[[Datei:2021-01-29 Klasse private.jpg|mini|links|private Variablen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die oben dargestellte UML-Klasse zeigt zwei private Variablen und eine private Methode an. Der Code dieser Klasse sieht wie folgt aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
private class Klasse{&lt;br /&gt;
&lt;br /&gt;
  private int a;&lt;br /&gt;
  private int b;&lt;br /&gt;
&lt;br /&gt;
  private int minus(){&lt;br /&gt;
    return this.b - this.a;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse private2.jpg|mini|links|private Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die im oberen Bild dargestellen Klasse wurde in folgenden Code umgewandelt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
private class Klasse{&lt;br /&gt;
&lt;br /&gt;
  private int count(int a, int b){&lt;br /&gt;
    return b - a;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.count(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:UmlCd Interface-1.svg.png|mini|UML Schnittstelle|100px]]&lt;br /&gt;
==== Schnittstellen ====&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Schnittstelle&#039;&#039;&#039; wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort &amp;quot;interface&amp;quot; gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
Hier wird an aus einem UML-Diagramm ein Programm erstellt:&lt;br /&gt;
[[Datei:2021-01-29 Schnittstelle.jpg|mini|links|Interface und Implementierung]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In dem oberen Bild sieht man ein Interface mit mehreren Methoden. Diese Methoden werden von einer Klasse namens &#039;&#039;Rectangle&#039;&#039; implementiert. Die Programmierung zu diesen zwei Elementen sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Moveable.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
interface Moveable {&lt;br /&gt;
&lt;br /&gt;
  int left(int x);&lt;br /&gt;
  int right(int x);&lt;br /&gt;
  int up(int y);&lt;br /&gt;
  int down(int y);&lt;br /&gt;
  int forwards(int z);&lt;br /&gt;
  int backwards(int z);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rectangle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
public class Rectangle implements Moveable{&lt;br /&gt;
&lt;br /&gt;
    int positionx;&lt;br /&gt;
    int positiony;&lt;br /&gt;
    int positionz;&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int left(int x) {&lt;br /&gt;
        return positionx - x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int right(int x) {&lt;br /&gt;
        return positionx + x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int up(int y) {&lt;br /&gt;
        return positiony + y;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int down(int y) {&lt;br /&gt;
        return positiony - y;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int forwards(int z) {&lt;br /&gt;
        return positionz + z;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int backwards(int z) {&lt;br /&gt;
        return positionz - z;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:Generalization (UML class diagram).png|mini|100px|Generalisierung]]&lt;br /&gt;
==== Generalisierung ====&lt;br /&gt;
&lt;br /&gt;
Durch eine &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; &amp;quot;erben&amp;quot; speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse &amp;quot;vererbt&amp;quot;. Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wird ein Beispiel zum besseren Verständnis von Generalisierungen gezeigt:&lt;br /&gt;
[[Datei:2021-01-29 Generalisierung.jpg|mini|links|Generalisierung]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In dem oberen dargestellten Bild sieht man eine Generalisierung zwischen einer abstrakten und einer normalen Klassen. Die Umsetzung in JAVA würde wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Animal.java&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.awi3.swp3.animals;&lt;br /&gt;
&lt;br /&gt;
public abstract class Animal {&lt;br /&gt;
	private String habitat;&lt;br /&gt;
	&lt;br /&gt;
	public Animal(String habitat) {&lt;br /&gt;
		this.habitat = habitat;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public abstract void move();&lt;br /&gt;
	&lt;br /&gt;
	public String getHabitat() {&lt;br /&gt;
		return habitat;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fuchs.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.awi3.swp3.animals;&lt;br /&gt;
&lt;br /&gt;
public class Fuchs extends Animal {&lt;br /&gt;
&lt;br /&gt;
	public Fuchs() {&lt;br /&gt;
		super(&amp;quot;Woods/Forest&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	@Override&lt;br /&gt;
	public void move() {&lt;br /&gt;
		System.out.println(&amp;quot;Running round his &amp;quot; + getHabitat());&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Assoziantion ====&lt;br /&gt;
&lt;br /&gt;
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;n-äre Assoziation&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
In folgenden Bild sieht man eine Binäre Assoziation. (Binär, weil zwei Klassen miteinander verbunden wurden)&lt;br /&gt;
[[Datei:1920px-UmlCd Assoziation-1.png|mini|links|Binäre Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;reflexive Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Im hier dargestellten Bild sieht man eine reflexive Assoziation, welche auf sich selbst verweist.&lt;br /&gt;
[[Datei:UmlCd Assoziation-2.png|mini|links|Reflexive Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da Assoziationen durch Linien dargestellt werden, müssen diese durch ein Assoziationsende gekennzeichnet werden. Diese Assoziationsenden können folgende Merkmale aufweisen:&lt;br /&gt;
* Sie können eine Multiplizität besitzen. Diese gibt Informationen über das Beziehungsverhältnis zweier Klassen. Diese Zahlen befinden sich &#039;&#039;&#039;nur&#039;&#039;&#039; im &#039;&#039;positiven&#039;&#039; und &#039;&#039;ganzzahligen&#039;&#039; Bereich, wobei der Beginn bei der Zahl 0 liegt.&lt;br /&gt;
** Multiplizitäten werden im folgenden Format angegeben:&lt;br /&gt;
 untereSchranke..obereSchranke&lt;br /&gt;
** Bei * oder auch 0..* wird die untereSchranke als 0 und die obereSchranke als unendlich angenommen.&lt;br /&gt;
** Beide Schranken dürfen nicht 0 oder unbeschränkt sein. Falls beide Grenzen trotzdem gleich groß sind, wird nur die obereSchranke angegeben. &lt;br /&gt;
** Bei einer Multiplizität von 0..1 wird das Element als &#039;&#039;optional&#039;&#039; bezeichnet.&lt;br /&gt;
** Wenn die obereSchranke über dem Wert 1 liegt, wird das Element als mehrwertiges Element bezeichnet, da mehrere Wert annehmbar sind.&lt;br /&gt;
* Sie können Namen besitzen.&lt;br /&gt;
* Sie können eine Sichtbarkeit aufweisen.&lt;br /&gt;
* Es kann spezifiziert werden, ob das Assoziationsende &amp;quot;ordered&amp;quot; und / oder unique ist. &lt;br /&gt;
&lt;br /&gt;
Zudem Assoziationsende kommen oft Multiplizitäten hinzu, welche die Beziehung zwischen den zwei Instanzen regelt. Im folgenden werden auf zwei Arten der Assoziationen genauer eingegangen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Komposition und Aggregation ====&lt;br /&gt;
&lt;br /&gt;
Um Beziehungen mit &#039;&#039;Ganzen&#039;&#039; und &#039;&#039;Teilen&#039;&#039; darzustellen werden die Aggregation und die Komposition verwendet.&lt;br /&gt;
[[Datei:Komposition Aggregation.png|mini|links|Komposition und Aggregation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Komposition ist eine Linie mit einer ausgefüllten Raute, welche mit der Kardinalität 1 beschriftet wird und mit dem Ganzen Teil der Beziehungspartner verbunden ist. Bei einer Komposition können die &#039;&#039;Teile&#039;&#039; nicht ohne das &#039;&#039;Ganze&#039;&#039; existieren. Das bedeutet, dass das &#039;&#039;Teil&#039;&#039; Element existenziell abhängig von &#039;&#039;Ganz&#039;&#039; Element ist.&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Aggregation ist eine Linie mit einer nicht ausgefüllten Raute, welche die Kardinalität 0..* besitzt und mit dem &#039;&#039;Ganzen&#039;&#039; Teil verbunden ist. Die Elemente in einer Aggregation besitzen keine Exisitenzabhängigkeit, da die &#039;&#039;Teil&#039;&#039; Elemente auch ohne die &#039;&#039;Ganz&#039;&#039; Elemente bestehen können. &lt;br /&gt;
&lt;br /&gt;
Die Assoziationsarten werden prinzipiell mittels der Kardinalität unterschieden. Zudem sind die &#039;&#039;Teil&#039;&#039; Elemente Bestandteil genau eines &#039;&#039;Ganz&#039;&#039; Elementes, da sie NIE zu mehrere &#039;&#039;Ganz&#039;&#039; Elementen gehören. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber == &lt;br /&gt;
&lt;br /&gt;
Diese Umsetzung erfolgte mit der Programmiersprache JAVA.&lt;br /&gt;
[[Datei:Screenshot 2021-01-22 143552.jpg|mini|600px|none|Fahrzeuge in einem UML Klassendiagramm]]&lt;br /&gt;
&#039;&#039;&#039;Vehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle;&lt;br /&gt;
&lt;br /&gt;
public abstract class Vehicle {&lt;br /&gt;
    private int maxSpeed;&lt;br /&gt;
    private int wheels;&lt;br /&gt;
&lt;br /&gt;
    public Vehicle(int maxSpeed, int wheels) {&lt;br /&gt;
        this.maxSpeed = maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void move() {&lt;br /&gt;
        System.out.println(&amp;quot;I am moving at &amp;quot; + maxSpeed + &amp;quot; with &amp;quot; + wheels + &amp;quot; wheels.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public int getMaxSpeed() {&lt;br /&gt;
        return maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public abstract void start();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
public class Bike extends Vehicle {&lt;br /&gt;
    public Bike(int maxSpeed, int wheels) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start to step into the pedals!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rollerblades.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Rollerblades extends Vehicle {&lt;br /&gt;
    public Rollerblades(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 8);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start skate!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Skateboard.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Skateboard extends Vehicle {&lt;br /&gt;
    public Skateboard(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 4);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I step with one feet on the ground to start!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MotorizedVehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public abstract class MotorizedVehicle extends Vehicle {&lt;br /&gt;
    private float kw;&lt;br /&gt;
&lt;br /&gt;
    public MotorizedVehicle(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
        this.kw = kw;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I am starting my engine with &amp;quot; + kw + &amp;quot; kw.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EBike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class EBike extends MotorizedVehicle {&lt;br /&gt;
    public EBike(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 2, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Lkw extends MotorizedVehicle {&lt;br /&gt;
    public Lkw(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Pkw extends MotorizedVehicle {&lt;br /&gt;
    public Pkw(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 4, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language&lt;br /&gt;
&lt;br /&gt;
https://www.sparxsystems.de/ressourcen/literatur/leseprobe-zu-projektabwicklung-mit-uml-und-enterprise-architect/klassendiagramm-class-diagram/&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Assoziation_(UML)&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Multiplizit%C3%A4t_(UML)&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=866</id>
		<title>UML Klassendiagramm</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=866"/>
		<updated>2021-01-29T13:35:01Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &#039;&#039;&#039;&#039;&#039;Was ist ein Klassendiagramm?&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm bildet ein Kernstück der &#039;&#039;&#039;U&#039;&#039;&#039;nified &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;L&#039;&#039;&#039;anguage (&#039;&#039;&#039;UML&#039;&#039;&#039;). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Anwendungsgebiete von Klassendiagramme &#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm wird verwendet, um die Programme einfacher und übersichtlicher darzustellen und diese dann anschließend umzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Bausteine eines Klassendiagramms&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Klassenmodelle unterteilen sich in folgende Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Klassen&lt;br /&gt;
* Schnittstellen&lt;br /&gt;
* Generalisierung&lt;br /&gt;
* Assoziation&lt;br /&gt;
** Komposition&lt;br /&gt;
** Aggregation&lt;br /&gt;
[[Datei:Screenshot 2021-01-08 132401.jpg|mini|UML Klasse aus DIA]]&lt;br /&gt;
==== &#039;&#039;&#039;Klassen&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie &amp;quot;{abstrakt}&amp;quot; über dem Namen der Klasse tragen. &lt;br /&gt;
Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039; oder auch &#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
Bei einer &#039;&#039;&#039;public&#039;&#039;&#039; oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.&lt;br /&gt;
* &#039;&#039;&#039;protected&#039;&#039;&#039; oder auch &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;protected&#039;&#039;&#039; Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.&lt;br /&gt;
* &#039;&#039;&#039;private&#039;&#039;&#039; oder auch &#039;&#039;&#039;−&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;private&#039;&#039;&#039; Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden. &lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; oder auch &#039;&#039;&#039;~&#039;&#039;&#039;&lt;br /&gt;
Bei einer Klasse mit einer &#039;&#039;&#039;package&#039;&#039;&#039; Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier wird im Folgenden Klassen anhand von Beispielen gezeigt:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;public&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:2021-01-29 Klasse_public.jpg|links|mini|Public Attribute]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese oben dargestellte Methode verfügt über zwei public Variablen und einer public Methode, wobei der Fokus auf den Variablen liegt. Der Code sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
public class Klasse{&lt;br /&gt;
&lt;br /&gt;
  public int a;&lt;br /&gt;
  public int b;&lt;br /&gt;
&lt;br /&gt;
  public int count(){&lt;br /&gt;
    return this.a + this.b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse public2.jpg|links|mini|Public Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt eine Klasse mit keinen Variablen aber mit einer public Methode. Der Code dieses Bildes wurde folgendermaßen umgesetzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
public class Klasse{&lt;br /&gt;
&lt;br /&gt;
  public int count(int a, int b){&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.count(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;protected&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
[[Datei:2021-01-29 Klasse protected.jpg|mini|links|protected Variablen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt zwei protected Variablen und eine protected Methode. Die Umsetzung des Codes sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
protected class Klasse{&lt;br /&gt;
&lt;br /&gt;
  protected int a;&lt;br /&gt;
  protected int b;&lt;br /&gt;
&lt;br /&gt;
  protected int divide(){&lt;br /&gt;
    return this.a / this.b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse protected2.jpg|mini|links|protected Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt eine protected Methode ohne Klassenvariablen. Die Klasse wurde in folgenden Code umgesetzt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
protected class Klasse{&lt;br /&gt;
&lt;br /&gt;
  protected int divide(int a, int b){&lt;br /&gt;
    return a / b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.divide(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;private&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
[[Datei:2021-01-29 Klasse private.jpg|mini|links|private Variablen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die oben dargestellte UML-Klasse zeigt zwei private Variablen und eine private Methode an. Der Code dieser Klasse sieht wie folgt aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
private class Klasse{&lt;br /&gt;
&lt;br /&gt;
  private int a;&lt;br /&gt;
  private int b;&lt;br /&gt;
&lt;br /&gt;
  private int minus(){&lt;br /&gt;
    return this.b - this.a;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse private2.jpg|mini|links|private Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die im oberen Bild dargestellen Klasse wurde in folgenden Code umgewandelt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
private class Klasse{&lt;br /&gt;
&lt;br /&gt;
  private int count(int a, int b){&lt;br /&gt;
    return b - a;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.count(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:UmlCd Interface-1.svg.png|mini|UML Schnittstelle|100px]]&lt;br /&gt;
==== &#039;&#039;&#039;Schnittstellen&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Schnittstelle&#039;&#039;&#039; wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort &amp;quot;interface&amp;quot; gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
Hier wird an aus einem UML-Diagramm ein Programm erstellt:&lt;br /&gt;
[[Datei:2021-01-29 Schnittstelle.jpg|mini|links|Interface und Implementierung]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In dem oberen Bild sieht man ein Interface mit mehreren Methoden. Diese Methoden werden von einer Klasse namens &#039;&#039;Rectangle&#039;&#039; implementiert. Die Programmierung zu diesen zwei Elementen sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Moveable.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
interface Moveable {&lt;br /&gt;
&lt;br /&gt;
  int left(int x);&lt;br /&gt;
  int right(int x);&lt;br /&gt;
  int up(int y);&lt;br /&gt;
  int down(int y);&lt;br /&gt;
  int forwards(int z);&lt;br /&gt;
  int backwards(int z);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rectangle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
public class Rectangle implements Moveable{&lt;br /&gt;
&lt;br /&gt;
    int positionx;&lt;br /&gt;
    int positiony;&lt;br /&gt;
    int positionz;&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int left(int x) {&lt;br /&gt;
        return positionx - x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int right(int x) {&lt;br /&gt;
        return positionx + x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int up(int y) {&lt;br /&gt;
        return positiony + y;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int down(int y) {&lt;br /&gt;
        return positiony - y;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int forwards(int z) {&lt;br /&gt;
        return positionz + z;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int backwards(int z) {&lt;br /&gt;
        return positionz - z;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:Generalization (UML class diagram).png|mini|100px|Generalisierung]]&lt;br /&gt;
==== &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Durch eine &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; &amp;quot;erben&amp;quot; speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse &amp;quot;vererbt&amp;quot;. Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wird ein Beispiel zum besseren Verständnis von Generalisierungen gezeigt:&lt;br /&gt;
[[Datei:2021-01-29 Generalisierung.jpg|mini|links|Generalisierung]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In dem oberen dargestellten Bild sieht man eine Generalisierung zwischen einer abstrakten und einer normalen Klassen. Die Umsetzung in JAVA würde wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Animal.java&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.awi3.swp3.animals;&lt;br /&gt;
&lt;br /&gt;
public abstract class Animal {&lt;br /&gt;
	private String habitat;&lt;br /&gt;
	&lt;br /&gt;
	public Animal(String habitat) {&lt;br /&gt;
		this.habitat = habitat;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public abstract void move();&lt;br /&gt;
	&lt;br /&gt;
	public String getHabitat() {&lt;br /&gt;
		return habitat;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fuchs.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.awi3.swp3.animals;&lt;br /&gt;
&lt;br /&gt;
public class Fuchs extends Animal {&lt;br /&gt;
&lt;br /&gt;
	public Fuchs() {&lt;br /&gt;
		super(&amp;quot;Woods/Forest&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	@Override&lt;br /&gt;
	public void move() {&lt;br /&gt;
		System.out.println(&amp;quot;Running round his &amp;quot; + getHabitat());&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Assoziantion&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;n-äre Assoziation&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
In folgenden Bild sieht man eine Binäre Assoziation. (Binär, weil zwei Klassen miteinander verbunden wurden)&lt;br /&gt;
[[Datei:1920px-UmlCd Assoziation-1.png|mini|links|Binäre Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;reflexive Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Im hier dargestellten Bild sieht man eine reflexive Assoziation, welche auf sich selbst verweist.&lt;br /&gt;
[[Datei:UmlCd Assoziation-2.png|mini|links|Reflexive Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da Assoziationen durch Linien dargestellt werden, müssen diese durch ein Assoziationsende gekennzeichnet werden. Diese Assoziationsenden können folgende Merkmale aufweisen:&lt;br /&gt;
* Sie können eine Multiplizität besitzen. Diese gibt Informationen über das Beziehungsverhältnis zweier Klassen. Diese Zahlen befinden sich &#039;&#039;&#039;nur&#039;&#039;&#039; im &#039;&#039;positiven&#039;&#039; und &#039;&#039;ganzzahligen&#039;&#039; Bereich, wobei der Beginn bei der Zahl 0 liegt.&lt;br /&gt;
** Multiplizitäten werden im folgenden Format angegeben:&lt;br /&gt;
 untereSchranke..obereSchranke&lt;br /&gt;
** Bei * oder auch 0..* wird die untereSchranke als 0 und die obereSchranke als unendlich angenommen.&lt;br /&gt;
** Beide Schranken dürfen nicht 0 oder unbeschränkt sein. Falls beide Grenzen trotzdem gleich groß sind, wird nur die obereSchranke angegeben. &lt;br /&gt;
** Bei einer Multiplizität von 0..1 wird das Element als &#039;&#039;optional&#039;&#039; bezeichnet.&lt;br /&gt;
** Wenn die obereSchranke über dem Wert 1 liegt, wird das Element als mehrwertiges Element bezeichnet, da mehrere Wert annehmbar sind.&lt;br /&gt;
* Sie können Namen besitzen.&lt;br /&gt;
* Sie können eine Sichtbarkeit aufweisen.&lt;br /&gt;
* Es kann spezifiziert werden, ob das Assoziationsende &amp;quot;ordered&amp;quot; und / oder unique ist. &lt;br /&gt;
&lt;br /&gt;
Zudem Assoziationsende kommen oft Multiplizitäten hinzu, welche die Beziehung zwischen den zwei Instanzen regelt. Im folgenden werden auf zwei Arten der Assoziationen genauer eingegangen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Komposition und Aggregation&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Um Beziehungen mit &#039;&#039;Ganzen&#039;&#039; und &#039;&#039;Teilen&#039;&#039; darzustellen werden die Aggregation und die Komposition verwendet.&lt;br /&gt;
[[Datei:Komposition Aggregation.png|mini|links|Komposition und Aggregation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Komposition ist eine Linie mit einer ausgefüllten Raute, welche mit der Kardinalität 1 beschriftet wird und mit dem Ganzen Teil der Beziehungspartner verbunden ist. Bei einer Komposition können die &#039;&#039;Teile&#039;&#039; nicht ohne das &#039;&#039;Ganze&#039;&#039; existieren. Das bedeutet, dass das &#039;&#039;Teil&#039;&#039; Element existenziell abhängig von &#039;&#039;Ganz&#039;&#039; Element ist.&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Aggregation ist eine Linie mit einer nicht ausgefüllten Raute, welche die Kardinalität 0..* besitzt und mit dem &#039;&#039;Ganzen&#039;&#039; Teil verbunden ist. Die Elemente in einer Aggregation besitzen keine Exisitenzabhängigkeit, da die &#039;&#039;Teil&#039;&#039; Elemente auch ohne die &#039;&#039;Ganz&#039;&#039; Elemente bestehen können. &lt;br /&gt;
&lt;br /&gt;
Die Assoziationsarten werden prinzipiell mittels der Kardinalität unterschieden. Zudem sind die &#039;&#039;Teil&#039;&#039; Elemente Bestandteil genau eines &#039;&#039;Ganz&#039;&#039; Elementes, da sie NIE zu mehrere &#039;&#039;Ganz&#039;&#039; Elementen gehören. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber&#039;&#039;&#039;&#039;&#039; == &lt;br /&gt;
&lt;br /&gt;
Diese Umsetzung erfolgte mit der Programmiersprache JAVA.&lt;br /&gt;
[[Datei:Screenshot 2021-01-22 143552.jpg|mini|600px|none|Fahrzeuge in einem UML Klassendiagramm]]&lt;br /&gt;
&#039;&#039;&#039;Vehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle;&lt;br /&gt;
&lt;br /&gt;
public abstract class Vehicle {&lt;br /&gt;
    private int maxSpeed;&lt;br /&gt;
    private int wheels;&lt;br /&gt;
&lt;br /&gt;
    public Vehicle(int maxSpeed, int wheels) {&lt;br /&gt;
        this.maxSpeed = maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void move() {&lt;br /&gt;
        System.out.println(&amp;quot;I am moving at &amp;quot; + maxSpeed + &amp;quot; with &amp;quot; + wheels + &amp;quot; wheels.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public int getMaxSpeed() {&lt;br /&gt;
        return maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public abstract void start();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
public class Bike extends Vehicle {&lt;br /&gt;
    public Bike(int maxSpeed, int wheels) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start to step into the pedals!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rollerblades.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Rollerblades extends Vehicle {&lt;br /&gt;
    public Rollerblades(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 8);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start skate!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Skateboard.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Skateboard extends Vehicle {&lt;br /&gt;
    public Skateboard(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 4);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I step with one feet on the ground to start!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MotorizedVehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public abstract class MotorizedVehicle extends Vehicle {&lt;br /&gt;
    private float kw;&lt;br /&gt;
&lt;br /&gt;
    public MotorizedVehicle(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
        this.kw = kw;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I am starting my engine with &amp;quot; + kw + &amp;quot; kw.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EBike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class EBike extends MotorizedVehicle {&lt;br /&gt;
    public EBike(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 2, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Lkw extends MotorizedVehicle {&lt;br /&gt;
    public Lkw(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Pkw extends MotorizedVehicle {&lt;br /&gt;
    public Pkw(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 4, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Quellen&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language&lt;br /&gt;
&lt;br /&gt;
https://www.sparxsystems.de/ressourcen/literatur/leseprobe-zu-projektabwicklung-mit-uml-und-enterprise-architect/klassendiagramm-class-diagram/&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Assoziation_(UML)&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Multiplizit%C3%A4t_(UML)&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=Datei:2021-01-29_Generalisierung.jpg&amp;diff=864</id>
		<title>Datei:2021-01-29 Generalisierung.jpg</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=Datei:2021-01-29_Generalisierung.jpg&amp;diff=864"/>
		<updated>2021-01-29T13:28:54Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;generalisierung&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=852</id>
		<title>UML Klassendiagramm</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=852"/>
		<updated>2021-01-29T12:46:59Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &#039;&#039;&#039;&#039;&#039;Was ist ein Klassendiagramm?&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm bildet ein Kernstück der &#039;&#039;&#039;U&#039;&#039;&#039;nified &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;L&#039;&#039;&#039;anguage (&#039;&#039;&#039;UML&#039;&#039;&#039;). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Anwendungsgebiete von Klassendiagramme &#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm wird verwendet, um die Programme einfacher und übersichtlicher darzustellen und diese dann anschließend umzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Bausteine eines Klassendiagramms&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Klassenmodelle unterteilen sich in folgende Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Klassen&lt;br /&gt;
* Schnittstellen&lt;br /&gt;
* Generalisierung&lt;br /&gt;
* Assoziation&lt;br /&gt;
** Komposition&lt;br /&gt;
** Aggregation&lt;br /&gt;
[[Datei:Screenshot 2021-01-08 132401.jpg|mini|UML Klasse aus DIA]]&lt;br /&gt;
==== &#039;&#039;&#039;Klassen&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie &amp;quot;{abstrakt}&amp;quot; über dem Namen der Klasse tragen. &lt;br /&gt;
Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039; oder auch &#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
Bei einer &#039;&#039;&#039;public&#039;&#039;&#039; oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.&lt;br /&gt;
* &#039;&#039;&#039;protected&#039;&#039;&#039; oder auch &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;protected&#039;&#039;&#039; Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.&lt;br /&gt;
* &#039;&#039;&#039;private&#039;&#039;&#039; oder auch &#039;&#039;&#039;−&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;private&#039;&#039;&#039; Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden. &lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; oder auch &#039;&#039;&#039;~&#039;&#039;&#039;&lt;br /&gt;
Bei einer Klasse mit einer &#039;&#039;&#039;package&#039;&#039;&#039; Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier wird im Folgenden Klassen anhand von Beispielen gezeigt:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;public&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:2021-01-29 Klasse_public.jpg|links|mini|Public Attribute]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese oben dargestellte Methode verfügt über zwei public Variablen und einer public Methode, wobei der Fokus auf den Variablen liegt. Der Code sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
public class Klasse{&lt;br /&gt;
&lt;br /&gt;
  public int a;&lt;br /&gt;
  public int b;&lt;br /&gt;
&lt;br /&gt;
  public int count(){&lt;br /&gt;
    return this.a + this.b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse public2.jpg|links|mini|Public Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt eine Klasse mit keinen Variablen aber mit einer public Methode. Der Code dieses Bildes wurde folgendermaßen umgesetzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
public class Klasse{&lt;br /&gt;
&lt;br /&gt;
  public int count(int a, int b){&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.count(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;protected&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
[[Datei:2021-01-29 Klasse protected.jpg|mini|links|protected Variablen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt zwei protected Variablen und eine protected Methode. Die Umsetzung des Codes sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
protected class Klasse{&lt;br /&gt;
&lt;br /&gt;
  protected int a;&lt;br /&gt;
  protected int b;&lt;br /&gt;
&lt;br /&gt;
  protected int divide(){&lt;br /&gt;
    return this.a / this.b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse protected2.jpg|mini|links|protected Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt eine protected Methode ohne Klassenvariablen. Die Klasse wurde in folgenden Code umgesetzt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
protected class Klasse{&lt;br /&gt;
&lt;br /&gt;
  protected int divide(int a, int b){&lt;br /&gt;
    return a / b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.divide(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;private&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
[[Datei:2021-01-29 Klasse private.jpg|mini|links|private Variablen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die oben dargestellte UML-Klasse zeigt zwei private Variablen und eine private Methode an. Der Code dieser Klasse sieht wie folgt aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
private class Klasse{&lt;br /&gt;
&lt;br /&gt;
  private int a;&lt;br /&gt;
  private int b;&lt;br /&gt;
&lt;br /&gt;
  private int minus(){&lt;br /&gt;
    return this.b - this.a;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse private2.jpg|mini|links|private Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die im oberen Bild dargestellen Klasse wurde in folgenden Code umgewandelt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
private class Klasse{&lt;br /&gt;
&lt;br /&gt;
  private int count(int a, int b){&lt;br /&gt;
    return b - a;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.count(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:UmlCd Interface-1.svg.png|mini|UML Schnittstelle|100px]]&lt;br /&gt;
==== &#039;&#039;&#039;Schnittstellen&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Schnittstelle&#039;&#039;&#039; wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort &amp;quot;interface&amp;quot; gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Generalization (UML class diagram).png|mini|100px|Generalisierung]]&lt;br /&gt;
==== &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Durch eine &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; &amp;quot;erben&amp;quot; speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse &amp;quot;vererbt&amp;quot;. Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier wird an aus einem UML-Diagramm ein Programm erstellt:&lt;br /&gt;
[[Datei:2021-01-29 Schnittstelle.jpg|mini|links|Interface und Implementierung]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In dem oberen Bild sieht man ein Interface mit mehreren Methoden. Diese Methoden werden von einer Klasse namens &#039;&#039;Rectangle&#039;&#039; implementiert. Die Programmierung zu diesen zwei Elementen sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Moveable.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
interface Moveable {&lt;br /&gt;
&lt;br /&gt;
  int left(int x);&lt;br /&gt;
  int right(int x);&lt;br /&gt;
  int up(int y);&lt;br /&gt;
  int down(int y);&lt;br /&gt;
  int forwards(int z);&lt;br /&gt;
  int backwards(int z);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rectangle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
public class Rectangle implements Moveable{&lt;br /&gt;
&lt;br /&gt;
    int positionx;&lt;br /&gt;
    int positiony;&lt;br /&gt;
    int positionz;&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int left(int x) {&lt;br /&gt;
        return positionx - x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int right(int x) {&lt;br /&gt;
        return positionx + x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int up(int y) {&lt;br /&gt;
        return positiony + y;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int down(int y) {&lt;br /&gt;
        return positiony - y;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int forwards(int z) {&lt;br /&gt;
        return positionz + z;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public int backwards(int z) {&lt;br /&gt;
        return positionz - z;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Assoziantion&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;n-äre Assoziation&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
In folgenden Bild sieht man eine Binäre Assoziation. (Binär, weil zwei Klassen miteinander verbunden wurden)&lt;br /&gt;
[[Datei:1920px-UmlCd Assoziation-1.png|mini|links|Binäre Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;reflexive Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Im hier dargestellten Bild sieht man eine reflexive Assoziation, welche auf sich selbst verweist.&lt;br /&gt;
[[Datei:UmlCd Assoziation-2.png|mini|links|Reflexive Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da Assoziationen durch Linien dargestellt werden, müssen diese durch ein Assoziationsende gekennzeichnet werden. Diese Assoziationsenden können folgende Merkmale aufweisen:&lt;br /&gt;
* Sie können eine Multiplizität besitzen. Diese gibt Informationen über das Beziehungsverhältnis zweier Klassen. Diese Zahlen befinden sich &#039;&#039;&#039;nur&#039;&#039;&#039; im &#039;&#039;positiven&#039;&#039; und &#039;&#039;ganzzahligen&#039;&#039; Bereich, wobei der Beginn bei der Zahl 0 liegt.&lt;br /&gt;
** Multiplizitäten werden im folgenden Format angegeben:&lt;br /&gt;
 untereSchranke..obereSchranke&lt;br /&gt;
** Bei * oder auch 0..* wird die untereSchranke als 0 und die obereSchranke als unendlich angenommen.&lt;br /&gt;
** Beide Schranken dürfen nicht 0 oder unbeschränkt sein. Falls beide Grenzen trotzdem gleich groß sind, wird nur die obereSchranke angegeben. &lt;br /&gt;
** Bei einer Multiplizität von 0..1 wird das Element als &#039;&#039;optional&#039;&#039; bezeichnet.&lt;br /&gt;
** Wenn die obereSchranke über dem Wert 1 liegt, wird das Element als mehrwertiges Element bezeichnet, da mehrere Wert annehmbar sind.&lt;br /&gt;
* Sie können Namen besitzen.&lt;br /&gt;
* Sie können eine Sichtbarkeit aufweisen.&lt;br /&gt;
* Es kann spezifiziert werden, ob das Assoziationsende &amp;quot;ordered&amp;quot; und / oder unique ist. &lt;br /&gt;
&lt;br /&gt;
Zudem Assoziationsende kommen oft Multiplizitäten hinzu, welche die Beziehung zwischen den zwei Instanzen regelt. Im folgenden werden auf zwei Arten der Assoziationen genauer eingegangen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Komposition und Aggregation&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Um Beziehungen mit &#039;&#039;Ganzen&#039;&#039; und &#039;&#039;Teilen&#039;&#039; darzustellen werden die Aggregation und die Komposition verwendet.&lt;br /&gt;
[[Datei:Komposition Aggregation.png|mini|links|Komposition und Aggregation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Komposition ist eine Linie mit einer ausgefüllten Raute, welche mit der Kardinalität 1 beschriftet wird und mit dem Ganzen Teil der Beziehungspartner verbunden ist. Bei einer Komposition können die &#039;&#039;Teile&#039;&#039; nicht ohne das &#039;&#039;Ganze&#039;&#039; existieren. Das bedeutet, dass das &#039;&#039;Teil&#039;&#039; Element existenziell abhängig von &#039;&#039;Ganz&#039;&#039; Element ist.&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Aggregation ist eine Linie mit einer nicht ausgefüllten Raute, welche die Kardinalität 0..* besitzt und mit dem &#039;&#039;Ganzen&#039;&#039; Teil verbunden ist. Die Elemente in einer Aggregation besitzen keine Exisitenzabhängigkeit, da die &#039;&#039;Teil&#039;&#039; Elemente auch ohne die &#039;&#039;Ganz&#039;&#039; Elemente bestehen können. &lt;br /&gt;
&lt;br /&gt;
Die Assoziationsarten werden prinzipiell mittels der Kardinalität unterschieden. Zudem sind die &#039;&#039;Teil&#039;&#039; Elemente Bestandteil genau eines &#039;&#039;Ganz&#039;&#039; Elementes, da sie NIE zu mehrere &#039;&#039;Ganz&#039;&#039; Elementen gehören. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber&#039;&#039;&#039;&#039;&#039; == &lt;br /&gt;
&lt;br /&gt;
Diese Umsetzung erfolgte mit der Programmiersprache JAVA.&lt;br /&gt;
[[Datei:Screenshot 2021-01-22 143552.jpg|mini|600px|none|Fahrzeuge in einem UML Klassendiagramm]]&lt;br /&gt;
&#039;&#039;&#039;Vehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle;&lt;br /&gt;
&lt;br /&gt;
public abstract class Vehicle {&lt;br /&gt;
    private int maxSpeed;&lt;br /&gt;
    private int wheels;&lt;br /&gt;
&lt;br /&gt;
    public Vehicle(int maxSpeed, int wheels) {&lt;br /&gt;
        this.maxSpeed = maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void move() {&lt;br /&gt;
        System.out.println(&amp;quot;I am moving at &amp;quot; + maxSpeed + &amp;quot; with &amp;quot; + wheels + &amp;quot; wheels.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public int getMaxSpeed() {&lt;br /&gt;
        return maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public abstract void start();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
public class Bike extends Vehicle {&lt;br /&gt;
    public Bike(int maxSpeed, int wheels) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start to step into the pedals!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rollerblades.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Rollerblades extends Vehicle {&lt;br /&gt;
    public Rollerblades(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 8);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start skate!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Skateboard.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Skateboard extends Vehicle {&lt;br /&gt;
    public Skateboard(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 4);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I step with one feet on the ground to start!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MotorizedVehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public abstract class MotorizedVehicle extends Vehicle {&lt;br /&gt;
    private float kw;&lt;br /&gt;
&lt;br /&gt;
    public MotorizedVehicle(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
        this.kw = kw;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I am starting my engine with &amp;quot; + kw + &amp;quot; kw.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EBike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class EBike extends MotorizedVehicle {&lt;br /&gt;
    public EBike(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 2, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Lkw extends MotorizedVehicle {&lt;br /&gt;
    public Lkw(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Pkw extends MotorizedVehicle {&lt;br /&gt;
    public Pkw(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 4, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Quellen&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language&lt;br /&gt;
&lt;br /&gt;
https://www.sparxsystems.de/ressourcen/literatur/leseprobe-zu-projektabwicklung-mit-uml-und-enterprise-architect/klassendiagramm-class-diagram/&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Assoziation_(UML)&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Multiplizit%C3%A4t_(UML)&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=Datei:2021-01-29_Schnittstelle.jpg&amp;diff=847</id>
		<title>Datei:2021-01-29 Schnittstelle.jpg</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=Datei:2021-01-29_Schnittstelle.jpg&amp;diff=847"/>
		<updated>2021-01-29T12:40:04Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Interface&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=841</id>
		<title>UML Klassendiagramm</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=841"/>
		<updated>2021-01-29T11:54:49Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &#039;&#039;&#039;&#039;&#039;Was ist ein Klassendiagramm?&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm bildet ein Kernstück der &#039;&#039;&#039;U&#039;&#039;&#039;nified &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;L&#039;&#039;&#039;anguage (&#039;&#039;&#039;UML&#039;&#039;&#039;). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Anwendungsgebiete von Klassendiagramme &#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm wird verwendet, um die Programme einfacher und übersichtlicher darzustellen und diese dann anschließend umzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Bausteine eines Klassendiagramms&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Klassenmodelle unterteilen sich in folgende Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Klassen&lt;br /&gt;
* Schnittstellen&lt;br /&gt;
* Generalisierung&lt;br /&gt;
* Assoziation&lt;br /&gt;
** Komposition&lt;br /&gt;
** Aggregation&lt;br /&gt;
[[Datei:Screenshot 2021-01-08 132401.jpg|mini|UML Klasse aus DIA]]&lt;br /&gt;
==== &#039;&#039;&#039;Klassen&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie &amp;quot;{abstrakt}&amp;quot; über dem Namen der Klasse tragen. &lt;br /&gt;
Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039; oder auch &#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
Bei einer &#039;&#039;&#039;public&#039;&#039;&#039; oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.&lt;br /&gt;
* &#039;&#039;&#039;protected&#039;&#039;&#039; oder auch &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;protected&#039;&#039;&#039; Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.&lt;br /&gt;
* &#039;&#039;&#039;private&#039;&#039;&#039; oder auch &#039;&#039;&#039;−&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;private&#039;&#039;&#039; Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden. &lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; oder auch &#039;&#039;&#039;~&#039;&#039;&#039;&lt;br /&gt;
Bei einer Klasse mit einer &#039;&#039;&#039;package&#039;&#039;&#039; Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier wird im Folgenden Klassen anhand von Beispielen gezeigt:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;public&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:2021-01-29 Klasse_public.jpg|links|mini|Public Attribute]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese oben dargestellte Methode verfügt über zwei public Variablen und einer public Methode, wobei der Fokus auf den Variablen liegt. Der Code sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
public class Klasse{&lt;br /&gt;
&lt;br /&gt;
  public int a;&lt;br /&gt;
  public int b;&lt;br /&gt;
&lt;br /&gt;
  public int count(){&lt;br /&gt;
    return this.a + this.b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse public2.jpg|links|mini|Public Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt eine Klasse mit keinen Variablen aber mit einer public Methode. Der Code dieses Bildes wurde folgendermaßen umgesetzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
public class Klasse{&lt;br /&gt;
&lt;br /&gt;
  public int count(int a, int b){&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.count(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;protected&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
[[Datei:2021-01-29 Klasse protected.jpg|mini|links|protected Variablen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt zwei protected Variablen und eine protected Methode. Die Umsetzung des Codes sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
protected class Klasse{&lt;br /&gt;
&lt;br /&gt;
  protected int a;&lt;br /&gt;
  protected int b;&lt;br /&gt;
&lt;br /&gt;
  protected int divide(){&lt;br /&gt;
    return this.a / this.b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse protected2.jpg|mini|links|protected Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt eine protected Methode ohne Klassenvariablen. Die Klasse wurde in folgenden Code umgesetzt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
protected class Klasse{&lt;br /&gt;
&lt;br /&gt;
  protected int divide(int a, int b){&lt;br /&gt;
    return a / b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.divide(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;private&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
[[Datei:2021-01-29 Klasse private.jpg|mini|links|private Variablen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die oben dargestellte UML-Klasse zeigt zwei private Variablen und eine private Methode an. Der Code dieser Klasse sieht wie folgt aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
private class Klasse{&lt;br /&gt;
&lt;br /&gt;
  private int a;&lt;br /&gt;
  private int b;&lt;br /&gt;
&lt;br /&gt;
  private int minus(){&lt;br /&gt;
    return this.b - this.a;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse private2.jpg|mini|links|private Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die im oberen Bild dargestellen Klasse wurde in folgenden Code umgewandelt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
private class Klasse{&lt;br /&gt;
&lt;br /&gt;
  private int count(int a, int b){&lt;br /&gt;
    return b - a;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.count(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:UmlCd Interface-1.svg.png|mini|UML Schnittstelle|100px]]&lt;br /&gt;
==== &#039;&#039;&#039;Schnittstellen&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Schnittstelle&#039;&#039;&#039; wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort &amp;quot;interface&amp;quot; gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Generalization (UML class diagram).png|mini|100px|Generalisierung]]&lt;br /&gt;
==== &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Durch eine &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; &amp;quot;erben&amp;quot; speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse &amp;quot;vererbt&amp;quot;. Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Assoziantion&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;n-äre Assoziation&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
In folgenden Bild sieht man eine Binäre Assoziation. (Binär, weil zwei Klassen miteinander verbunden wurden)&lt;br /&gt;
[[Datei:1920px-UmlCd Assoziation-1.png|mini|links|Binäre Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;reflexive Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Im hier dargestellten Bild sieht man eine reflexive Assoziation, welche auf sich selbst verweist.&lt;br /&gt;
[[Datei:UmlCd Assoziation-2.png|mini|links|Reflexive Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da Assoziationen durch Linien dargestellt werden, müssen diese durch ein Assoziationsende gekennzeichnet werden. Diese Assoziationsenden können folgende Merkmale aufweisen:&lt;br /&gt;
* Sie können eine Multiplizität besitzen. Diese gibt Informationen über das Beziehungsverhältnis zweier Klassen. Diese Zahlen befinden sich &#039;&#039;&#039;nur&#039;&#039;&#039; im &#039;&#039;positiven&#039;&#039; und &#039;&#039;ganzzahligen&#039;&#039; Bereich, wobei der Beginn bei der Zahl 0 liegt.&lt;br /&gt;
** Multiplizitäten werden im folgenden Format angegeben:&lt;br /&gt;
 untereSchranke..obereSchranke&lt;br /&gt;
** Bei * oder auch 0..* wird die untereSchranke als 0 und die obereSchranke als unendlich angenommen.&lt;br /&gt;
** Beide Schranken dürfen nicht 0 oder unbeschränkt sein. Falls beide Grenzen trotzdem gleich groß sind, wird nur die obereSchranke angegeben. &lt;br /&gt;
** Bei einer Multiplizität von 0..1 wird das Element als &#039;&#039;optional&#039;&#039; bezeichnet.&lt;br /&gt;
** Wenn die obereSchranke über dem Wert 1 liegt, wird das Element als mehrwertiges Element bezeichnet, da mehrere Wert annehmbar sind.&lt;br /&gt;
* Sie können Namen besitzen.&lt;br /&gt;
* Sie können eine Sichtbarkeit aufweisen.&lt;br /&gt;
* Es kann spezifiziert werden, ob das Assoziationsende &amp;quot;ordered&amp;quot; und / oder unique ist. &lt;br /&gt;
&lt;br /&gt;
Zudem Assoziationsende kommen oft Multiplizitäten hinzu, welche die Beziehung zwischen den zwei Instanzen regelt. Im folgenden werden auf zwei Arten der Assoziationen genauer eingegangen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Komposition und Aggregation&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Um Beziehungen mit &#039;&#039;Ganzen&#039;&#039; und &#039;&#039;Teilen&#039;&#039; darzustellen werden die Aggregation und die Komposition verwendet.&lt;br /&gt;
[[Datei:Komposition Aggregation.png|mini|links|Komposition und Aggregation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Komposition ist eine Linie mit einer ausgefüllten Raute, welche mit der Kardinalität 1 beschriftet wird und mit dem Ganzen Teil der Beziehungspartner verbunden ist. Bei einer Komposition können die &#039;&#039;Teile&#039;&#039; nicht ohne das &#039;&#039;Ganze&#039;&#039; existieren. Das bedeutet, dass das &#039;&#039;Teil&#039;&#039; Element existenziell abhängig von &#039;&#039;Ganz&#039;&#039; Element ist.&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Aggregation ist eine Linie mit einer nicht ausgefüllten Raute, welche die Kardinalität 0..* besitzt und mit dem &#039;&#039;Ganzen&#039;&#039; Teil verbunden ist. Die Elemente in einer Aggregation besitzen keine Exisitenzabhängigkeit, da die &#039;&#039;Teil&#039;&#039; Elemente auch ohne die &#039;&#039;Ganz&#039;&#039; Elemente bestehen können. &lt;br /&gt;
&lt;br /&gt;
Die Assoziationsarten werden prinzipiell mittels der Kardinalität unterschieden. Zudem sind die &#039;&#039;Teil&#039;&#039; Elemente Bestandteil genau eines &#039;&#039;Ganz&#039;&#039; Elementes, da sie NIE zu mehrere &#039;&#039;Ganz&#039;&#039; Elementen gehören. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber&#039;&#039;&#039;&#039;&#039; == &lt;br /&gt;
&lt;br /&gt;
Diese Umsetzung erfolgte mit der Programmiersprache JAVA.&lt;br /&gt;
[[Datei:Screenshot 2021-01-22 143552.jpg|mini|600px|none|Fahrzeuge in einem UML Klassendiagramm]]&lt;br /&gt;
&#039;&#039;&#039;Vehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle;&lt;br /&gt;
&lt;br /&gt;
public abstract class Vehicle {&lt;br /&gt;
    private int maxSpeed;&lt;br /&gt;
    private int wheels;&lt;br /&gt;
&lt;br /&gt;
    public Vehicle(int maxSpeed, int wheels) {&lt;br /&gt;
        this.maxSpeed = maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void move() {&lt;br /&gt;
        System.out.println(&amp;quot;I am moving at &amp;quot; + maxSpeed + &amp;quot; with &amp;quot; + wheels + &amp;quot; wheels.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public int getMaxSpeed() {&lt;br /&gt;
        return maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public abstract void start();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
public class Bike extends Vehicle {&lt;br /&gt;
    public Bike(int maxSpeed, int wheels) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start to step into the pedals!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rollerblades.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Rollerblades extends Vehicle {&lt;br /&gt;
    public Rollerblades(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 8);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start skate!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Skateboard.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Skateboard extends Vehicle {&lt;br /&gt;
    public Skateboard(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 4);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I step with one feet on the ground to start!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MotorizedVehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public abstract class MotorizedVehicle extends Vehicle {&lt;br /&gt;
    private float kw;&lt;br /&gt;
&lt;br /&gt;
    public MotorizedVehicle(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
        this.kw = kw;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I am starting my engine with &amp;quot; + kw + &amp;quot; kw.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EBike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class EBike extends MotorizedVehicle {&lt;br /&gt;
    public EBike(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 2, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Lkw extends MotorizedVehicle {&lt;br /&gt;
    public Lkw(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Pkw extends MotorizedVehicle {&lt;br /&gt;
    public Pkw(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 4, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Quellen&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language&lt;br /&gt;
&lt;br /&gt;
https://www.sparxsystems.de/ressourcen/literatur/leseprobe-zu-projektabwicklung-mit-uml-und-enterprise-architect/klassendiagramm-class-diagram/&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Assoziation_(UML)&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Multiplizit%C3%A4t_(UML)&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=837</id>
		<title>UML Klassendiagramm</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=837"/>
		<updated>2021-01-29T11:04:27Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &#039;&#039;&#039;&#039;&#039;Was ist ein Klassendiagramm?&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm bildet ein Kernstück der &#039;&#039;&#039;U&#039;&#039;&#039;nified &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;L&#039;&#039;&#039;anguage (&#039;&#039;&#039;UML&#039;&#039;&#039;). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Wozu wird es benötigt?&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm wird verwendet, um die Programme einfacher und übersichtlicher darzustellen und diese dann anschließend umzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Welche Elemente gibt es? Erkläre dies so detailliert und anschaulich wie möglich&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Klassenmodelle unterteilen sich in folgende Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Klassen&lt;br /&gt;
* Schnittstellen&lt;br /&gt;
* Generalisierung&lt;br /&gt;
* Assoziation&lt;br /&gt;
** Komposition&lt;br /&gt;
** Aggregation&lt;br /&gt;
[[Datei:Screenshot 2021-01-08 132401.jpg|mini|UML Klasse aus DIA]]&lt;br /&gt;
==== &#039;&#039;&#039;Klassen&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie &amp;quot;{abstrakt}&amp;quot; über dem Namen der Klasse tragen. &lt;br /&gt;
Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039; oder auch &#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
Bei einer &#039;&#039;&#039;public&#039;&#039;&#039; oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.&lt;br /&gt;
* &#039;&#039;&#039;protected&#039;&#039;&#039; oder auch &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;protected&#039;&#039;&#039; Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.&lt;br /&gt;
* &#039;&#039;&#039;private&#039;&#039;&#039; oder auch &#039;&#039;&#039;−&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;private&#039;&#039;&#039; Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden. &lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; oder auch &#039;&#039;&#039;~&#039;&#039;&#039;&lt;br /&gt;
Bei einer Klasse mit einer &#039;&#039;&#039;package&#039;&#039;&#039; Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier wird im Folgenden Klassen anhand von Beispielen gezeigt:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;public&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:2021-01-29 Klasse_public.jpg|links|mini|Public Attribute]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese oben dargestellte Methode verfügt über zwei public Variablen und einer public Methode, wobei der Fokus auf den Variablen liegt. Der Code sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
public class Klasse{&lt;br /&gt;
&lt;br /&gt;
  public int a;&lt;br /&gt;
  public int b;&lt;br /&gt;
&lt;br /&gt;
  public int count(){&lt;br /&gt;
    return this.a + this.b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse public2.jpg|links|mini|Public Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt eine Klasse mit keinen Variablen aber mit einer public Methode. Der Code dieses Bildes wurde folgendermaßen umgesetzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
public class Klasse{&lt;br /&gt;
&lt;br /&gt;
  public int count(int a, int b){&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.count(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;protected&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
[[Datei:2021-01-29 Klasse protected.jpg|mini|links|protected Variablen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt zwei protected Variablen und eine protected Methode. Die Umsetzung des Codes sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
protected class Klasse{&lt;br /&gt;
&lt;br /&gt;
  protected int a;&lt;br /&gt;
  protected int b;&lt;br /&gt;
&lt;br /&gt;
  protected int divide(){&lt;br /&gt;
    return this.a / this.b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse protected2.jpg|mini|links|protected Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt eine protected Methode ohne Klassenvariablen. Die Klasse wurde in folgenden Code umgesetzt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
protected class Klasse{&lt;br /&gt;
&lt;br /&gt;
  protected int divide(int a, int b){&lt;br /&gt;
    return a / b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.divide(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;private&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
[[Datei:2021-01-29 Klasse private.jpg|mini|links|private Variablen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die oben dargestellte UML-Klasse zeigt zwei private Variablen und eine private Methode an. Der Code dieser Klasse sieht wie folgt aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
private class Klasse{&lt;br /&gt;
&lt;br /&gt;
  private int a;&lt;br /&gt;
  private int b;&lt;br /&gt;
&lt;br /&gt;
  private int minus(){&lt;br /&gt;
    return this.b - this.a;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse private2.jpg|mini|links|private Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die im oberen Bild dargestellen Klasse wurde in folgenden Code umgewandelt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
private class Klasse{&lt;br /&gt;
&lt;br /&gt;
  private int count(int a, int b){&lt;br /&gt;
    return b - a;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.count(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:UmlCd Interface-1.svg.png|mini|UML Schnittstelle|100px]]&lt;br /&gt;
==== &#039;&#039;&#039;Schnittstellen&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Schnittstelle&#039;&#039;&#039; wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort &amp;quot;interface&amp;quot; gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Generalization (UML class diagram).png|mini|100px|Generalisierung]]&lt;br /&gt;
==== &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Durch eine &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; &amp;quot;erben&amp;quot; speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse &amp;quot;vererbt&amp;quot;. Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Assoziantion&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;n-äre Assoziation&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
In folgenden Bild sieht man eine Binäre Assoziation. (Binär, weil zwei Klassen miteinander verbunden wurden)&lt;br /&gt;
[[Datei:1920px-UmlCd Assoziation-1.png|mini|links|Binäre Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;reflexive Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Im hier dargestellten Bild sieht man eine reflexive Assoziation, welche auf sich selbst verweist.&lt;br /&gt;
[[Datei:UmlCd Assoziation-2.png|mini|links|Reflexive Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da Assoziationen durch Linien dargestellt werden, müssen diese durch ein Assoziationsende gekennzeichnet werden. Diese Assoziationsenden können folgende Merkmale aufweisen:&lt;br /&gt;
* Sie können eine Multiplizität besitzen. Diese gibt Informationen über das Beziehungsverhältnis zweier Klassen. Diese Zahlen befinden sich &#039;&#039;&#039;nur&#039;&#039;&#039; im &#039;&#039;positiven&#039;&#039; und &#039;&#039;ganzzahligen&#039;&#039; Bereich, wobei der Beginn bei der Zahl 0 liegt.&lt;br /&gt;
** Multiplizitäten werden im folgenden Format angegeben:&lt;br /&gt;
 untereSchranke..obereSchranke&lt;br /&gt;
** Bei * oder auch 0..* wird die untereSchranke als 0 und die obereSchranke als unendlich angenommen.&lt;br /&gt;
** Beide Schranken dürfen nicht 0 oder unbeschränkt sein. Falls beide Grenzen trotzdem gleich groß sind, wird nur die obereSchranke angegeben. &lt;br /&gt;
** Bei einer Multiplizität von 0..1 wird das Element als &#039;&#039;optional&#039;&#039; bezeichnet.&lt;br /&gt;
** Wenn die obereSchranke über dem Wert 1 liegt, wird das Element als mehrwertiges Element bezeichnet, da mehrere Wert annehmbar sind.&lt;br /&gt;
* Sie können Namen besitzen.&lt;br /&gt;
* Sie können eine Sichtbarkeit aufweisen.&lt;br /&gt;
* Es kann spezifiziert werden, ob das Assoziationsende &amp;quot;ordered&amp;quot; und / oder unique ist. &lt;br /&gt;
&lt;br /&gt;
Zudem Assoziationsende kommen oft Multiplizitäten hinzu, welche die Beziehung zwischen den zwei Instanzen regelt. Im folgenden werden auf zwei Arten der Assoziationen genauer eingegangen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Komposition und Aggregation&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Um Beziehungen mit &#039;&#039;Ganzen&#039;&#039; und &#039;&#039;Teilen&#039;&#039; darzustellen werden die Aggregation und die Komposition verwendet.&lt;br /&gt;
[[Datei:Komposition Aggregation.png|mini|links|Komposition und Aggregation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Komposition ist eine Linie mit einer ausgefüllten Raute, welche mit der Kardinalität 1 beschriftet wird und mit dem Ganzen Teil der Beziehungspartner verbunden ist. Bei einer Komposition können die &#039;&#039;Teile&#039;&#039; nicht ohne das &#039;&#039;Ganze&#039;&#039; existieren. Das bedeutet, dass das &#039;&#039;Teil&#039;&#039; Element existenziell abhängig von &#039;&#039;Ganz&#039;&#039; Element ist.&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Aggregation ist eine Linie mit einer nicht ausgefüllten Raute, welche die Kardinalität 0..* besitzt und mit dem &#039;&#039;Ganzen&#039;&#039; Teil verbunden ist. Die Elemente in einer Aggregation besitzen keine Exisitenzabhängigkeit, da die &#039;&#039;Teil&#039;&#039; Elemente auch ohne die &#039;&#039;Ganz&#039;&#039; Elemente bestehen können. &lt;br /&gt;
&lt;br /&gt;
Die Assoziationsarten werden prinzipiell mittels der Kardinalität unterschieden. Zudem sind die &#039;&#039;Teil&#039;&#039; Elemente Bestandteil genau eines &#039;&#039;Ganz&#039;&#039; Elementes, da sie NIE zu mehrere &#039;&#039;Ganz&#039;&#039; Elementen gehören. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber&#039;&#039;&#039;&#039;&#039; == &lt;br /&gt;
&lt;br /&gt;
Diese Umsetzung erfolgte mit der Programmiersprache JAVA.&lt;br /&gt;
[[Datei:Screenshot 2021-01-22 143552.jpg|mini|600px|none|Fahrzeuge in einem UML Klassendiagramm]]&lt;br /&gt;
&#039;&#039;&#039;Vehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle;&lt;br /&gt;
&lt;br /&gt;
public abstract class Vehicle {&lt;br /&gt;
    private int maxSpeed;&lt;br /&gt;
    private int wheels;&lt;br /&gt;
&lt;br /&gt;
    public Vehicle(int maxSpeed, int wheels) {&lt;br /&gt;
        this.maxSpeed = maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void move() {&lt;br /&gt;
        System.out.println(&amp;quot;I am moving at &amp;quot; + maxSpeed + &amp;quot; with &amp;quot; + wheels + &amp;quot; wheels.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public int getMaxSpeed() {&lt;br /&gt;
        return maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public abstract void start();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
public class Bike extends Vehicle {&lt;br /&gt;
    public Bike(int maxSpeed, int wheels) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start to step into the pedals!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rollerblades.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Rollerblades extends Vehicle {&lt;br /&gt;
    public Rollerblades(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 8);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start skate!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Skateboard.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Skateboard extends Vehicle {&lt;br /&gt;
    public Skateboard(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 4);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I step with one feet on the ground to start!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MotorizedVehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public abstract class MotorizedVehicle extends Vehicle {&lt;br /&gt;
    private float kw;&lt;br /&gt;
&lt;br /&gt;
    public MotorizedVehicle(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
        this.kw = kw;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I am starting my engine with &amp;quot; + kw + &amp;quot; kw.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EBike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class EBike extends MotorizedVehicle {&lt;br /&gt;
    public EBike(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 2, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Lkw extends MotorizedVehicle {&lt;br /&gt;
    public Lkw(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Pkw extends MotorizedVehicle {&lt;br /&gt;
    public Pkw(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 4, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Quellen&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language&lt;br /&gt;
&lt;br /&gt;
https://www.sparxsystems.de/ressourcen/literatur/leseprobe-zu-projektabwicklung-mit-uml-und-enterprise-architect/klassendiagramm-class-diagram/&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Assoziation_(UML)&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Multiplizit%C3%A4t_(UML)&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=Datei:2021-01-29_Klasse_private2.jpg&amp;diff=836</id>
		<title>Datei:2021-01-29 Klasse private2.jpg</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=Datei:2021-01-29_Klasse_private2.jpg&amp;diff=836"/>
		<updated>2021-01-29T11:00:07Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;private class&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=Datei:2021-01-29_Klasse_private.jpg&amp;diff=834</id>
		<title>Datei:2021-01-29 Klasse private.jpg</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=Datei:2021-01-29_Klasse_private.jpg&amp;diff=834"/>
		<updated>2021-01-29T10:50:20Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;private class&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=833</id>
		<title>UML Klassendiagramm</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=833"/>
		<updated>2021-01-29T10:48:27Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &#039;&#039;&#039;&#039;&#039;Was ist ein Klassendiagramm?&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm bildet ein Kernstück der &#039;&#039;&#039;U&#039;&#039;&#039;nified &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;L&#039;&#039;&#039;anguage (&#039;&#039;&#039;UML&#039;&#039;&#039;). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Wozu wird es benötigt?&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm wird verwendet, um die Programme einfacher und übersichtlicher darzustellen und diese dann anschließend umzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Welche Elemente gibt es? Erkläre dies so detailliert und anschaulich wie möglich&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Klassenmodelle unterteilen sich in folgende Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Klassen&lt;br /&gt;
* Schnittstellen&lt;br /&gt;
* Generalisierung&lt;br /&gt;
* Assoziation&lt;br /&gt;
** Komposition&lt;br /&gt;
** Aggregation&lt;br /&gt;
[[Datei:Screenshot 2021-01-08 132401.jpg|mini|UML Klasse aus DIA]]&lt;br /&gt;
==== &#039;&#039;&#039;Klassen&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie &amp;quot;{abstrakt}&amp;quot; über dem Namen der Klasse tragen. &lt;br /&gt;
Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039; oder auch &#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
Bei einer &#039;&#039;&#039;public&#039;&#039;&#039; oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.&lt;br /&gt;
* &#039;&#039;&#039;protected&#039;&#039;&#039; oder auch &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;protected&#039;&#039;&#039; Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.&lt;br /&gt;
* &#039;&#039;&#039;private&#039;&#039;&#039; oder auch &#039;&#039;&#039;−&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;private&#039;&#039;&#039; Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden. &lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; oder auch &#039;&#039;&#039;~&#039;&#039;&#039;&lt;br /&gt;
Bei einer Klasse mit einer &#039;&#039;&#039;package&#039;&#039;&#039; Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier wird im Folgenden Klassen anhand von Beispielen gezeigt:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;public&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:2021-01-29 Klasse_public.jpg|links|mini|Public Attribute]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese oben dargestellte Methode verfügt über zwei public Variablen und einer public Methode, wobei der Fokus auf den Variablen liegt. Der Code sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
public class Klasse{&lt;br /&gt;
&lt;br /&gt;
  public int a;&lt;br /&gt;
  public int b;&lt;br /&gt;
&lt;br /&gt;
  public int count(){&lt;br /&gt;
    return this.a + this.b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse public2.jpg|links|mini|Public Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt eine Klasse mit keinen Variablen aber mit einer public Methode. Der Code dieses Bildes wurde folgendermaßen umgesetzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
public class Klasse{&lt;br /&gt;
&lt;br /&gt;
  public int count(int a, int b){&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.count(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;protected&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
[[Datei:2021-01-29 Klasse protected.jpg|mini|links|protected Variablen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt zwei protected Variablen und eine protected Methode. Die Umsetzung des Codes sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
protected class Klasse{&lt;br /&gt;
&lt;br /&gt;
  protected int a;&lt;br /&gt;
  protected int b;&lt;br /&gt;
&lt;br /&gt;
  protected int divide(){&lt;br /&gt;
    return this.a / this.b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse protected2.jpg|mini|links|protected Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt eine protected Methode ohne Klassenvariablen. Die Klasse wurde in folgenden Code umgesetzt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
protected class Klasse{&lt;br /&gt;
&lt;br /&gt;
  protected int divide(int a, int b){&lt;br /&gt;
    return a / b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.divide(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:UmlCd Interface-1.svg.png|mini|UML Schnittstelle|100px]]&lt;br /&gt;
==== &#039;&#039;&#039;Schnittstellen&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Schnittstelle&#039;&#039;&#039; wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort &amp;quot;interface&amp;quot; gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Generalization (UML class diagram).png|mini|100px|Generalisierung]]&lt;br /&gt;
==== &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Durch eine &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; &amp;quot;erben&amp;quot; speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse &amp;quot;vererbt&amp;quot;. Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Assoziantion&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;n-äre Assoziation&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
In folgenden Bild sieht man eine Binäre Assoziation. (Binär, weil zwei Klassen miteinander verbunden wurden)&lt;br /&gt;
[[Datei:1920px-UmlCd Assoziation-1.png|mini|links|Binäre Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;reflexive Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Im hier dargestellten Bild sieht man eine reflexive Assoziation, welche auf sich selbst verweist.&lt;br /&gt;
[[Datei:UmlCd Assoziation-2.png|mini|links|Reflexive Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da Assoziationen durch Linien dargestellt werden, müssen diese durch ein Assoziationsende gekennzeichnet werden. Diese Assoziationsenden können folgende Merkmale aufweisen:&lt;br /&gt;
* Sie können eine Multiplizität besitzen. Diese gibt Informationen über das Beziehungsverhältnis zweier Klassen. Diese Zahlen befinden sich &#039;&#039;&#039;nur&#039;&#039;&#039; im &#039;&#039;positiven&#039;&#039; und &#039;&#039;ganzzahligen&#039;&#039; Bereich, wobei der Beginn bei der Zahl 0 liegt.&lt;br /&gt;
** Multiplizitäten werden im folgenden Format angegeben:&lt;br /&gt;
 untereSchranke..obereSchranke&lt;br /&gt;
** Bei * oder auch 0..* wird die untereSchranke als 0 und die obereSchranke als unendlich angenommen.&lt;br /&gt;
** Beide Schranken dürfen nicht 0 oder unbeschränkt sein. Falls beide Grenzen trotzdem gleich groß sind, wird nur die obereSchranke angegeben. &lt;br /&gt;
** Bei einer Multiplizität von 0..1 wird das Element als &#039;&#039;optional&#039;&#039; bezeichnet.&lt;br /&gt;
** Wenn die obereSchranke über dem Wert 1 liegt, wird das Element als mehrwertiges Element bezeichnet, da mehrere Wert annehmbar sind.&lt;br /&gt;
* Sie können Namen besitzen.&lt;br /&gt;
* Sie können eine Sichtbarkeit aufweisen.&lt;br /&gt;
* Es kann spezifiziert werden, ob das Assoziationsende &amp;quot;ordered&amp;quot; und / oder unique ist. &lt;br /&gt;
&lt;br /&gt;
Zudem Assoziationsende kommen oft Multiplizitäten hinzu, welche die Beziehung zwischen den zwei Instanzen regelt. Im folgenden werden auf zwei Arten der Assoziationen genauer eingegangen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Komposition und Aggregation&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Um Beziehungen mit &#039;&#039;Ganzen&#039;&#039; und &#039;&#039;Teilen&#039;&#039; darzustellen werden die Aggregation und die Komposition verwendet.&lt;br /&gt;
[[Datei:Komposition Aggregation.png|mini|links|Komposition und Aggregation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Komposition ist eine Linie mit einer ausgefüllten Raute, welche mit der Kardinalität 1 beschriftet wird und mit dem Ganzen Teil der Beziehungspartner verbunden ist. Bei einer Komposition können die &#039;&#039;Teile&#039;&#039; nicht ohne das &#039;&#039;Ganze&#039;&#039; existieren. Das bedeutet, dass das &#039;&#039;Teil&#039;&#039; Element existenziell abhängig von &#039;&#039;Ganz&#039;&#039; Element ist.&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Aggregation ist eine Linie mit einer nicht ausgefüllten Raute, welche die Kardinalität 0..* besitzt und mit dem &#039;&#039;Ganzen&#039;&#039; Teil verbunden ist. Die Elemente in einer Aggregation besitzen keine Exisitenzabhängigkeit, da die &#039;&#039;Teil&#039;&#039; Elemente auch ohne die &#039;&#039;Ganz&#039;&#039; Elemente bestehen können. &lt;br /&gt;
&lt;br /&gt;
Die Assoziationsarten werden prinzipiell mittels der Kardinalität unterschieden. Zudem sind die &#039;&#039;Teil&#039;&#039; Elemente Bestandteil genau eines &#039;&#039;Ganz&#039;&#039; Elementes, da sie NIE zu mehrere &#039;&#039;Ganz&#039;&#039; Elementen gehören. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber&#039;&#039;&#039;&#039;&#039; == &lt;br /&gt;
&lt;br /&gt;
Diese Umsetzung erfolgte mit der Programmiersprache JAVA.&lt;br /&gt;
[[Datei:Screenshot 2021-01-22 143552.jpg|mini|600px|none|Fahrzeuge in einem UML Klassendiagramm]]&lt;br /&gt;
&#039;&#039;&#039;Vehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle;&lt;br /&gt;
&lt;br /&gt;
public abstract class Vehicle {&lt;br /&gt;
    private int maxSpeed;&lt;br /&gt;
    private int wheels;&lt;br /&gt;
&lt;br /&gt;
    public Vehicle(int maxSpeed, int wheels) {&lt;br /&gt;
        this.maxSpeed = maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void move() {&lt;br /&gt;
        System.out.println(&amp;quot;I am moving at &amp;quot; + maxSpeed + &amp;quot; with &amp;quot; + wheels + &amp;quot; wheels.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public int getMaxSpeed() {&lt;br /&gt;
        return maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public abstract void start();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
public class Bike extends Vehicle {&lt;br /&gt;
    public Bike(int maxSpeed, int wheels) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start to step into the pedals!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rollerblades.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Rollerblades extends Vehicle {&lt;br /&gt;
    public Rollerblades(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 8);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start skate!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Skateboard.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Skateboard extends Vehicle {&lt;br /&gt;
    public Skateboard(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 4);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I step with one feet on the ground to start!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MotorizedVehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public abstract class MotorizedVehicle extends Vehicle {&lt;br /&gt;
    private float kw;&lt;br /&gt;
&lt;br /&gt;
    public MotorizedVehicle(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
        this.kw = kw;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I am starting my engine with &amp;quot; + kw + &amp;quot; kw.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EBike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class EBike extends MotorizedVehicle {&lt;br /&gt;
    public EBike(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 2, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Lkw extends MotorizedVehicle {&lt;br /&gt;
    public Lkw(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Pkw extends MotorizedVehicle {&lt;br /&gt;
    public Pkw(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 4, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Quellen&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language&lt;br /&gt;
&lt;br /&gt;
https://www.sparxsystems.de/ressourcen/literatur/leseprobe-zu-projektabwicklung-mit-uml-und-enterprise-architect/klassendiagramm-class-diagram/&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Assoziation_(UML)&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Multiplizit%C3%A4t_(UML)&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=Datei:2021-01-29_Klasse_protected2.jpg&amp;diff=832</id>
		<title>Datei:2021-01-29 Klasse protected2.jpg</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=Datei:2021-01-29_Klasse_protected2.jpg&amp;diff=832"/>
		<updated>2021-01-29T10:45:03Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;protected class&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=Datei:2021-01-29_Klasse_protected.jpg&amp;diff=831</id>
		<title>Datei:2021-01-29 Klasse protected.jpg</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=Datei:2021-01-29_Klasse_protected.jpg&amp;diff=831"/>
		<updated>2021-01-29T10:40:08Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;protected class&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=830</id>
		<title>UML Klassendiagramm</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=830"/>
		<updated>2021-01-29T10:20:12Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &#039;&#039;&#039;&#039;&#039;Was ist ein Klassendiagramm?&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm bildet ein Kernstück der &#039;&#039;&#039;U&#039;&#039;&#039;nified &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;L&#039;&#039;&#039;anguage (&#039;&#039;&#039;UML&#039;&#039;&#039;). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Wozu wird es benötigt?&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm wird verwendet, um die Programme einfacher und übersichtlicher darzustellen und diese dann anschließend umzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Welche Elemente gibt es? Erkläre dies so detailliert und anschaulich wie möglich&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Klassenmodelle unterteilen sich in folgende Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Klassen&lt;br /&gt;
* Schnittstellen&lt;br /&gt;
* Generalisierung&lt;br /&gt;
* Assoziation&lt;br /&gt;
** Komposition&lt;br /&gt;
** Aggregation&lt;br /&gt;
[[Datei:Screenshot 2021-01-08 132401.jpg|mini|UML Klasse aus DIA]]&lt;br /&gt;
==== &#039;&#039;&#039;Klassen&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie &amp;quot;{abstrakt}&amp;quot; über dem Namen der Klasse tragen. &lt;br /&gt;
Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039; oder auch &#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
Bei einer &#039;&#039;&#039;public&#039;&#039;&#039; oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.&lt;br /&gt;
* &#039;&#039;&#039;protected&#039;&#039;&#039; oder auch &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;protected&#039;&#039;&#039; Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.&lt;br /&gt;
* &#039;&#039;&#039;private&#039;&#039;&#039; oder auch &#039;&#039;&#039;−&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;private&#039;&#039;&#039; Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden. &lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; oder auch &#039;&#039;&#039;~&#039;&#039;&#039;&lt;br /&gt;
Bei einer Klasse mit einer &#039;&#039;&#039;package&#039;&#039;&#039; Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier wird im Folgenden Klassen anhand von Beispielen gezeigt:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;public&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:2021-01-29 Klasse_public.jpg|links|mini|Public Attribute]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese oben dargestellte Methode verfügt über zwei public Variablen und einer public Methode, wobei der Fokus auf den Variablen liegt. Der Code sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
public class Klasse{&lt;br /&gt;
&lt;br /&gt;
  public int a;&lt;br /&gt;
  public int b;&lt;br /&gt;
&lt;br /&gt;
  public int count(){&lt;br /&gt;
    return this.a + this.b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2021-01-29 Klasse public2.jpg|links|mini|Public Methode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieses Bild zeigt eine Klasse mit keinen Variablen aber mit einer public Methode. Der Code dieses Bildes wurde folgendermaßen umgesetzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line&amp;gt;&lt;br /&gt;
public class Klasse{&lt;br /&gt;
&lt;br /&gt;
  public int count(int a, int b){&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
  Klasse class = new Klasse[];&lt;br /&gt;
  class.count(10,20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:UmlCd Interface-1.svg.png|mini|UML Schnittstelle|100px]]&lt;br /&gt;
==== &#039;&#039;&#039;Schnittstellen&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Schnittstelle&#039;&#039;&#039; wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort &amp;quot;interface&amp;quot; gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Generalization (UML class diagram).png|mini|100px|Generalisierung]]&lt;br /&gt;
==== &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Durch eine &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; &amp;quot;erben&amp;quot; speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse &amp;quot;vererbt&amp;quot;. Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Assoziantion&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;n-äre Assoziation&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
In folgenden Bild sieht man eine Binäre Assoziation. (Binär, weil zwei Klassen miteinander verbunden wurden)&lt;br /&gt;
[[Datei:1920px-UmlCd Assoziation-1.png|mini|links|Binäre Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;reflexive Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Im hier dargestellten Bild sieht man eine reflexive Assoziation, welche auf sich selbst verweist.&lt;br /&gt;
[[Datei:UmlCd Assoziation-2.png|mini|links|Reflexive Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da Assoziationen durch Linien dargestellt werden, müssen diese durch ein Assoziationsende gekennzeichnet werden. Diese Assoziationsenden können folgende Merkmale aufweisen:&lt;br /&gt;
* Sie können eine Multiplizität besitzen. Diese gibt Informationen über das Beziehungsverhältnis zweier Klassen. Diese Zahlen befinden sich &#039;&#039;&#039;nur&#039;&#039;&#039; im &#039;&#039;positiven&#039;&#039; und &#039;&#039;ganzzahligen&#039;&#039; Bereich, wobei der Beginn bei der Zahl 0 liegt.&lt;br /&gt;
** Multiplizitäten werden im folgenden Format angegeben:&lt;br /&gt;
 untereSchranke..obereSchranke&lt;br /&gt;
** Bei * oder auch 0..* wird die untereSchranke als 0 und die obereSchranke als unendlich angenommen.&lt;br /&gt;
** Beide Schranken dürfen nicht 0 oder unbeschränkt sein. Falls beide Grenzen trotzdem gleich groß sind, wird nur die obereSchranke angegeben. &lt;br /&gt;
** Bei einer Multiplizität von 0..1 wird das Element als &#039;&#039;optional&#039;&#039; bezeichnet.&lt;br /&gt;
** Wenn die obereSchranke über dem Wert 1 liegt, wird das Element als mehrwertiges Element bezeichnet, da mehrere Wert annehmbar sind.&lt;br /&gt;
* Sie können Namen besitzen.&lt;br /&gt;
* Sie können eine Sichtbarkeit aufweisen.&lt;br /&gt;
* Es kann spezifiziert werden, ob das Assoziationsende &amp;quot;ordered&amp;quot; und / oder unique ist. &lt;br /&gt;
&lt;br /&gt;
Zudem Assoziationsende kommen oft Multiplizitäten hinzu, welche die Beziehung zwischen den zwei Instanzen regelt. Im folgenden werden auf zwei Arten der Assoziationen genauer eingegangen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Komposition und Aggregation&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Um Beziehungen mit &#039;&#039;Ganzen&#039;&#039; und &#039;&#039;Teilen&#039;&#039; darzustellen werden die Aggregation und die Komposition verwendet.&lt;br /&gt;
[[Datei:Komposition Aggregation.png|mini|links|Komposition und Aggregation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Komposition ist eine Linie mit einer ausgefüllten Raute, welche mit der Kardinalität 1 beschriftet wird und mit dem Ganzen Teil der Beziehungspartner verbunden ist. Bei einer Komposition können die &#039;&#039;Teile&#039;&#039; nicht ohne das &#039;&#039;Ganze&#039;&#039; existieren. Das bedeutet, dass das &#039;&#039;Teil&#039;&#039; Element existenziell abhängig von &#039;&#039;Ganz&#039;&#039; Element ist.&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Aggregation ist eine Linie mit einer nicht ausgefüllten Raute, welche die Kardinalität 0..* besitzt und mit dem &#039;&#039;Ganzen&#039;&#039; Teil verbunden ist. Die Elemente in einer Aggregation besitzen keine Exisitenzabhängigkeit, da die &#039;&#039;Teil&#039;&#039; Elemente auch ohne die &#039;&#039;Ganz&#039;&#039; Elemente bestehen können. &lt;br /&gt;
&lt;br /&gt;
Die Assoziationsarten werden prinzipiell mittels der Kardinalität unterschieden. Zudem sind die &#039;&#039;Teil&#039;&#039; Elemente Bestandteil genau eines &#039;&#039;Ganz&#039;&#039; Elementes, da sie NIE zu mehrere &#039;&#039;Ganz&#039;&#039; Elementen gehören. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber&#039;&#039;&#039;&#039;&#039; == &lt;br /&gt;
&lt;br /&gt;
Diese Umsetzung erfolgte mit der Programmiersprache JAVA.&lt;br /&gt;
[[Datei:Screenshot 2021-01-22 143552.jpg|mini|600px|none|Fahrzeuge in einem UML Klassendiagramm]]&lt;br /&gt;
&#039;&#039;&#039;Vehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle;&lt;br /&gt;
&lt;br /&gt;
public abstract class Vehicle {&lt;br /&gt;
    private int maxSpeed;&lt;br /&gt;
    private int wheels;&lt;br /&gt;
&lt;br /&gt;
    public Vehicle(int maxSpeed, int wheels) {&lt;br /&gt;
        this.maxSpeed = maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void move() {&lt;br /&gt;
        System.out.println(&amp;quot;I am moving at &amp;quot; + maxSpeed + &amp;quot; with &amp;quot; + wheels + &amp;quot; wheels.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public int getMaxSpeed() {&lt;br /&gt;
        return maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public abstract void start();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
public class Bike extends Vehicle {&lt;br /&gt;
    public Bike(int maxSpeed, int wheels) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start to step into the pedals!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rollerblades.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Rollerblades extends Vehicle {&lt;br /&gt;
    public Rollerblades(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 8);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start skate!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Skateboard.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Skateboard extends Vehicle {&lt;br /&gt;
    public Skateboard(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 4);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I step with one feet on the ground to start!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MotorizedVehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public abstract class MotorizedVehicle extends Vehicle {&lt;br /&gt;
    private float kw;&lt;br /&gt;
&lt;br /&gt;
    public MotorizedVehicle(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
        this.kw = kw;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I am starting my engine with &amp;quot; + kw + &amp;quot; kw.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EBike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class EBike extends MotorizedVehicle {&lt;br /&gt;
    public EBike(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 2, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Lkw extends MotorizedVehicle {&lt;br /&gt;
    public Lkw(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Pkw extends MotorizedVehicle {&lt;br /&gt;
    public Pkw(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 4, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Quellen&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language&lt;br /&gt;
&lt;br /&gt;
https://www.sparxsystems.de/ressourcen/literatur/leseprobe-zu-projektabwicklung-mit-uml-und-enterprise-architect/klassendiagramm-class-diagram/&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Assoziation_(UML)&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Multiplizit%C3%A4t_(UML)&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=Datei:2021-01-29_Klasse_public2.jpg&amp;diff=829</id>
		<title>Datei:2021-01-29 Klasse public2.jpg</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=Datei:2021-01-29_Klasse_public2.jpg&amp;diff=829"/>
		<updated>2021-01-29T10:15:36Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Public class&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=Datei:2021-01-29_Klasse_public.jpg&amp;diff=828</id>
		<title>Datei:2021-01-29 Klasse public.jpg</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=Datei:2021-01-29_Klasse_public.jpg&amp;diff=828"/>
		<updated>2021-01-29T10:08:56Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=827</id>
		<title>UML Klassendiagramm</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=827"/>
		<updated>2021-01-29T09:42:46Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &#039;&#039;&#039;&#039;&#039;Was ist ein Klassendiagramm?&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm bildet ein Kernstück der &#039;&#039;&#039;U&#039;&#039;&#039;nified &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;L&#039;&#039;&#039;anguage (&#039;&#039;&#039;UML&#039;&#039;&#039;). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Wozu wird es benötigt?&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm wird verwendet, um die Programme einfacher und übersichtlicher darzustellen und diese dann anschließend umzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Welche Elemente gibt es? Erkläre dies so detailliert und anschaulich wie möglich&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Klassenmodelle unterteilen sich in folgende Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Klassen&lt;br /&gt;
* Schnittstellen&lt;br /&gt;
* Generalisierung&lt;br /&gt;
* Assoziation&lt;br /&gt;
** Komposition&lt;br /&gt;
** Aggregation&lt;br /&gt;
[[Datei:Screenshot 2021-01-08 132401.jpg|mini|UML Klasse aus DIA]]&lt;br /&gt;
==== &#039;&#039;&#039;Klassen&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie &amp;quot;{abstrakt}&amp;quot; über dem Namen der Klasse tragen. &lt;br /&gt;
Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039; oder auch &#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
Bei einer &#039;&#039;&#039;public&#039;&#039;&#039; oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.&lt;br /&gt;
* &#039;&#039;&#039;protected&#039;&#039;&#039; oder auch &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;protected&#039;&#039;&#039; Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.&lt;br /&gt;
* &#039;&#039;&#039;private&#039;&#039;&#039; oder auch &#039;&#039;&#039;−&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;private&#039;&#039;&#039; Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden. &lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; oder auch &#039;&#039;&#039;~&#039;&#039;&#039;&lt;br /&gt;
Bei einer Klasse mit einer &#039;&#039;&#039;package&#039;&#039;&#039; Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier wird im Folgenden Klassen anhand von Beispielen gezeigt:&lt;br /&gt;
[[Datei:Screenshot 2021-01-29 103717.jpg|links|mini|Public Methode und Attribute]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese oben dargestellte Methode verfügt über zwei public Variablen und einer public Methode. Der Code sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:UmlCd Interface-1.svg.png|mini|UML Schnittstelle|100px]]&lt;br /&gt;
==== &#039;&#039;&#039;Schnittstellen&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Schnittstelle&#039;&#039;&#039; wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort &amp;quot;interface&amp;quot; gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Generalization (UML class diagram).png|mini|100px|Generalisierung]]&lt;br /&gt;
==== &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Durch eine &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; &amp;quot;erben&amp;quot; speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse &amp;quot;vererbt&amp;quot;. Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Assoziantion&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;n-äre Assoziation&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
In folgenden Bild sieht man eine Binäre Assoziation. (Binär, weil zwei Klassen miteinander verbunden wurden)&lt;br /&gt;
[[Datei:1920px-UmlCd Assoziation-1.png|mini|links|Binäre Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;reflexive Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Im hier dargestellten Bild sieht man eine reflexive Assoziation, welche auf sich selbst verweist.&lt;br /&gt;
[[Datei:UmlCd Assoziation-2.png|mini|links|Reflexive Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da Assoziationen durch Linien dargestellt werden, müssen diese durch ein Assoziationsende gekennzeichnet werden. Diese Assoziationsenden können folgende Merkmale aufweisen:&lt;br /&gt;
* Sie können eine Multiplizität besitzen. Diese gibt Informationen über das Beziehungsverhältnis zweier Klassen. Diese Zahlen befinden sich &#039;&#039;&#039;nur&#039;&#039;&#039; im &#039;&#039;positiven&#039;&#039; und &#039;&#039;ganzzahligen&#039;&#039; Bereich, wobei der Beginn bei der Zahl 0 liegt.&lt;br /&gt;
** Multiplizitäten werden im folgenden Format angegeben:&lt;br /&gt;
 untereSchranke..obereSchranke&lt;br /&gt;
** Bei * oder auch 0..* wird die untereSchranke als 0 und die obereSchranke als unendlich angenommen.&lt;br /&gt;
** Beide Schranken dürfen nicht 0 oder unbeschränkt sein. Falls beide Grenzen trotzdem gleich groß sind, wird nur die obereSchranke angegeben. &lt;br /&gt;
** Bei einer Multiplizität von 0..1 wird das Element als &#039;&#039;optional&#039;&#039; bezeichnet.&lt;br /&gt;
** Wenn die obereSchranke über dem Wert 1 liegt, wird das Element als mehrwertiges Element bezeichnet, da mehrere Wert annehmbar sind.&lt;br /&gt;
* Sie können Namen besitzen.&lt;br /&gt;
* Sie können eine Sichtbarkeit aufweisen.&lt;br /&gt;
* Es kann spezifiziert werden, ob das Assoziationsende &amp;quot;ordered&amp;quot; und / oder unique ist. &lt;br /&gt;
&lt;br /&gt;
Zudem Assoziationsende kommen oft Multiplizitäten hinzu, welche die Beziehung zwischen den zwei Instanzen regelt. Im folgenden werden auf zwei Arten der Assoziationen genauer eingegangen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Komposition und Aggregation&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Um Beziehungen mit &#039;&#039;Ganzen&#039;&#039; und &#039;&#039;Teilen&#039;&#039; darzustellen werden die Aggregation und die Komposition verwendet.&lt;br /&gt;
[[Datei:Komposition Aggregation.png|mini|links|Komposition und Aggregation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Komposition ist eine Linie mit einer ausgefüllten Raute, welche mit der Kardinalität 1 beschriftet wird und mit dem Ganzen Teil der Beziehungspartner verbunden ist. Bei einer Komposition können die &#039;&#039;Teile&#039;&#039; nicht ohne das &#039;&#039;Ganze&#039;&#039; existieren. Das bedeutet, dass das &#039;&#039;Teil&#039;&#039; Element existenziell abhängig von &#039;&#039;Ganz&#039;&#039; Element ist.&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Aggregation ist eine Linie mit einer nicht ausgefüllten Raute, welche die Kardinalität 0..* besitzt und mit dem &#039;&#039;Ganzen&#039;&#039; Teil verbunden ist. Die Elemente in einer Aggregation besitzen keine Exisitenzabhängigkeit, da die &#039;&#039;Teil&#039;&#039; Elemente auch ohne die &#039;&#039;Ganz&#039;&#039; Elemente bestehen können. &lt;br /&gt;
&lt;br /&gt;
Die Assoziationsarten werden prinzipiell mittels der Kardinalität unterschieden. Zudem sind die &#039;&#039;Teil&#039;&#039; Elemente Bestandteil genau eines &#039;&#039;Ganz&#039;&#039; Elementes, da sie NIE zu mehrere &#039;&#039;Ganz&#039;&#039; Elementen gehören. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber&#039;&#039;&#039;&#039;&#039; == &lt;br /&gt;
&lt;br /&gt;
Diese Umsetzung erfolgte mit der Programmiersprache JAVA.&lt;br /&gt;
[[Datei:Screenshot 2021-01-22 143552.jpg|mini|600px|none|Fahrzeuge in einem UML Klassendiagramm]]&lt;br /&gt;
&#039;&#039;&#039;Vehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle;&lt;br /&gt;
&lt;br /&gt;
public abstract class Vehicle {&lt;br /&gt;
    private int maxSpeed;&lt;br /&gt;
    private int wheels;&lt;br /&gt;
&lt;br /&gt;
    public Vehicle(int maxSpeed, int wheels) {&lt;br /&gt;
        this.maxSpeed = maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void move() {&lt;br /&gt;
        System.out.println(&amp;quot;I am moving at &amp;quot; + maxSpeed + &amp;quot; with &amp;quot; + wheels + &amp;quot; wheels.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public int getMaxSpeed() {&lt;br /&gt;
        return maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public abstract void start();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
public class Bike extends Vehicle {&lt;br /&gt;
    public Bike(int maxSpeed, int wheels) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start to step into the pedals!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rollerblades.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Rollerblades extends Vehicle {&lt;br /&gt;
    public Rollerblades(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 8);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start skate!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Skateboard.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Skateboard extends Vehicle {&lt;br /&gt;
    public Skateboard(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 4);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I step with one feet on the ground to start!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MotorizedVehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public abstract class MotorizedVehicle extends Vehicle {&lt;br /&gt;
    private float kw;&lt;br /&gt;
&lt;br /&gt;
    public MotorizedVehicle(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
        this.kw = kw;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I am starting my engine with &amp;quot; + kw + &amp;quot; kw.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EBike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class EBike extends MotorizedVehicle {&lt;br /&gt;
    public EBike(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 2, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Lkw extends MotorizedVehicle {&lt;br /&gt;
    public Lkw(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Pkw extends MotorizedVehicle {&lt;br /&gt;
    public Pkw(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 4, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Quellen&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language&lt;br /&gt;
&lt;br /&gt;
https://www.sparxsystems.de/ressourcen/literatur/leseprobe-zu-projektabwicklung-mit-uml-und-enterprise-architect/klassendiagramm-class-diagram/&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Assoziation_(UML)&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Multiplizit%C3%A4t_(UML)&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=Datei:Screenshot_2021-01-29_103717.jpg&amp;diff=826</id>
		<title>Datei:Screenshot 2021-01-29 103717.jpg</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=Datei:Screenshot_2021-01-29_103717.jpg&amp;diff=826"/>
		<updated>2021-01-29T09:38:45Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;public class&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=825</id>
		<title>UML Klassendiagramm</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=825"/>
		<updated>2021-01-29T09:13:51Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &#039;&#039;&#039;&#039;&#039;Was ist ein Klassendiagramm?&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm bildet ein Kernstück der &#039;&#039;&#039;U&#039;&#039;&#039;nified &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;L&#039;&#039;&#039;anguage (&#039;&#039;&#039;UML&#039;&#039;&#039;). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Wozu wird es benötigt?&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm wird verwendet, um die Programme einfacher und übersichtlicher darzustellen und diese dann anschließend umzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Welche Elemente gibt es? Erkläre dies so detailliert und anschaulich wie möglich&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Klassenmodelle unterteilen sich in folgende Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Klassen&lt;br /&gt;
* Schnittstellen&lt;br /&gt;
* Generalisierung&lt;br /&gt;
* Assoziation&lt;br /&gt;
** Komposition&lt;br /&gt;
** Aggregation&lt;br /&gt;
[[Datei:Screenshot 2021-01-08 132401.jpg|mini|UML Klasse aus DIA]]&lt;br /&gt;
==== &#039;&#039;&#039;Klassen&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie &amp;quot;{abstrakt}&amp;quot; über dem Namen der Klasse tragen. &lt;br /&gt;
Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039; oder auch &#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
Bei einer &#039;&#039;&#039;public&#039;&#039;&#039; oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.&lt;br /&gt;
* &#039;&#039;&#039;protected&#039;&#039;&#039; oder auch &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;protected&#039;&#039;&#039; Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.&lt;br /&gt;
* &#039;&#039;&#039;private&#039;&#039;&#039; oder auch &#039;&#039;&#039;−&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;private&#039;&#039;&#039; Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden. &lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; oder auch &#039;&#039;&#039;~&#039;&#039;&#039;&lt;br /&gt;
Bei einer Klasse mit einer &#039;&#039;&#039;package&#039;&#039;&#039; Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.&lt;br /&gt;
&lt;br /&gt;
[[Datei:UmlCd Interface-1.svg.png|mini|UML Schnittstelle|100px]]&lt;br /&gt;
==== &#039;&#039;&#039;Schnittstellen&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Schnittstelle&#039;&#039;&#039; wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort &amp;quot;interface&amp;quot; gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Generalization (UML class diagram).png|mini|100px|Generalisierung]]&lt;br /&gt;
==== &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Durch eine &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; &amp;quot;erben&amp;quot; speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse &amp;quot;vererbt&amp;quot;. Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Assoziantion&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;n-äre Assoziation&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
In folgenden Bild sieht man eine Binäre Assoziation. (Binär, weil zwei Klassen miteinander verbunden wurden)&lt;br /&gt;
[[Datei:1920px-UmlCd Assoziation-1.png|mini|links|Binäre Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;reflexive Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Im hier dargestellten Bild sieht man eine reflexive Assoziation, welche auf sich selbst verweist.&lt;br /&gt;
[[Datei:UmlCd Assoziation-2.png|mini|links|Reflexive Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da Assoziationen durch Linien dargestellt werden, müssen diese durch ein Assoziationsende gekennzeichnet werden. Diese Assoziationsenden können folgende Merkmale aufweisen:&lt;br /&gt;
* Sie können eine Multiplizität besitzen. Diese gibt Informationen über das Beziehungsverhältnis zweier Klassen. Diese Zahlen befinden sich &#039;&#039;&#039;nur&#039;&#039;&#039; im &#039;&#039;positiven&#039;&#039; und &#039;&#039;ganzzahligen&#039;&#039; Bereich, wobei der Beginn bei der Zahl 0 liegt.&lt;br /&gt;
** Multiplizitäten werden im folgenden Format angegeben:&lt;br /&gt;
 untereSchranke..obereSchranke&lt;br /&gt;
** Bei * oder auch 0..* wird die untereSchranke als 0 und die obereSchranke als unendlich angenommen.&lt;br /&gt;
** Beide Schranken dürfen nicht 0 oder unbeschränkt sein. Falls beide Grenzen trotzdem gleich groß sind, wird nur die obereSchranke angegeben. &lt;br /&gt;
** Bei einer Multiplizität von 0..1 wird das Element als &#039;&#039;optional&#039;&#039; bezeichnet.&lt;br /&gt;
** Wenn die obereSchranke über dem Wert 1 liegt, wird das Element als mehrwertiges Element bezeichnet, da mehrere Wert annehmbar sind.&lt;br /&gt;
* Sie können Namen besitzen.&lt;br /&gt;
* Sie können eine Sichtbarkeit aufweisen.&lt;br /&gt;
* Es kann spezifiziert werden, ob das Assoziationsende &amp;quot;ordered&amp;quot; und / oder unique ist. &lt;br /&gt;
&lt;br /&gt;
Zudem Assoziationsende kommen oft Multiplizitäten hinzu, welche die Beziehung zwischen den zwei Instanzen regelt. Im folgenden werden auf zwei Arten der Assoziationen genauer eingegangen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Komposition und Aggregation&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Um Beziehungen mit &#039;&#039;Ganzen&#039;&#039; und &#039;&#039;Teilen&#039;&#039; darzustellen werden die Aggregation und die Komposition verwendet.&lt;br /&gt;
[[Datei:Komposition Aggregation.png|mini|links|Komposition und Aggregation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Komposition ist eine Linie mit einer ausgefüllten Raute, welche mit der Kardinalität 1 beschriftet wird und mit dem Ganzen Teil der Beziehungspartner verbunden ist. Bei einer Komposition können die &#039;&#039;Teile&#039;&#039; nicht ohne das &#039;&#039;Ganze&#039;&#039; existieren. Das bedeutet, dass das &#039;&#039;Teil&#039;&#039; Element existenziell abhängig von &#039;&#039;Ganz&#039;&#039; Element ist.&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Aggregation ist eine Linie mit einer nicht ausgefüllten Raute, welche die Kardinalität 0..* besitzt und mit dem &#039;&#039;Ganzen&#039;&#039; Teil verbunden ist. Die Elemente in einer Aggregation besitzen keine Exisitenzabhängigkeit, da die &#039;&#039;Teil&#039;&#039; Elemente auch ohne die &#039;&#039;Ganz&#039;&#039; Elemente bestehen können. &lt;br /&gt;
&lt;br /&gt;
Die Assoziationsarten werden prinzipiell mittels der Kardinalität unterschieden. Zudem sind die &#039;&#039;Teil&#039;&#039; Elemente Bestandteil genau eines &#039;&#039;Ganz&#039;&#039; Elementes, da sie NIE zu mehrere &#039;&#039;Ganz&#039;&#039; Elementen gehören. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber&#039;&#039;&#039;&#039;&#039; == &lt;br /&gt;
&lt;br /&gt;
Diese Umsetzung erfolgte mit der Programmiersprache JAVA.&lt;br /&gt;
[[Datei:Screenshot 2021-01-22 143552.jpg|mini|600px|none|Fahrzeuge in einem UML Klassendiagramm]]&lt;br /&gt;
&#039;&#039;&#039;Vehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle;&lt;br /&gt;
&lt;br /&gt;
public abstract class Vehicle {&lt;br /&gt;
    private int maxSpeed;&lt;br /&gt;
    private int wheels;&lt;br /&gt;
&lt;br /&gt;
    public Vehicle(int maxSpeed, int wheels) {&lt;br /&gt;
        this.maxSpeed = maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void move() {&lt;br /&gt;
        System.out.println(&amp;quot;I am moving at &amp;quot; + maxSpeed + &amp;quot; with &amp;quot; + wheels + &amp;quot; wheels.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public int getMaxSpeed() {&lt;br /&gt;
        return maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public abstract void start();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
public class Bike extends Vehicle {&lt;br /&gt;
    public Bike(int maxSpeed, int wheels) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start to step into the pedals!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rollerblades.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Rollerblades extends Vehicle {&lt;br /&gt;
    public Rollerblades(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 8);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start skate!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Skateboard.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Skateboard extends Vehicle {&lt;br /&gt;
    public Skateboard(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 4);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I step with one feet on the ground to start!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MotorizedVehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public abstract class MotorizedVehicle extends Vehicle {&lt;br /&gt;
    private float kw;&lt;br /&gt;
&lt;br /&gt;
    public MotorizedVehicle(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
        this.kw = kw;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I am starting my engine with &amp;quot; + kw + &amp;quot; kw.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EBike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class EBike extends MotorizedVehicle {&lt;br /&gt;
    public EBike(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 2, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Lkw extends MotorizedVehicle {&lt;br /&gt;
    public Lkw(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Pkw extends MotorizedVehicle {&lt;br /&gt;
    public Pkw(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 4, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Quellen&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language&lt;br /&gt;
&lt;br /&gt;
https://www.sparxsystems.de/ressourcen/literatur/leseprobe-zu-projektabwicklung-mit-uml-und-enterprise-architect/klassendiagramm-class-diagram/&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Assoziation_(UML)&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Multiplizit%C3%A4t_(UML)&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=824</id>
		<title>UML Klassendiagramm</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=824"/>
		<updated>2021-01-29T09:10:49Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &#039;&#039;&#039;&#039;&#039;Was ist ein Klassendiagramm?&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm bildet ein Kernstück der &#039;&#039;&#039;U&#039;&#039;&#039;nified &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;L&#039;&#039;&#039;anguage (&#039;&#039;&#039;UML&#039;&#039;&#039;). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Wozu wird es benötigt?&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm wird verwendet, um die Programme einfacher und übersichtlicher darzustellen und diese dann anschließend umzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Welche Elemente gibt es? Erkläre dies so detailliert und anschaulich wie möglich&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Klassenmodelle unterteilen sich in folgende Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Klassen&lt;br /&gt;
* Schnittstellen&lt;br /&gt;
* Generalisierung&lt;br /&gt;
* Assoziation&lt;br /&gt;
** Komposition&lt;br /&gt;
** Aggregation&lt;br /&gt;
[[Datei:Screenshot 2021-01-08 132401.jpg|mini|UML Klasse aus DIA]]&lt;br /&gt;
==== &#039;&#039;&#039;Klassen&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie &amp;quot;{abstrakt}&amp;quot; über dem Namen der Klasse tragen. &lt;br /&gt;
Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039; oder auch &#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
Bei einer &#039;&#039;&#039;public&#039;&#039;&#039; oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.&lt;br /&gt;
* &#039;&#039;&#039;protected&#039;&#039;&#039; oder auch &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;protected&#039;&#039;&#039; Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.&lt;br /&gt;
* &#039;&#039;&#039;private&#039;&#039;&#039; oder auch &#039;&#039;&#039;−&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;private&#039;&#039;&#039; Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden. &lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; oder auch &#039;&#039;&#039;~&#039;&#039;&#039;&lt;br /&gt;
Bei einer Klasse mit einer &#039;&#039;&#039;package&#039;&#039;&#039; Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.&lt;br /&gt;
&lt;br /&gt;
[[Datei:UmlCd Interface-1.svg.png|mini|UML Schnittstelle|100px]]&lt;br /&gt;
==== &#039;&#039;&#039;Schnittstellen&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Schnittstelle&#039;&#039;&#039; wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort &amp;quot;interface&amp;quot; gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Generalization (UML class diagram).png|mini|100px|Generalisierung]]&lt;br /&gt;
==== &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Durch eine &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; &amp;quot;erben&amp;quot; speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse &amp;quot;vererbt&amp;quot;. Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Assoziantion&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;n-äre Assoziation&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
In folgenden Bild sieht man eine Binäre Assoziation. (Binär, weil zwei Klassen miteinander verbunden wurden)&lt;br /&gt;
[[Datei:1920px-UmlCd Assoziation-1.png|mini|links|Binäre Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;reflexive Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Im hier dargestellten Bild sieht man eine reflexive Assoziation, welche auf sich selbst verweist.&lt;br /&gt;
[[Datei:UmlCd Assoziation-2.png|mini|links|Reflexive Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da Assoziationen durch Linien dargestellt werden, müssen diese durch ein Assoziationsende gekennzeichnet werden. Diese Assoziationsenden können folgende Merkmale aufweisen:&lt;br /&gt;
* Sie können eine Multiplizität besitzen. Diese gibt Informationen über das Beziehungsverhältnis zweier Klassen. Diese Zahlen befinden sich &#039;&#039;&#039;nur&#039;&#039;&#039; im &#039;&#039;positiven&#039;&#039; und &#039;&#039;ganzzahligen&#039;&#039; Bereich, wobei der Beginn bei der Zahl 0 liegt.&lt;br /&gt;
** Multiplizitäten werden im folgenden Format angegeben:&lt;br /&gt;
 untereSchranke..obereSchranke&lt;br /&gt;
** Bei * oder auch 0..* wird die untereSchranke als 0 und die obereSchranke als unendlich angenommen.&lt;br /&gt;
** Beide Schranken dürfen nicht 0 oder unbeschränkt sein. Falls beide Grenzen trotzdem gleich groß sind, wird nur die obereSchranke angegeben. &lt;br /&gt;
** Bei einer Multiplizität von 0..1 wird das Element als &#039;&#039;optional&#039;&#039; bezeichnet.&lt;br /&gt;
** Wenn die obereSchranke über dem Wert 1 liegt, wird das Element als mehrwertiges Element bezeichnet, da mehrere Wert annehmbar sind.&lt;br /&gt;
* Sie können Namen besitzen.&lt;br /&gt;
* Sie können eine Sichtbarkeit aufweisen.&lt;br /&gt;
* Es kann spezifiziert werden, ob das Assoziationsende &amp;quot;ordered&amp;quot; und / oder unique ist. &lt;br /&gt;
&lt;br /&gt;
Zudem Assoziationsende kommen oft Multiplizitäten hinzu, welche die Beziehung zwischen den zwei Instanzen regelt. Im folgenden werden auf zwei Arten der Assoziationen genauer eingegangen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Komposition und Aggregation&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Um Beziehungen mit &#039;&#039;Ganzen&#039;&#039; und &#039;&#039;Teilen&#039;&#039; darzustellen werden die Aggregation und die Komposition verwendet.&lt;br /&gt;
[[Datei:Komposition Aggregation.png|mini|links|Komposition und Aggregation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Komposition ist eine Linie mit einer ausgefüllten Raute, welche mit der Kardinalität 1 beschriftet wird und mit dem Ganzen Teil der Beziehungspartner verbunden ist. Bei einer Komposition können die &#039;&#039;Teile&#039;&#039; nicht ohne das &#039;&#039;Ganze&#039;&#039; existieren. Das bedeutet, dass das &#039;&#039;Teil&#039;&#039; Element existenziell abhängig von &#039;&#039;Ganz&#039;&#039; Element ist.&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Aggregation ist eine Linie mit einer nicht ausgefüllten Raute, welche die Kardinalität 0..* besitzt und mit dem &#039;&#039;Ganzen&#039;&#039; Teil verbunden ist. Die Elemente in einer Aggregation besitzen keine Exisitenzabhängigkeit, da die &#039;&#039;Teil&#039;&#039; Elemente auch ohne die &#039;&#039;Ganz&#039;&#039; Elemente bestehen können. &lt;br /&gt;
&lt;br /&gt;
Die Assoziationsarten werden prinzipiell mittels der Kardinalität unterschieden. Zudem sind die &#039;&#039;Teil&#039;&#039; Elemente Bestandteil genau eines &#039;&#039;Ganz&#039;&#039; Elementes, da sie NIE zu mehrere &#039;&#039;Ganz&#039;&#039; Elementen gehören. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber&#039;&#039;&#039;&#039;&#039; == &lt;br /&gt;
&lt;br /&gt;
Diese Umsetzung erfolgte mit der Programmiersprache JAVA.&lt;br /&gt;
[[Datei:Screenshot 2021-01-22 143552.jpg|mini|600px|none|Fahrzeuge in einem UML Klassendiagramm]]&lt;br /&gt;
====&#039;&#039;&#039;Vehicle.java&#039;&#039;&#039; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle;&lt;br /&gt;
&lt;br /&gt;
public abstract class Vehicle {&lt;br /&gt;
    private int maxSpeed;&lt;br /&gt;
    private int wheels;&lt;br /&gt;
&lt;br /&gt;
    public Vehicle(int maxSpeed, int wheels) {&lt;br /&gt;
        this.maxSpeed = maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void move() {&lt;br /&gt;
        System.out.println(&amp;quot;I am moving at &amp;quot; + maxSpeed + &amp;quot; with &amp;quot; + wheels + &amp;quot; wheels.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public int getMaxSpeed() {&lt;br /&gt;
        return maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public abstract void start();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Bike.java&#039;&#039;&#039; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
public class Bike extends Vehicle {&lt;br /&gt;
    public Bike(int maxSpeed, int wheels) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start to step into the pedals!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Rollerblades.java&#039;&#039;&#039; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Rollerblades extends Vehicle {&lt;br /&gt;
    public Rollerblades(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 8);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start skate!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Skateboard.java&#039;&#039;&#039; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Skateboard extends Vehicle {&lt;br /&gt;
    public Skateboard(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 4);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I step with one feet on the ground to start!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;MotorizedVehicle.java&#039;&#039;&#039; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public abstract class MotorizedVehicle extends Vehicle {&lt;br /&gt;
    private float kw;&lt;br /&gt;
&lt;br /&gt;
    public MotorizedVehicle(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
        this.kw = kw;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I am starting my engine with &amp;quot; + kw + &amp;quot; kw.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;EBike.java&#039;&#039;&#039; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class EBike extends MotorizedVehicle {&lt;br /&gt;
    public EBike(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 2, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Lkw.java&#039;&#039;&#039; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Lkw extends MotorizedVehicle {&lt;br /&gt;
    public Lkw(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Pkw.java&#039;&#039;&#039; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Pkw extends MotorizedVehicle {&lt;br /&gt;
    public Pkw(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 4, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Quellen&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language&lt;br /&gt;
&lt;br /&gt;
https://www.sparxsystems.de/ressourcen/literatur/leseprobe-zu-projektabwicklung-mit-uml-und-enterprise-architect/klassendiagramm-class-diagram/&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Assoziation_(UML)&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Multiplizit%C3%A4t_(UML)&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=823</id>
		<title>UML Klassendiagramm</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=823"/>
		<updated>2021-01-29T09:09:23Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &#039;&#039;&#039;&#039;&#039;Was ist ein Klassendiagramm?&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm bildet ein Kernstück der &#039;&#039;&#039;U&#039;&#039;&#039;nified &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;L&#039;&#039;&#039;anguage (&#039;&#039;&#039;UML&#039;&#039;&#039;). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Wozu wird es benötigt?&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm wird verwendet, um die Programme einfacher und übersichtlicher darzustellen und diese dann anschließend umzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Welche Elemente gibt es? Erkläre dies so detailliert und anschaulich wie möglich&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Klassenmodelle unterteilen sich in folgende Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Klassen&lt;br /&gt;
* Schnittstellen&lt;br /&gt;
* Generalisierung&lt;br /&gt;
* Assoziation&lt;br /&gt;
** Komposition&lt;br /&gt;
** Aggregation&lt;br /&gt;
[[Datei:Screenshot 2021-01-08 132401.jpg|mini|UML Klasse aus DIA]]&lt;br /&gt;
==== &#039;&#039;&#039;Klassen&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie &amp;quot;{abstrakt}&amp;quot; über dem Namen der Klasse tragen. &lt;br /&gt;
Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039; oder auch &#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
Bei einer &#039;&#039;&#039;public&#039;&#039;&#039; oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.&lt;br /&gt;
* &#039;&#039;&#039;protected&#039;&#039;&#039; oder auch &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;protected&#039;&#039;&#039; Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.&lt;br /&gt;
* &#039;&#039;&#039;private&#039;&#039;&#039; oder auch &#039;&#039;&#039;−&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;private&#039;&#039;&#039; Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden. &lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; oder auch &#039;&#039;&#039;~&#039;&#039;&#039;&lt;br /&gt;
Bei einer Klasse mit einer &#039;&#039;&#039;package&#039;&#039;&#039; Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.&lt;br /&gt;
&lt;br /&gt;
[[Datei:UmlCd Interface-1.svg.png|mini|UML Schnittstelle|100px]]&lt;br /&gt;
==== &#039;&#039;&#039;Schnittstellen&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Schnittstelle&#039;&#039;&#039; wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort &amp;quot;interface&amp;quot; gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Generalization (UML class diagram).png|mini|100px|Generalisierung]]&lt;br /&gt;
==== &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Durch eine &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; &amp;quot;erben&amp;quot; speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse &amp;quot;vererbt&amp;quot;. Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Assoziantion&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;n-äre Assoziation&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
In folgenden Bild sieht man eine Binäre Assoziation. (Binär, weil zwei Klassen miteinander verbunden wurden)&lt;br /&gt;
[[Datei:1920px-UmlCd Assoziation-1.png|mini|links|Binäre Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;reflexive Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Im hier dargestellten Bild sieht man eine reflexive Assoziation, welche auf sich selbst verweist.&lt;br /&gt;
[[Datei:UmlCd Assoziation-2.png|mini|links|Reflexive Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da Assoziationen durch Linien dargestellt werden, müssen diese durch ein Assoziationsende gekennzeichnet werden. Diese Assoziationsenden können folgende Merkmale aufweisen:&lt;br /&gt;
* Sie können eine Multiplizität besitzen. Diese gibt Informationen über das Beziehungsverhältnis zweier Klassen. Diese Zahlen befinden sich &#039;&#039;&#039;nur&#039;&#039;&#039; im &#039;&#039;positiven&#039;&#039; und &#039;&#039;ganzzahligen&#039;&#039; Bereich, wobei der Beginn bei der Zahl 0 liegt.&lt;br /&gt;
** Multiplizitäten werden im folgenden Format angegeben:&lt;br /&gt;
 untereSchranke..obereSchranke&lt;br /&gt;
** Bei * oder auch 0..* wird die untereSchranke als 0 und die obereSchranke als unendlich angenommen.&lt;br /&gt;
** Beide Schranken dürfen nicht 0 oder unbeschränkt sein. Falls beide Grenzen trotzdem gleich groß sind, wird nur die obereSchranke angegeben. &lt;br /&gt;
** Bei einer Multiplizität von 0..1 wird das Element als &#039;&#039;optional&#039;&#039; bezeichnet.&lt;br /&gt;
** Wenn die obereSchranke über dem Wert 1 liegt, wird das Element als mehrwertiges Element bezeichnet, da mehrere Wert annehmbar sind.&lt;br /&gt;
* Sie können Namen besitzen.&lt;br /&gt;
* Sie können eine Sichtbarkeit aufweisen.&lt;br /&gt;
* Es kann spezifiziert werden, ob das Assoziationsende &amp;quot;ordered&amp;quot; und / oder unique ist. &lt;br /&gt;
&lt;br /&gt;
Zudem Assoziationsende kommen oft Multiplizitäten hinzu, welche die Beziehung zwischen den zwei Instanzen regelt. Im folgenden werden auf zwei Arten der Assoziationen genauer eingegangen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Komposition und Aggregation&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Um Beziehungen mit &#039;&#039;Ganzen&#039;&#039; und &#039;&#039;Teilen&#039;&#039; darzustellen werden die Aggregation und die Komposition verwendet.&lt;br /&gt;
[[Datei:Komposition Aggregation.png|mini|links|Komposition und Aggregation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Komposition ist eine Linie mit einer ausgefüllten Raute, welche mit der Kardinalität 1 beschriftet wird und mit dem Ganzen Teil der Beziehungspartner verbunden ist. Bei einer Komposition können die &#039;&#039;Teile&#039;&#039; nicht ohne das &#039;&#039;Ganze&#039;&#039; existieren. Das bedeutet, dass das &#039;&#039;Teil&#039;&#039; Element existenziell abhängig von &#039;&#039;Ganz&#039;&#039; Element ist.&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Aggregation ist eine Linie mit einer nicht ausgefüllten Raute, welche die Kardinalität 0..* besitzt und mit dem &#039;&#039;Ganzen&#039;&#039; Teil verbunden ist. Die Elemente in einer Aggregation besitzen keine Exisitenzabhängigkeit, da die &#039;&#039;Teil&#039;&#039; Elemente auch ohne die &#039;&#039;Ganz&#039;&#039; Elemente bestehen können. &lt;br /&gt;
&lt;br /&gt;
Die Assoziationsarten werden prinzipiell mittels der Kardinalität unterschieden. Zudem sind die &#039;&#039;Teil&#039;&#039; Elemente Bestandteil genau eines &#039;&#039;Ganz&#039;&#039; Elementes, da sie NIE zu mehrere &#039;&#039;Ganz&#039;&#039; Elementen gehören. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber&#039;&#039;&#039;&#039;&#039; == &lt;br /&gt;
&lt;br /&gt;
Diese Umsetzung erfolgte mit der Programmiersprache JAVA.&lt;br /&gt;
[[Datei:Screenshot 2021-01-22 143552.jpg|mini|600px|none|Fahrzeuge in einem UML Klassendiagramm]]&lt;br /&gt;
====&#039;&#039;&#039;Vehicle.java&#039;&#039;&#039; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle;&lt;br /&gt;
&lt;br /&gt;
public abstract class Vehicle {&lt;br /&gt;
    private int maxSpeed;&lt;br /&gt;
    private int wheels;&lt;br /&gt;
&lt;br /&gt;
    public Vehicle(int maxSpeed, int wheels) {&lt;br /&gt;
        this.maxSpeed = maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void move() {&lt;br /&gt;
        System.out.println(&amp;quot;I am moving at &amp;quot; + maxSpeed + &amp;quot; with &amp;quot; + wheels + &amp;quot; wheels.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public int getMaxSpeed() {&lt;br /&gt;
        return maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public abstract void start();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Bike.java&#039;&#039;&#039; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
public class Bike extends Vehicle {&lt;br /&gt;
    public Bike(int maxSpeed, int wheels) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start to step into the pedals!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Rollerblades.java&#039;&#039;&#039; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Rollerblades extends Vehicle {&lt;br /&gt;
    public Rollerblades(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 8);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start skate!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Skateboard.java&#039;&#039;&#039; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Skateboard extends Vehicle {&lt;br /&gt;
    public Skateboard(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 4);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I step with one feet on the ground to start!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;MotorizedVehicle.java&#039;&#039;&#039; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public abstract class MotorizedVehicle extends Vehicle {&lt;br /&gt;
    private float kw;&lt;br /&gt;
&lt;br /&gt;
    public MotorizedVehicle(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
        this.kw = kw;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I am starting my engine with &amp;quot; + kw + &amp;quot; kw.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;EBike.java&#039;&#039;&#039; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class EBike extends MotorizedVehicle {&lt;br /&gt;
    public EBike(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 2, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Lkw.java&#039;&#039;&#039; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Lkw extends MotorizedVehicle {&lt;br /&gt;
    public Lkw(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Pkw.java&#039;&#039;&#039; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Pkw extends MotorizedVehicle {&lt;br /&gt;
    public Pkw(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 4, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Quellen&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language&lt;br /&gt;
&lt;br /&gt;
https://www.sparxsystems.de/ressourcen/literatur/leseprobe-zu-projektabwicklung-mit-uml-und-enterprise-architect/klassendiagramm-class-diagram/&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Assoziation_(UML)&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Multiplizit%C3%A4t_(UML)&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=822</id>
		<title>UML Klassendiagramm</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=822"/>
		<updated>2021-01-29T09:09:04Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &#039;&#039;&#039;&#039;&#039;Was ist ein Klassendiagramm?&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm bildet ein Kernstück der &#039;&#039;&#039;U&#039;&#039;&#039;nified &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;L&#039;&#039;&#039;anguage (&#039;&#039;&#039;UML&#039;&#039;&#039;). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Wozu wird es benötigt?&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm wird verwendet, um die Programme einfacher und übersichtlicher darzustellen und diese dann anschließend umzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Welche Elemente gibt es? Erkläre dies so detailliert und anschaulich wie möglich&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Klassenmodelle unterteilen sich in folgende Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Klassen&lt;br /&gt;
* Schnittstellen&lt;br /&gt;
* Generalisierung&lt;br /&gt;
* Assoziation&lt;br /&gt;
** Komposition&lt;br /&gt;
** Aggregation&lt;br /&gt;
[[Datei:Screenshot 2021-01-08 132401.jpg|mini|UML Klasse aus DIA]]&lt;br /&gt;
==== &#039;&#039;&#039;Klassen&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie &amp;quot;{abstrakt}&amp;quot; über dem Namen der Klasse tragen. &lt;br /&gt;
Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039; oder auch &#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
Bei einer &#039;&#039;&#039;public&#039;&#039;&#039; oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.&lt;br /&gt;
* &#039;&#039;&#039;protected&#039;&#039;&#039; oder auch &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;protected&#039;&#039;&#039; Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.&lt;br /&gt;
* &#039;&#039;&#039;private&#039;&#039;&#039; oder auch &#039;&#039;&#039;−&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;private&#039;&#039;&#039; Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden. &lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; oder auch &#039;&#039;&#039;~&#039;&#039;&#039;&lt;br /&gt;
Bei einer Klasse mit einer &#039;&#039;&#039;package&#039;&#039;&#039; Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.&lt;br /&gt;
&lt;br /&gt;
[[Datei:UmlCd Interface-1.svg.png|mini|UML Schnittstelle|100px]]&lt;br /&gt;
==== &#039;&#039;&#039;Schnittstellen&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Schnittstelle&#039;&#039;&#039; wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort &amp;quot;interface&amp;quot; gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Generalization (UML class diagram).png|mini|100px|Generalisierung]]&lt;br /&gt;
==== &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Durch eine &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; &amp;quot;erben&amp;quot; speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse &amp;quot;vererbt&amp;quot;. Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Assoziantion&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;n-äre Assoziation&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
In folgenden Bild sieht man eine Binäre Assoziation. (Binär, weil zwei Klassen miteinander verbunden wurden)&lt;br /&gt;
[[Datei:1920px-UmlCd Assoziation-1.png|mini|links|Binäre Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;reflexive Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Im hier dargestellten Bild sieht man eine reflexive Assoziation, welche auf sich selbst verweist.&lt;br /&gt;
[[Datei:UmlCd Assoziation-2.png|mini|links|Reflexive Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da Assoziationen durch Linien dargestellt werden, müssen diese durch ein Assoziationsende gekennzeichnet werden. Diese Assoziationsenden können folgende Merkmale aufweisen:&lt;br /&gt;
* Sie können eine Multiplizität besitzen. Diese gibt Informationen über das Beziehungsverhältnis zweier Klassen. Diese Zahlen befinden sich &#039;&#039;&#039;nur&#039;&#039;&#039; im &#039;&#039;positiven&#039;&#039; und &#039;&#039;ganzzahligen&#039;&#039; Bereich, wobei der Beginn bei der Zahl 0 liegt.&lt;br /&gt;
** Multiplizitäten werden im folgenden Format angegeben:&lt;br /&gt;
 untereSchranke..obereSchranke&lt;br /&gt;
** Bei * oder auch 0..* wird die untereSchranke als 0 und die obereSchranke als unendlich angenommen.&lt;br /&gt;
** Beide Schranken dürfen nicht 0 oder unbeschränkt sein. Falls beide Grenzen trotzdem gleich groß sind, wird nur die obereSchranke angegeben. &lt;br /&gt;
** Bei einer Multiplizität von 0..1 wird das Element als &#039;&#039;optional&#039;&#039; bezeichnet.&lt;br /&gt;
** Wenn die obereSchranke über dem Wert 1 liegt, wird das Element als mehrwertiges Element bezeichnet, da mehrere Wert annehmbar sind.&lt;br /&gt;
* Sie können Namen besitzen.&lt;br /&gt;
* Sie können eine Sichtbarkeit aufweisen.&lt;br /&gt;
* Es kann spezifiziert werden, ob das Assoziationsende &amp;quot;ordered&amp;quot; und / oder unique ist. &lt;br /&gt;
&lt;br /&gt;
Zudem Assoziationsende kommen oft Multiplizitäten hinzu, welche die Beziehung zwischen den zwei Instanzen regelt. Im folgenden werden auf zwei Arten der Assoziationen genauer eingegangen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Komposition und Aggregation&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Um Beziehungen mit &#039;&#039;Ganzen&#039;&#039; und &#039;&#039;Teilen&#039;&#039; darzustellen werden die Aggregation und die Komposition verwendet.&lt;br /&gt;
[[Datei:Komposition Aggregation.png|mini|links|Komposition und Aggregation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Komposition ist eine Linie mit einer ausgefüllten Raute, welche mit der Kardinalität 1 beschriftet wird und mit dem Ganzen Teil der Beziehungspartner verbunden ist. Bei einer Komposition können die &#039;&#039;Teile&#039;&#039; nicht ohne das &#039;&#039;Ganze&#039;&#039; existieren. Das bedeutet, dass das &#039;&#039;Teil&#039;&#039; Element existenziell abhängig von &#039;&#039;Ganz&#039;&#039; Element ist.&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Aggregation ist eine Linie mit einer nicht ausgefüllten Raute, welche die Kardinalität 0..* besitzt und mit dem &#039;&#039;Ganzen&#039;&#039; Teil verbunden ist. Die Elemente in einer Aggregation besitzen keine Exisitenzabhängigkeit, da die &#039;&#039;Teil&#039;&#039; Elemente auch ohne die &#039;&#039;Ganz&#039;&#039; Elemente bestehen können. &lt;br /&gt;
&lt;br /&gt;
Die Assoziationsarten werden prinzipiell mittels der Kardinalität unterschieden. Zudem sind die &#039;&#039;Teil&#039;&#039; Elemente Bestandteil genau eines &#039;&#039;Ganz&#039;&#039; Elementes, da sie NIE zu mehrere &#039;&#039;Ganz&#039;&#039; Elementen gehören. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber&#039;&#039;&#039;&#039;&#039; == &lt;br /&gt;
&lt;br /&gt;
Diese Umsetzung erfolgte mit der Programmiersprache JAVA.&lt;br /&gt;
[[Datei:Screenshot 2021-01-22 143552.jpg|mini|600px|none|Fahrzeuge in einem UML Klassendiagramm]]&lt;br /&gt;
====&#039;&#039;&#039;Vehicle.java&#039;&#039;&#039; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle;&lt;br /&gt;
&lt;br /&gt;
public abstract class Vehicle {&lt;br /&gt;
    private int maxSpeed;&lt;br /&gt;
    private int wheels;&lt;br /&gt;
&lt;br /&gt;
    public Vehicle(int maxSpeed, int wheels) {&lt;br /&gt;
        this.maxSpeed = maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void move() {&lt;br /&gt;
        System.out.println(&amp;quot;I am moving at &amp;quot; + maxSpeed + &amp;quot; with &amp;quot; + wheels + &amp;quot; wheels.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public int getMaxSpeed() {&lt;br /&gt;
        return maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public abstract void start();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Bike.java&#039;&#039;&#039; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
public class Bike extends Vehicle {&lt;br /&gt;
    public Bike(int maxSpeed, int wheels) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start to step into the pedals!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Rollerblades.java&#039;&#039;&#039; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Rollerblades extends Vehicle {&lt;br /&gt;
    public Rollerblades(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 8);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start skate!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Skateboard.java&#039;&#039;&#039; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Skateboard extends Vehicle {&lt;br /&gt;
    public Skateboard(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 4);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I step with one feet on the ground to start!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;MotorizedVehicle.java&#039;&#039;&#039; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public abstract class MotorizedVehicle extends Vehicle {&lt;br /&gt;
    private float kw;&lt;br /&gt;
&lt;br /&gt;
    public MotorizedVehicle(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
        this.kw = kw;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I am starting my engine with &amp;quot; + kw + &amp;quot; kw.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;EBike.java&#039;&#039;&#039; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class EBike extends MotorizedVehicle {&lt;br /&gt;
    public EBike(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 2, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Lkw.java&#039;&#039;&#039; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Lkw extends MotorizedVehicle {&lt;br /&gt;
    public Lkw(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Pkw.java&#039;&#039;&#039; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Pkw extends MotorizedVehicle {&lt;br /&gt;
    public Pkw(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 4, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Quellen:&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language&lt;br /&gt;
&lt;br /&gt;
https://www.sparxsystems.de/ressourcen/literatur/leseprobe-zu-projektabwicklung-mit-uml-und-enterprise-architect/klassendiagramm-class-diagram/&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Assoziation_(UML)&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Multiplizit%C3%A4t_(UML)&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=821</id>
		<title>UML Klassendiagramm</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=821"/>
		<updated>2021-01-29T09:02:32Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &#039;&#039;&#039;&#039;&#039;Was ist ein Klassendiagramm?&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm bildet ein Kernstück der &#039;&#039;&#039;U&#039;&#039;&#039;nified &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;L&#039;&#039;&#039;anguage (&#039;&#039;&#039;UML&#039;&#039;&#039;). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Wozu wird es benötigt?&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm wird verwendet, um die Programme einfacher und übersichtlicher darzustellen und diese dann anschließend umzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Welche Elemente gibt es? Erkläre dies so detailliert und anschaulich wie möglich&#039;&#039;&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Klassenmodelle unterteilen sich in folgende Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Klassen&lt;br /&gt;
* Schnittstellen&lt;br /&gt;
* Generalisierung&lt;br /&gt;
* Assoziation&lt;br /&gt;
** Komposition&lt;br /&gt;
** Aggregation&lt;br /&gt;
[[Datei:Screenshot 2021-01-08 132401.jpg|mini|UML Klasse aus DIA]]&lt;br /&gt;
==== &#039;&#039;&#039;Klassen&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie &amp;quot;{abstrakt}&amp;quot; über dem Namen der Klasse tragen. &lt;br /&gt;
Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039; oder auch &#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
Bei einer &#039;&#039;&#039;public&#039;&#039;&#039; oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.&lt;br /&gt;
* &#039;&#039;&#039;protected&#039;&#039;&#039; oder auch &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;protected&#039;&#039;&#039; Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.&lt;br /&gt;
* &#039;&#039;&#039;private&#039;&#039;&#039; oder auch &#039;&#039;&#039;−&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;private&#039;&#039;&#039; Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden. &lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; oder auch &#039;&#039;&#039;~&#039;&#039;&#039;&lt;br /&gt;
Bei einer Klasse mit einer &#039;&#039;&#039;package&#039;&#039;&#039; Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.&lt;br /&gt;
&lt;br /&gt;
[[Datei:UmlCd Interface-1.svg.png|mini|UML Schnittstelle|100px]]&lt;br /&gt;
==== &#039;&#039;&#039;Schnittstellen&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Schnittstelle&#039;&#039;&#039; wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort &amp;quot;interface&amp;quot; gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Generalization (UML class diagram).png|mini|100px|Generalisierung]]&lt;br /&gt;
==== &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Durch eine &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; &amp;quot;erben&amp;quot; speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse &amp;quot;vererbt&amp;quot;. Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Assoziantion&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;n-äre Assoziation&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
In folgenden Bild sieht man eine Binäre Assoziation. (Binär, weil zwei Klassen miteinander verbunden wurden)&lt;br /&gt;
[[Datei:1920px-UmlCd Assoziation-1.png|mini|links|Binäre Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;reflexive Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Im hier dargestellten Bild sieht man eine reflexive Assoziation, welche auf sich selbst verweist.&lt;br /&gt;
[[Datei:UmlCd Assoziation-2.png|mini|links|Reflexive Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da Assoziationen durch Linien dargestellt werden, müssen diese durch ein Assoziationsende gekennzeichnet werden. Diese Assoziationsenden können folgende Merkmale aufweisen:&lt;br /&gt;
* Sie können eine Multiplizität besitzen. Diese gibt Informationen über das Beziehungsverhältnis zweier Klassen. Diese Zahlen befinden sich &#039;&#039;&#039;nur&#039;&#039;&#039; im &#039;&#039;positiven&#039;&#039; und &#039;&#039;ganzzahligen&#039;&#039; Bereich, wobei der Beginn bei der Zahl 0 liegt.&lt;br /&gt;
** Multiplizitäten werden im folgenden Format angegeben:&lt;br /&gt;
 untereSchranke..obereSchranke&lt;br /&gt;
** Bei * oder auch 0..* wird die untereSchranke als 0 und die obereSchranke als unendlich angenommen.&lt;br /&gt;
** Beide Schranken dürfen nicht 0 oder unbeschränkt sein. Falls beide Grenzen trotzdem gleich groß sind, wird nur die obereSchranke angegeben. &lt;br /&gt;
** Bei einer Multiplizität von 0..1 wird das Element als &#039;&#039;optional&#039;&#039; bezeichnet.&lt;br /&gt;
** Wenn die obereSchranke über dem Wert 1 liegt, wird das Element als mehrwertiges Element bezeichnet, da mehrere Wert annehmbar sind.&lt;br /&gt;
* Sie können Namen besitzen.&lt;br /&gt;
* Sie können eine Sichtbarkeit aufweisen.&lt;br /&gt;
* Es kann spezifiziert werden, ob das Assoziationsende &amp;quot;ordered&amp;quot; und / oder unique ist. &lt;br /&gt;
&lt;br /&gt;
Zudem Assoziationsende kommen oft Multiplizitäten hinzu, welche die Beziehung zwischen den zwei Instanzen regelt. Im folgenden werden auf zwei Arten der Assoziationen genauer eingegangen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Komposition und Aggregation&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Um Beziehungen mit &#039;&#039;Ganzen&#039;&#039; und &#039;&#039;Teilen&#039;&#039; darzustellen werden die Aggregation und die Komposition verwendet.&lt;br /&gt;
[[Datei:Komposition Aggregation.png|mini|links|Komposition und Aggregation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Komposition ist eine Linie mit einer ausgefüllten Raute, welche mit der Kardinalität 1 beschriftet wird und mit dem Ganzen Teil der Beziehungspartner verbunden ist. Bei einer Komposition können die &#039;&#039;Teile&#039;&#039; nicht ohne das &#039;&#039;Ganze&#039;&#039; existieren. Das bedeutet, dass das &#039;&#039;Teil&#039;&#039; Element existenziell abhängig von &#039;&#039;Ganz&#039;&#039; Element ist.&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Aggregation ist eine Linie mit einer nicht ausgefüllten Raute, welche die Kardinalität 0..* besitzt und mit dem &#039;&#039;Ganzen&#039;&#039; Teil verbunden ist. Die Elemente in einer Aggregation besitzen keine Exisitenzabhängigkeit, da die &#039;&#039;Teil&#039;&#039; Elemente auch ohne die &#039;&#039;Ganz&#039;&#039; Elemente bestehen können. &lt;br /&gt;
&lt;br /&gt;
Die Assoziationsarten werden prinzipiell mittels der Kardinalität unterschieden. Zudem sind die &#039;&#039;Teil&#039;&#039; Elemente Bestandteil genau eines &#039;&#039;Ganz&#039;&#039; Elementes, da sie NIE zu mehrere &#039;&#039;Ganz&#039;&#039; Elementen gehören. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;&#039;&#039;Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber&#039;&#039;&#039;&#039;&#039; == &lt;br /&gt;
&lt;br /&gt;
Diese Umsetzung erfolgte mit der Programmiersprache JAVA.&lt;br /&gt;
[[Datei:Screenshot 2021-01-22 143552.jpg|mini|600px|none|Fahrzeuge in einem UML Klassendiagramm]]&lt;br /&gt;
====&#039;&#039;&#039;Vehicle.java&#039;&#039;&#039; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle;&lt;br /&gt;
&lt;br /&gt;
public abstract class Vehicle {&lt;br /&gt;
    private int maxSpeed;&lt;br /&gt;
    private int wheels;&lt;br /&gt;
&lt;br /&gt;
    public Vehicle(int maxSpeed, int wheels) {&lt;br /&gt;
        this.maxSpeed = maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void move() {&lt;br /&gt;
        System.out.println(&amp;quot;I am moving at &amp;quot; + maxSpeed + &amp;quot; with &amp;quot; + wheels + &amp;quot; wheels.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public int getMaxSpeed() {&lt;br /&gt;
        return maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public abstract void start();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Bike.java&#039;&#039;&#039; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
public class Bike extends Vehicle {&lt;br /&gt;
    public Bike(int maxSpeed, int wheels) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start to step into the pedals!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Rollerblades.java&#039;&#039;&#039; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Rollerblades extends Vehicle {&lt;br /&gt;
    public Rollerblades(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 8);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start skate!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Skateboard.java&#039;&#039;&#039; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Skateboard extends Vehicle {&lt;br /&gt;
    public Skateboard(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 4);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I step with one feet on the ground to start!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;MotorizedVehicle.java&#039;&#039;&#039; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public abstract class MotorizedVehicle extends Vehicle {&lt;br /&gt;
    private float kw;&lt;br /&gt;
&lt;br /&gt;
    public MotorizedVehicle(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
        this.kw = kw;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I am starting my engine with &amp;quot; + kw + &amp;quot; kw.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;EBike.java&#039;&#039;&#039; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class EBike extends MotorizedVehicle {&lt;br /&gt;
    public EBike(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 2, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Lkw.java&#039;&#039;&#039; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Lkw extends MotorizedVehicle {&lt;br /&gt;
    public Lkw(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Pkw.java&#039;&#039;&#039; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Pkw extends MotorizedVehicle {&lt;br /&gt;
    public Pkw(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 4, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Quellen:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language&lt;br /&gt;
&lt;br /&gt;
https://www.sparxsystems.de/ressourcen/literatur/leseprobe-zu-projektabwicklung-mit-uml-und-enterprise-architect/klassendiagramm-class-diagram/&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Assoziation_(UML)&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Multiplizit%C3%A4t_(UML)&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=442</id>
		<title>UML Klassendiagramm</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=442"/>
		<updated>2021-01-22T14:03:37Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TODO:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Was ist ein Klassendiagramm?&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm bildet ein Kernstück der &#039;&#039;&#039;U&#039;&#039;&#039;nified &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;L&#039;&#039;&#039;anguage (&#039;&#039;&#039;UML&#039;&#039;&#039;). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Wozu wird es benötigt?&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm wird verwendet, um die Programme einfacher und übersichtlicher darzustellen und diese dann anschließend umzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Welche Elemente gibt es? Erkläre dies so detailliert und anschaulich wie möglich&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klassenmodelle unterteilen sich in folgende Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Klassen&lt;br /&gt;
* Schnittstellen&lt;br /&gt;
* Generalisierung&lt;br /&gt;
* Assoziation&lt;br /&gt;
** Komposition&lt;br /&gt;
** Aggregation&lt;br /&gt;
[[Datei:Screenshot 2021-01-08 132401.jpg|mini|UML Klasse aus DIA]]&lt;br /&gt;
&#039;&#039;&#039;Klassen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie &amp;quot;{abstrakt}&amp;quot; über dem Namen der Klasse tragen. &lt;br /&gt;
Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039; oder auch &#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
Bei einer &#039;&#039;&#039;public&#039;&#039;&#039; oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.&lt;br /&gt;
* &#039;&#039;&#039;protected&#039;&#039;&#039; oder auch &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;protected&#039;&#039;&#039; Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.&lt;br /&gt;
* &#039;&#039;&#039;private&#039;&#039;&#039; oder auch &#039;&#039;&#039;−&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;private&#039;&#039;&#039; Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden. &lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; oder auch &#039;&#039;&#039;~&#039;&#039;&#039;&lt;br /&gt;
Bei einer Klasse mit einer &#039;&#039;&#039;package&#039;&#039;&#039; Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.&lt;br /&gt;
&lt;br /&gt;
[[Datei:UmlCd Interface-1.svg.png|mini|UML Schnittstelle|100px]]&lt;br /&gt;
&#039;&#039;&#039;Schnittstellen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Schnittstelle&#039;&#039;&#039; wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort &amp;quot;interface&amp;quot; gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Generalization (UML class diagram).png|mini|100px|Generalisierung]]&lt;br /&gt;
&#039;&#039;&#039;Generalisierung&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Durch eine &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; &amp;quot;erben&amp;quot; speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse &amp;quot;vererbt&amp;quot;. Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Assoziantion&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;n-äre Assoziation&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
In folgenden Bild sieht man eine Binäre Assoziation. (Binär, weil zwei Klassen miteinander verbunden wurden)&lt;br /&gt;
[[Datei:1920px-UmlCd Assoziation-1.png|mini|links|Binäre Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;reflexive Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Im hier dargestellten Bild sieht man eine reflexive Assoziation, welche auf sich selbst verweist.&lt;br /&gt;
[[Datei:UmlCd Assoziation-2.png|mini|links|Reflexive Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da Assoziationen durch Linien dargestellt werden, müssen diese durch ein Assoziationsende gekennzeichnet werden. Diese Assoziationsenden können folgende Merkmale aufweisen:&lt;br /&gt;
* Sie können eine Multiplizität besitzen. Diese gibt Informationen über das Beziehungsverhältnis zweier Klassen. Diese Zahlen befinden sich &#039;&#039;&#039;nur&#039;&#039;&#039; im &#039;&#039;positiven&#039;&#039; und &#039;&#039;ganzzahligen&#039;&#039; Bereich, wobei der Beginn bei der Zahl 0 liegt.&lt;br /&gt;
** Multiplizitäten werden im folgenden Format angegeben:&lt;br /&gt;
 untereSchranke..obereSchranke&lt;br /&gt;
** Bei * oder auch 0..* wird die untereSchranke als 0 und die obereSchranke als unendlich angenommen.&lt;br /&gt;
** Beide Schranken dürfen nicht 0 oder unbeschränkt sein. Falls beide Grenzen trotzdem gleich groß sind, wird nur die obereSchranke angegeben. &lt;br /&gt;
** Bei einer Multiplizität von 0..1 wird das Element als &#039;&#039;optional&#039;&#039; bezeichnet.&lt;br /&gt;
** Wenn die obereSchranke über dem Wert 1 liegt, wird das Element als mehrwertiges Element bezeichnet, da mehrere Wert annehmbar sind.&lt;br /&gt;
* Sie können Namen besitzen.&lt;br /&gt;
* Sie können eine Sichtbarkeit aufweisen.&lt;br /&gt;
* Es kann spezifiziert werden, ob das Assoziationsende &amp;quot;ordered&amp;quot; und / oder unique ist. &lt;br /&gt;
&lt;br /&gt;
Zudem Assoziationsende kommen oft Multiplizitäten hinzu, welche die Beziehung zwischen den zwei Instanzen regelt. Im folgenden werden auf zwei Arten der Assoziationen genauer eingegangen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Komposition und Aggregation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Um Beziehungen mit &#039;&#039;Ganzen&#039;&#039; und &#039;&#039;Teilen&#039;&#039; darzustellen werden die Aggregation und die Komposition verwendet.&lt;br /&gt;
[[Datei:Komposition Aggregation.png|mini|links|Komposition und Aggregation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Komposition ist eine Linie mit einer ausgefüllten Raute, welche mit der Kardinalität 1 beschriftet wird und mit dem Ganzen Teil der Beziehungspartner verbunden ist. Bei einer Komposition können die &#039;&#039;Teile&#039;&#039; nicht ohne das &#039;&#039;Ganze&#039;&#039; existieren. Das bedeutet, dass das &#039;&#039;Teil&#039;&#039; Element existenziell abhängig von &#039;&#039;Ganz&#039;&#039; Element ist.&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Aggregation ist eine Linie mit einer nicht ausgefüllten Raute, welche die Kardinalität 0..* besitzt und mit dem &#039;&#039;Ganzen&#039;&#039; Teil verbunden ist. Die Elemente in einer Aggregation besitzen keine Exisitenzabhängigkeit, da die &#039;&#039;Teil&#039;&#039; Elemente auch ohne die &#039;&#039;Ganz&#039;&#039; Elemente bestehen können. &lt;br /&gt;
&lt;br /&gt;
Die Assoziationsarten werden prinzipiell mittels der Kardinalität unterschieden. Zudem sind die &#039;&#039;Teil&#039;&#039; Elemente Bestandteil genau eines &#039;&#039;Ganz&#039;&#039; Elementes, da sie NIE zu mehrere &#039;&#039;Ganz&#039;&#039; Elementen gehören. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Diese Umsetzung erfolgte mit der Programmiersprache JAVA.&lt;br /&gt;
[[Datei:Screenshot 2021-01-22 143552.jpg|gerahmt|links|Fahrzeuge in einem UML Klassendiagramm]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle;&lt;br /&gt;
&lt;br /&gt;
public abstract class Vehicle {&lt;br /&gt;
    private int maxSpeed;&lt;br /&gt;
    private int wheels;&lt;br /&gt;
&lt;br /&gt;
    public Vehicle(int maxSpeed, int wheels) {&lt;br /&gt;
        this.maxSpeed = maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void move() {&lt;br /&gt;
        System.out.println(&amp;quot;I am moving at &amp;quot; + maxSpeed + &amp;quot; with &amp;quot; + wheels + &amp;quot; wheels.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public int getMaxSpeed() {&lt;br /&gt;
        return maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public abstract void start();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
public class Bike extends Vehicle {&lt;br /&gt;
    public Bike(int maxSpeed, int wheels) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start to step into the pedals!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rollerblades.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Rollerblades extends Vehicle {&lt;br /&gt;
    public Rollerblades(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 8);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start skate!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Skateboard.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Skateboard extends Vehicle {&lt;br /&gt;
    public Skateboard(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 4);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I step with one feet on the ground to start!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MotorizedVehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public abstract class MotorizedVehicle extends Vehicle {&lt;br /&gt;
    private float kw;&lt;br /&gt;
&lt;br /&gt;
    public MotorizedVehicle(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
        this.kw = kw;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I am starting my engine with &amp;quot; + kw + &amp;quot; kw.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EBike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class EBike extends MotorizedVehicle {&lt;br /&gt;
    public EBike(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 2, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Lkw extends MotorizedVehicle {&lt;br /&gt;
    public Lkw(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Pkw extends MotorizedVehicle {&lt;br /&gt;
    public Pkw(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 4, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Quellen:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language&lt;br /&gt;
&lt;br /&gt;
https://www.sparxsystems.de/ressourcen/literatur/leseprobe-zu-projektabwicklung-mit-uml-und-enterprise-architect/klassendiagramm-class-diagram/&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Assoziation_(UML)&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Multiplizit%C3%A4t_(UML)&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=441</id>
		<title>UML Klassendiagramm</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=441"/>
		<updated>2021-01-22T14:01:07Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TODO:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Was ist ein Klassendiagramm?&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm bildet ein Kernstück der &#039;&#039;&#039;U&#039;&#039;&#039;nified &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;L&#039;&#039;&#039;anguage (&#039;&#039;&#039;UML&#039;&#039;&#039;). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Wozu wird es benötigt?&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Ein Klassendiagramm wird verwendet, um die Programme einfacher und übersichtlicher darzustellen und diese dann anschließend umzusetzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Welche Elemente gibt es? Erkläre dies so detailliert und anschaulich wie möglich&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Klassenmodelle unterteilen sich in folgende Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Klassen&lt;br /&gt;
* Schnittstellen&lt;br /&gt;
* Generalisierung&lt;br /&gt;
* Assoziation&lt;br /&gt;
** Komposition&lt;br /&gt;
** Aggregation&lt;br /&gt;
[[Datei:Screenshot 2021-01-08 132401.jpg|mini|UML Klasse aus DIA]]&lt;br /&gt;
&#039;&#039;&#039;Klassen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie &amp;quot;{abstrakt}&amp;quot; über dem Namen der Klasse tragen. &lt;br /&gt;
Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039; oder auch &#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
Bei einer &#039;&#039;&#039;public&#039;&#039;&#039; oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.&lt;br /&gt;
* &#039;&#039;&#039;protected&#039;&#039;&#039; oder auch &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;protected&#039;&#039;&#039; Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.&lt;br /&gt;
* &#039;&#039;&#039;private&#039;&#039;&#039; oder auch &#039;&#039;&#039;−&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;private&#039;&#039;&#039; Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden. &lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; oder auch &#039;&#039;&#039;~&#039;&#039;&#039;&lt;br /&gt;
Bei einer Klasse mit einer &#039;&#039;&#039;package&#039;&#039;&#039; Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.&lt;br /&gt;
&lt;br /&gt;
[[Datei:UmlCd Interface-1.svg.png|mini|UML Schnittstelle|100px]]&lt;br /&gt;
&#039;&#039;&#039;Schnittstellen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Schnittstelle&#039;&#039;&#039; wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort &amp;quot;interface&amp;quot; gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Generalization (UML class diagram).png|mini|100px|Generalisierung]]&lt;br /&gt;
&#039;&#039;&#039;Generalisierung&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Durch eine &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; &amp;quot;erben&amp;quot; speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse &amp;quot;vererbt&amp;quot;. Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Assoziantion&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;n-äre Assoziation&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
In folgenden Bild sieht man eine Binäre Assoziation. (Binär, weil zwei Klassen miteinander verbunden wurden)&lt;br /&gt;
[[Datei:1920px-UmlCd Assoziation-1.png|mini|links|Binäre Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;reflexive Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Im hier dargestellten Bild sieht man eine reflexive Assoziation, welche auf sich selbst verweist.&lt;br /&gt;
[[Datei:UmlCd Assoziation-2.png|mini|links|Reflexive Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da Assoziationen durch Linien dargestellt werden, müssen diese durch ein Assoziationsende gekennzeichnet werden. Diese Assoziationsenden können folgende Merkmale aufweisen:&lt;br /&gt;
* Sie können eine Multiplizität besitzen. Diese gibt Informationen über das Beziehungsverhältnis zweier Klassen. Diese Zahlen befinden sich &#039;&#039;&#039;nur&#039;&#039;&#039; im &#039;&#039;positiven&#039;&#039; und &#039;&#039;ganzzahligen&#039;&#039; Bereich, wobei der Beginn bei der Zahl 0 liegt.&lt;br /&gt;
** Multiplizitäten werden im folgenden Format angegeben:&lt;br /&gt;
 untereSchranke..obereSchranke&lt;br /&gt;
** Bei * oder auch 0..* wird die untereSchranke als 0 und die obereSchranke als unendlich angenommen.&lt;br /&gt;
** Beide Schranken dürfen nicht 0 oder unbeschränkt sein. Falls beide Grenzen trotzdem gleich groß sind, wird nur die obereSchranke angegeben. &lt;br /&gt;
** Bei einer Multiplizität von 0..1 wird das Element als &#039;&#039;optional&#039;&#039; bezeichnet.&lt;br /&gt;
** Wenn die obereSchranke über dem Wert 1 liegt, wird das Element als mehrwertiges Element bezeichnet, da mehrere Wert annehmbar sind.&lt;br /&gt;
* Sie können Namen besitzen.&lt;br /&gt;
* Sie können eine Sichtbarkeit aufweisen.&lt;br /&gt;
* Es kann spezifiziert werden, ob das Assoziationsende &amp;quot;ordered&amp;quot; und / oder unique ist. &lt;br /&gt;
&lt;br /&gt;
Zudem Assoziationsende kommen oft Multiplizitäten hinzu, welche die Beziehung zwischen den zwei Instanzen regelt. Im folgenden werden auf zwei Arten der Assoziationen genauer eingegangen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Komposition und Aggregation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Um Beziehungen mit &#039;&#039;Ganzen&#039;&#039; und &#039;&#039;Teilen&#039;&#039; darzustellen werden die Aggregation und die Komposition verwendet.&lt;br /&gt;
[[Datei:Komposition Aggregation.png|mini|links|Komposition und Aggregation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Komposition ist eine Linie mit einer ausgefüllten Raute, welche mit der Kardinalität 1 beschriftet wird und mit dem Ganzen Teil der Beziehungspartner verbunden ist. Bei einer Komposition können die &#039;&#039;Teile&#039;&#039; nicht ohne das &#039;&#039;Ganze&#039;&#039; existieren. Das bedeutet, dass das &#039;&#039;Teil&#039;&#039; Element existenziell abhängig von &#039;&#039;Ganz&#039;&#039; Element ist.&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Aggregation ist eine Linie mit einer nicht ausgefüllten Raute, welche die Kardinalität 0..* besitzt und mit dem &#039;&#039;Ganzen&#039;&#039; Teil verbunden ist. Die Elemente in einer Aggregation besitzen keine Exisitenzabhängigkeit, da die &#039;&#039;Teil&#039;&#039; Elemente auch ohne die &#039;&#039;Ganz&#039;&#039; Elemente bestehen können. &lt;br /&gt;
&lt;br /&gt;
Die Assoziationsarten werden prinzipiell mittels der Kardinalität unterschieden. Zudem sind die &#039;&#039;Teil&#039;&#039; Elemente Bestandteil genau eines &#039;&#039;Ganz&#039;&#039; Elementes, da sie NIE zu mehrere &#039;&#039;Ganz&#039;&#039; Elementen gehören. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Diese Umsetzung erfolgte mit der Programmiersprache JAVA.&lt;br /&gt;
[[Datei:Screenshot 2021-01-22 143552.jpg|gerahmt|links|Fahrzeuge in einem UML Klassendiagramm]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle;&lt;br /&gt;
&lt;br /&gt;
public abstract class Vehicle {&lt;br /&gt;
    private int maxSpeed;&lt;br /&gt;
    private int wheels;&lt;br /&gt;
&lt;br /&gt;
    public Vehicle(int maxSpeed, int wheels) {&lt;br /&gt;
        this.maxSpeed = maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void move() {&lt;br /&gt;
        System.out.println(&amp;quot;I am moving at &amp;quot; + maxSpeed + &amp;quot; with &amp;quot; + wheels + &amp;quot; wheels.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public int getMaxSpeed() {&lt;br /&gt;
        return maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public abstract void start();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
public class Bike extends Vehicle {&lt;br /&gt;
    public Bike(int maxSpeed, int wheels) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start to step into the pedals!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rollerblades.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Rollerblades extends Vehicle {&lt;br /&gt;
    public Rollerblades(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 8);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start skate!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Skateboard.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Skateboard extends Vehicle {&lt;br /&gt;
    public Skateboard(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 4);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I step with one feet on the ground to start!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MotorizedVehicle.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public abstract class MotorizedVehicle extends Vehicle {&lt;br /&gt;
    private float kw;&lt;br /&gt;
&lt;br /&gt;
    public MotorizedVehicle(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
        this.kw = kw;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I am starting my engine with &amp;quot; + kw + &amp;quot; kw.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EBike.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class EBike extends MotorizedVehicle {&lt;br /&gt;
    public EBike(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 2, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Lkw extends MotorizedVehicle {&lt;br /&gt;
    public Lkw(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pkw.java&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;java&#039; line&amp;gt;&lt;br /&gt;
package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
public class Pkw extends MotorizedVehicle {&lt;br /&gt;
    public Pkw(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 4, kw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Quellen:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language&lt;br /&gt;
&lt;br /&gt;
https://www.sparxsystems.de/ressourcen/literatur/leseprobe-zu-projektabwicklung-mit-uml-und-enterprise-architect/klassendiagramm-class-diagram/&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Assoziation_(UML)&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Multiplizit%C3%A4t_(UML)&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=438</id>
		<title>UML Klassendiagramm</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=438"/>
		<updated>2021-01-22T13:49:36Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TODO:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Was ist ein Klassendiagramm?&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm bildet ein Kernstück der &#039;&#039;&#039;U&#039;&#039;&#039;nified &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;L&#039;&#039;&#039;anguage (&#039;&#039;&#039;UML&#039;&#039;&#039;). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Wozu wird es benötigt?&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Welche Elemente gibt es? Erkläre dies so detailliert und anschaulich wie möglich&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Klassenmodelle unterteilen sich in folgende Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Klassen&lt;br /&gt;
* Schnittstellen&lt;br /&gt;
* Generalisierung&lt;br /&gt;
* Assoziation&lt;br /&gt;
** Komposition&lt;br /&gt;
** Aggregation&lt;br /&gt;
[[Datei:Screenshot 2021-01-08 132401.jpg|mini|UML Klasse aus DIA]]&lt;br /&gt;
&#039;&#039;&#039;Klassen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie &amp;quot;{abstrakt}&amp;quot; über dem Namen der Klasse tragen. &lt;br /&gt;
Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039; oder auch &#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
Bei einer &#039;&#039;&#039;public&#039;&#039;&#039; oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.&lt;br /&gt;
* &#039;&#039;&#039;protected&#039;&#039;&#039; oder auch &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;protected&#039;&#039;&#039; Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.&lt;br /&gt;
* &#039;&#039;&#039;private&#039;&#039;&#039; oder auch &#039;&#039;&#039;−&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;private&#039;&#039;&#039; Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden. &lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; oder auch &#039;&#039;&#039;~&#039;&#039;&#039;&lt;br /&gt;
Bei einer Klasse mit einer &#039;&#039;&#039;package&#039;&#039;&#039; Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.&lt;br /&gt;
&lt;br /&gt;
[[Datei:UmlCd Interface-1.svg.png|mini|UML Schnittstelle|100px]]&lt;br /&gt;
&#039;&#039;&#039;Schnittstellen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Schnittstelle&#039;&#039;&#039; wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort &amp;quot;interface&amp;quot; gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Generalization (UML class diagram).png|mini|100px|Generalisierung]]&lt;br /&gt;
&#039;&#039;&#039;Generalisierung&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Durch eine &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; &amp;quot;erben&amp;quot; speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse &amp;quot;vererbt&amp;quot;. Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Assoziantion&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;n-äre Assoziation&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
In folgenden Bild sieht man eine Binäre Assoziation. (Binär, weil zwei Klassen miteinander verbunden wurden)&lt;br /&gt;
[[Datei:1920px-UmlCd Assoziation-1.png|mini|links|Binäre Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;reflexive Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Im hier dargestellten Bild sieht man eine reflexive Assoziation, welche auf sich selbst verweist.&lt;br /&gt;
[[Datei:UmlCd Assoziation-2.png|mini|links|Reflexive Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da Assoziationen durch Linien dargestellt werden, müssen diese durch ein Assoziationsende gekennzeichnet werden. Diese Assoziationsenden können folgende Merkmale aufweisen:&lt;br /&gt;
* Sie können eine Multiplizität besitzen. Diese gibt Informationen über das Beziehungsverhältnis zweier Klassen. Diese Zahlen befinden sich &#039;&#039;&#039;nur&#039;&#039;&#039; im &#039;&#039;positiven&#039;&#039; und &#039;&#039;ganzzahligen&#039;&#039; Bereich, wobei der Beginn bei der Zahl 0 liegt.&lt;br /&gt;
** Multiplizitäten werden im folgenden Format angegeben:&lt;br /&gt;
 untereSchranke..obereSchranke&lt;br /&gt;
** Bei * oder auch 0..* wird die untereSchranke als 0 und die obereSchranke als unendlich angenommen.&lt;br /&gt;
** Beide Schranken dürfen nicht 0 oder unbeschränkt sein. Falls beide Grenzen trotzdem gleich groß sind, wird nur die obereSchranke angegeben. &lt;br /&gt;
** Bei einer Multiplizität von 0..1 wird das Element als &#039;&#039;optional&#039;&#039; bezeichnet.&lt;br /&gt;
** Wenn die obereSchranke über dem Wert 1 liegt, wird das Element als mehrwertiges Element bezeichnet, da mehrere Wert annehmbar sind.&lt;br /&gt;
* Sie können Namen besitzen.&lt;br /&gt;
* Sie können eine Sichtbarkeit aufweisen.&lt;br /&gt;
* Es kann spezifiziert werden, ob das Assoziationsende &amp;quot;ordered&amp;quot; und / oder unique ist. &lt;br /&gt;
&lt;br /&gt;
Zudem Assoziationsende kommen oft Multiplizitäten hinzu, welche die Beziehung zwischen den zwei Instanzen regelt. Im folgenden werden auf zwei Arten der Assoziationen genauer eingegangen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Komposition und Aggregation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Um Beziehungen mit &#039;&#039;Ganzen&#039;&#039; und &#039;&#039;Teilen&#039;&#039; darzustellen werden die Aggregation und die Komposition verwendet.&lt;br /&gt;
[[Datei:Komposition Aggregation.png|mini|links|Komposition und Aggregation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Komposition ist eine Linie mit einer ausgefüllten Raute, welche mit der Kardinalität 1 beschriftet wird und mit dem Ganzen Teil der Beziehungspartner verbunden ist. Bei einer Komposition können die &#039;&#039;Teile&#039;&#039; nicht ohne das &#039;&#039;Ganze&#039;&#039; existieren. Das bedeutet, dass das &#039;&#039;Teil&#039;&#039; Element existenziell abhängig von &#039;&#039;Ganz&#039;&#039; Element ist.&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Aggregation ist eine Linie mit einer nicht ausgefüllten Raute, welche die Kardinalität 0..* besitzt und mit dem &#039;&#039;Ganzen&#039;&#039; Teil verbunden ist. Die Elemente in einer Aggregation besitzen keine Exisitenzabhängigkeit, da die &#039;&#039;Teil&#039;&#039; Elemente auch ohne die &#039;&#039;Ganz&#039;&#039; Elemente bestehen können. &lt;br /&gt;
&lt;br /&gt;
Die Assoziationsarten werden prinzipiell mittels der Kardinalität unterschieden. Zudem sind die &#039;&#039;Teil&#039;&#039; Elemente Bestandteil genau eines &#039;&#039;Ganz&#039;&#039; Elementes, da sie NIE zu mehrere &#039;&#039;Ganz&#039;&#039; Elementen gehören. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Diese Umsetzung erfolgte mit der Programmiersprache JAVA.&lt;br /&gt;
[[Datei:Screenshot 2021-01-22 143552.jpg|gerahmt|links|Fahrzeuge in einem UML Klassendiagramm]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vehicle.java&#039;&#039;&#039;&lt;br /&gt;
 package at.htldornbirn.swp4.hue2.vehicle;&lt;br /&gt;
&lt;br /&gt;
 public abstract class Vehicle {&lt;br /&gt;
    private int maxSpeed;&lt;br /&gt;
    private int wheels;&lt;br /&gt;
&lt;br /&gt;
    public Vehicle(int maxSpeed, int wheels) {&lt;br /&gt;
        this.maxSpeed = maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void move() {&lt;br /&gt;
        System.out.println(&amp;quot;I am moving at &amp;quot; + maxSpeed + &amp;quot; with &amp;quot; + wheels + &amp;quot; wheels.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public int getMaxSpeed() {&lt;br /&gt;
        return maxSpeed;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public abstract void start();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bike.java&#039;&#039;&#039;&lt;br /&gt;
 package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
 import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Bike extends Vehicle {&lt;br /&gt;
    public Bike(int maxSpeed, int wheels) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start to step into the pedals!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rollerblades.java&#039;&#039;&#039;&lt;br /&gt;
 package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
 import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Rollerblades extends Vehicle {&lt;br /&gt;
    public Rollerblades(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 8);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I start skate!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Skateboard.java&#039;&#039;&#039;&lt;br /&gt;
 package at.htldornbirn.swp4.hue2.vehicle.unmotorized;&lt;br /&gt;
&lt;br /&gt;
 import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public class Skateboard extends Vehicle {&lt;br /&gt;
    public Skateboard(int maxSpeed) {&lt;br /&gt;
        super(maxSpeed, 4);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I step with one feet on the ground to start!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MotorizedVehicle.java&#039;&#039;&#039;&lt;br /&gt;
 package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
 import at.htldornbirn.swp4.hue2.vehicle.Vehicle;&lt;br /&gt;
&lt;br /&gt;
 public abstract class MotorizedVehicle extends Vehicle {&lt;br /&gt;
    private float kw;&lt;br /&gt;
&lt;br /&gt;
    public MotorizedVehicle(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels);&lt;br /&gt;
        this.kw = kw;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void start() {&lt;br /&gt;
        System.out.println(&amp;quot;I am starting my engine with &amp;quot; + kw + &amp;quot; kw.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EBike.java&#039;&#039;&#039;&lt;br /&gt;
 package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
 public class EBike extends MotorizedVehicle {&lt;br /&gt;
    public EBike(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 2, kw);&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lkw.java&#039;&#039;&#039;&lt;br /&gt;
 package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
 public class Lkw extends MotorizedVehicle {&lt;br /&gt;
    public Lkw(int maxSpeed, int wheels, float kw) {&lt;br /&gt;
        super(maxSpeed, wheels, kw);&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pkw.java&#039;&#039;&#039;&lt;br /&gt;
 package at.htldornbirn.swp4.hue2.vehicle.motorized;&lt;br /&gt;
&lt;br /&gt;
 public class Pkw extends MotorizedVehicle {&lt;br /&gt;
    public Pkw(int maxSpeed, float kw) {&lt;br /&gt;
        super(maxSpeed, 4, kw);&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Quellen:&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language&lt;br /&gt;
&lt;br /&gt;
https://www.sparxsystems.de/ressourcen/literatur/leseprobe-zu-projektabwicklung-mit-uml-und-enterprise-architect/klassendiagramm-class-diagram/&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Assoziation_(UML)&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Multiplizit%C3%A4t_(UML)&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=437</id>
		<title>UML Klassendiagramm</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=437"/>
		<updated>2021-01-22T13:41:24Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TODO:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Was ist ein Klassendiagramm?&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm bildet ein Kernstück der &#039;&#039;&#039;U&#039;&#039;&#039;nified &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;L&#039;&#039;&#039;anguage (&#039;&#039;&#039;UML&#039;&#039;&#039;). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Wozu wird es benötigt?&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Welche Elemente gibt es? Erkläre dies so detailliert und anschaulich wie möglich&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Klassenmodelle unterteilen sich in folgende Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Klassen&lt;br /&gt;
* Schnittstellen&lt;br /&gt;
* Generalisierung&lt;br /&gt;
* Assoziation&lt;br /&gt;
** Komposition&lt;br /&gt;
** Aggregation&lt;br /&gt;
[[Datei:Screenshot 2021-01-08 132401.jpg|mini|UML Klasse aus DIA]]&lt;br /&gt;
&#039;&#039;&#039;Klassen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie &amp;quot;{abstrakt}&amp;quot; über dem Namen der Klasse tragen. &lt;br /&gt;
Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039; oder auch &#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
Bei einer &#039;&#039;&#039;public&#039;&#039;&#039; oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.&lt;br /&gt;
* &#039;&#039;&#039;protected&#039;&#039;&#039; oder auch &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;protected&#039;&#039;&#039; Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.&lt;br /&gt;
* &#039;&#039;&#039;private&#039;&#039;&#039; oder auch &#039;&#039;&#039;−&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;private&#039;&#039;&#039; Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden. &lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; oder auch &#039;&#039;&#039;~&#039;&#039;&#039;&lt;br /&gt;
Bei einer Klasse mit einer &#039;&#039;&#039;package&#039;&#039;&#039; Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.&lt;br /&gt;
&lt;br /&gt;
[[Datei:UmlCd Interface-1.svg.png|mini|UML Schnittstelle|100px]]&lt;br /&gt;
&#039;&#039;&#039;Schnittstellen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Schnittstelle&#039;&#039;&#039; wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort &amp;quot;interface&amp;quot; gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Generalization (UML class diagram).png|mini|100px|Generalisierung]]&lt;br /&gt;
&#039;&#039;&#039;Generalisierung&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Durch eine &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; &amp;quot;erben&amp;quot; speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse &amp;quot;vererbt&amp;quot;. Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Assoziantion&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;n-äre Assoziation&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
In folgenden Bild sieht man eine Binäre Assoziation. (Binär, weil zwei Klassen miteinander verbunden wurden)&lt;br /&gt;
[[Datei:1920px-UmlCd Assoziation-1.png|mini|links|Binäre Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;reflexive Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Im hier dargestellten Bild sieht man eine reflexive Assoziation, welche auf sich selbst verweist.&lt;br /&gt;
[[Datei:UmlCd Assoziation-2.png|mini|links|Reflexive Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da Assoziationen durch Linien dargestellt werden, müssen diese durch ein Assoziationsende gekennzeichnet werden. Diese Assoziationsenden können folgende Merkmale aufweisen:&lt;br /&gt;
* Sie können eine Multiplizität besitzen. Diese gibt Informationen über das Beziehungsverhältnis zweier Klassen. Diese Zahlen befinden sich &#039;&#039;&#039;nur&#039;&#039;&#039; im &#039;&#039;positiven&#039;&#039; und &#039;&#039;ganzzahligen&#039;&#039; Bereich, wobei der Beginn bei der Zahl 0 liegt.&lt;br /&gt;
** Multiplizitäten werden im folgenden Format angegeben:&lt;br /&gt;
 untereSchranke..obereSchranke&lt;br /&gt;
** Bei * oder auch 0..* wird die untereSchranke als 0 und die obereSchranke als unendlich angenommen.&lt;br /&gt;
** Beide Schranken dürfen nicht 0 oder unbeschränkt sein. Falls beide Grenzen trotzdem gleich groß sind, wird nur die obereSchranke angegeben. &lt;br /&gt;
** Bei einer Multiplizität von 0..1 wird das Element als &#039;&#039;optional&#039;&#039; bezeichnet.&lt;br /&gt;
** Wenn die obereSchranke über dem Wert 1 liegt, wird das Element als mehrwertiges Element bezeichnet, da mehrere Wert annehmbar sind.&lt;br /&gt;
* Sie können Namen besitzen.&lt;br /&gt;
* Sie können eine Sichtbarkeit aufweisen.&lt;br /&gt;
* Es kann spezifiziert werden, ob das Assoziationsende &amp;quot;ordered&amp;quot; und / oder unique ist. &lt;br /&gt;
&lt;br /&gt;
Zudem Assoziationsende kommen oft Multiplizitäten hinzu, welche die Beziehung zwischen den zwei Instanzen regelt. Im folgenden werden auf zwei Arten der Assoziationen genauer eingegangen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Komposition und Aggregation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Um Beziehungen mit &#039;&#039;Ganzen&#039;&#039; und &#039;&#039;Teilen&#039;&#039; darzustellen werden die Aggregation und die Komposition verwendet.&lt;br /&gt;
[[Datei:Komposition Aggregation.png|mini|links|Komposition und Aggregation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Komposition ist eine Linie mit einer ausgefüllten Raute, welche mit der Kardinalität 1 beschriftet wird und mit dem Ganzen Teil der Beziehungspartner verbunden ist. Bei einer Komposition können die &#039;&#039;Teile&#039;&#039; nicht ohne das &#039;&#039;Ganze&#039;&#039; existieren. Das bedeutet, dass das &#039;&#039;Teil&#039;&#039; Element existenziell abhängig von &#039;&#039;Ganz&#039;&#039; Element ist.&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Aggregation ist eine Linie mit einer nicht ausgefüllten Raute, welche die Kardinalität 0..* besitzt und mit dem &#039;&#039;Ganzen&#039;&#039; Teil verbunden ist. Die Elemente in einer Aggregation besitzen keine Exisitenzabhängigkeit, da die &#039;&#039;Teil&#039;&#039; Elemente auch ohne die &#039;&#039;Ganz&#039;&#039; Elemente bestehen können. &lt;br /&gt;
&lt;br /&gt;
Die Assoziationsarten werden prinzipiell mittels der Kardinalität unterschieden. Zudem sind die &#039;&#039;Teil&#039;&#039; Elemente Bestandteil genau eines &#039;&#039;Ganz&#039;&#039; Elementes, da sie NIE zu mehrere &#039;&#039;Ganz&#039;&#039; Elementen gehören. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Diese Umsetzung erfolgte mit der Programmiersprache JAVA.&lt;br /&gt;
[[Datei:Screenshot 2021-01-22 143552.jpg|gerahmt|links|Fahrzeuge in einem UML Klassendiagramm]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Quellen:&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language&lt;br /&gt;
&lt;br /&gt;
https://www.sparxsystems.de/ressourcen/literatur/leseprobe-zu-projektabwicklung-mit-uml-und-enterprise-architect/klassendiagramm-class-diagram/&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Assoziation_(UML)&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Multiplizit%C3%A4t_(UML)&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=436</id>
		<title>UML Klassendiagramm</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=436"/>
		<updated>2021-01-22T13:38:37Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TODO:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Was ist ein Klassendiagramm?&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm bildet ein Kernstück der &#039;&#039;&#039;U&#039;&#039;&#039;nified &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;L&#039;&#039;&#039;anguage (&#039;&#039;&#039;UML&#039;&#039;&#039;). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Wozu wird es benötigt?&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Welche Elemente gibt es? Erkläre dies so detailliert und anschaulich wie möglich&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Klassenmodelle unterteilen sich in folgende Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Klassen&lt;br /&gt;
* Schnittstellen&lt;br /&gt;
* Generalisierung&lt;br /&gt;
* Assoziation&lt;br /&gt;
** Komposition&lt;br /&gt;
** Aggregation&lt;br /&gt;
[[Datei:Screenshot 2021-01-08 132401.jpg|mini|UML Klasse aus DIA]]&lt;br /&gt;
&#039;&#039;&#039;Klassen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie &amp;quot;{abstrakt}&amp;quot; über dem Namen der Klasse tragen. &lt;br /&gt;
Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039; oder auch &#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
Bei einer &#039;&#039;&#039;public&#039;&#039;&#039; oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.&lt;br /&gt;
* &#039;&#039;&#039;protected&#039;&#039;&#039; oder auch &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;protected&#039;&#039;&#039; Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.&lt;br /&gt;
* &#039;&#039;&#039;private&#039;&#039;&#039; oder auch &#039;&#039;&#039;−&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;private&#039;&#039;&#039; Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden. &lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; oder auch &#039;&#039;&#039;~&#039;&#039;&#039;&lt;br /&gt;
Bei einer Klasse mit einer &#039;&#039;&#039;package&#039;&#039;&#039; Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.&lt;br /&gt;
&lt;br /&gt;
[[Datei:UmlCd Interface-1.svg.png|mini|UML Schnittstelle|100px]]&lt;br /&gt;
&#039;&#039;&#039;Schnittstellen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Schnittstelle&#039;&#039;&#039; wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort &amp;quot;interface&amp;quot; gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Generalization (UML class diagram).png|mini|100px|Generalisierung]]&lt;br /&gt;
&#039;&#039;&#039;Generalisierung&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Durch eine &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; &amp;quot;erben&amp;quot; speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse &amp;quot;vererbt&amp;quot;. Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Assoziantion&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;n-äre Assoziation&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
In folgenden Bild sieht man eine Binäre Assoziation. (Binär, weil zwei Klassen miteinander verbunden wurden)&lt;br /&gt;
[[Datei:1920px-UmlCd Assoziation-1.png|mini|links|Binäre Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;reflexive Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Im hier dargestellten Bild sieht man eine reflexive Assoziation, welche auf sich selbst verweist.&lt;br /&gt;
[[Datei:UmlCd Assoziation-2.png|mini|links|Reflexive Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da Assoziationen durch Linien dargestellt werden, müssen diese durch ein Assoziationsende gekennzeichnet werden. Diese Assoziationsenden können folgende Merkmale aufweisen:&lt;br /&gt;
* Sie können eine Multiplizität besitzen. Diese gibt Informationen über das Beziehungsverhältnis zweier Klassen. Diese Zahlen befinden sich &#039;&#039;&#039;nur&#039;&#039;&#039; im &#039;&#039;positiven&#039;&#039; und &#039;&#039;ganzzahligen&#039;&#039; Bereich, wobei der Beginn bei der Zahl 0 liegt.&lt;br /&gt;
** Multiplizitäten werden im folgenden Format angegeben:&lt;br /&gt;
 untereSchranke..obereSchranke&lt;br /&gt;
** Bei * oder auch 0..* wird die untereSchranke als 0 und die obereSchranke als unendlich angenommen.&lt;br /&gt;
** Beide Schranken dürfen nicht 0 oder unbeschränkt sein. Falls beide Grenzen trotzdem gleich groß sind, wird nur die obereSchranke angegeben. &lt;br /&gt;
** Bei einer Multiplizität von 0..1 wird das Element als &#039;&#039;optional&#039;&#039; bezeichnet.&lt;br /&gt;
** Wenn die obereSchranke über dem Wert 1 liegt, wird das Element als mehrwertiges Element bezeichnet, da mehrere Wert annehmbar sind.&lt;br /&gt;
* Sie können Namen besitzen.&lt;br /&gt;
* Sie können eine Sichtbarkeit aufweisen.&lt;br /&gt;
* Es kann spezifiziert werden, ob das Assoziationsende &amp;quot;ordered&amp;quot; und / oder unique ist. &lt;br /&gt;
&lt;br /&gt;
Zudem Assoziationsende kommen oft Multiplizitäten hinzu, welche die Beziehung zwischen den zwei Instanzen regelt. Im folgenden werden auf zwei Arten der Assoziationen genauer eingegangen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Komposition und Aggregation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Um Beziehungen mit &#039;&#039;Ganzen&#039;&#039; und &#039;&#039;Teilen&#039;&#039; darzustellen werden die Aggregation und die Komposition verwendet.&lt;br /&gt;
[[Datei:Komposition Aggregation.png|mini|links|Komposition und Aggregation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Komposition ist eine Linie mit einer ausgefüllten Raute, welche mit der Kardinalität 1 beschriftet wird und mit dem Ganzen Teil der Beziehungspartner verbunden ist. Bei einer Komposition können die &#039;&#039;Teile&#039;&#039; nicht ohne das &#039;&#039;Ganze&#039;&#039; existieren. Das bedeutet, dass das &#039;&#039;Teil&#039;&#039; Element existenziell abhängig von &#039;&#039;Ganz&#039;&#039; Element ist.&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Aggregation ist eine Linie mit einer nicht ausgefüllten Raute, welche die Kardinalität 0..* besitzt und mit dem &#039;&#039;Ganzen&#039;&#039; Teil verbunden ist. Die Elemente in einer Aggregation besitzen keine Exisitenzabhängigkeit, da die &#039;&#039;Teil&#039;&#039; Elemente auch ohne die &#039;&#039;Ganz&#039;&#039; Elemente bestehen können. &lt;br /&gt;
&lt;br /&gt;
Die Assoziationsarten werden prinzipiell mittels der Kardinalität unterschieden. Zudem sind die &#039;&#039;Teil&#039;&#039; Elemente Bestandteil genau eines &#039;&#039;Ganz&#039;&#039; Elementes, da sie NIE zu mehrere &#039;&#039;Ganz&#039;&#039; Elementen gehören. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
[[Datei:Screenshot 2021-01-22 143552.jpg|gerahmt|links|Fahrzeuge in einem UML Klassendiagramm]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Quellen:&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language&lt;br /&gt;
&lt;br /&gt;
https://www.sparxsystems.de/ressourcen/literatur/leseprobe-zu-projektabwicklung-mit-uml-und-enterprise-architect/klassendiagramm-class-diagram/&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Assoziation_(UML)&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Multiplizit%C3%A4t_(UML)&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=Datei:Screenshot_2021-01-22_143552.jpg&amp;diff=435</id>
		<title>Datei:Screenshot 2021-01-22 143552.jpg</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=Datei:Screenshot_2021-01-22_143552.jpg&amp;diff=435"/>
		<updated>2021-01-22T13:36:25Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;UML Diagramm&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=434</id>
		<title>UML Klassendiagramm</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=434"/>
		<updated>2021-01-22T13:30:54Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TODO:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Was ist ein Klassendiagramm?&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm bildet ein Kernstück der &#039;&#039;&#039;U&#039;&#039;&#039;nified &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;L&#039;&#039;&#039;anguage (&#039;&#039;&#039;UML&#039;&#039;&#039;). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Wozu wird es benötigt?&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Welche Elemente gibt es? Erkläre dies so detailliert und anschaulich wie möglich&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Klassenmodelle unterteilen sich in folgende Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Klassen&lt;br /&gt;
* Schnittstellen&lt;br /&gt;
* Generalisierung&lt;br /&gt;
* Assoziation&lt;br /&gt;
** Komposition&lt;br /&gt;
** Aggregation&lt;br /&gt;
[[Datei:Screenshot 2021-01-08 132401.jpg|mini|UML Klasse aus DIA]]&lt;br /&gt;
&#039;&#039;&#039;Klassen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie &amp;quot;{abstrakt}&amp;quot; über dem Namen der Klasse tragen. &lt;br /&gt;
Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039; oder auch &#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
Bei einer &#039;&#039;&#039;public&#039;&#039;&#039; oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.&lt;br /&gt;
* &#039;&#039;&#039;protected&#039;&#039;&#039; oder auch &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;protected&#039;&#039;&#039; Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.&lt;br /&gt;
* &#039;&#039;&#039;private&#039;&#039;&#039; oder auch &#039;&#039;&#039;−&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;private&#039;&#039;&#039; Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden. &lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; oder auch &#039;&#039;&#039;~&#039;&#039;&#039;&lt;br /&gt;
Bei einer Klasse mit einer &#039;&#039;&#039;package&#039;&#039;&#039; Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.&lt;br /&gt;
&lt;br /&gt;
[[Datei:UmlCd Interface-1.svg.png|mini|UML Schnittstelle|100px]]&lt;br /&gt;
&#039;&#039;&#039;Schnittstellen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Schnittstelle&#039;&#039;&#039; wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort &amp;quot;interface&amp;quot; gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Generalization (UML class diagram).png|mini|100px|Generalisierung]]&lt;br /&gt;
&#039;&#039;&#039;Generalisierung&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Durch eine &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; &amp;quot;erben&amp;quot; speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse &amp;quot;vererbt&amp;quot;. Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Assoziantion&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;n-äre Assoziation&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
In folgenden Bild sieht man eine Binäre Assoziation. (Binär, weil zwei Klassen miteinander verbunden wurden)&lt;br /&gt;
[[Datei:1920px-UmlCd Assoziation-1.png|mini|links|Binäre Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;reflexive Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Im hier dargestellten Bild sieht man eine reflexive Assoziation, welche auf sich selbst verweist.&lt;br /&gt;
[[Datei:UmlCd Assoziation-2.png|mini|links|Reflexive Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da Assoziationen durch Linien dargestellt werden, müssen diese durch ein Assoziationsende gekennzeichnet werden. Diese Assoziationsenden können folgende Merkmale aufweisen:&lt;br /&gt;
* Sie können eine Multiplizität besitzen. Diese gibt Informationen über das Beziehungsverhältnis zweier Klassen. Diese Zahlen befinden sich &#039;&#039;&#039;nur&#039;&#039;&#039; im &#039;&#039;positiven&#039;&#039; und &#039;&#039;ganzzahligen&#039;&#039; Bereich, wobei der Beginn bei der Zahl 0 liegt.&lt;br /&gt;
** Multiplizitäten werden im folgenden Format angegeben:&lt;br /&gt;
 untereSchranke..obereSchranke&lt;br /&gt;
** Bei * oder auch 0..* wird die untereSchranke als 0 und die obereSchranke als unendlich angenommen.&lt;br /&gt;
** Beide Schranken dürfen nicht 0 oder unbeschränkt sein. Falls beide Grenzen trotzdem gleich groß sind, wird nur die obereSchranke angegeben. &lt;br /&gt;
** Bei einer Multiplizität von 0..1 wird das Element als &#039;&#039;optional&#039;&#039; bezeichnet.&lt;br /&gt;
** Wenn die obereSchranke über dem Wert 1 liegt, wird das Element als mehrwertiges Element bezeichnet, da mehrere Wert annehmbar sind.&lt;br /&gt;
* Sie können Namen besitzen.&lt;br /&gt;
* Sie können eine Sichtbarkeit aufweisen.&lt;br /&gt;
* Es kann spezifiziert werden, ob das Assoziationsende &amp;quot;ordered&amp;quot; und / oder unique ist. &lt;br /&gt;
&lt;br /&gt;
Zudem Assoziationsende kommen oft Multiplizitäten hinzu, welche die Beziehung zwischen den zwei Instanzen regelt. Im folgenden werden auf zwei Arten der Assoziationen genauer eingegangen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Komposition und Aggregation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Um Beziehungen mit &#039;&#039;Ganzen&#039;&#039; und &#039;&#039;Teilen&#039;&#039; darzustellen werden die Aggregation und die Komposition verwendet.&lt;br /&gt;
[[Datei:Komposition Aggregation.png|mini|links|Komposition und Aggregation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Komposition ist eine Linie mit einer ausgefüllten Raute, welche mit der Kardinalität 1 beschriftet wird und mit dem Ganzen Teil der Beziehungspartner verbunden ist. Bei einer Komposition können die &#039;&#039;Teile&#039;&#039; nicht ohne das &#039;&#039;Ganze&#039;&#039; existieren. Das bedeutet, dass das &#039;&#039;Teil&#039;&#039; Element existenziell abhängig von &#039;&#039;Ganz&#039;&#039; Element ist.&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Aggregation ist eine Linie mit einer nicht ausgefüllten Raute, welche die Kardinalität 0..* besitzt und mit dem &#039;&#039;Ganzen&#039;&#039; Teil verbunden ist. Die Elemente in einer Aggregation besitzen keine Exisitenzabhängigkeit, da die &#039;&#039;Teil&#039;&#039; Elemente auch ohne die &#039;&#039;Ganz&#039;&#039; Elemente bestehen können. &lt;br /&gt;
&lt;br /&gt;
Die Assoziationsarten werden prinzipiell mittels der Kardinalität unterschieden. Zudem sind die &#039;&#039;Teil&#039;&#039; Elemente Bestandteil genau eines &#039;&#039;Ganz&#039;&#039; Elementes, da sie NIE zu mehrere &#039;&#039;Ganz&#039;&#039; Elementen gehören. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Quellen:&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language&lt;br /&gt;
&lt;br /&gt;
https://www.sparxsystems.de/ressourcen/literatur/leseprobe-zu-projektabwicklung-mit-uml-und-enterprise-architect/klassendiagramm-class-diagram/&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Assoziation_(UML)&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Multiplizit%C3%A4t_(UML)&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=433</id>
		<title>UML Klassendiagramm</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=433"/>
		<updated>2021-01-22T13:19:16Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TODO:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Was ist ein Klassendiagramm?&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm bildet ein Kernstück der &#039;&#039;&#039;U&#039;&#039;&#039;nified &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;L&#039;&#039;&#039;anguage (&#039;&#039;&#039;UML&#039;&#039;&#039;). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Wozu wird es benötigt?&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Welche Elemente gibt es? Erkläre dies so detailliert und anschaulich wie möglich&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Klassenmodelle unterteilen sich in folgende Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Klassen&lt;br /&gt;
* Schnittstellen&lt;br /&gt;
* Generalisierung&lt;br /&gt;
* Assoziation&lt;br /&gt;
** Komposition&lt;br /&gt;
** Aggregation&lt;br /&gt;
[[Datei:Screenshot 2021-01-08 132401.jpg|mini|UML Klasse aus DIA]]&lt;br /&gt;
&#039;&#039;&#039;Klassen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie &amp;quot;{abstrakt}&amp;quot; über dem Namen der Klasse tragen. &lt;br /&gt;
Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039; oder auch &#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
Bei einer &#039;&#039;&#039;public&#039;&#039;&#039; oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.&lt;br /&gt;
* &#039;&#039;&#039;protected&#039;&#039;&#039; oder auch &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;protected&#039;&#039;&#039; Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.&lt;br /&gt;
* &#039;&#039;&#039;private&#039;&#039;&#039; oder auch &#039;&#039;&#039;−&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;private&#039;&#039;&#039; Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden. &lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; oder auch &#039;&#039;&#039;~&#039;&#039;&#039;&lt;br /&gt;
Bei einer Klasse mit einer &#039;&#039;&#039;package&#039;&#039;&#039; Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.&lt;br /&gt;
&lt;br /&gt;
[[Datei:UmlCd Interface-1.svg.png|mini|UML Schnittstelle|100px]]&lt;br /&gt;
&#039;&#039;&#039;Schnittstellen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Schnittstelle&#039;&#039;&#039; wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort &amp;quot;interface&amp;quot; gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Generalization (UML class diagram).png|mini|100px|Generalisierung]]&lt;br /&gt;
&#039;&#039;&#039;Generalisierung&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Durch eine &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; &amp;quot;erben&amp;quot; speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse &amp;quot;vererbt&amp;quot;. Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Assoziantion&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;n-äre Assoziation&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
In folgenden Bild sieht man eine Binäre Assoziation. (Binär, weil zwei Klassen miteinander verbunden wurden)&lt;br /&gt;
[[Datei:1920px-UmlCd Assoziation-1.png|mini|links|Binäre Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;reflexive Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Im hier dargestellten Bild sieht man eine reflexive Assoziation, welche auf sich selbst verweist.&lt;br /&gt;
[[Datei:UmlCd Assoziation-2.png|mini|links|Reflexive Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da Assoziationen durch Linien dargestellt werden, müssen diese durch ein Assoziationsende gekennzeichnet werden. Diese Assoziationsenden können folgende Merkmale aufweisen:&lt;br /&gt;
* Sie können eine Multiplizität besitzen. Diese gibt Informationen über das Beziehungsverhältnis zweier Klassen. Diese Zahlen befinden sich &#039;&#039;&#039;nur&#039;&#039;&#039; im &#039;&#039;positiven&#039;&#039; und &#039;&#039;ganzzahligen&#039;&#039; Bereich, wobei der Beginn bei der Zahl 0 liegt.&lt;br /&gt;
** Multiplizitäten werden im folgenden Format angegeben:&lt;br /&gt;
 untereSchranke..obereSchranke&lt;br /&gt;
** Bei * oder auch 0..* wird die untereSchranke als 0 und die obereSchranke als unendlich angenommen.&lt;br /&gt;
** Beide Schranken dürfen nicht 0 oder unbeschränkt sein. Falls beide Grenzen trotzdem gleich groß sind, wird nur die obereSchranke angegeben. &lt;br /&gt;
** Bei einer Multiplizität von 0..1 wird das Element als &#039;&#039;optional&#039;&#039; bezeichnet.&lt;br /&gt;
** Wenn die obereSchranke über dem Wert 1 liegt, wird das Element als mehrwertiges Element bezeichnet, da mehrere Wert annehmbar sind.&lt;br /&gt;
* Sie können Namen besitzen.&lt;br /&gt;
* Sie können eine Sichtbarkeit aufweisen.&lt;br /&gt;
* Es kann spezifiziert werden, ob das Assoziationsende &amp;quot;ordered&amp;quot; und / oder unique ist. &lt;br /&gt;
&lt;br /&gt;
Zudem Assoziationsende kommen oft Multiplizitäten hinzu, welche die Beziehung zwischen den zwei Instanzen regelt. Im folgenden werden auf zwei Arten der Assoziationen genauer eingegangen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Komposition und Aggregation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Um Beziehungen mit &#039;&#039;Ganzen&#039;&#039; und &#039;&#039;Teilen&#039;&#039; darzustellen werden die Aggregation und die Komposition verwendet.&lt;br /&gt;
[[Datei:Komposition Aggregation.png|mini|links|Komposition und Aggregation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die graphische Darstellung einer Komposition ist eine Linie mit einer ausgefüllten Raute, welche mit der Kardinalität 1 beschriftet wird und mit dem Ganzen Teil der Beziehungspartner verbunden ist.&lt;br /&gt;
Die graphische Darstellung einer Aggregation ist eine Linie mit einer nicht ausgefüllten Raute, welche die Kardinalität 0..* besitzt und mit dem Ganzen Teil verbunden ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Quellen:&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language&lt;br /&gt;
&lt;br /&gt;
https://www.sparxsystems.de/ressourcen/literatur/leseprobe-zu-projektabwicklung-mit-uml-und-enterprise-architect/klassendiagramm-class-diagram/&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Assoziation_(UML)&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Multiplizit%C3%A4t_(UML)&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=Datei:Komposition_Aggregation.png&amp;diff=432</id>
		<title>Datei:Komposition Aggregation.png</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=Datei:Komposition_Aggregation.png&amp;diff=432"/>
		<updated>2021-01-22T12:50:06Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;sadf&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=369</id>
		<title>UML Klassendiagramm</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=369"/>
		<updated>2021-01-15T14:55:05Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TODO:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Was ist ein Klassendiagramm?&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm bildet ein Kernstück der &#039;&#039;&#039;U&#039;&#039;&#039;nified &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;L&#039;&#039;&#039;anguage (&#039;&#039;&#039;UML&#039;&#039;&#039;). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Wozu wird es benötigt?&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Welche Elemente gibt es? Erkläre dies so detailliert und anschaulich wie möglich&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Klassenmodelle unterteilen sich in folgende Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Klassen&lt;br /&gt;
* Schnittstellen&lt;br /&gt;
* Generalisierung&lt;br /&gt;
* Assoziation&lt;br /&gt;
** Komposition&lt;br /&gt;
** Aggregation&lt;br /&gt;
[[Datei:Screenshot 2021-01-08 132401.jpg|mini|UML Klasse aus DIA]]&lt;br /&gt;
&#039;&#039;&#039;Klassen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie &amp;quot;{abstrakt}&amp;quot; über dem Namen der Klasse tragen. &lt;br /&gt;
Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039; oder auch &#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
Bei einer &#039;&#039;&#039;public&#039;&#039;&#039; oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.&lt;br /&gt;
* &#039;&#039;&#039;protected&#039;&#039;&#039; oder auch &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;protected&#039;&#039;&#039; Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.&lt;br /&gt;
* &#039;&#039;&#039;private&#039;&#039;&#039; oder auch &#039;&#039;&#039;−&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;private&#039;&#039;&#039; Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden. &lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; oder auch &#039;&#039;&#039;~&#039;&#039;&#039;&lt;br /&gt;
Bei einer Klasse mit einer &#039;&#039;&#039;package&#039;&#039;&#039; Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.&lt;br /&gt;
&lt;br /&gt;
[[Datei:UmlCd Interface-1.svg.png|mini|UML Schnittstelle|100px]]&lt;br /&gt;
&#039;&#039;&#039;Schnittstellen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Schnittstelle&#039;&#039;&#039; wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort &amp;quot;interface&amp;quot; gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Generalization (UML class diagram).png|mini|100px|Generalisierung]]&lt;br /&gt;
&#039;&#039;&#039;Generalisierung&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Durch eine &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; &amp;quot;erben&amp;quot; speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse &amp;quot;vererbt&amp;quot;. Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Assoziantion&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;n-äre Assoziation&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
In folgenden Bild sieht man eine Binäre Assoziation. (Binär, weil zwei Klassen miteinander verbunden wurden)&lt;br /&gt;
[[Datei:1920px-UmlCd Assoziation-1.png|mini|links|Binäre Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;reflexive Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Im hier dargestellten Bild sieht man eine reflexive Assoziation, welche auf sich selbst verweist.&lt;br /&gt;
[[Datei:UmlCd Assoziation-2.png|mini|links|Reflexive Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da Assoziationen durch Linien dargestellt werden, müssen diese durch ein Assoziationsende gekennzeichnet werden. Diese Assoziationsenden können folgende Merkmale aufweisen:&lt;br /&gt;
* Sie können eine Multiplizität besitzen. Diese gibt Informationen über das Beziehungsverhältnis zweier Klassen. Diese Zahlen befinden sich &#039;&#039;&#039;nur&#039;&#039;&#039; im &#039;&#039;positiven&#039;&#039; und &#039;&#039;ganzzahligen&#039;&#039; Bereich, wobei der Beginn bei der Zahl 0 liegt.&lt;br /&gt;
** Multiplizitäten werden im folgenden Format angegeben:&lt;br /&gt;
 untereSchranke..obereSchranke&lt;br /&gt;
** Bei * oder auch 0..* wird die untereSchranke als 0 und die obereSchranke als unendlich angenommen.&lt;br /&gt;
** Beide Schranken dürfen nicht 0 oder unbeschränkt sein. Falls beide Grenzen trotzdem gleich groß sind, wird nur die obereSchranke angegeben. &lt;br /&gt;
** Bei einer Multiplizität von 0..1 wird das Element als &#039;&#039;optional&#039;&#039; bezeichnet.&lt;br /&gt;
** Wenn die obereSchranke über dem Wert 1 liegt, wird das Element als mehrwertiges Element bezeichnet, da mehrere Wert annehmbar sind.&lt;br /&gt;
* Sie können Namen besitzen.&lt;br /&gt;
* Sie können eine Sichtbarkeit aufweisen.&lt;br /&gt;
* Es kann spezifiziert werden, ob das Assoziationsende &amp;quot;ordered&amp;quot; und / oder unique ist. &lt;br /&gt;
&lt;br /&gt;
Zu dem Assoziationsende hinzu kommt die Navigierbarkeit, welche die Navigation der zwei Instanzen regelt und sogar einschränken kann.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Quellen:&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language&lt;br /&gt;
&lt;br /&gt;
https://www.sparxsystems.de/ressourcen/literatur/leseprobe-zu-projektabwicklung-mit-uml-und-enterprise-architect/klassendiagramm-class-diagram/&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Assoziation_(UML)&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Multiplizit%C3%A4t_(UML)&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=368</id>
		<title>UML Klassendiagramm</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=368"/>
		<updated>2021-01-15T14:20:30Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TODO:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Was ist ein Klassendiagramm?&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm bildet ein Kernstück der &#039;&#039;&#039;U&#039;&#039;&#039;nified &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;L&#039;&#039;&#039;anguage (&#039;&#039;&#039;UML&#039;&#039;&#039;). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Wozu wird es benötigt?&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Welche Elemente gibt es? Erkläre dies so detailliert und anschaulich wie möglich&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Klassenmodelle unterteilen sich in folgende Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Klassen&lt;br /&gt;
* Schnittstellen&lt;br /&gt;
* Generalisierung&lt;br /&gt;
* Assoziation&lt;br /&gt;
** Komposition&lt;br /&gt;
** Aggregation&lt;br /&gt;
[[Datei:Screenshot 2021-01-08 132401.jpg|mini|UML Klasse aus DIA]]&lt;br /&gt;
&#039;&#039;&#039;Klassen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie &amp;quot;{abstrakt}&amp;quot; über dem Namen der Klasse tragen. &lt;br /&gt;
Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039; oder auch &#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
Bei einer &#039;&#039;&#039;public&#039;&#039;&#039; oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.&lt;br /&gt;
* &#039;&#039;&#039;protected&#039;&#039;&#039; oder auch &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;protected&#039;&#039;&#039; Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.&lt;br /&gt;
* &#039;&#039;&#039;private&#039;&#039;&#039; oder auch &#039;&#039;&#039;−&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;private&#039;&#039;&#039; Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden. &lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; oder auch &#039;&#039;&#039;~&#039;&#039;&#039;&lt;br /&gt;
Bei einer Klasse mit einer &#039;&#039;&#039;package&#039;&#039;&#039; Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.&lt;br /&gt;
&lt;br /&gt;
[[Datei:UmlCd Interface-1.svg.png|mini|UML Schnittstelle|100px]]&lt;br /&gt;
&#039;&#039;&#039;Schnittstellen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Schnittstelle&#039;&#039;&#039; wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort &amp;quot;interface&amp;quot; gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Generalization (UML class diagram).png|mini|100px|Generalisierung]]&lt;br /&gt;
&#039;&#039;&#039;Generalisierung&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Durch eine &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; &amp;quot;erben&amp;quot; speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse &amp;quot;vererbt&amp;quot;. Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Assoziantion&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;n-äre Assoziation&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
In folgenden Bild sieht man eine Binäre Assoziation. (Binär, weil zwei Klassen miteinander verbunden wurden)&lt;br /&gt;
[[Datei:1920px-UmlCd Assoziation-1.png|mini|links|Binäre Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;reflexive Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Im hier dargestellten Bild sieht man eine reflexive Assoziation, welche auf sich selbst verweist.&lt;br /&gt;
[[Datei:UmlCd Assoziation-2.png|mini|links|Reflexive Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da Assoziationen durch Linien dargestellt werden, müssen diese durch ein Assoziationsende gekennzeichnet werden. Diese Assoziationsenden können folgende Merkmale aufweisen:&lt;br /&gt;
* Sie können eine Multiplizität besitzen. Diese gibt Informationen über das Beziehungsverhältnis zweier Klassen. Diese Zahlen befinden sich &#039;&#039;&#039;nur&#039;&#039;&#039; im &#039;&#039;positiven&#039;&#039; und &#039;&#039;ganzzahligen&#039;&#039; Bereich, wobei der Beginn bei der Zahl 0 liegt.&lt;br /&gt;
** Multiplizitäten werden im folgenden Format angegeben:&lt;br /&gt;
 untereSchranke..obereSchranke&lt;br /&gt;
** Bei * oder auch 0..* wird die untereSchranke als 0 und die obereSchranke als unendlich angenommen.&lt;br /&gt;
** Beide Schranken dürfen nicht 0 oder unbeschränkt sein. Falls beide Grenzen trotzdem gleich groß sind, wird nur die obereSchranke angegeben. &lt;br /&gt;
** Bei einer Multiplizität von 0..1 wird das Element als &#039;&#039;optional&#039;&#039; bezeichnet.&lt;br /&gt;
** Wenn die obereSchranke über dem Wert 1 liegt, wird das Element als mehrwertiges Element bezeichnet, da mehrere Wert annehmbar sind.&lt;br /&gt;
* Sie können Namen besitzen.&lt;br /&gt;
* Sie können eine Sichtbarkeit aufweisen.&lt;br /&gt;
* Es kann spezifiziert werden, ob das Assoziationsende &amp;quot;ordered&amp;quot; und / oder unique ist. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Quellen:&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language&lt;br /&gt;
&lt;br /&gt;
https://www.sparxsystems.de/ressourcen/literatur/leseprobe-zu-projektabwicklung-mit-uml-und-enterprise-architect/klassendiagramm-class-diagram/&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Assoziation_(UML)&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=367</id>
		<title>UML Klassendiagramm</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=367"/>
		<updated>2021-01-15T13:44:12Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TODO:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Was ist ein Klassendiagramm?&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm bildet ein Kernstück der &#039;&#039;&#039;U&#039;&#039;&#039;nified &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;L&#039;&#039;&#039;anguage (&#039;&#039;&#039;UML&#039;&#039;&#039;). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Wozu wird es benötigt?&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Welche Elemente gibt es? Erkläre dies so detailliert und anschaulich wie möglich&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Klassenmodelle unterteilen sich in folgende Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Klassen&lt;br /&gt;
* Schnittstellen&lt;br /&gt;
* Generalisierung&lt;br /&gt;
* Assoziation&lt;br /&gt;
* Komposition&lt;br /&gt;
* Aggregation&lt;br /&gt;
[[Datei:Screenshot 2021-01-08 132401.jpg|mini|UML Klasse aus DIA]]&lt;br /&gt;
&#039;&#039;&#039;Klassen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie &amp;quot;{abstrakt}&amp;quot; über dem Namen der Klasse tragen. &lt;br /&gt;
Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039; oder auch &#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
Bei einer &#039;&#039;&#039;public&#039;&#039;&#039; oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.&lt;br /&gt;
* &#039;&#039;&#039;protected&#039;&#039;&#039; oder auch &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;protected&#039;&#039;&#039; Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.&lt;br /&gt;
* &#039;&#039;&#039;private&#039;&#039;&#039; oder auch &#039;&#039;&#039;−&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;private&#039;&#039;&#039; Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden. &lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; oder auch &#039;&#039;&#039;~&#039;&#039;&#039;&lt;br /&gt;
Bei einer Klasse mit einer &#039;&#039;&#039;package&#039;&#039;&#039; Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.&lt;br /&gt;
&lt;br /&gt;
[[Datei:UmlCd Interface-1.svg.png|mini|UML Schnittstelle|100px]]&lt;br /&gt;
&#039;&#039;&#039;Schnittstellen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Schnittstelle&#039;&#039;&#039; wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort &amp;quot;interface&amp;quot; gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Generalization (UML class diagram).png|mini|100px|Generalisierung]]&lt;br /&gt;
&#039;&#039;&#039;Generalisierung&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Durch eine &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; &amp;quot;erben&amp;quot; speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse &amp;quot;vererbt&amp;quot;. Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Assoziantion&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;n-äre Assoziation&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
In folgenden Bild sieht man eine Binäre Assoziation. (Binär, weil zwei Klassen miteinander verbunden wurden)&lt;br /&gt;
[[Datei:1920px-UmlCd Assoziation-1.png|mini|links|Binäre Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;reflexive Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Im hier dargestellten Bild sieht man eine reflexive Assoziation, welche auf sich selbst verweist.&lt;br /&gt;
[[Datei:UmlCd Assoziation-2.png|mini|links|Reflexive Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Quellen:&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language&lt;br /&gt;
&lt;br /&gt;
https://www.sparxsystems.de/ressourcen/literatur/leseprobe-zu-projektabwicklung-mit-uml-und-enterprise-architect/klassendiagramm-class-diagram/&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Assoziation_(UML)&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=366</id>
		<title>UML Klassendiagramm</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=366"/>
		<updated>2021-01-15T12:48:44Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TODO:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Was ist ein Klassendiagramm?&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm bildet ein Kernstück der &#039;&#039;&#039;U&#039;&#039;&#039;nified &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;L&#039;&#039;&#039;anguage (&#039;&#039;&#039;UML&#039;&#039;&#039;). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Wozu wird es benötigt?&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Welche Elemente gibt es? Erkläre dies so detailliert und anschaulich wie möglich&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Klassenmodelle unterteilen sich in folgende Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Klassen&lt;br /&gt;
* Schnittstellen&lt;br /&gt;
* Generalisierung&lt;br /&gt;
* Assoziation&lt;br /&gt;
* Komposition&lt;br /&gt;
* Aggregation&lt;br /&gt;
[[Datei:Screenshot 2021-01-08 132401.jpg|mini|UML Klasse aus DIA]]&lt;br /&gt;
&#039;&#039;&#039;Klassen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie &amp;quot;{abstrakt}&amp;quot; über dem Namen der Klasse tragen. &lt;br /&gt;
Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039; oder auch &#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
Bei einer &#039;&#039;&#039;public&#039;&#039;&#039; oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.&lt;br /&gt;
* &#039;&#039;&#039;protected&#039;&#039;&#039; oder auch &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;protected&#039;&#039;&#039; Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.&lt;br /&gt;
* &#039;&#039;&#039;private&#039;&#039;&#039; oder auch &#039;&#039;&#039;−&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;private&#039;&#039;&#039; Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden. &lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; oder auch &#039;&#039;&#039;~&#039;&#039;&#039;&lt;br /&gt;
Bei einer Klasse mit einer &#039;&#039;&#039;package&#039;&#039;&#039; Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.&lt;br /&gt;
&lt;br /&gt;
[[Datei:UmlCd Interface-1.svg.png|mini|UML Schnittstelle|100px]]&lt;br /&gt;
&#039;&#039;&#039;Schnittstellen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Schnittstelle&#039;&#039;&#039; wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort &amp;quot;interface&amp;quot; gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Generalization (UML class diagram).png|mini|100px|Generalisierung]]&lt;br /&gt;
&#039;&#039;&#039;Generalisierung&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Durch eine &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; &amp;quot;erben&amp;quot; speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse &amp;quot;vererbt&amp;quot;. Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Assoziantion&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;n-äre Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
[[Datei:1920px-UmlCd Assoziation-1.png|mini|links|Binäre Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;reflexive Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
[[Datei:UmlCd Assoziation-2.png|mini|links|Reflexive Assoziation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Quellen:&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language&lt;br /&gt;
&lt;br /&gt;
https://www.sparxsystems.de/ressourcen/literatur/leseprobe-zu-projektabwicklung-mit-uml-und-enterprise-architect/klassendiagramm-class-diagram/&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Assoziation_(UML)&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=Datei:UmlCd_Assoziation-2.png&amp;diff=365</id>
		<title>Datei:UmlCd Assoziation-2.png</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=Datei:UmlCd_Assoziation-2.png&amp;diff=365"/>
		<updated>2021-01-15T12:47:18Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Reflexive Assoziation&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=Datei:1920px-UmlCd_Assoziation-1.png&amp;diff=364</id>
		<title>Datei:1920px-UmlCd Assoziation-1.png</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=Datei:1920px-UmlCd_Assoziation-1.png&amp;diff=364"/>
		<updated>2021-01-15T12:46:43Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Binäre Assoziation&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
	<entry>
		<id>https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=363</id>
		<title>UML Klassendiagramm</title>
		<link rel="alternate" type="text/html" href="https://ccwiki.digitalcampusvorarlberg.at/index.php?title=UML_Klassendiagramm&amp;diff=363"/>
		<updated>2021-01-15T12:18:23Z</updated>

		<summary type="html">&lt;p&gt;Julian Walter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TODO:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Was ist ein Klassendiagramm?&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ein Klassendiagramm bildet ein Kernstück der &#039;&#039;&#039;U&#039;&#039;&#039;nified &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;L&#039;&#039;&#039;anguage (&#039;&#039;&#039;UML&#039;&#039;&#039;). Zudem beruht dieses Diagramm auf den Prinzipien der Objektorientierung, wobei der Diagrammtyp vielseitig Anwendung findet.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise wird dieses Modell in der Analysephase als Domainmodell verwendet, um ein reales Abbild zu erstellen. In der Designphase wird mit diesem Modell eine eine Software modelliert, wobei in der Implementierungsphase aus dem Modell ein Code generiert wird.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Wozu wird es benötigt?&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Welche Elemente gibt es? Erkläre dies so detailliert und anschaulich wie möglich&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
Klassenmodelle unterteilen sich in folgende Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Klassen&lt;br /&gt;
* Schnittstellen&lt;br /&gt;
* Generalisierung&lt;br /&gt;
* Assoziation&lt;br /&gt;
* Komposition&lt;br /&gt;
* Aggregation&lt;br /&gt;
[[Datei:Screenshot 2021-01-08 132401.jpg|mini|UML Klasse aus DIA]]&lt;br /&gt;
&#039;&#039;&#039;Klassen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klassen werden in UML durch Rechtecke dargestellt, welche ebenfalls den Namen der Klassen innerhalb des Rechtecks geschrieben haben. Zudem kann eine Klasse auch Operationen (Funktionen) und / oder Attribute (Eigenschaften/Variablen) haben. Zusätzlich können über dem Klassennamen bestimmte Schlüsselwörter wie &amp;quot;{abstrakt}&amp;quot; über dem Namen der Klasse tragen. &lt;br /&gt;
Außerdem besitzen die Operationen und Attribute der Klassen bestimmte Sichtbarkeiten, welche im folgenden erklärt werden:&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039; oder auch &#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
Bei einer &#039;&#039;&#039;public&#039;&#039;&#039; oder auch öffentlichen Sichtbarkeit wird keine Beschränkung über die Funktionen oder Variablen vergeben. Somit können auf diese Komponenten zu jeder Stelle im Projekt zugegriffen werden.&lt;br /&gt;
* &#039;&#039;&#039;protected&#039;&#039;&#039; oder auch &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;protected&#039;&#039;&#039; Sichtbarkeit besitzt, kann auf die Operationen oder Attribute in der Klasse mit dieser Sichtbarkeit zugegriffen werden. Zudem ist es auch möglich, auf die gleichen Funktionen oder Variablen zuzugreifen, wenn die Klassen von einer protected Klasse erben.&lt;br /&gt;
* &#039;&#039;&#039;private&#039;&#039;&#039; oder auch &#039;&#039;&#039;−&#039;&#039;&#039;&lt;br /&gt;
Wenn eine Klasse eine &#039;&#039;&#039;private&#039;&#039;&#039; Sichtbarkeit aufweist, können die Operationen und Attribute nur in der Klasse mit dieser Sichtbarkeit gesehen (aufgerufen) werden. &lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; oder auch &#039;&#039;&#039;~&#039;&#039;&#039;&lt;br /&gt;
Bei einer Klasse mit einer &#039;&#039;&#039;package&#039;&#039;&#039; Sichtbarkeit sind die Funktionen und Variablen innerhalb des gleichen Package aufrufbar.&lt;br /&gt;
&lt;br /&gt;
[[Datei:UmlCd Interface-1.svg.png|mini|UML Schnittstelle|100px]]&lt;br /&gt;
&#039;&#039;&#039;Schnittstellen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;Schnittstelle&#039;&#039;&#039; wird nahezu gleich wie eine Klasse dargestellt und zwar mit einem Rechteck. Der Unterschied ist aber, dass bei einer Schnittstelle das Rechteck mit dem Schlüsselwort &amp;quot;interface&amp;quot; gekennzeichnet werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Generalization (UML class diagram).png|mini|100px|Generalisierung]]&lt;br /&gt;
&#039;&#039;&#039;Generalisierung&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Durch eine &#039;&#039;&#039;Generalisierung&#039;&#039;&#039; &amp;quot;erben&amp;quot; speziellere Klassen von generelleren Klassen. Dadurch werden bestimmte Merkmale von der generellen Klassen an die spezialisierte Klasse &amp;quot;vererbt&amp;quot;. Die Pfeilspitze der Generalisierung zeigt auf die Oberklasse (Klasse von, welcher geerbt wird).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Assoziantion&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Eine Assoziation bezeichnet eine Beziehung zwischen zwei oder mehreren Klassen, wobei die häufigsten Verbindungen zwischen genau zwei Klassen auftreffen. Es gibt folgende zwei Arten von Assoziationen: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;n-äre Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;reflexive Assoziation&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Stelle in einem anschaulichen Beispiel ein Klassendiagramm Code gegenüber&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Quellen:&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Klassendiagramm#Notation_in_der_Unified_Modeling_Language&lt;br /&gt;
&lt;br /&gt;
https://www.sparxsystems.de/ressourcen/literatur/leseprobe-zu-projektabwicklung-mit-uml-und-enterprise-architect/klassendiagramm-class-diagram/&lt;br /&gt;
&lt;br /&gt;
https://de.wikipedia.org/wiki/Assoziation_(UML)&lt;/div&gt;</summary>
		<author><name>Julian Walter</name></author>
	</entry>
</feed>