1 / 24

OOP-Begriffe

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

sumi
Download Presentation

OOP-Begriffe

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. Konzepte des OOP • Datenkapselung • Vererbung • Überschreiben • Überladen • Polymorphie Im Gegensatz zum prozeduralen Programmieren

  3. 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

  4. 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

  5. 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.

  6. 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.

  7. Vererbung in Java • Eine Unterklasse erbt alle Eigenschaften (Attribute und Methoden) einer Oberklasse. IST-Beziehung

  8. Beispiel Vererbung + ! zeichneKreis Buntstift erweitert die Funktionalität von Stift (Spezialisierung)

  9. Beispiel Vererbung (3) classFigurstiftextends Buntstift { publicFigurstift() { super(); } publicvoidzeichneQuadrat(double s) { this.zeichneRechteck(s, s); } }

  10. Vererbungshierarchie

  11. Vererbungshierarchie (3) Alle Klassen erben von Object

  12. "super" • Methode der Oberklasse aufrufen: super.methodenName(); • Konstruktor der Oberklasse aufrufen: super();

  13. "this" • this wird gebraucht, wenn eine Klasse einen Auftrag an sich selber schickt. publicvoidzeichneQuadrat(double s) { this.zeichneRechteck(); }

  14. 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

  15. 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.

  16. Überschreiben • wenn Methoden oder Attribute in Kind- UND Elternklasse definiert sind (die überschriebene Methode kann mit super.f() noch immer aufgerufen werden)

  17. Vorteile des Überschreibens • Im Unterschied zur Vererbung (Erweiterung der Elternklasse) kann man durch Überschreiben Teile des Verhaltens der Elternklasse verändern

  18. Ü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

  19. Beispiel classFigurstift { Color col; publicFigurstift() { col = new Color(255, 0, 0); } publicFigurstift(Color initcol) { col = initcol; } }

  20. 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.

  21. 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;

  22. 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 ); } }

  23. 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

More Related