Objektorientierte Programmierung (OOP) mit Matlab - Ein Crashkurs

Ähnliche Dokumente
Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Einstieg in die Informatik mit Java

Beispiel: Zwischen der Oberklasse und der abgeleiteten Klasse besteht eine ist ein Beziehung. Eine abgeleitete Klasse stellt eine Spezialisierung der

Objektorientierte Programmierung OOP

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Kapitel 6. Vererbung

Einführung in die Programmierung

Java Vererbung. Inhalt

Kapitel 6. Vererbung

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Kapitel 6. Vererbung

Anwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

Java, OO und UML Fortsetzung

Javakurs für Anfänger

Präsentation Interfaces

3 Objektorientierte Konzepte in Java

Repetitorium Informatik (Java)

4 Vererbung, Polymorphie

Probeklausur: Programmierung WS04/05

5.6 Vererbung. Vererbung

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

Programmieren in Java

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte Programmierung mit Java. Grundlagen Übersicht. Programmiersprachen

Überschreiben von Methoden

Informationsverarbeitung im Bauwesen

Inhaltsüberblick. I. Grundbegriffe - Objekte und Klassen. Organisatorisches. I. Grundbegriffe - Objektorientierte Konzepte

AuD-Tafelübung T-B5b

Vorlesung Programmieren. Bisher: Klassen und Objekte. Was ist mit ähnlichen Klassen? Vererbung und Polymorphismus

3 Objektorientierte Konzepte in Java

Klassen in Java. Klassen

Programmieren in Java

Java I Vorlesung Objektorientiertes Programmieren

Java I Vorlesung Vererbung und Sichtbarkeit

Faustregeln zu Zusicherungen

Programmieren I. Kapitel 8. Vererbung

Java für Computerlinguisten

Java Schulung (Java 2 Java Development Kit 5 / 6)

Prof. W. Henrich Seite 1

Vererbung & Schnittstellen in C#

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Vererbung. Vererbung von Methoden und Instanzvariablen. Vererbung als Realisierung einer is-a Beziehung.

13 OOP MIT DELPHI. Records und Klassen Ein Vergleich

VIII: Vererbung. Unterklassen einer Klasse. Vererbung von Methoden und Instanzvariablen. Überschreiben von Methoden

Vorkurs C++ Programmierung

Java Einführung Methoden in Klassen

C# Programmierung. Eine Einführung in das.net Framework. C# Programmierung - Tag 4: Kombination OOP/.NET

Übungsblatt 7. Was ist die Ausgabe de facto? Entspricht die Ausgabe Ihren Erwartungen?

Teil 2: OOP und JAVA (Vorlesung 11)

1. Grundlegende Eigenscha5en 2. Redefini+on 3. Polymophie 4. Mehrfachvererbung

Der Operator this. Wir betrachten nochmals die Klassendefinition von Ballon.

Klassenbeziehungen & Vererbung

Einstieg in die Programmierung mit Visual Basic.NET

Probeklausur: Programmierung WS04/05

C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern

8. Objektorientierte Programmierung. Informatik II für Verkehrsingenieure

11.3 Virtuelle Methoden

Übungsaufgaben: 1. Objektorientierte Programmierung - Teil 1

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

Objektorientierte Programmierung mit Python Polymorphismus und Vererbung. Eltern

Javakurs zu Informatik I. Henning Heitkötter

einkonto.zahle(+100); //Transaktion Einzahlung einkonto.zahle(-20); //Transaktion Auszahlung einkonto.zahle(+30); //Transaktion Einzahlung

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

SimpleOOP Opensource OOP Plugin

Programmierkurs Java. Vererbung. Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck

Objektorientierte Programmierung

Wiederholung zur Vorlesung Programmieren

Objektorientierung: Klassen und Objekte

Einführung in die Programmierung 1

10 Objektorientierte Programmierung, Teil 1

Java: Vererbung. Teil 3: super()

Abschnitt 9: Schnittstellen: Interfaces

Java. Prof. Dr. Stefan Enderle NTA Isny

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

5. Abstrakte Klassen

Programmierkurs. SoSe Markus Geveler Inst. f. Applied Mathematics, TU Dortmund.

Angewandte Mathematik und Programmierung

Algorithmen und Datenstrukturen 07

MATLAB - Funktionen. function fcn (Parameterliste) 1. Zeiger

Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich

Programmierkurs Java

Vererbung. Was versteht man unter dem Begriff Vererbung?

3 Klassen, Attribute, Methoden

Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000

3 Kurzeinführung in Matlab

