Commit 2a41fd7f authored by Artur Erbes's avatar Artur Erbes
Browse files

OOP auarbeitung

parent 75990ea5
Pipeline #93769 passed with stages
in 37 seconds
+++
title= "Instanzen und Listen"
date= 2020-12-02T16:50:13+01:00
draft= false
weight = 230
# Table of content (toc) is enabled by default. Set this parameter to true to disable it.
# Note: Toc is always disabled for chapter pages
disableToc = false
# If set, this will be used for the page's menu entry (instead of the `title` attribute)
menuTitle = ""
# The title of the page in menu will be prefixed by this HTML content
pre= ""
# The title of the page in menu will be postfixed by this HTML content
post = ""
# Set the page as a chapter, changing the way it's displayed
chapter= false
# Hide a menu entry by setting this to true
hidden = false
# Display name of this page modifier. If set, it will be displayed in the footer.
LastModifierDisplayName = "Artur Erbes"
# Email of this page modifier. If set with LastModifierDisplayName, it will be displayed in the footer
LastModifierEmail = "artur.erbes@tuhh.de"
+++
Nun wollen wir einige Reihen von Smileys erstellen. Um uns die Arbeit zu ersparen jede einzelne Instanz einer Variablen zuzuweisen, verwenden wir eine Liste. Zunaechst erstellen wir die Liste `Smileys` und befüllen diese mit Hilfe einer for-Schleife.
```
from Smiley import Smiley
Smileys = [Smiley('#f5f242') for x in range (20)]
```
Nun ist es uns möglich mittels einer weiteren Schleife auf die Methoden jeder einzelnen Instanz zuzugreifen und diese auszuführen. In diesem Fall greifen wir auf die Methode 'paint' zu und übergeben jeder Instanz in der Liste 'Smileys' andere Parameter.
```
def draw():
for Smiley in Smileys:
for y in range(10,200):
if y % 50 ==0:
for x in range(10,200):
if x % 20 ==0:
Smiley.paint(x,y,20)
```
\ No newline at end of file
+++
title= "Vererbung"
date= 2020-12-02T16:50:13+01:00
draft= false
weight = 230
# Table of content (toc) is enabled by default. Set this parameter to true to disable it.
# Note: Toc is always disabled for chapter pages
disableToc = false
# If set, this will be used for the page's menu entry (instead of the `title` attribute)
menuTitle = ""
# The title of the page in menu will be prefixed by this HTML content
pre= ""
# The title of the page in menu will be postfixed by this HTML content
post = ""
# Set the page as a chapter, changing the way it's displayed
chapter= false
# Hide a menu entry by setting this to true
hidden = false
# Display name of this page modifier. If set, it will be displayed in the footer.
LastModifierDisplayName = "Artur Erbes"
# Email of this page modifier. If set with LastModifierDisplayName, it will be displayed in the footer
LastModifierEmail = "artur.erbes@tuhh.de"
+++
Vererbung ist ein wichtiges Konzept der objektorientierten Programmierung. Dabei "vererbt" die Basis-Klasse ihre Attribute und Methoden an eine Sub-Klasse. In dieser können weitere Eigenschaften hinzukommen oder die der Basis-Klasse angepasst werden.
Um eine Sub-Klasse zu erstellen, müssen wir die Basis-Klasse in Klammern hinter die neue Sub-Klasse schreiben.
```
class subclass(Smiley):
pass
```
Der Konstruktor der Basis-Klasse wird ebenfalls in der der neuen Sub-Klasse aufgerufen, um ein Erben aller Eigenschaften zu ermoeglichen.
Außerdem fügen wir der Sub-Klasse ein weiteres Attribut für eine zweite Farbe hinzu.
```
class subclass(Smiley):
def __init__(self, col,col2):
Smiley.__init__(self,col)
self.col2=col2
```
Anschliessend erstellen wir die Methode `laugh`, die beim betaetigen der Leertaste einen Lachenden smiley erstellt.
```
def laugh(self, x_pos, y_pos, size_xy):
if keyPressed and key == ' ':
fill(self.col)
ellipse(x_pos, y_pos, size_xy, size_xy)
fill(0)
ellipse(x_pos - size_xy * .2, y_pos - size_xy * .12, size_xy * .2, size_xy * .2)
ellipse(x_pos + size_xy * .2, y_pos - size_xy * .12, size_xy * .2, size_xy * .2)
fill(self.col2)
arc(x_pos, y_pos, size_xy * .75, size_xy * .75, radians(25), radians(155),CHORD);
fill(self.col)
```
Um die neue Klasse zu Nutzen importieren wir sie ebenfalls.
```
from Smiley import Smiley, subclass
Subklasse=subclass('#f5f242','#0ffff0')
def setup():
size(200,200)
def draw():
Subklasse.paint(50,50,50)
Subklasse.laugh(50,50,50)
```
Führen wir den Code aus, stellen wir fest, dass die Sub-Klasse die Methode 'paint' aus der Basis-Klasse übernommen hat.
Zwar nur bedingt aus unserem Beispiel Abzuleiten, verspricht das Konzept der Vererbung einen strukturierten und modularen Code.
\ No newline at end of file
+++
title= "[05] Freitag, 04. Dezemember 2020"
date= 2020-12-02T16:50:13+01:00
draft= false
weight = 230
# Table of content (toc) is enabled by default. Set this parameter to true to disable it.
# Note: Toc is always disabled for chapter pages
disableToc = false
# If set, this will be used for the page's menu entry (instead of the `title` attribute)
menuTitle = ""
# The title of the page in menu will be prefixed by this HTML content
pre= ""
# The title of the page in menu will be postfixed by this HTML content
post = ""
# Set the page as a chapter, changing the way it's displayed
chapter= false
# Hide a menu entry by setting this to true
hidden = false
# Display name of this page modifier. If set, it will be displayed in the footer.
LastModifierDisplayName = "Artur Erbes"
# Email of this page modifier. If set with LastModifierDisplayName, it will be displayed in the footer
LastModifierEmail = "artur.erbes@tuhh.de"
+++
## Objektorientiertes Programmieren
Objektorientiertes Programmieren (OOP) ist ein Programmierparadigma, dessen Konzept die reale Welt zu Grunde liegt. Für den Menschen besteht sowohl die physische als auch die geistige Welt aus logisch zusammengehörenden Objekten mit eigenständiger Identität, einen veränderbaren Zustand, sowie der Möglichkeit auf sie einwirken zu können.
Objekte haben Attribute (Alter, Farbe, Gewicht etc.), durch die sie charakterisiert werden (Alter, Farbe, Gewicht etc.), diese Attribute sind veränderbar. Folglich entspricht bei der Programmierung jedes Attribut einer Variablen. Außerdem besitzen Objekte Methoden. Mithilfe dieser können Objekte bestimmte Funktionalitäten erfüllen.
Alle Objekte entspringen einer Klasse und weisen ähnliche Merkmale auf. Beim Programmieren gibt die Klasse die Attribute und Methoden des Objektes vor. Welche konkreten Werte die Eigenschaften besitzen, ist dann aber objektabhängig.
Im Programmierkontext sind Objekte als eine logische Kombination aus Daten und Funktionen zu Verstehen und Klassen als deren „Baupläne/Muster“.
{{% notice aufgabe %}}
1. Lesen Sie die Abschnitte: Klassen erstellen mit *class*, Objekte erstellen, Mehr Eigenschaften im Script
2. Vollziehen Sie das Programm nach. Hinweis: sollten sonderzeichen kopieren oder verwenden laufen Sie Gefahr die jeweilige Datei unbrauchbar zu machen.
3. Erstellen Sie nun, unter verwendung der Laufschrift, die Klasse newsTicker, diese soll die Bildschirmbreite und y.pos des NewsTickers bei der Instanziierung eines Objektes ueberreicht bekommen.
4. Nun ergaenze Sie die Klasse um die Methode Laufschrift
{{% /notice %}}
## Vererbung
Bei der Vererbung werden Attribute und Methoden einer übergeordneten Klasse auf untergeordnete Klassen vererbt.
Das bedeutet das die Klasse Student alle Eigenschaften und Methode der Klasse Mensch erbt und diese durch spezifische Attribute und Funktionalitäten ergänzt. Der Vorteil ist, dass für die Klasse Student die Methoden und Attribute der überliegenden Klasse nicht neu programmiert werden mussten.
{{% notice aufgabe %}}
1. Erstellen Sie die Klasse Niederschlag und Schnee, sowie Regen als deren untergeordnete Klassen.
2. Strukturieren Sie die Attribute und Methoden sinnvoll.
3. Lassen Sie es schneien und regnen
{{% /notice %}}
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment