# Klasse (UML)

Eine Klasse (englisch class) ist ein Modellelement in der Unified Modeling Language (UML), einer Modellierungssprache für Software und andere Systeme. Sie beschreibt eine Menge von Ausprägungen mit gleichen Merkmalen, gleichen Einschränkungen und gleicher Semantik.

## Beschreibung

Eine Klasse ist ein Typ. Sie besitzt eine Liste von Merkmalen, vor allem Attribute und Operationen, aber auch Ports und Signalempfänger. Zusätzlich kann sie über eine Liste von inneren Klassen verfügen. Innere Klassen sind Klassen, die im Namensraum der Klasse selbst definiert sind.
Eine Klasse kann eine oder mehrere andere Klassen spezialisieren sowie über Assoziationen und Abhängigkeitsbeziehungen in Beziehung zu Klassen und anderen Modellelementen stehen.

## Arten von Klassen
### Aktive Klassen

Die UML unterscheidet zwischen aktiven und passiven Klassen. Alle Instanzen von aktiven Klassen sind aktive Objekte, das heißt, Objekte, die ein „Eigenleben führen“. Unmittelbar wenn eine Instanz einer aktiven Klasse angelegt wird, startet ein für die Klasse spezifiziertes Verhalten. Dieses Verhalten läuft weiter, bis es explizit gestoppt oder bis das Objekt zerstört wird. Nur aktive Klassen können Signalempfänger besitzen.
Eine aktive Klasse wird mit einem doppelten linken und rechten Rand gezeichnet.

### Abstrakte Klassen

Abstrakte Klassen sind Klassen, von denen keine Exemplare angelegt werden können. Abstrakte Klassen sehen in UML wie normale Klassen aus. Um sie zu unterscheiden, steht unterhalb des Klassennamens das Wort abstract in geschweiften Klammern. Alternativ kann der Klassenname auch kursiv geschrieben werden, wenn dies gut erkennbar ist.

### Verschachtelte Klassen

In der UML ist jede Klasse zugleich ein Namensraum. Damit ist einerseits gewährleistet, dass Attribute und Operationen, die einer Klasse gehören, nur im Bereich dieser Klasse einen eindeutigen Namen haben müssen. Zwei Attribute, die unterschiedlichen Klassen gehören, können durchaus gleich heißen. Andererseits erlaubt das Metamodell der UML dadurch auch, dass eine Klasse sogenannte verschachtelte Klassen (engl. nested classes) besitzen darf. Die UML-Spezifikation enthält jedoch keine Angaben, wie verschachtelte Klassen grafisch in einem Klassendiagramm dargestellt werden.
In der Softwareentwicklung, zum Beispiel in der Programmiersprache Java, kennt man das Konzept der inneren Klassen. Verschachtelte Klassen im Sinne der UML entsprechen statischen inneren Klassen in Java.

## Notation

Klassen werden in Klassendiagrammen dargestellt. Die folgenden drei Abbildungen zeigen drei Varianten der grafischen Notation für eine Klasse. Abhängig davon, ob eine Klasse in einem Klassendiagramm für ein Design- oder ein Analysemodell gezeichnet wird, können mehr oder weniger Details dargestellt werden.

## Unterschiede zur UML 1.4

Ab der Version 2.0 der UML können Klassen innere Klassen besitzen.
Im Gegensatz zur UML 1.x gibt es in der UML2 kein Modellelement Attribut mehr. Attribute einer Klasse werden neu als Eigenschaften (engl. property) modelliert. Dieser Ansatz wurde eingeführt, damit das Metamodell der UML2 sowohl Attribute einer Klasse als auch Enden von Assoziationen einheitlich als Eigenschaften modellieren kann.
Neben Eigenschaften und Operationen kann eine Klasse in UML2 neu auch über Ports und Signalempfänger als Merkmal verfügen.