Grundlagen der Programmierung. Kapitel 3: Klassen und Objekte. Überblick über Kapitel 3 der Vorlesung. Objekt. Unser Grundmodell der Modellierung

Ähnliche Dokumente
Grundlagen der Programmierung! Kapitel 3: Klassen und Objekte! Überblick über Kapitel 3 der Vorlesung! Objekt! Unser Grundmodell der Modellierung!

Grundlagen der Programmierung! Kapitel 3: Klassen und Objekte! Überblick über Kapitel 3 der Vorlesung! Objekt! Unser Grundmodell der Modellierung!

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Objektorientierte Programmierung

Einführung in die Java- Programmierung

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Software Engineering Klassendiagramme Einführung

Java: Vererbung. Teil 3: super()

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

EinfÅhrung in die objektorientiere Programmierung (OOP) unter Delphi 6.0. EDV Kurs 13/2

Vorkurs C++ Programmierung

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

Programmieren in Java

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Programmiersprache 2 (C++) Prof. Dr. Stefan Enderle NTA Isny

Einführung in die Programmierung

1 Mathematische Grundlagen

Software Entwicklung II (SS12)

Computeranwendung und Programmierung (CuP)

Software Engineering Klassendiagramme Assoziationen

Kapitel 4 Die Datenbank Kuchenbestellung Seite 1

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Objektorientierte Programmierung. Kapitel 12: Interfaces

Abschnitt 12: Strukturierung von Java-Programmen: Packages

Professionelle Seminare im Bereich MS-Office

Professionelle Seminare im Bereich MS-Office

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Arbeiten mit UMLed und Delphi

Objektorientierung: Klassen und Objekte

Klassendiagramm. Kurzer Überblick über UML - Stand BlaBla

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

4. AuD Tafelübung T-C3

Workshop 6. Einführung in die objektorientierte Programmierung. Teil: Java mit BlueJ

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

PowerPoint: Text. Text

Software Engineering Interaktionsdiagramme

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Testklausur 1 zur Vorlesung. Modellierung und Programmierung I. Dr. Monika Meiler Zeit: 60 Minuten

13 OOP MIT DELPHI. Records und Klassen Ein Vergleich

Informatik Kurs Simulation. Hilfe für den Consideo Modeler

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Java Kurs für Anfänger Einheit 5 Methoden

SWE5 Übungen zu Software-Engineering

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

5. Abstrakte Klassen

Typumwandlungen bei Referenztypen

Innere Klassen in Java

Wir arbeiten mit Zufallszahlen

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Klassendiagramm. (class diagram)

Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen.

Große Übung Praktische Informatik 1

Universität Augsburg, Institut für Informatik Sommersemester 2005 Prof. Dr. Werner Kießling 16. Juli 2005 Dr. Alfons Huhn, Timotheus Preisinger

Informatik für Schüler, Foliensatz 21 Objektorientierte Programmierung

Übung - Konfigurieren einer Windows 7-Firewall

Primzahlen und RSA-Verschlüsselung

Übungen zur Softwaretechnik

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

3 Objektorientierte Konzepte in Java

Starten Sie Eclipse: Hier tragen sie Ihr Arbeitsverzeichnis ein. Zu Hause z.b. c:\workspace.

Übungen zur Vorlesung Einführung in die Informatik Wintersemester 2010/11

Zwischenablage (Bilder, Texte,...)

Einführung in die Programmierung

Mediator 9 - Lernprogramm

Abwesenheitsnotiz im Exchange Server 2010

Prinzipien Objektorientierter Programmierung

2. Semester, 2. Prüfung, Lösung

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

TESTEN SIE IHR KÖNNEN UND GEWINNEN SIE!

OECD Programme for International Student Assessment PISA Lösungen der Beispielaufgaben aus dem Mathematiktest. Deutschland

Kapitel 6. Vererbung

Delegatesund Ereignisse

