12 im Bauwesen Markus Uhlmann 1
Zusammenfassung der 11. Vorlesung Objektorientierte Programmierung (OOP) Wozu eigentlich? Was unterscheidet OOP von traditionellen Techniken? Verwendung von vordefinierten Objekten Beispiele: Collection Objekt Range Objekt Polygon 2
Inhalt / Planung der Vorlesung 1. Informationsdarstellung & -verarbeitung Grundlagen 2. Betriebssysteme, Programmiersprachen * 3. Einführung in Excel/VBA VBA 4. Struktur von (VBA) Programmen * 5. Logische Elemente I * 6. Logische Elemente II * 7. Beispielprogramm (Dynamik starrer Körper) * 8. Datentypen, Eingabe/Ausgabe * 9. Datenfelder * 10. Benutzerdefinierte Datentypen * 11. Objektorientierte Programmiertechniken I * 12. Objektorientierte Programmiertechniken II * 13. Matlab I Matlab 14. Matlab II * 3
Inhalt der heutigen Vorlesung Objektorientierte Programmierung II: Benutzerdefinierte Klassen Definition einfacher Klassen Property Prozeduren Ereignisse bei Initialisierung/Beendigung eines Objektes Schnittstellen Beispiele: Klasse für Kreisobjekt Fahrzeugklasse 4
Erzeugen eigener Klassen VBA: Klassen werden in Klassenmodulen definiert Pro Klassenmodul wird eine Klasse beschrieben Modulname = Klassenname 5
Definition von Eigenschaften Öffentliche Eigenschaften (nicht empfohlen) Definition von Public Variablen innerhalb Klassenmodul Bsp.: [in Klassenmodul Auto ] Public Farbe As Integer Public Vel As Single [in Code-Modul] Sub Test() Dim Auto1 As New Auto Auto1.Farbe=5 Auto1.Vel=35.0 End Sub Analog zu benutzerdefinierten Datentypen 6
Definition von Methoden Öffentliche Methoden Definition von Public Prozeduren innerhalb Klassenmodul Bsp.: [in Klassenmodul Auto ] Public Sub Beschleunigen(dv as Single) Vel = Vel + dv End Sub [in Code-Modul] Sub Test() Dim Auto1 As New Auto Auto1.Beschleunigen 5.0 End Sub 7
Bsp.: Definition einfacher Klassen (Quelltext: VBA) 8
Datenkapselung Öffentliche Eigenschaften sind unsicher Verwendung von privaten Variablen Unsichtbar ausserhalb des Objektes Bsp.: Private pradius As Single (in Klassenmodul) Zugriff auf Eigenschaften durch Property-Prozeduren Spezielle Prozeduren zum Abfragen und Ändern von privaten Eigenschaften Inhalt der Prozedur: beliebiger Programmtext 9
Property Prozeduren Zugriff auf Eigenschaften durch Property Prozeduren Bsp.: [in Klassenmodul Kreis ] Private pradius As Single Public Property Let Radius(Value as Single) pradius = Value End Property Aufruf wie normale Wertzuweisung: [in Code-Modul] Dim circ1 As New Kreis circ1.radius = 3.5 Direkter Zugriff auf Eigenschaft pradius nicht möglich Nach außen nur Eigenschaft Radius sichtbar 10
Property Prozeduren (2) Property Prozedur als Filter für Objektdaten Bsp.: [in Klassenmodul Kreis ] Private pradius As Single Public Property Let Radius(Value as Single) If Value >= 0 Then pradius = Value Else `Fehlerbehandlung (negativer Radius) Endif End Property Fehlerhafte Zuweisungen können durch Property Prozeduren verhindert werden 11
Property Let/Get Prozeduren Property Let/Get Prozeduren treten in Paaren auf Syntax: Property Let name([arglist,]value As type) End Property Property Get name [(arglist)] As type End Property Property Let -> Zuweisen eines Wertes (Set für Objekte) Property Get -> Abfrage eines Wertes Schreibgeschützte Eigenschaften: Let auslassen 12
Bsp.: Property Let/Get Prozeduren (Quelltext: VBA) 13
Get: Berechnete Eigenschaft Property Get Prozedur: Zugriff auf berechnete Werte Im vorigen Beispiel wurde mit Get auf eine verborgene Eigenschaft zurückgegriffen Statt dessen können innerhalb von Eigenschaftsprozeduren Werte durch Berechnungen ermittelt werden Bsp.: eine Eigenschaft Fläche eines Kreisobjektes benötigt keine spezielle verborgene Variable die Information kann aus dem Radius berechnet werden 14
Bsp.: Berechnete Eigenschaft (Quelltext: VBA) 15
Objekte & Ereignisse Initialize Ereignis: wird durch Erzeugung eines Objektes ausgelöst Programmtext kann mit diesem Ereignis verbunden werden (z.b. setzen von Standardwerten) Syntax: [in Klassenmodul] Private Sub Class_Initialize() `Anweisungen werden bei Initialisierung `ausgeführt End Sub Analog für Terminate (Beendigung eines Objektes) Ähnlich C++ Constructor, Destructor 16
Bsp.: Initialize-Event (Quelltext: VBA) 17
Klassen & Schnittstellen Verschiedene Klassen -- gemeinsame Schnittstelle Klassenmodule können als Schnittstelle fungieren: Enthalten lediglich leere Prozeduren Implementierung wird eigentlichen Klassen überlassen abstrakte Klassen Eigenschaft PublicNotCreatable setzen Eigentliche Klassen verwenden Anweisung Implements Schnittstellenname Sind verpflichtet die Prozeduren der Schnittstelle zu implementieren Ermöglicht Standardisierung von polymorphem Verhalten 18
Bsp.: Klassen & Schnittstellen (Quelltext: VBA) 19
Ausblick Thema der nächsten Vorlesung: MATLAB 20
Campuslizenzen KIT (LINK) 21
MATLAB im Softwareshop (LINK) 22