Objektorientierung: Klassen und Objekte

PHP Aufbaukurs. Tag 3. PHP5 & Klassen

Erste Schritte der Programmierung in C

SWE1 / Übung 9 ( )

Klassen mit Instanzmethoden

GetName(), GetName(), GetGeschlecht() und AelterWerden().

Allgemeine Informatik II SS :30-13:30 Uhr

5.5.8 Öffentliche und private Eigenschaften

Interfaces und Vererbung

Konstruktoren, Packages und Scopes

Algorithmen und Programmierung II

Aufgabe 1: Quer durch Java (4 Punkte) super abstract abstract protected

Transkript:

Objektorientierte Programmierung (OOP) mit Matlab - Ein Crashkurs 31. Mai 2016

Grundbegriffe (I) Objektorientierung: Sichtweise auf komplexe Systeme, bei der ein System durch das Zusammenspiel kooperierer Objekte beschrieben wird 1 Objekte: Unscharf gefasster Begriff. Objekte werden charakterisiert durch: Die Dinge, die sie haben (ihre Eigenschaften/ Attribute) Die Dinge, die sie können (ihre Methoden) Objekte müssen nicht materiell sein 1 https://de.wikipedia.org/wiki/objektorientierung

Grundbegriffe (II) Objektorientierte Programmierung (OOP): Programmierstil, der die Objektorientierung umsetzt Grundidee: Modellierung des Programms mithilfe von Objekten, deren Zusammenspiel das zu löse Problem beschreibt Vorstellung, dass alles aus Objekten aufgebaut ist bzw. sich alles als Objekt darstellen lässt Insbesondere ist ein objektorientiertes Programm keine lineare Abfolge von Anweisungen

Klassen Wichtigstes Konzept der OOP: die Klasse Beschreibt abstrakt eine Menge von Objekten mit gleichen Eigenschaften und Fähigkeiten Sozusagen ein Bauplan für eine bestimmte Sorte/ einen bestimmten Typ von Objekten In der Klasse werden die Attribute und Methoden des zu beschreiben Typs angegeben

Klassen in Matlab In Matlab classdef Name properties // Attribute kommen hierhin methods // Methoden kommen hierhin

Beispiel Beispiel Polynome (in R): Ein Polynom besitzt Koeffizienten (Eingenschaft) Ein Polynom kann an einer Stelle x R ausgewertet werden (Methode)

Beispiel (in Matlab) classdef Name properties coefficients methods function y = evaluate ( obj, x) y =... ;

Klassen in Matlab (II) Attribute werden einfach aufgelistest Methoden können immer nur auf konkrete Objekte der Klasse angewet werden (was soll die Auswertung eines abstrakten Polynoms an der Stelle 5 sein?) Aus diesem Grund ist der erste Parameter (hier obj in der evaluate-methode) einer Klasenmethode immer ein konkretes Objekt der entsprechen Klasse Es ergibt sich eine Frage: Wie erzeugt man ein konkretes Objekt einer Klasse?

Konstruktoren Antwort: Konstruktor Spezielle Methode, die den gleichen Namen wie die Klasse hat Rückgabewert ist ein Objekt der Klasse Im Konstruktor werden die Attribute des Klassenobjekts auf konkrete Werte gesetzt Hat als ersten Parameter kein Objekt der Klasse (ein solches soll ja erst erzeugt werden) Eine Klasse kann durchaus mehrere Konstruktoren haben Matlab says No

Konstruktoren in Matlab (I) classdef properties //... methods Polynom // Konstruktor function obj = Polynom ( coeff ) obj. coefficients = coeff ; Attribute werden wie bei struct-variablen gesetzt

Konstruktoren in Matlab (II) Wird kein Konstruktor angegeben, so wird implizit immer ein parameterloser Konstruktor erzeugt, der gar nichts tut Aufruf des Konstruktors: f = Polynom ([1 0 3]) ; Das Objekt f ist dann vom Typ Polynom bzw. eine Instanz der Klasse Polynom Für das konkrete Objekt f kann dann die evaluate-methode aufgerufen werden Zwei syntaktische Möglichkeiten: evaluate(f, 5) oder f.evaluate(5)

Typabfrage Man kann mittels der Methode isa abfragen, ob ein Objekt Instanz einer gegebenen Klasse ist Syntax: b = isa (f, Polynom ); Achtung: Matlab kennt kein Typsystem, d.h.: Prinzipiell kann einer Funktion immer ein Objekt einer beliebigen Klasse übergeben werden Erst wenn versucht wird, auf ein nicht-existentes Attribut/ Methode zuzugreifen, wirft die Laufzeitumgebung einen Fehler Überprüfung, ob das Argument vom richtigen Typ ist, muss manuell geschehen

