Einführung in die Programmierung mit Java Hörsaalübung Folie 1 Grundlagen der Objektorientierung Seit Anfang der Neunzigerjahre Standardmethode der Softwareentwicklung. Die OOP Objektorientierte Programmierung beruht darauf, die zu verarbeitenden Daten anhand ihrer Eigenschaften und dder möglichen Operationen zu klassifizieren. Der OOP liegt die Aufteilung der zu beschreibenden Welt in Objekte mit Eigenschaften und Operationen zugrunde. Das Konzept der Klasse fasst Objekte mit ähnlichen Eigenschaften (eine bestimmte Sorte von Objekten) zusammen. Eine Klasse beschreibt die Struktur eines Objekts in dem sie seine Attribute (Eigenschaften) und Methoden (das Verhalten) bestimmt. (Vgl. Bauplan). Die Objekte der zu beschreibenden Welt werden im Modell auf ihre kontextbedingten Eigenschaften reduziert. Es werden nur die Aspekte berücksichtigt, die zur Erfüllung einer bestimmten Aufgabe zweckdienlich sind. Folie 2 1
Grundlagen der Objektorientierung Folie 3 Beispiel Kontextabhängigkeit Bäckerei: Supermarkt: Folie 4 2
Objektorientierte Modellierung & Entwurf Handwerkszeug UML Klassendiagramme Einfachstes UML Klassendiagramm (Klassenname: Substantiv Singular) Klasse (Bauplan) Konkrete Instanz / Objekt (unterstrichener Name) Folie 5 UML Klassendiagramme Bestandteile Klassenname Name des Attributs Typ des Attributs Sichtbarkeiten Name der Methode Name des Parameters Typ des Parameters Rückgabetyp der Methode Folie 6 3
Attribute & Methoden Attribute Attribute beschreiben die Struktur der Objekte, ihre Bestandteile und die in ihnen enthaltenen Informationen und Daten. Mögliche Sichtbarkeiten: #protected, +public, -private Name des Attributs: in der Regel kleingeschrieben Typ des Attributs: Basisdatentyp (z.b. int, double ) oder komplexer Datentyp (Klasse) Methoden Operationenen/Methoden beschreiben das Verhalten von Objekten. Diese arbeiten auf den Daten (schreibend/lesend). Mögliche Sichtbarkeiten: #protected, +public, -private Typ des Rückgabewerts: Basisdatentyp (z.b. int, double ) oder komplexer Datentyp (Klasse) Name der Operation: in der Regel kleingeschrieben Liste der Parameter: (Parametername: Typ) i.d.r. kleingeschrieben, Basisdatentyp o. komplexer Datentyp Folie 7 Klassenbeispiel class Konto { private String inhabername; private String inhabervorname; private int kontonummer; private int pin; private double guthaben; public void einzahlen(double summe) { guthaben = guthaben + summe; } // Ende Methodendefinition public double auszahlen(double summe) { guthaben = guthaben - summe; return summe; } // Ende Methodendefinition } // Ende Klassendefinition Folie 8 4
UML Klassendiagramme - Objektbeziehungen Assoziation Eine Assoziation repräsentiert eine Beziehung zwischen verschiedenen Objekten einer oder mehrerer Klassen. Folie 9 Objektbeziehungen Detailierte Darstellung Assoziation Gleichrangige Beziehung Keine zwingenden Abhängigkeiten Rollennamen Multiplizitäten / Kardinalitäten * = beliebig viele 1 = genau 1 1..* = mind. 1 bis beliebig viele Folie 10 5
Objektbeziehungen Navigierbarkeiten Ungerichtete Assoziation entspricht Bidirektionale Assoziation Student kennt seine Vorlesung Vorlesung kennt seine Hörer Bidirektionale Assoziation Folie 11 Objektbeziehungen Navigierbarkeiten Unidirektionale Assoziation Unidirektionale Assoziation Student kennt seine Vorlesung Vorlesung kennt seine Hörer nicht Folie 12 6
UML - Objektbeziehungen Folie 13 Hierarchische Objektbeziehungen Aggregation Aggregation Hierarchische Beziehung - ein Objekt ist Teil eines anderen Eine Aggregation ist die Zusammensetzung eines Objektes aus einer Menge von Einzelteilen Folie 14 7
Hierarchische Objektbeziehungen Komposition Komposition Stärkere Form der Aggregation Teilobjekte sind in ihrer Existenz abhängig vom übergeordneten Objekt Beispiel Eine Rechnungsposition gehört immer zu einer Rechnung. Wird eine Rechnung gelöscht, werden auch die einzelnen Rechnungspositionenen gelöscht. Folie 15 Dorf 1 hat 1..* Haus (Aggregation) Komposition! Bankkonto 1 hat 1 Geheimnummer Implikation: Beim Löschen des Objektes MeinBankkonto wird die entsprechende Geheimzahl natürlich auch gelöscht. Folie 16 8
Grundprinzipien der Objektorientierten Programmierung (OOP) Allan Kay prägte in den 80er Jahren den begriff der Objektorientierung. Demnach unterstützt eine objektorientierte Sprache die folgenden Prinzipien: Datenkapselung Vererbung Polymorphie Folie 17 Datenkapselung In der strukturierten/funktionalen Programmierung (Vorläufer der OOP) sind Daten von Routinen/Funktionen getrennt. Es kann von jeder Stelle im Programm auf die Daten zugriffen werden. Die Objektorientierung verändert diese Sicht durch die Einführung von Objekten. Daten und Routinen werden in Form von Klassen zusammengefasst. Daten gehören nun explizit einem Objekt. Ein direkter Zugriff auf die Daten ist diesem Objekt vorbehalten. Objekte haben damit das alleinige Recht, ihre Daten zu verändern oder auch nur lesend auf diese zuzugreifen. Ein Zugriff auf die Daten von außerhalb des Objektes it ist nur über definierte i Methoden möglich. Folie 18 9
Die strukturierte Programmierung als Vorläufer der Objektorientierung? Allgemein Generelle Unterteilung von Programmen : Daten & Instruktionen Komplexität eingrenzen: Strukturierung von Daten & Instruktionen Funktionale Programmierung Instruktionen einzelne Routinen / Funktionen Parameter für Funktionen Daten globale, lokale, statische, dynamische Variablen Definition eigener Variablentypen Folie 19 Datenkapselung Folie 20 10
Getter- und Stetter-Methoden Um Attribute zu lesen & zu schreiben werden s.g. Getter- bzw. Setter-Methoden verwendet. Diese Methoden ermöglichen einen gezielten Lese- und/oder Schreibzugriff auf die Attribute. Zusätzlich kann die Gültigkeit der Attribute gewährleistet werden. Bsp.: setradius kann sicherstellen, dass r immer größer 0 ist. Folie 21 Vererbung Klassen können Spezialisierungen anderer Klassen darstellen. D.h. Klassen können hierarchisch angeordnet werden, übernehmen ( erben ) dabei die Eigenschaften und das Verhalten der ihnen übergeordneten Klassen und können diese bedarfsweise spezialisieren ( überschreiben ) und erweitern. Auf Quelltextebene kann Vererbung eingesetzt werden, um Redundanzen ( doppelten Code ) zu vermeiden. Vererbungspfeil = IST ein.. Folie 22 11
Polymorphie Vielgestaltigkeit - Polymorphie wörtlich übersetzt Existiert auch in der Chemie & Biologie: Die unterschiedliche Gestaltung der Individuen einer Art Beispiele: Kristalle, Ameisen Satt von Polymorphie könnte man auch von Selbständigkeit des Objekts sprechen In der OOP ist Polymorphie ein Konzept das Objekten erlaubt, auf ein und die selbe Nachricht unterschiedlich zu reagieren Folie 23 UML Klassendiagramm - Polymorphie Folie 24 12
References Objektorientierte Programmierung (Lahres, Rayman) http://openbook.galileocomputing.de/oop/ ti / / The Principles of OOD http://butunclebob.com/articles.unclebob.principlesofood Agile Priniciples, Patterns and Practices in C# (Robert C. Martin) Agile Software Development: Principles, Patterns, and Practices (Robert C. Martin) SOLID Principles with Uncle Bob - Robert C. Martin (Podcast) http://www.hanselminutes.com/default.aspx?showid=163 Folie 25 13