Vorlesung Skriptsprachen Duale Hochschule

Werbung
Vorlesung Skriptsprachen
Duale Hochschule Stuttgart
Sommersemester 2017
Dipl.-Ing. (FH) Volker Schepper
Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2017 – Dipl.-Ing.(FH) Volker Schepper
05.04.2017
1
Objektorientiertes Programmieren
• Sollen komplexe Systeme Programmiert werden, gibt es
verschiedene Ansätze. Durch die Objektorientierte
Programmierweise werden reale Objekte zu Objekte in dem
Programm abgebildet.
• Dadurch sollen komplexe Systeme beherrschbarer, fehlerfreie und
Programmteile besser wiederverwendbarer sein.
• Folgende drei Grundelemente existieren bei einer
objektorientierter Software:
•
•
•
Vererbung
Polymorphie
Datenkapselung
Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2017 – Dipl.-Ing.(FH) Volker Schepper
05.04.2017
2
Programmierparadigma
• Programmierparadigma
• Beschreibt die grundlegende Verfahren und Prinzipien
zur Programmierung und damit zur Lösung der
Aufgaben.
• Imperative Programmierung
• Die Abarbeitung der Befehle wird der Reihe nach
abgearbeitet. GOTO wird für die Verzweigung
verwendet.
Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2017 – Dipl.-Ing.(FH) Volker Schepper
05.04.2017
3
Programmierparadigma
• Strukturierte Programmierung
• Einführung der Kontrollstrukturen. Z.B. in Python werden
bedingte Sprünge eingerückt.
• Prozedurale Programmierung
• Durch Funktionen (Unterprogramme) wird das Programm in
überschaubare Teile zerlegt. (Nicht zu verwechseln mit der
Funktionalen Programmierung.)
• Objektorientierte Programmierung
• Die Reelle Wirklichkeit soll nach Möglichkeit 1:1 zu Objekten
interpretiert werden.
Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2017 – Dipl.-Ing.(FH) Volker Schepper
05.04.2017
4
Programmierparadigma - Deklarative
• Deklarative Programmierung
– Die Deklarative Programmierung ist Gegenentwurf zu der Imperative
Programmierung. Hierbei liegt der Fokus auf die eigentliche Lösung
des Problems und nicht auf die Beschreibung des Lösungsweges.
Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2017 – Dipl.-Ing.(FH) Volker Schepper
05.04.2017
5
Objektorientiertes Programmieren
Vererbung
Ein abstraktes Objekt (Grundspezifikation eines Objektes) wird
als Norm vorgeben. Andere Objekte lassen sich der Spezifikation
des abstrakten Objektes ableiten. Das bedeute das spezifische
Objekt erbt Normen von dem abstrakten Objekt.
Polymorphie
Bei der Umsetzung der Software soll darauf geachtet werden,
dass es dem Programmierer erlauben bestimmte Elemente
einfach auszutauschen.
Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2017 – Dipl.-Ing.(FH) Volker Schepper
05.04.2017
6
Objektorientiertes Programmieren
Datenkapselung
Die Objekte können selbst dafür sorgen, dass die Daten
konsistent bleiben. Der Zugriff auf Daten ist nur über einen
bestimmten Mechanismus möglich.
Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2017 – Dipl.-Ing.(FH) Volker Schepper
05.04.2017
7
Objektorientierung - Beispiel
• Modellierung eines Autos als Objekt
•
•
•
•
es hat gewisse Eigenschaften
es besitzt gewisse Methoden
Kommunikation mit dem Auto durch Methodenaufrufe
es ist aus anderen Objekten zusammengesetzt
Eigenschaften:
• Marke
• Farbe
• Leistung
• Baujahr
• …
Teilobjekte:
• Motor
• Reifen
• Fenster
• …
Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2017 – Dipl.-Ing.(FH) Volker Schepper
Methoden:
• Anlassen
• Beschleunigen
• Bremsen
• …
05.04.2017
8
Objektorientiertes Programmieren
Zur einfacheren Visualisierung von Klassen werden grafische
Symbole der Unified Modeling Language (UML) verwendet.
Eine Klasse wird durch ein Rechteck dargestellt, welches in drei
Felder unterteilt ist.
Name der Klasse
Fahrzeug
Marke
Farbe
Baujahr
Anlassen
Die Liste der Attribute.
Werden Klassenattribute
verwendet, werden diese
unterstrichen.
Liste der
Beschleunigen
Methoden
Bremsen
(Operationsliste)
Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2017 – Dipl.-Ing.(FH) Volker Schepper
05.04.2017
9
Klasse
Eine Klasse wird einen Kopf und einen Körper definiert.
Kopf
Eingeleitet mit dem Schlüsselwort class und dem anschließenden
Namen der Klasse sowie optionalen Oberklassen gefolgt von einem
Doppelpunkt wird ein Klassen-Kopf beschrieben.
Körper
Im Körper der Klasse werden die Attribute und gegebenenfalls die
Klassenmethoden definiert.
class fahrzeug:
def obj_print(self):
print("Methode von der Klasse Fahrzeug wurde aufgerufen")
Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2017 – Dipl.-Ing.(FH) Volker Schepper
05.04.2017
10
Objekt
Ein Objekt wird erzeugt, wenn die Klasse aufgerufen wird.
auto = fahrzeug()
Bei der Initialisierung des Objektes können Argumente übergeben
werden, welche in der Konstruktormethode definiert sind.
auto = fahrzeug()
auto.obj_print()
Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2017 – Dipl.-Ing.(FH) Volker Schepper
05.04.2017
11
Methoden
Methoden sind wesentliche Bestandteile eines Objektes. Sie
Werden innerhalb einer Klassendeklaration definiert.
Der erste Parameter self bezeichnet immer die Instanz (aktuelles Objekt).
Definition einer Methode:
def methode (self, argument1, argument2, … )
Aufruf einer Methode:
objekt.methode (argument1, argument2, … )
Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2017 – Dipl.-Ing.(FH) Volker Schepper
05.04.2017
12
Klasse
Definition der Klasse fahrzeug, sowie anschließende
Instanziierung des Objekts auto und der Aufruf der Methode
obj_print.
class fahrzeug:
def obj_print(self):
print("Methode von der Klasse Fahrzeug wurde aufgerufen")
auto = fahrzeug()
auto.obj_print()
OOP_01.py
>>>
Methode von der Klasse Fahrzeug wurde aufgerufen
>>>
Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2017 – Dipl.-Ing.(FH) Volker Schepper
05.04.2017
13
Konstruktor
class fahrzeug:
Nach dem
erzeugen des
Objekts wird der
Konstruktor
aufgerufen.
def __init__(self):
self.__aussentemperatur = 20
def set_aussentemperatur(self, aussentemperatur):
self.__aussentemperatur = aussentemperatur
def get_aussentemperatur(self):
print(self.__aussentemperatur)
Der Konstruktor ist
im Grunde eine
gewöhnliche
Methode.
auto = fahrzeug()
auto.get_aussentemperatur()
OOP_02_Konstruktor.py
>>>
20
>>>
Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2017 – Dipl.-Ing.(FH) Volker Schepper
05.04.2017
14
Destruktor
class fahrzeug:
def __init__(self):
self.__aussentemperatur = 20
Wird das Objekt
gelöscht. Wir der
Destruktor
aufgerufen, falls
dieser vorhanden
ist.
def __del__(self):
print("Die Klasse fahrzeug wurde gelöscht")
def set_aussentemperatur(self, aussentemperatur):
self.__aussentemperatur = aussentemperatur
def get_aussentemperatur(self):
print(self.__aussentemperatur)
auto = fahrzeug()
del auto
OOP_03_Destruktor.py
>>>
20
Die Klasse fahrzeug wurde gelöscht
>>>
Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2017 – Dipl.-Ing.(FH) Volker Schepper
05.04.2017
15
Manipulation von Attribute
class fahrzeug:
def set_leistung(self, leistung):
self.leistung = leistung
def get_leistung(self):
print(self.leistung)
auto = fahrzeug()
auto.set_leistung(20)
auto.get_leistung()
# Objektattribut wird über Methode verändert.
auto.leistung = 50 # Direkter Zugriff auf das Objektattribut.
auto.get_leistung()
OOP_04_Attribute.py
>>>
20
50
>>>
Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2017 – Dipl.-Ing.(FH) Volker Schepper
05.04.2017
16
Manipulation von Attribute
• Objektattribute sollten immer über Methoden
gesetzt/verändert werden. Ansonsten gesteht die Gefahr,
dass das Objekt in einem inkonsistenten Zustand gerät.
• Lösung: Um Attribute vor öffentliche Zugriff zu schützen,
wird vor dem Namen des Attributs zwei Unterstriche
angeführt.
• Beispiel: Besitzt ein Objekt z.B. ein Attribut für seine
Temperatur, so kann die Temperatur niemals unter
273,15°C sein. Mit einer eigenen set-Methode könnte diese
Grenze überwacht werden.
Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2017 – Dipl.-Ing.(FH) Volker Schepper
05.04.2017
17
Manipulation von Attribute
class fahrzeug:
def set_aussentemperatur(self, aussentemperatur):
self.__aussentemperatur = aussentemperatur
Das Beispiel zeigt, dass
geschützte Attribute nicht
außerhalb der Klasse verändert
werden können.
def get_aussentemperatur(self):
print(self.__aussentemperatur)
auto = fahrzeug()
auto.set_aussentemperatur(20)
auto.get_aussentemperatur()
auto.aussentemperatur = 50
auto.__aussentemperatur = 60
auto.get_aussentemperatur()
OOP_05_Attribute.py
Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2017 – Dipl.-Ing.(FH) Volker Schepper
>>>
20
20
>>>
05.04.2017
18
Properties
Um dennoch scheinbar außerhalb der Klasse auf Attribute
zugreifen zu können, werden property() Funktionen
verwendet.
outdoor_temp = property(get_aussentemperatur, set_aussentemperatur)
Zuerst muss die get-Funktion angeführt werden
anschließend optional eine set-Funktion.
Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2017 – Dipl.-Ing.(FH) Volker Schepper
05.04.2017
19
Properties
class fahrzeug:
def __init__(self, aussentemperatur = 18):
self.__aussentemperatur = aussentemperatur
def set_aussentemperatur(self, aussentemperatur):
if aussentemperatur >= -273.15:
self.__aussentemperatur = aussentemperatur
else:
self.__aussentemperatur = 12
def get_aussentemperatur(self):
print(self.__aussentemperatur)
return self.__aussentemperatur
outdoor_temp = property(get_aussentemperatur, set_aussentemperatur)
OOP_06_Properties.py
Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2017 – Dipl.-Ing.(FH) Volker Schepper
05.04.2017
20
Properties
auto = fahrzeug()
auto.outdoor_temp = 34
print(auto.outdoor_temp)
OOP_06_Properties.py
>>>
34
34
>>>
Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2017 – Dipl.-Ing.(FH) Volker Schepper
05.04.2017
21
Vererbung
Basisklasse
Unterklassen
Fahrzeug
Marke
Farbe
Baujahr
Kombi
Türen
Heckklappe()
Anlassen()
Beschleunigen()
Bremsen()
Bei der Vererbung erhält (erbt) die
abgleitet Klasse (Unterklasse) die
Methoden und Attribute der
Basisklasse.
Betonmischer
Zuladung
Mischertrommel()
Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2017 – Dipl.-Ing.(FH) Volker Schepper
05.04.2017
22
Vererbung (1)
class fahrzeug:
def __init__(self, aussentemperatur = 18):
self.__aussentemperatur = aussentemperatur
def __del__(self):
print("Die Klasse fahrzeug wurde gelöscht")
def set_aussentemperatur(self, aussentemperatur):
if aussentemperatur >= -273.15:
self.__aussentemperatur = aussentemperatur
else:
self.__aussentemperatur = 12
def get_aussentemperatur(self):
return self.__aussentemperatur
outdoor_temp = property(get_aussentemperatur, set_aussentemperatur)
OOP_07_Vererbung.py
Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2017 – Dipl.-Ing.(FH) Volker Schepper
05.04.2017
23
Vererbung (2)
def __add__(self, other):
return self.outdoor_temp + other.outdoor_temp
outdoor_temp = property(get_aussentemperatur, set_aussentemperatur)
class kombi(fahrzeug):
def __init__(self):
fahrzeug.__init__(self)
class betonmischer(fahrzeug):
def __del__(self):
fahrzeug.__del__(self)
print("Die betonmischer fahrzeug wurde gelöscht")
OOP_07_Vererbung.py
Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2017 – Dipl.-Ing.(FH) Volker Schepper
05.04.2017
24
Vererbung (3)
mycar = kombi()
print (mycar.outdoor_temp)
lkw = betonmischer()
print (lkw.outdoor_temp)
del mycar
del lkw
OOP_07_Vererbung.py
>>>
18
18
Die Klasse fahrzeug wurde gelöscht
Die Klasse fahrzeug wurde gelöscht
Die betonmischer fahrzeug wurde gelöscht
>>>
Vorlesung: Skriptsprachen DHBW Stuttgart - Semester: SS2017 – Dipl.-Ing.(FH) Volker Schepper
05.04.2017
25
Herunterladen