Sichtbarkeiten (I) Oft sollen Daten nachträglich von außen nicht mehr geändert werden können Ebenso sollen interne Hilfsfunktionen dem Benutzer verborgen bleiben Dazu dienen Sichtbarkeitsmodifizierer

Sichtbarkeiten (II) Zu Beginn eines properties- oder methods-blocks kann geregelt werden, wer darauf zugreifen darf. Mögliche Werte sind public: Jeder darf auf die Methoden/ die Atrribute in diesem Block zugreifen protected: Siehe später private: Auf die Methoden/ Attribute in diesem Block kann nur innerhalb der Klasse zugeggriffen werden Jede Klasse kann mehrere solcher Blöcke mit unterschiedlichen Sichtbarkeiten enthalten

Sichtbarkeiten (III) Syntaktisches Beispiel: classdef bla properties ( Access = private ) x y methods ( Access = public ) function y = dosomething ( obj ) y = 42; methods ( Access = private ) function helper ( obj ) // Hier passiert nix.

Sichtbarkeiten (IV) Im Beispiel ist dann T = bla ; T.x nicht mehr erlaubt Bei Attributen können der Lese- und der Schreibzugriff mittels GetAccess und SetAccess getrennt eingestellt werden Beispiel: properties ( GetAccess = public, SetAccess = private ) x y Wird eine Sichtbarkeit nicht explizit angegeben, so wird sie immer als public angenommen

Vererbung (I) Zweites wichtiges Konzept der OOP: Vererbung Erlaubt es bestehe Klassen zu erweitern die Implementierung einzelne Methoden einer Klasse zu ändern (sog. Überschreiben von Methoden) Vorteil: Keine Änderungen an bestehem Code Wird eingesetzt, um Situationen zu modellieren, in denen eine Klasse von Objekten spezieller ist als eine andere

Vererbung (II) Mathematisch angehauchtes Beispiel: Eine Klasse Function beschreibt ganz allgemein das Konzept einer Funktion (auf R) dar und stellt eine Methode evaluate zur Auswertung an einer konkreten Stelle zur Verfügung Die Klasse Polynom spezialisiert Function (da jedes Polynom insbesondere eine Funktion ist) und erweitert diese um das Attribut coefficients (die Koeffizienten sind Polynom-spezifisch), und ändert die Implementierung der evaluate-methode

Vererbung in Matlab (I) Vererbung geschieht durch Angabe der Oberklasse (d.h. der Klasse, von der geerbt werden soll) bei der Klassefinition: classdef Klasse < Oberklasse //... Die Unterklasse hat dann sofort alle Methoden und Attribute der Oberklasse zur Verfügung

Vererbung in Matlab (II) Achtung: Besitzt eine Klasse keinen parameterlosen Konstruktor, so muss als erster Befehl im Konstruktor einer Unterklasse ein Konstruktor der Oberklasse aufgerufen werden: classdef Klasse < Oberklasse methods // Konstruktor function obj = Klasse ( args ) obj@oberklasse ( Argumente, des, Oberklassenkonstruktors ); //... Stellt sicher, dass alle Atrribute, die von der Oberklasse bereitgestellt werden, korrekt initialisiert werden

Vererbung in Matlab (Ergänzung zu II) Stimmt nicht ganz! Nur die obj-variable darf vor dem Aufruf des Superklassen-Konstruktors nicht verwet werden! Lokale Variablefinitionen sind möglich Beispiel function obj = Klasse ( args ) x = 42; y = 5; obj@superklasse (x, y);

Vererbung in Matlab (III) Neue Attribute/ Methoden werden durch Definition neuer properties- und methods-blöcke hinzugefügt Bereits vorhandene Methoden werden durch einfache Neudefinition überschrieben

Vererbung (III) Spanne Frage: Was bringt s? Erweiterung von Code möglich, ohne bisherigen Code ändern zu müssen An Stellen, an denen ein Objekt einer Klasse erwartet wird, ist immer auch ein Objekt einer Unterklasse möglich Erbt Klasse von Oberklasse und ist X vom Typ Klasse, so ist isa(x, Oberklasse ) wahr! Ermöglicht es, eine Unterklasse zu erstellen, die gewisse Dinge anders implementiert und diese anstatt der Oberklasse zu verwen Der umliege Code, der die Klasse verwet, muss dafür nicht geändert werden