5.5.8 Öffentliche und private Eigenschaften

Diana Lange. Generative Gestaltung Operatoren

Programmieren Tutorium

Anleitung über den Umgang mit Schildern

Unified Modeling Language (UML)

Kapitel 6. Vererbung

Monitore. Klicken bearbeiten

Grundlagen der Theoretischen Informatik, SoSe 2008

4. BEZIEHUNGEN ZWISCHEN TABELLEN

Zahlen und das Hüten von Geheimnissen (G. Wiese, 23. April 2009)

Lizenzierung von SharePoint Server 2013

Zeichen bei Zahlen entschlüsseln

Programmierkurs Java

Vermeiden Sie es sich bei einer deutlich erfahreneren Person "dranzuhängen", Sie sind persönlich verantwortlich für Ihren Lernerfolg.

Präventionsforum+ Erfahrungsaustausch. HANDOUT GRUPPEN-ADMINISTRATOREN Anlage zum Endnutzer-Handbuch. Stand: Änderungen vorbehalten

Lizenzierung von SharePoint Server 2013

Anleitung: Terminverwaltung (Eigene Veranstaltungen auf der BM-Website bewerben)

Anleitung für die Online-Bewerbung über LSF auf Lehrveranstaltungen aller Lehramtsstudiengänge

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 17: 3-Schichten-Architektur 2

Folge 19 - Bäume Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Assoziation und Aggregation

Transkript:

Überblick über Kapitel 3 der Vorlesung Grundlagen der Programmierung Dr. Christian Herzog Technische Universität München Wintersemester 2006/2007 Kapitel 3: Klassen und Objekte! Objekte Attribute, Operationen! Klasse von Objekten (Objekt vs. Klasse)! Klassendiagramm und Objektdiagramm in UML! Sichtbarkeit von Merkmalen! Implementation von Klassen und Objekten in Java! Konstruktoren in Java! Die Vererbungs-Beziehung Beispiele von Vererbung! Kombination von Aggregation und Vererbung! Das Kompositions-Muster Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 1 2 Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 2 Unser Grundmodell der Modellierung! Ein System besteht aus Subsystemen, die wieder aus Subsystemen bestehen, und diese dann letztendlich aus Gegenständen. Diese Gegenstände bezeichnen wir auch als Objekte.! Alle zu verarbeitende Informationen in einem System sind auf diese Objekte verteilt.! Die Verarbeitung von Information geschieht entweder innerhalb der Objekte oder durch Kommunikation von Nachrichten zwischen zwei Objekten. Objekt! Definition Objekt: Ein Objekt ist ein elementares Teilsystem. Es repräsentiert einen beliebigen Gegenstand in einem System.! Ein Objekt ist durch seinen Zustand und seine Funktionalität gegeben.! Zustand und Funktionalität setzen sich im Allgemeinen aus Teilzuständen und einzelnen Operationen zusammen. wir nennen die Teilzustände auch Attribute wir nennen die einzelnen Operationen auch Methoden des Objektes! Wir nennen die Operationen eines Objektes, die von anderen Objekten aufgerufen werden können, die Schnittstelle des Objektes. Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 3 Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 4

