31. Mai 2012
1 Besprechung Blatt 5 Fragen 2 Objektorientierte Programmierung Allgemein Sichtbarkeit Konstanten 3 Unified Modeling Language (UML) Klassendiagramme Anwendungsfalldiagramme 4 Vorbereitung Blatt 6 Anmerkungen
Fragen Fragen zu Blatt 5?
Allgemein Warum Klassen? umso mehr (unstrukturierter) Code, desto weniger Überblick Projekte aus überschaubaren Klassen zusammensetzen beim Verwenden einer Klasse interne Umsetzung ausblenden beim Erstellen einer Klasse externen Code ausblenden Spätere Korrekturen ohne detaillierter Kenntnis des gesamten Programms möglich
Allgemein Bestandteile einer Klasse 1 Variablen 2 Methoden 3 Konstruktoren Wie hängt das zusammen?
Allgemein Zugehörigkeit zu Klasse oder Instanz Zuordnung Instanz Klasse ist eindeutig (genau eine Klasse) Zuordnung Klasse Instanz nicht (beliebig viele Instanzen) statische Variablen gehören zur Klasse zur Übersicht [Klasse].statischeVariable verwenden!
Allgemein Zugehörigkeit zu Klasse oder Instanz static: Klassenzugehörig sonst: Instanzzugehörig (Instanzeigenschaften) Instanzmethoden können auf statische Variablen und Methoden zugreifen. (eindeutig) Aber nicht umgekehrt! Beispiele für Variablen: Instanzzähler static Objekteigenschaften instance Konstanten static
Allgemein Initialisierung, das new-schlüsselwort Klassen werden mit ihren statischen Variablen direkt beim Programmstart angelegt. Sie können auch dann aufgerufen werden, wenn keine Instanz existiert (main-methode, Math-Klasse,...) Instanzen müssen während der Ausführung erstellt werden class Beispiel { public static void main(string[] args) { // Neue Instanz der Klasse Beispiel erstellen Beispiel b = new Beispiel(); } } Mit dem new-schlüsselwort wird auch ein Konstruktor aufgerufen.
Allgemein Konstruktoren Ist kein Konstruktor im Code vorhanden, ist automatisch ein public-zugreifbarer, parameterloser Konstruktor verfügbar Sobald irgendein Konstruktor geschrieben wird, ist der automatische nicht mehr verfügbar! (Man kann ihn natürlich wieder von Hand hinzufügen) class Beispiel { // so sieht der default-konstruktor aus: public Beispiel() { } } Konstruktoren können auch private sein! z.b. Math
Sichtbarkeit Sichtbarkeitsmodifikatoren Schützen Klassen vor ungewollten Eingriffen meist interessiert der innere Aufbau gar nicht Klasse Package Unterklassen alle private + - - - default + + - - protected + + + - public + + + + geschützte Variablen können möglicherweise über öffentliche Getter und Setter doch erreicht werden diese ermöglichen kontrollierten Zugriff und Wertebereiche
Konstanten Konstanten Keyword final vor den Variablennamen zum Sicherstellen (oder Klarstellen) der Unveränderlichkeit nur einmal zuweisbar final-instanzvariablen müssen am Ende jedes Konstruktors initialisiert sein (bei der Deklaration oder im Konstruktor) bei final-referenzen ist nur die Referenz konstant, nicht das referenzierte Objekt! Anmerkung: Das Keyword final existiert auch bei Methoden und Klassen
Klassendiagramme Aufbau einer Klassenbox <<stereotyp>> Klassenname Variablen Methoden Stereotypen (mehr dazu nächste Woche): <<interface>> Interface <<abstract>> Abstrakte Klasse Abstrakte Klassen / Methoden können auch durch kursiv-schreiben des Namens verdeutlicht werden.
Klassendiagramme Inhalt von Klassen UML-Darstellung var : final float blubb() bla(blubb : int) : int Repräsentiert Variable Funktion Funktion mit Parameter und Rückgabetyp <<abstract>> Kuh - milch : float + melken() : float + schlachten() : void
Klassendiagramme (Sichtbarkeits-)Modifikatoren in UML-Diagrammen Modifikator UML-Repräsentation private - default (nichts) protected # public + final (beim Typ dazuschreiben) abstract kursiv static unterstrichen instanz (nicht unterstrichen) Bei final-funktionen ohne Rückgabewert final void verwenden
Klassendiagramme Assoziationen 3 Typen: 1 (normale) Assoziation (Linie): normale Beziehung 2 Aggregation (unausgefüllte Raute beim Behälter): Teil-Ganzes-Beziehung (Teil kann auch unabhängig existieren) 3 Komposition (ausgefüllte Raute beim Behälter): strenge Teil-Ganzes-Beziehung (immer genau ein Behälter, nicht null) Beispiele: Assoziation: Beziehung zwischen Konto und Kunde Aggregation: Ein Student ist Teil einer Vorlesung - kann aber auch ohne diese existieren Komposition: Raum ist immer Bestandteil von genau einem Gebäude, Gebäude weg Raum auch weg
Klassendiagramme Assoziationen Konto -konto Vorlesung -vorlesung Gebaeude -gebaeude -kunde Kunde -student Student -raum Raum Variablen von Typen, die im Diagramm als Klasse auftauchen, werden an der entsprechenden Assoziation notiert Die Variable, mit der die Klasse referenziert wird, an die Klasse. Die in der Klasse enthaltenen Variablen stehen am anderen Ende!
Klassendiagramme Gerichtete Assoziationen Mitgliederliste Mitglied Enthält eine Klasse eine Referenzvariable (oder Liste) zum assoziierten Objekt, ist die Assoziation in dieser Richtung navigierbar navigierbar in eine Richtung: unidirektional Pfeilspitze zur referenzierten Klasse navigierbar in beide Richtungen: bidirektional Pfeilspitzen werden weggelassen
Klassendiagramme Multiplizitäten an Assoziationen werden auch die Multiplizitäten angegeben diese geben an, wie viele Objekte einer Beziehung zugeordnet werden (und daher in der anderen Klasse gespeichert werden) Darstellung x..y x Unter-, y Obergrenze; * beliebig
Klassendiagramme Multiplizitäten Konto Vorlesung Gebaeude 0..* -konto 0..* -vorlesung 1 -gebaeude 1 -kunde Kunde 1..* -student Student 1..* -raum Raum navigierbare Beziehungen werden in Java zu Variablen für Kardinalitäten >1 benötigt man Arrays oder Listenklassen
Anwendungsfalldiagramme Komponenten eines Anwendungsfalldiagramms Systemkontext Akteur Anwendungsfall Merke: Menschliche Akteure links, Systemkomponenten rechts
Anwendungsfalldiagramme Beispiel: Flughafen Flugbuchung Buchen Kunde Stornieren Kundenbetreuer Administrieren Buchungssystem
Anmerkungen UML-Tools und -Dokumente Erstellen von UML-Diagrammen Dia (live.gnome.org/dia, im CIP installiert) Google Text & Tabellen (docs.google.com) Papyrus UML (eclipse.org/papyrus) Nützlich, da Boxen noch verschoben werden können! Dokumentation des UML-Standards de.wikipedia.org/wiki/unified Modeling Language uml.org
Anmerkungen Zips werden nicht auf unerlaubte Zeichen geprüft! Sofern nicht anders verlangt, dürfen Instanzvariablen verwendet werden! Trotzdem bitte nur dann, wenn sie auch nötig sind