250 likes | 392 Views
OOP-Begriffe. Abstraktion Reduktion der Wirklichkeit auf das Wesentliche Modellieren Die Abstraktion in einem Software-Modell beschreiben Klasse Bauplan für Objekte Objekt Konkrete Realisierung (Instanziierung) einer Klasse. Attribute Eigenschaften von Objekten Methoden
E N D
OOP-Begriffe • Abstraktion Reduktion der Wirklichkeit auf das Wesentliche • Modellieren Die Abstraktion in einem Software-Modell beschreiben • Klasse Bauplan für Objekte • Objekt Konkrete Realisierung (Instanziierung) einer Klasse • Attribute Eigenschaften von Objekten • Methoden Fähigkeiten von Objekten • Instanz ein bestimmtes Objekt • Instanzvariable Attribut eines Objekts
Konzepte des OOP • Datenkapselung • Vererbung • Überschreiben • Überladen • Polymorphie Im Gegensatz zum prozeduralen Programmieren
Datenkapselung • ist eines der wichtigsten Grundprinzipien des OOP. • bezeichnet den kontrollierten/eingeschränkten Zugriff auf Methoden bzw. Attribute von Klassen • wird in JAVA durch Zugriffsmodifizierer umgesetzt, die die Sichtbarkeit (und damit Aufrufbarkeit) für externe Klassen kontrollieren: • public(öffentlich) von außen für jeden sichtbar • protected (geschützt) nur für Unterklassen sichtbar • private (privat) nur intern (in der Klasse) sichtbar
Datenkapselung • Das Ziel eines sauberen Klassendesigns ist es zu erreichen, dass Klassen bzw. Objekte nur über wenige wohl-definierte Schnittstellen mit anderen Klassen interagieren. • Vom Innenleben einer Klasse soll der Verwender (Client-Klassen bzw. auch der Programmierer) möglichst wenig wissen müssen (Geheimnisprinzip). • So kann Software maximal modularisiert werden überschaubar, flexibel & erweiterbar
Regeln für Zugriffsmodifizierer: • Der Zugriff auf Bestandteile einer Klasse sollte immer maximal eingeschränkt werden ("so privat wie möglich"). • Instanzvariablen (d.h. Attribute) werden private deklariert. Zugriff von ausserhalb der Klasse erfolgt über getter- und setter-Methoden. • Methoden werden nur dann public deklariert, wenn man wirklich von beliebigen anderen Klassen (Programmen) darauf zugreifen können muss (zeugt von schlechtem Design). • Konstruktorenwerden public deklariert.
Vorteile der Datenkapselung • Weniger unerwünschten Interaktionen zwischen Programmteilen • Erhöhte Übersichtlichkeit, da nur die öffentliche Schnittstelle einer Klasse betrachtet werden muss • Erhöhte Flexibilität durch Modularität, einzelne Klassen oder Methoden können verändert oder ausgetauscht werden ohne den Rest des Programms zu beeinflussen.
Vererbung in Java • Eine Unterklasse erbt alle Eigenschaften (Attribute und Methoden) einer Oberklasse. IST-Beziehung
Beispiel Vererbung + ! zeichneKreis Buntstift erweitert die Funktionalität von Stift (Spezialisierung)
Beispiel Vererbung (3) classFigurstiftextends Buntstift { publicFigurstift() { super(); } publicvoidzeichneQuadrat(double s) { this.zeichneRechteck(s, s); } }
Vererbungshierarchie (3) Alle Klassen erben von Object
"super" • Methode der Oberklasse aufrufen: super.methodenName(); • Konstruktor der Oberklasse aufrufen: super();
"this" • this wird gebraucht, wenn eine Klasse einen Auftrag an sich selber schickt. publicvoidzeichneQuadrat(double s) { this.zeichneRechteck(); }
Vorteile der Vererbung • Erhöhte Übersicht in einem Klassendesign • Durch die Vererbung lassen sich logische Hierarchien abbilden • Weniger Quellcode nötig • Code der Oberklasse wird in Unterklassen wiederverwendet • Einfachere Wartung • Änderungen müssen nur an einer Stelle durchgeführt werden
Vorteile der Vererbung(Beispiel) - name, adresse, telefon müssen nur einmal programmiert werden. - Ein neues Attribut alter muss nur an einer Stelle eingefügt werden.
Überschreiben • wenn Methoden oder Attribute in Kind- UND Elternklasse definiert sind (die überschriebene Methode kann mit super.f() noch immer aufgerufen werden)
Vorteile des Überschreibens • Im Unterschied zur Vererbung (Erweiterung der Elternklasse) kann man durch Überschreiben Teile des Verhaltens der Elternklasse verändern
Überladen • mehrere Versionen einer Methode, die sich nur in Typ und/oder Anzahl der Übergabeparameter unterscheiden • häufig beim Konstruktor eingesetzt • die zum Aufruf passende Version wird vom Compiler automatisch erkannt
Beispiel classFigurstift { Color col; publicFigurstift() { col = new Color(255, 0, 0); } publicFigurstift(Color initcol) { col = initcol; } }
Vorteile des Überladens • Implementierung von optionalen Übergabeparametern (default values) • Zeit- und Tipparbeitersparnis beim Gebrauch einer Klasse durch die Definition mehrerer Konstruktoren. • Erhöhte Übersichtlichkeit und Flexibilität. Es ist naheliegend, Methoden, welche basierend auf unterschiedlichen Parametern zu gleichen Resultaten führen, gleich zu benennen.
Polymorphie (griechisch: Vielgestaltigkeit) • beschreibt die Fähigkeit eines Bezeichners, abhängig von seiner Verwendung unterschiedliche Datentypen anzunehmen. • Jedes Objekt kann auch den Typ seiner Elternklasse(n) annehmen • jedes Java-Objekt hat die Grundklasse Object • Objekte können in kompatible Typen gecastet werden, z.B. int i = 1; double d = (double) i;
Beispiel public class Polymorphie { double flaeche = 0; Rechteck re1 = new Rechteck( 3, 4 ); Figur re2 = new Rechteck( 5, 6 ); Kreis kr1 = new Kreis( 7 ); Figur kr2 = new Kreis( 8 ); Vector vec = new Vector(re1, re2, kr1, kr2); // Berechne die Summe der Flaechen aller Figuren: for( int i=0; i<vec.size(); i++ ) { Figur f = (Figur)(vec.get( i )); flaeche += f.getFlaeche(); //benutzt die (evtl. über- //schriebene) Methode getFlaeche der jeweiligen Unterklasse } System.out.println( "Gesamtflaeche ist: " + flaeche ); } }
Vorteile von Polymorphie • einheitlicher Aufruf von überschriebenen Methoden (z.B. toString()) • dynamische Typumwandlung macht Vererbung erst effizient nutzbar • insgesamt spart man dadurch Tipp- und Organisationsaufwand und bekommt übersichtlicheren Sourcecode