Zwei Beispiels-Objekte Johannes Schmidt Name = Johannes Schmidt Matrikelnummer = 222345 Studiengang = Bachelor Informatik Semester = 7 LiefereDeinenNamen! LiefereDeineMatrikelnummer! LiefereDeinenStudiengang! LiefereDeinSemester! Attribute Viola Berger Name = Viola Berger Matrikelnummer = 34221 Studiengang = Master Angewandte Informatik Semester = 1 LiefereDeinenNamen! LiefereDeineMatrikelnummer! LiefereDeinenStudiengang! LiefereDeinSemester! Attribute, Operationen, Merkmale! Ein Objekt besitzt Attribute und Operationen Definition Attribut: Messbare, durch Werte erfassbare Eigenschaft des Objektes. Definition Operation: Eine Tätigkeit, die ein Objekt ausführen kann, um Berechnungen durchzuführen, Ereignisse auszulösen sowie Botschaften zu übermitteln.! Definition Merkmale: Die zu einem Objekt gehörigen Attribute und Operationen.! Definition Schnittstelle: Die Menge der Operationen eines Objektes, die von anderen Objekten aufgerufen werden können. Nicht alle Operationen müssen zur Schnittstelle gehören! Operationen Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 5 Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 6 Klasse und Instanz! Wir können Objekte mit gleichen Merkmalen zusammenfassen bzw. Objekte nach ihren Merkmalen klassifizieren:! Definition Klasse: Die Menge aller Objekte mit gleichen Merkmalen, d.h. mit gleichen Attributen und Operationen.! Definition Instanz: Ein Objekt ist eine Instanz einer Klasse K, wenn es Element der Menge aller Objekte der Klasse K ist.! Künftig werden wir die Klasse weniger als Menge von Objekten auffassen sondern als Beschreibung der Merkmale ihrer Objekte. Dabei wirkt sie wie eine Schablone zur Generierung (Instantiierung) von ihr zugeordneten Objekten (Instanzen). Graphische Darstellung von Klassen in UML (Klassendiagramm) Allgemein: KlassenName Attribute Operationen Beispiel: Name MatrikelNummer Studiengang getname() getmatrikelnummer() getstudiengang() Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 7 Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 8

Graphische Darstellung von Objekten in UML (Objektdiagramm oder Instanzendiagramm) Graphische Darstellung: Objekt vs. Klasse Allgemein: ObjektName: KlassenName AttributsWerte Beispiel: Viola Berger: Name = Viola Berger Matrikel Nummer = 232567 Studiengang = MasterAngInf KlassenName Attribute Operationen Name MatrikelNummer Studiengang getname() getmatrikelnummer() getstudiengang() Klasse ObjektName: KlassenName Viola Berger: Die Unterstreichung ist wichtig! AttributsWerte Name = Viola Berger Matrikel Nummer = 232567 Studiengang = MasterAngInf Objekt Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 9 Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 10 Attribute! Ein Attribut einer Klasse wird in der Attributliste der Klasse als Name (während der Analyse) oder als Name: Typ (während des detaillierten Entwurfs) aufgelistet.! Beispiele von Typen sind String: Die Menge aller Zeichenketten Integer: Die Menge aller ganzen Zahlen Boolean: Die Menge der Wahrheitswerte {Wahr, Falsch Studiumstyp: Die Menge der Studiengänge {BachelorInf, MasterInf, MasterAngInf, DiplBerufsPäd! Wird in der Attributliste der Klasse zusätzlich ein Initialisierungswert Name: Typ = InitialWert angegeben, dann bekommt jedes Objekt dieser Klasse diesen Wert als Anfangswert für dieses Attribut. Beispiele für Attributlisten! Nur Namen (während der Analyse):! Namen und Typ (während des detaillierten Entwurfs):! Zusätzliche Initialisierungswerte: Kunde Name AnzahlKäufe MaximalerKredit... Kunde Name: String AnzahlKäufe: Integer MaximalerKredit: Integer... Kunde Name: String AnzahlKäufe: Integer = 0 MaximalerKredit: Integer = 1000... Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 11 Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 12

Attribut als Beziehung zu einer Klasse! Ein Attribut kann auch als Beziehung zu einer Klasse gezeichnet werden, insbesondere wenn die Beziehung zwischen beiden Klassen klargemacht werden soll. Der Name des Attributes ist dann der Name der Beziehung. Beispiel: Attribut als Beziehung Bisher: Attribut mit Klassenname als Typ: Attribut als Beziehung zwischen Klassen: Name: String MatrikelNummer: Matrikel Studiengang: Studiumstyp getname() getmatrikelnummer() getstudiengang() Matrikel Name: String Studiengang: Studiumstyp getenname() getmatrikelnummer() getstudiengang() MatrikelNummer Nummer: Integer Immatrikulationsjahr: Integer ErzeugeNummer() getimmatrikulationsjahr() getnummer() setnummer() Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 13 Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 14 Operation! Die Operationen arbeiten auf Attributen der Klasse und anderen Objekten, mit denen die Klasse eine Beziehung hat.! Notation von Operationen in UML: Name () oder Name (Parameterliste) oder Name (Parameterliste): Ergebnistyp! Die Menge von Operationen, die eine Klasse oder eine Menge von Klassen (Subsystem) zur Verfügung stellt, bezeichnen wir als Schnittstelle der Klasse (des Subsystems).! Welche der Operationen von einer Klasse zur Verfügung gestellt werden, wird durch die Sichtbarkeit der Operationen geregelt. Sichtbarkeit von Operationen! Die Sichtbarkeit einer Operation regelt, welche Objekte diese Operation verwenden dürfen.! Die Sichtbarkeit ist zwischen Klassen definiert, d.h. alle Objekte einer Klasse K 1 haben auf eine Operation eines Objekts einer Klasse K 2 dieselben Zugriffsrechte.! Wir unterscheiden zunächst zwei Sichtbarkeiten für Operationen (weitere Sichtbarkeiten werden wir später bei der objektorientierten Programmierung einführen): public: jedes Objekt jeder Klasse hat unbeschränkten Zugriff; private: nur die Objekte derselben Klasse dürfen die Operation verwenden.! In UML wird public durch ein vorangestelltes + -Zeichen gekennzeichnet, private durch ein! -Zeichen. Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 15 Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 16

Sichtbarkeit von Attributen! In UML (und vielen Programmiersprachen) können auch Attribute dieselben Sichtbarkeiten wie Operationen haben.! Auf ein Attribut mit der Sichtbarkeit public kann also von Objekten anderer Klassen aus direkt zugegriffen werden.! Konvention in Grundlagen der Programmierung: Attribute sind (vorerst) immer private. Attribute gehören also nicht zur Schnittstelle. Wenn Attribute von Objekten anderer Klassen aus gelesen oder verändert werden sollen, so müssen dazu public -Operationen setattribut() bzw. getattribut() zur Verfügung gestellt werden. Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 17 Sichtbarkeit von Merkmalen in UML! In UML wird public durch ein vorangestelltes + -Zeichen gekennzeichnet, private durch ein! -Zeichen. Bei uns sind Attribute immer private. Nur Operationen gehören zur Schnittstelle.! Name: String! MatrikelNummer: Matrikel! Studiengang: Studiumstyp + getname(): String + getmatrikelnummer(): Matrikel + getstudiengang(): Studiumstyp! Abkürzende Schreibweise in Grundlagen der Programmierung: Wir lassen das! bei Attributen oft weg. Wir lassen das + bei Operationen oft weg (nur das! wird explizit notiert). Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 18 Einschub: Zwei Prinzipien der Didaktik! Erstes Prinzip: Verwende keine Konzepte, die du nicht gründlich eingeführt hast!! Zweites Prinzip: Programmieren lernt man nur durch Programmieren! Also: so früh wie möglich programmieren!! Problem: Bereits das kleinste Java-Programm verwendet komplizierte Konzepte.! Kompromiss: Wir fangen früh an, in Java zu programmieren. Augen zu und durch! Wir betrachten jetzt einiges als so ist es halt und freuen uns auf das Aha-Erlebnis, wenn wir später die dahinter stehenden Konzepte kennen lernen. Umsetzung des Klassendiagramms nach Java! Name: String! MatrikelNummer: Integer + getname(): String + getmatrikelnummer(): Integer // leitet in Java Kommentarzeilen ein! Weitere GrProg - Konventionen: Klassennamen werden in Java groß geschrieben, Merkmalsnamen werden klein geschrieben. public class { In Java haben auch Klassen eine Sichtbarkeit. Wir verwenden zunächst nur public. // Attribute: // Operationen (Methoden): Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 19 Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 20

Implementation der Operationen in Java! Name: String! MatrikelNummer: Integer + getname(): String + getmatrikelnummer(): Integer Hier werden jeweils nur die Werte der entsprechenden Attribute als Ergebnis ausgeliefert. public class { // Konstruktor: public () { // Attribute: Der Konstruktor ist eine spezielle Operation, die automatisch bei der Instantiierung ausgeführt wird. // Operationen (Methoden): return name; return matrikelnummer; Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 21 Instantiierung von Objekten und Konstruktor public class { // Konstruktor: public () { // Attribute: // Operationen (Methoden): return name; return matrikelnummer;! Instantiierung eines Objekts der Klasse : s = new ();! Der Konstruktor ist eine spezielle Methode.! Sein Name ist identisch mit dem Klassennamen.! Der Konstruktor wird ausgeführt, wenn ein Objekt der Klasse instantiiert wird. (Objekte müssen explizit instantiiert werden.)! Er wird (u.a) dazu benutzt, um die Attribute zu initialisieren. Mit new wird ein Objekt instantiiert und der Konstruktor aufgerufen. Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 22 Vorbesetzung der Attribute durch Angabe von Initialisierungswerten (Variante 1) Vorbesetzung der Attribute im Konstruktor (Variante 2) public class { public class { // Konstruktor: public () { // Attribute: = "Viola"; = 1234567; // Operationen (Methoden): return name; return matrikelnummer;! Initialisierung der Attribute in der Klassendefinition Default-Werte! Name: String = Viola! MatrikelNummer: Integer = 1234567 + getname(): String + getmatrikelnummer(): Integer // Konstruktor: public () { name = "Viola"; matrikelnummer = 1234567; // Attribute: // Operationen (Methoden): return name; return matrikelnummer;! Name: String = Viola! MatrikelNummer: Integer = 1234567 + getname(): String + getmatrikelnummer(): Integer Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 23 Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 24

Keine Initialisierungswerte sondern Vorbesetzung durch Parameter des Konstruktors (Variante 3) public class { // Konstruktor: public () (String { n, int m) { name = n; matrikelnummer = m; // Attribute: // Operationen (Methoden): return name; return matrikelnummer;! Name: String! MatrikelNummer: Integer + getname(): String + getmatrikelnummer(): Integer! Instantiierung eines Objekts bei einem parametrisierten Konstruktor: s = new ("Viola",1234); Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 25 System und Umgebung in Java public class { public (String n, int m) { name = n;matrikelnummer = m; return name; return matrikelnummer; public class Umgebung { public static void main (String[] args) { s = new ("Viola", 1234); System.out.println(s.getName()); System.out.println(s.getMatrikelNummer()); System Schnittstelle Umgebung Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 26 Editieren, Compilieren, Programmlauf System und Umgebung mit dem Java-System! Editieren: Klassendefinition in Datei.java Klassendefinition Umgebung in Datei Umgebung.java! Kompilieren: javac.java liefert Datei.class javac Umgebung.java liefert Datei Umgebung.class (Es hätte auch nur der Befehl javac Umgebung.java genügt. Das Java- System ist so intelligent, alle zusätzlich benötigten Klassen mit zu kompilieren.)! Ablauf des Programms (Exekutieren): java Umgebung (ohne Extension.class) Das Java-System führt die main-methode der Klasse Umgebung aus public class { public (String n, int m) { name = n;matrikelnummer = m; return name; return matrikelnummer; public class Umgebung { public static void main (String[] args) { s = new ("Viola", 1234); System.out.println(s.getName()); System.out.println(s.getMatrikelNummer()); Java- System Schnittstelle zum Java-System Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 27 Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 28

Zwei wichtige Prinzipien der Modellierung Klassifikation von Personengruppen an einer Universität! Informationskapselung (information hiding): Objekte können auf andere Objekte nur über deren Schnittstelle zugreifen. Ein Objekt kann also nicht direkt auf die Attribute eines anderen Objektes zugreifen.! Klassifikation: Komponenten können nach ihren Merkmalen klassifiziert werden. Beispiel: Zwei Objekte Obj1 und Obj2 können zusammengefasst werden, wenn sie dieselbe Operation print() bereit stellen.! Klassifikationen kann man benutzen, um Mengen von Objekten hierarchisch zu strukturieren. Beispiel: Die Personengruppen an einer Universität. Master ECTSPunkte MatrikelNummer Studiengang Aufbau Abschlussprüfung Diplom DVP, DHP Person Name Geburtsdatum Professor Fachgebiet Lehrgebiet Habilitation Angestellter Einstellungsdatum Wissenschaftlicher Angestellter Promotionsthema Verwaltungs- Angestellter Abteilung Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 29 Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 30 Klassifikation von Personengruppen an einer Universität Die Vererbungsbeziehung Matrikel Nummer Studiengang GibMatrikelNummer() GibStudiengang() Person Name Geburtsdatum GibName() GibGeburtsdatum() Professor Fachbereich Lehrgebiet Habilitation GibLehrgebiet() GibFachgebiet() Angestellter Einstellung GibEinstellung()! Zwei Klassen stehen in einer Vererbungsbeziehung (inheritance relationship) zueinander, falls die eine Klasse, auch Unterklasse (Subklasse) genannt, alle Merkmale der anderen Klasse, auch Oberklasse genannt, besitzt, und eventuell darüber hinaus noch zusätzliche Merkmale.! Es gilt somit für die Mengen A U, A O der Attribute und die Mengen O U, O O der Operationen der Unterklasse U und Oberklasse O: A O " A U und O O " O U! Eine Unterklasse wird also durch Hinzufügen von Merkmalen spezialisiert.! Umgekehrt verallgemeinert die Oberklasse die Unterklasse dadurch, dass sie spezialisierende Eigenschaften weglässt. Wir nennen das auch Verallgemeinerungsbeziehung (generalization relationship)............. Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 31 Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 32

Vererbungsbeispiel Noch ein Vererbungsbeispiel Eine Firma stellt sowohl Fernsehgeräte als auch Computer her. Beide haben Seriennummern. Verallgemeinerung Die Seriennumer wird in einer Oberklasse Gerät angeführt und von dort vererbt. Gerät SerienNr! Eine Kaffeemaschine kann eine Anzahl von Tassen füllen. Oberklasse Kaffeemaschine Tassenkapazität Fülle() Spezialisierung! Das Luxusmodell hat noch eine Weckfunktion Kaffeeautomat Wecke() Unterklasse Fernseher SerienNr Computer SerienNr Fernseher Computer B24:Kaffeemaschine TassenKapazität: 12 Fülle() BXL:Kaffeeautomat TassenKapazität: 12 Fülle() Wecke() Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 33 Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 34 Java unterstützt Vererbung! UML: Klasse als Unterklasse von Person: Kombination von Vererbung und Aggregation! In der Modellierung tritt oft der Fall auf, dass wir Gegenstände klassifizieren müssen, aber gleichzeitig auch deren Struktur erkenntlich machen wollen.! Wir benutzen dann sowohl Vererbung als auch Aggregation: Person Name: String getname() MatrikelNummer: Integer getmatrikelnummer() Klassifikation (Vererbung) Gerät SerienNr Struktur (Aggregation)! Java: public class Person { public class extends Person {! Näheres dazu im Kapitel Objektorientierte Programmierung später im Semester. Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 35 Fernseher Computer Display Prozessor! Heuristik: In jedem guten Modell gibt es eine Kombination von Klassen, die in Vererbungs- und Aggregationsbeziehungen stehen. Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 36

Modellierung unserer Systemdefinition! Definition eines Systems (Wiederholung): Unter einem System versteht man eine Menge von Komponenten (Gegenständen), die in einem gegebenen Bezugssystem in einem Zusammenhang stehen, und die Beziehungen zwischen diesen Komponenten.! Die Komponenten eines Systems können selbst wieder (Sub-)Systeme sein.! Beispiel: Ein System mit beliebig vielen Subsystemen und 2 Arten von Komponenten A und B. Modellierung des Systembegriffs! Ein System besteht aus beliebig vielen Subsystemen => Aggregation.! Die Subsysteme sind entweder selbst wieder Systeme oder Komponenten A oder B => Vererbung. Subsystem *! Heuristik: In jedem guten Modell gibt es eine Kombination von Klassen, die in Vererbungs- und Aggregationsbeziehungen stehen. A B System Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 37 Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 38 Beispiel einer Instantiierung Subsystem * Was passiert mit der Vererbung bei Objektdiagrammen? A B System Klasse Klassendiagramm Objektdiagramm Objekt S: System S1: System S2: System S3: System Kaffeemaschine Tassenkapazität Fülle() Kaffeeautomat Wecke() BXL:Kaffeeautomat TassenKapazität: 12 Fülle() Wecke() S4: System K1: A K2: B K3: B K4: A K5: A Klasse Objekt K6: A K7: B Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 39 Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 40

Was passiert mit der Aggregation bei Objektdiagrammen? Gerät SerienNr Klassendiagramm Betrachtungen über unsere Modellierung ( Metamodellierung ) Komponente Klasse Fernseher Computer Display Prozessor Subsystem * A B System LCDScreen:Display Objekt PalmVx: Computer SerienNr: 10GJ06X1D 8602-10U:Prozessor Blatt Kompositum Objektdiagramm Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 41 Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 42 Kompositionsmuster Komponente * Beispiel: Modellierung eines Foliensatzes Kapitel Textbox 0..2 Komponente Wo ist das Kompositum?... * PowerPoint Folie * GraphikElement zoome() selektiere() transformiere() * Kompositum Blatt Andere Namen: Composite Pattern, Kompositum Das Kompositionsmuster ist immer anwendbar, wenn wir Strukturen beschreiben, die eine dynamische Höhe und dynamische Breite haben. Text schreibe() Linie zeichne() Blatt Rechteck zeichne() Oval zeichne() Gruppe zeichne() addiereelement() entferneelement() kinder() Kompositum Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 43 Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 44

Muster im Schach Nützlichkeit von Entwurfsmustern! Spanische Eröffnung! Schwarz: Läufer Fiancetto! Weiss: Kurze Rochade! Entwurfsmuster sind wieder verwendbares Wissen bei der Entwicklung von Informatik-Systemen, vor allem bei der Analyse und beim Systementwurf.! Entwurfsmuster lassen sich zu einem Gesamtentwurf kombinieren, der dann als Grundlage für ein Informatik-System dienen kann.! Beispiele für weitere Entwurfsmuster: Beobachter-Muster (Observer Pattern): Trennt die Veröffentlichung von Information und das Lesen dieser Information (Publish-Subscribe) Adapter-Muster (auch Wrapper genannt): Zum Aufruf von alten, nicht mehr änderbaren Schnittstellen Brückenmuster (Bridge Pattern): Zur dynamischen Anpassung an unterschiedliche Implementationen einer Schnittstelle Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 45 Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 46 Zusammenfassung! Objekt: Attribute, Operationen, Merkmale! Objekt als Instanz einer Klasse! Instanzendiagramm, Klassendiagramm! Klassen und Instanzen in Java die main-methode Konstruktoren! Wichtige Beziehungen in der Modellierung: Aggregation Vererbung Man nennt sie deshalb auch kanonische Assoziationen! Kompositionsmuster Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2006/07 Kapitel 3, Folie 47