Abstrakte Klassen (I) Manchmal ist die Implementierung einer Methode nicht von vornherein klar, nur, dass es eine solche geben muss Beispiel Function-Klasse von oben: Die evaluate-methode muss vorhanden sein, ihre konkrete Implementierung ist aber von der konkreten Art der Funktion abhängig Ein Polynom, das über seine Koeefizienten definiert ist, muss anders ausgewertet werden als eine Funktion, die über ein function handle gegeben ist

Abstrakte Klassen (II) Lösung: Abstrakte Methoden Methoden ohne Implementierung Stehen in einem speziellen Block methods ( Abstract ) //... Werden ohne das Schlüsselwort function, ohne Rückgabewert und ohne Rumpf definiert: evaluate (obj, x) Von Klassen mit abstrakten Methoden können keine Objekte erzeugt werden, erst von einer Unterklasse, die die abstrakten Methoden überschreibt

Abstrakte Klassen (III) Und der Sinn? Abstrakte Klassen stellen eine Art Vertrag, was gewisse Objekte können müssen Verschiebt die Implementierung auf später Erlaubt es, Objekte mit prinzipiell gleichen Fähigkeiten aber unterschiedlicher Implementierung unter einer Oberklasse zusammenzufassen In Funktionen kann ein Objekt der abstrakten Klasse als Argument erwartet werden, übergeben werden später Objekte konkret implementierter Kindklassen Ermöglicht abstraktere bzw. allgemeinere Formulierungen von Methoden

Handle-Klassen (I) Standarmäßiges Verhalten Verhalten von Klassenobjekten: Wird ein solches an eine Funktion übergeben, so wird eine Kopie angelegt Wird innerhalb der Funktion ein Attribut geändert, so betrifft diese Änderung nur die Kopie das ursprüngliche Objekt wird nicht geändert Beispiel:

Handle-Klassen (II) classdef bla properties x methods function obj = bla ( val ) obj.x = val ; function blubb ( obj ) obj.x = 42;

Handle-Klassen (III) Def Aufruf X = bla (5) ; blubb (X); z = X.x liefert z = 5! Abhilfe: Ableiten von der Klasse handle: Handle-Klassen werden nur einmal im Speicher angelegt Die Objektvariable ist lediglich ein Zeiger auf das Objekt im Speicher Arbeitet eine Funktion auf einem Handle-Objekt, so arbeitet sie immer auf den Originaldaten Änderungen nach außen werden also sichtbar!

Handle-Klassen (IV) Schreibt man also im Beispiel classdef bla < handle, so liefert der Aufruf hier tatsächlich z = 42. X = bla (5) ; blubb (X); z = X.x

Operatorüberladung (I) Betrachte wieder die Polynom-Klasse von oben Sind f = Polynom([1 0 3]) und g = Polynom([2 3 0 1]) Polynomobjekte, so wäre es wünschenswert, wenn auch h = f + g; ein Polynomobjekt liefert mit passen Koeffizienten In Matlab ist das möglich

Operatorüberladung (II) Dazu implementiere in einer Klasse eine Methode mit einem Parameter function y = mplus ( obj, other ) y =... ; Der Aufruf f.plus(g) bzw. plus(f, g) lässt sich dann ersetzen durch f+g Analog ermöglicht eine Implementierung von mtimes einen Aufrif der Form f * g Analog für /, etc.

Operatorüberladung (III) Erlaubt prinzipiell auch das Anwen von Operatoren auf Objekte unterschiedlicher Typen (z.b. λ f für einen Skalar λ und eine Funktion f) Aber Achtung: Problematisch wird s, wenn f + g für Objekte von unterschiedlichen Klassen aufgerufen wird, die beide mplus implementieren welches wird das verwet??

Strukturierung des Quellcodes Klassen lassen sich in speziellen Ordnern (zum Beispiel inhaltlich) gruppieren Der Name eines solchen Ordners ist durch ein vorangestelltes + gekennzeichnet Ist Klasse eine Klasse im Ordner +Ordner, so lässt sie folgermaßen ansprechen (wenn der Ordner im aktuellen Matlab-Ordner enthalten ist): Ordner. Klasse Beispiel: obj = Ordner.Klasse Ein solcher Ordner bildet mit den in ihm enthaltenen Klassen ein Package bzw. einen Namensraum

Weiterführe Informationen Gute Anlaufstelle: http://de.mathworks.com/help/matlab/object-orientedprogramming.html Wer wirklich alles wissen will: http://de.mathworks.com/help/pdf doc/matlab/matlab oop.pdf