Kapitel 11: Funktionen (Teil 3): Verschachtelung und funktionale Programmierung. Grundlagen der Programmierung 1. Holger Karl

Größe: px
Ab Seite anzeigen:

Download "Kapitel 11: Funktionen (Teil 3): Verschachtelung und funktionale Programmierung. Grundlagen der Programmierung 1. Holger Karl"

Transkript

1 Kapitel 11: Funktionen (Teil 3): Verschachtelung und funktionale Programmierung Grundlagen der Programmierung 1 Holger Karl Wintersemester 2016/2017 Inhaltsverzeichnis Inhaltsverzeichnis 1 Abbildungsverzeichnis 2 Liste von Definitionen u.ä Überblick Verschachtelte Funktionen Closures Anonyme Funktionen: lambda-ausdrücke Funktionaler Programmierstil Generatoren Decorators

2 11.8 Zusammenfassung Abbildungsverzeichnis 11.1 Verschachtelte Funktionen, Anlegen der äußeren Funktion Verschachtelte Funktionen, Anlegen der inneren Funktion Verschachtelte Funktionen, Aufruf der inneren Funktion Effekt von nonlocal Nachschlageregel LEGB Aufruf einer Funktion, die als Funktionsergebnis bekannt wurde Zurückgegebene Funktion mit Parameter: Vor Aufruf Zurückgegebene Funktion mit Parameter: Im Aufruf Zwei Closures LISP Popularität reiner funktionaler Sprachen Master of a tiny universe Liste von Definitionen u.ä Definition (Nachschlageregel für Namen: LEGB) Definition (Closure) Definition (λ-ausdrücke: lambda) Definition (Das Decorator-Muster)

3 11.1. Überblick Überblick Was bisher geschah Wir haben uns grundlegende Techniken zur Gestaltung und Nutzung von Funktionen angeschaut Wir haben Funktionen im Kontext von Klassen als Methoden verwendet (eine Funktion, die an/mit einem Objekt arbeitet) Wir haben angedeutet, dass eine Funktion eigentlich auch nur ein Objekt (von einem recht speziellen Typ) ist Dieses Kapitel Wir erweitern die Möglichkeiten, wie man mit Funktionen arbeiten kann Insbes. die Vorstellung, dass eine Funktion ein Objekt ist, auf das man eine Referenz erzeugen und herumreichen kann Darauf aufbauend erarbeiten wir typische Programmiertechniken zur funktionalen Programmierung 11.2 Verschachtelte Funktionen Vorüberlegung: def ist eine Anweisung def ist eine Anweisung, die eine Funktion mit einem Namen versieht Der Code der Funktion wird intern abgelegt In einem Objekt einer geeigneten Klasse gespeichert Im Block einer Funktion stehen Anweisungen Darf dann dort auch ein def stehen? def in Funktionsblock Syntaktisch geht das natürlich Semantik? 2 print("f1") 3 4 def g(): 5 print("g!")

4 4 Liste von Definitionen u.ä. 6 7 g() 8 print("f2") 9 10 f() 11 print("nach f") f1 g! f2 nach f (PT link) def in Funktionsblock: Semantik Bei geschachtelter Funktionsdefinition: Der Name der inneren Funktion ist im Namensraum der äußeren Funktion nach Ausführung der inneren def-anweisung bekannt Dieser Name kann wie jeder andere Funktionsname auch zum Aufruf benutzt werden Nach Rückkehr der äußeren Funktion verschwindet der Name g Im Beispiel: damit ist diese Funktion auch nicht aufrufbar! Visualisierung 1. Erzeugen von f Mit Ausführung der def-anweisung in Zeile 1 wird das Objekt für die Funktion f angelegt und der Name f (im globalen Namensraum) referenziert es. Abbildung 11.1 zeigt diesen Zustand. Abbildung 11.1: Verschachtelte Funktionen, Anlegen der äußeren Funktion

5 11.2. Verschachtelte Funktionen 5 2. Erzeugen von g Abbildung 11.2 zeigt den nächsten Schritt. Nach dem Aufruf von f wird in f selbst die Zeile 4 ausgeführt. Dadurch wird ebenfalls ein Objekt für eine Funktion angelegt. Dieses Objekt unterscheidet sich (zunächst) nicht besonders von einem Funktionsobjekt, dass im globalen Scope erzeugt wurde (aber siehe später Abschnitt 11.3). Für dieses Objekt wird der Name g vereinbart; dieser Name existiert nur im Namensraum von f (präziser: im Namensraum des ersten Aufrufs von f, in der Abbildung als f1 angegeben f1 steht hier für Frame 1, nicht für Funktion f). Abbildung 11.2: Verschachtelte Funktionen, Anlegen der inneren Funktion 3. Aufruf von g aus f heraus Der eigentlich Aufruf von g aus f heraus (Zeile 7) ist dann ein ganz normaler Funktionsaufruf; hier passiert nichts außergewöhnliches (Abbildung 11.3). Dass es sich um eine Funktion handelt, die in f vereinbart wurde und dass der Name g nur im lokalen Namensraum bekannt ist, spielt dabei keine Rolle. Abbildung 11.3: Verschachtelte Funktionen, Aufruf der inneren Funktion

6 6 Liste von Definitionen u.ä Verschachtelte Funktionen: Argumente, Rückgabewert Argumentübergabe und Rückgabewert funktionieren ganz normal 2 def g(x): 3 print(x+1) 4 return x y = g(17) 7 print(y) 8 9 f() Verschachtelte Funktionen: Zugriff auf Variablen? Wie funktioniert der Zugriff auf Variablen außerhalb des eigenen Namensraum aus einer inneren Funktion heraus? Im wesentlichen: Regeln wie bisher Zugriff auf globale Variablen, lesend Ohne besondere Vorkehrungen, wenn nur lesen 2 def g(): 3 print(x) 4 g() 5 6 x = 1 7 f() Zugriff auf globale Variablen, schreiben Schreibender Zugriff: Erfordert Deklaration mit global

7 11.2. Verschachtelte Funktionen 7 2 def g(): 3 global x 4 x = x print(x) 6 g() 7 8 x = 1 9 f() Zugriff auf Variablen der äußeren Funktion? global? Spannender Punkt: Was ist mit Variable, die nicht global, aber in der äußeren Funktion vereinbart ist? Zugriff mit global? 2 def g(): 3 global x 4 x = x print(x) 6 x = 1 7 g() 8 9 f() Fehlermeldung Das scheitert: Es gibt kein globales x, also kann der Zugriff hier nicht gelingen. 1 Traceback (most recent call last): 2 File "<stdin>", line 9, in <module> 3 File "<stdin>", line 7, in f 4 File "<stdin>", line 4, in g 5 NameError: name x is not defined

8 8 Liste von Definitionen u.ä Zugriff auf Variablen der äußeren Funktion? Direkt? 2 def g(): 3 x = x print(x) 5 x = 1 6 g() 7 8 f() Fehlermeldung Scheitern ist plausibel: Nach bisherigen Regeln wird im lokalen Namensraum von g gesucht; dort gibt es kein x. Also Fehler. 1 Traceback (most recent call last): 2 File "<stdin>", line 8, in <module> 3 File "<stdin>", line 6, in f 4 File "<stdin>", line 3, in g 5 UnboundLocalError: local variable x referenced before assignment Zugriff auf Variablen der äußeren Funktion Reihenfolge? Liegt es vielleicht an der Reihenfolge? Im Beispiel eben war bei der Definition von g die Variable x noch gar nicht existent Muss es das x schon geben, wenn g definiert wird? Damit g darauf zugreifen kann? 2 x = 1 3 def g(): 4 print(x) 5 g() 6 7 f() 1

9 11.2. Verschachtelte Funktionen 9 Ja! Offenbar wird auch der Namensraum einer umschließenden Funktion durchsucht! Modifizierender Zugriff auf Variablen der äußeren Funktion? Kann man solche umschließenden Variablen auch verändern? 2 x = 1 3 def g(): 4 x += 1 5 print(x) 6 g() 7 8 f() Offenbar nein Das ist analog zur Situation bei global Fehlermeldung 1 Traceback (most recent call last): 2 File "<stdin>", line 8, in <module> 3 File "<stdin>", line 6, in f 4 File "<stdin>", line 4, in g 5 UnboundLocalError: local variable x referenced before assignment Neues Schlüsselwort: nonlocal Analog zu global: Neues Schlüsselwort, um umschließende Variablen zu verändern nonlocal Unterschied zu global: Die Variable muss schon existieren! (durch Zuweisung, siehe oben) 2 x = 1 3 def g():

10 10 Liste von Definitionen u.ä. 4 nonlocal x 5 x += 1 6 print(x) 7 g() 8 9 f() Beispiel: Tiefere Verschachtelung (1) 2 x = 1 3 def g(): 4 def h(): 5 nonlocal x 6 x += 1 7 print("x in h:", x) 8 h() 9 print("x in g:", x) 10 g() 11 print("x in f:", x) f() x in h: 2 x in g: 2 x in f: Beispiel: Tiefere Verschachtelung (2) 2 x = 1 3 def g(): 4 x = 42 5 def h(): 6 nonlocal x 7 x += 1 8 print("x in h:", x) 9 h() 10 print("x in g:", x)

11 11.2. Verschachtelte Funktionen g() 12 print("x in f:", x) f() x in h: 43 x in g: 43 x in f: 1 (PT link) Anmerkung: x aus f? Es gibt keine Möglichkeit, von h aus auf das von f angelegte x zuzugreifen. Dieses x wird durch das x von g verdeckt! Visualisierung Es lohnt sich, hier kurz Abbildung 11.4 zu betrachten. Die Abbildung zeigt den Zustand nach Ausführung der Addition in h, Zeile 7. Dabei fällt auf, dass es einerseits natürlich eine Variable x im Frame f1 von f gibt, die auf den Wert 1 verweist; anderseits auch eine Variable x im Frame f2 von g gibt, die auf den Wert 43 (nach der Addition) weist; aber keine Variable x im Frame von h gibt; nonlocal sorgt dafür, dass der Namespace von g hier benutzt wird. Abbildung 11.4: Effekt von nonlocal

12 12 Liste von Definitionen u.ä Nachschlageregel: LEGB Bisher einfache Nachschlagregel für Namensräume: Erst lokal, dann global Tatsächlich etwas umfangreicher Definition 11.1 (Nachschlageregel für Namen: LEGB). Python sucht Namen in diesen Namensräumen, in dieser Reihenfolge: 1. dem lokalen Namensraum (einer Funktion): L 2. dem Namensraum umgebender (enclosing) Funktionen: E 3. dem globalen Namensraum: G 4. dem Namensraum eingebauter (vordefinierter) Namen (build-in): B Kurz: Die Reihenfolge ist LEGB Nachschlageregel: LEGB Illustration Abbildung 11.5: Nachschlageregel LEGB Abbildung 11.5 illustriert die Nachschlageregel LEGB: von innen nach aussen Closures Vorüberlegung: Referenzen auf Funktionen? Kann man Funktionsnamen wie normale Namen behandeln? Kann man diese kopieren, und trotzdem noch aufrufen?

13 11.3. Closures 13 2 print("f!") 3 4 g = f 5 g() f! Was passiert hier? f ist ein Name für ein Funktionsobjekt Die Anweisung g = f lässt den Namen g auf das gleiche Objekt referenzieren Also wird der Aufruf g() auch die gleiche Funktion aufrufen Der Name der referenzierenden Variable ist irrelevant! Vorüberlegung 2: Funktionsreferenzen als Rückgabewert? Wenn man Funktionsreferenzen kopieren kann Dann kann man sie doch bestimmt auch als Rückgabewert einer Funktion verwenden? 2 def g(): 3 print("innere Funktion!") 4 return g 5 6 h = f() 7 h() (PT link) innere Funktion! Natürlich! Die Semantik ist ganz banal! Nach Aufruf von f ist h ein weiterer Name für das Funktionsobjekt geworden, das ursprünglich unter dem Namen g eingeführt wurde

14 14 Liste von Definitionen u.ä. Visualisierung Auch Abbildung 11.6 zeigt, dass hier eigentlich nichts spannendes passiert. Der Umstand, dass das Funktionsobjekt g innerhalb einer Funktion erzeugt wurde, ist genauso viel oder wenig relevant wie das bei einem normalen Objekt der Fall wäre. Abbildung 11.6: Aufruf einer Funktion, die als Funktionsergebnis bekannt wurde Analogie: Normales Objekt als Rückgabewert Zur Analogie: Dieser Code ist ja klar Eine Liste kann man nicht aufrufen, sondern ausgeben Aber sonst ist das genau das gleiche! 2 g = ["ein", "Beispiel", "Objekt"] 3 return g 4 5 h = f() 6 print(h) Funktionen mit Parametern als Rückgabe? Was passiert, wenn wir eine Funktion zurückgeben, die Parameter benutzt? 2 def g(x): 3 print("innere Funktion!", x) 4 return g 5 6 h = f() 7 h("wert für x")

15 11.3. Closures 15 innere Funktion! Wert für x Parameter bleibt bestehen Dann hat die Funktion natürlich einen Parameter Aufruf unter neuem Namen erfordert diesen Parameter Funktion mit Zugriff auf nichtlokale Variablen als Rückgabe Spannender: Innere Funktion greift auf Parameter der äußeren Funktion zu Innere Funktion wird zurückgeben und dann aufgerufen Erwartetes Verhalten? 2 n = 5 3 def g(x): 4 print("innere Funktion!", x*n) 5 return g 6 7 h = f() 8 h("wert für x") innere Funktion! Wert für xwert für xwert für xwert für xwert für x (PT link) Äußerer Parameter bleibt erhalten! Offenbar behält die Funktion, die unter h im globalen Scope bekannt ist, Zugriff auf die Variable n Erstaunlich! n im Namensraum von f, aber f schon beendet!? Visualisierung Abbildung 11.7 zeigt hier den Zustand beim Ablauf von f, kurz vor Rückgabe von g an den Aufruf in Zeile 7. Man sieht schön das angelegte Funktionsobjekt für g (mit dem Parameter x) und den Namen n für die Zahl 5.

16 16 Liste von Definitionen u.ä. Abbildung 11.7: Zurückgegebene Funktion mit Parameter: Vor Aufruf Abbildung 11.8 visualisiert dann die Ausführung der Funktion h (was g ist). g wird mit dem String Wert für x als Wert für den Parameter x aufgerufen. Zusätzlich behält g Zugriff auf den Wert von n (hier nicht schön visualisiert; man sieht aber, dass der Frame f1 noch existiert. Abbildung 11.8: Zurückgegebene Funktion mit Parameter: Im Aufruf Nicht-lokale Variable selbst als Parameter In obigem Beispiel: n hatte einen festen Wert Aber wo der Wert für n herkommt ist egal Er muss lediglich vor dem def von g vorhanden sein Es könnte selbst ein Funktionsparameter sein? 1 def f(n): 2 def g(x): 3 print("innere Funktion!", x*n) 4 return g 5 6 h = f(3) 7 h("wert für x")

17 11.3. Closures 17 innere Funktion! Wert für xwert für xwert für x Beispiel Aufgeräumt 1 def vervielfacher_fabrik(n): 2 def vervielfacher(x): 3 return x*n 4 5 return vervielfacher 6 7 doppler = vervielfacher_fabrik(2) 8 fuenffacher = vervielfacher_fabrik(5) 9 10 print(doppler("mehrfach ausgeben! ")) 11 print(fuenffacher("mehrfach ausgeben! ")) Mehrfach ausgeben! Mehrfach ausgeben! Mehrfach ausgeben! Mehrfach ausgeben! Mehrfach ausgeben! Mehrfach ausgeben! Me (PT link) Muster: Fabrik (Factory) Beispiel hatte mehrere Bestandteile Eine...-fabrik Funktion: Sie erzeugt eine andere Funktion, richtig parametriert Der Bauplan für die zu erzeugende Funktion (hier: vervielfacher) * Bauplan wird konkretisiert durch Einsetzen von Werten für Parameter (hier: n) Mehrfacher Aufruf der Fabrik mit unterschiedlichen Parametern * Ergibt maßgeschneiderte Funktionen, die aufgerufen werden Das sog. factory pattern Realisierung: Closures Das erstaunliche: Die produzierten Funktionen merken sich die Werte der Parameter der Fabrik-Funktion! Dazu werden die Frames (Namensräume) dieser Fabrikfunktionsaufrufe nicht entsorgt, sondern an die produzierte Funktion (doppler, fuenffacher,...) gekoppelt Diese Datenstruktur (Kopplung von Frames an einen Funktionsnamen) heißt Closure Closure merken sich den relevanten Zustand ein state retention Ansatz

18 18 Liste von Definitionen u.ä. Definition 11.2 (Closure). Ein Closure ist eine Funktion, deren nicht-lokale Namen an Objekte gebunden wurden. Visualisierung Abbildung 11.9 zeigt die beiden im Beispiel entstandenen Closures. Die beiden Funktionsnamen doppler und fuenffacher referenzieren jeweils zwei Funktionsobjekte. Der entscheidende Punkt ist nun die Angabe parent bei diesen Objekten: sie verweisen auf den Namensraum, in dem die fehlenden Variablen (hier: n) gesucht werden sollen. Dies sind die beiden Namensräume, die durch die beiden Aufrufe von vervielfacher_fabrik erzeugt wurden. Abbildung 11.9: Zwei Closures Anmerkung: Terminologie Je nach Literaturquelle wird auch das Programmiermuster selbst als Closure bezeichnet, nicht nur die Realisierungstechnik. Das macht letztlich keinen großen Unterschied. Anmerkung: Vorkommen von Closures Closures kommen häufig in funktionalen Sprachen vor. Neben Python ist Javascript ein populäres Beispiel, bei dem häufig Closures benutzt werden, um die Reaktion auf Nutzereingaben oder Daten vom Server zu beschreiben. Auch in Sprachen wie Lisp oder Ruby sind Closures ein populäres, elegantes Sprachmittel. Sprachen wie Java, C++, C# und Abkömmlinge stellen in der Regel nur vereinfachte Strukturen zur Verfügung und können das Konzept der Closures nicht vollständig abbilden.

19 11.4. Anonyme Funktionen: lambda-ausdrücke Nutzen: Fabriken und Closures Beispiel oben ist zugeben etwas künstlich Typischer Einsatz von Closures: Graphische Nutzerschnittstellen: Funktionen, die abhängig von Nutzereingabe erzeugt werden Web-Anwendungen: Funktionen erzeugen, die auf Veränderungen reagiert (sog. callbacks) * Häufig in event handlers in Javascript! 11.4 Anonyme Funktionen: lambda-ausdrücke Funktionsdefinition bisher: def def ist Anweisung Erzeugt ein Funktionsobjekt Legt einen Namen im entsprechenden Namensraum an Verbindet Namen mit erzeugtem Objekt Was, wenn man den Namen eigentlich gar nicht braucht? Sondern nur das Funktionsobjekt an sich? Z.B., weil es in einer Factory sowieso direkt zurückgegeben wird? Oder nur an einer einzigen Stelle gebraucht wird, z.b. in einer list comprehension? Funktionsname in Factory: Nötig? Beispiel oben: Name vervielfacher eigentlich nicht sehr nützlich 1 def vervielfacher_fabrik(n): 2 def vervielfacher(x): 3 return x*n 4 5 return vervielfacher 6 7 doppler = vervielfacher_fabrik(2) 8 fuenffacher = vervielfacher_fabrik(5) 9 10 print(doppler("mehrfach ausgeben! ")) 11 print(fuenffacher("mehrfach ausgeben! "))

20 20 Liste von Definitionen u.ä. Mehrfach ausgeben! Mehrfach ausgeben! Mehrfach ausgeben! Mehrfach ausgeben! Mehrfach ausgeben! Mehrfach ausge Anonyme Funktionen: λ-ausdrücke Das kommt häufig vor, verdient also Sprachunterstützung Definition 11.3 (λ-ausdrücke: lambda). Ausdruck, der eine anonyme Funktion vereinbart Keine Anweisung! Präziser: der ein Funktionsobjekt erzeugt und eine Referenz auf dieses Objekt zurückgibt Eigenschaften Anonyme Funktion darf beliebig viele Parameter haben Aber die Funktion darf nur aus einem Ausdruck bestehen; sie darf keine Anweisungen nutzen Syntax: lambda Liste von Parameter : Zu berechnender Ausdruck λ-ausdrücke Beispiele Funktion, die drei Zahlen addiert 1 adder = lambda a, b, c : a + b + c 2 print(adder(1, 2, 3)) 6 lambda in Factory Viel besser lesbare Closure-Version: 1 def vervielfacher_fabrik(n): 2 return lambda x: x*n 3 4 doppler = vervielfacher_fabrik(2) 5 fuenffacher = vervielfacher_fabrik(5) 6 7 print(doppler("mehrfach ausgeben! ")) 8 print(fuenffacher("mehrfach ausgeben! "))

21 11.5. Funktionaler Programmierstil 21 Mehrfach ausgeben! Mehrfach ausgeben! Mehrfach ausgeben! Mehrfach ausgeben! Mehrfach ausgeben! Mehrfach ausgeben! Me λ-ausdrücke Funktionen an Objekte übergeben Objekte brauchen manchmal eine Funktion, die sie aufrufen können Häufig: GUI-Frameworks Funktion wird nur als Referenz in Objekt gespeichert Funktion bei Methodenaufruf bei lambda erzeugen 1 class SomeClass: 2 def init (self, name, fct): 3 self.name = name 4 self.fct = fct 5 6 def do(self): 7 self.fct() o = SomeClass(name="somename", 11 fct = lambda: some expression here) 12 o.do() 11.5 Funktionaler Programmierstil Beobachtung: Funktionen sind first-class citizens Python behandelt Funktionen wie ganz normale Objekte, mit allerlei Operationen darauf Funktionen als Parameter, als Rückgabewerte, speichern in Variablen oder Datenstrukturen,... Solche Funktionen sind first-class citizens Dies erlaubt funktionale Programmierung als Programmierparadigma Funktionale Programmierung Typische Merkmale Funktionen sind first-class citizens Impliziert: Funktionen können auf Funktionen angewendet werden Rekursion Keine Seiteneffekte

22 22 Liste von Definitionen u.ä Beispiel: map, filter Iterables filter Häufiger Stil in funktionalen Sprachen: Daten in Listen ablegen Listen filtern gemäß einer Filterfunktion Funktion auf jedes Element einer Aufzählung (iterable) anwenden Liste zu einem einzelnen Wert reduzieren Sog. map/filter/reduce-muster Idee nicht nur auf Listen eingeschränkt Warum nicht auf Tuple, Mengen,...? Alles, was man der Reihe nach durchlaufen kann Formalisiert: Klasse Iterable Unterklassen: list, str, tuple, dict, Dateien,... filter: eingebaute Funktion Signatur: filter(function, iterable) Wende die Funktion function auf jedes Element einer Aufzählung an Resultat: Aufzählung mit den Elementen, bei denen die Funktion wahr ergab Beispiel: 1 l = [1, 2, 3, 4, 5] 2 l2 = filter(lambda x: x % 2 == 1, l) 3 print(list(l2)) map [1, 3, 5] map: eingebaute Funktion Signatur: map(function, iterable) Wende die Funktion function auf jedes Element eines Objektes an, dass zu einer von iterable abgeleiteten Klasse gehört Resultat: Aufzählung der Funktionsergebnisse Beispiel:

23 11.5. Funktionaler Programmierstil 23 1 l = [1, 2, 3, 4, 5] 2 l2 = map(lambda x: x*x, l) 3 print(list(l2)) 4 5 print(" -- ".join(map(str,l))) [1, 4, 9, 16, 25] Anmerkung Konvertierung in Liste nur nötig für print Weitere Operationen auf iterables Reichlich Beispiele, siehe Übungen: zip reduce λ-ausdrücke und flexible Argumente Eine Funktion, die beliebig viele Argumente beliebigen Types mit & dazwischen ausgibt? 1 out = lambda *x: print(" & ".join(map(str, x))) 2 out(1, 2, 3, "hallo", "gp1") 1 & 2 & 3 & hallo & gp Vergleich: list comprehensions und map/filter Die Beispiele oben sind in Python einfacher und kompakter als list comprehensions aufzuschreiben Allerdings: dadurch wird die komplette Liste erzeugt Sinnvoll? 1 l = [x for x in range(100000) if x < 2][0:1] 2 print(l)

24 24 Liste von Definitionen u.ä. Abbildung 11.10: LISP Abbildung 11.11: Popularität reiner funktionaler Sprachen Evolution funktionaler Sprache: Großvater LISP Rein funktionale Sprachen 11.6 Generatoren Funktionen auf große Listen anwenden? Große Eingaben brauchen viel Platz Ggf. kann das Erzeugen der Eingabe schon allen Speicherplatz verbrauchen Mit endlichen Listen kann man keine unendlichen Folgen erzeugen Beispiel: Alle Primzahlen Vielleicht Idee: Werte nach und nach erzeugen Statt komplette Liste zu berechnen, nur jeweils den nächsten Wert Auf Aufforderung als Funktionsaufruf? Werte auf Aufforderung Skizze?

25 11.6. Generatoren 25 1 def magic_prime_production(start): 2 if erster Aufruf: 3 letzte_zahl = start 4 res = nächste Primzahl größer als letzte_zahl 5 letzte_zahl = res 6 return res 7 8 # Nutzung in for Schleife?? 9 for p in magic_prime_production(): 10 print(p) Werte auf Aufforderung Realisierung? Mit Funktionsaufruf wie bisher geht das so nicht Funktion hat keine Vorstellung, was der letzte Wert ist Wir müssten das der Funktion beibringen?...? Analogie: Closures? Hat sich auch Zustand gemerkt? Realisierung: Closure-artig Mit Closure-artiger Zustandsspeicherung lässt sich das Problem lösen Siehe auch Programmieraufgabe! Aber syntaktisch unhandlich also Anweisung! Werte auf Aufforderung Generatoren Syntaktischer Zucker: Generatoren Schlüsselwort: yield und Generatorenfunktionen Idee: Ersetze in einer Funktion return durch yield Liefert Wert an Aufrufer und merkt sich Zustand für nächsten Aufruf! * Zustand: Werte lokaler Variablen; Zeilennummer; Generator: Einfaches Beispiel Generator wird die Werte 1, 2, 3 liefern. Danach nichts. 1 def gen(): 2 yield 1 3 yield 2 4 yield 3

26 26 Liste von Definitionen u.ä Generatoren: Nutzung Aufruf: Unterscheidung erster und folgende Aufrufe notwendig Erster Aufruf: normaler Funktionsaufruf, initialisiert * Gibt ein Generator-Objekt Folgender Aufruf: Funktion next auf dieses Generator-Objekt anwenden Generator: Einfaches Beispiel Nutzung Generator wird die Werte 1, 2, 3. Danach StopIteration-Exception. 1 def gen(): 2 yield 1 3 yield 2 4 yield g = gen() 7 print(g) 8 print(next(g)) 9 print(next(g)) 10 print(next(g)) 11 try: 12 print(next(g)) 13 except StopIteration: 14 print("da kommt nichts mehr") <generator object gen at 0x10301b3b8> da kommt nichts mehr Generator: Nutzung in Schleife Spannender Punkt: Generatoren können wie Iterables in Schleife benutzt werden Syntax dadurch deutlich einfacher StopIteration führt zum Schleifenende 1 def gen(): 2 yield 1

27 11.6. Generatoren 27 3 yield 2 4 yield for v in gen(): 7 print(v) Beispiel: Unendlicher Generator Produziere alle Vielfachen von 3 ab Startwert: 1 def gen(start): 2 # wir wollen alle Vielfache, also Endlosschleife: 3 while True: 4 if start % 3 == 0: 5 yield start 6 print("restarting with value: ", start) 7 start += for v, i in zip(gen(16), range(5)): 10 print("wert: ", v) Verständnisfragen Wozu range und zip in Beispiel? Wann werden Aufrufe von gen durchgeführt? Wieviele Schleifendurchläufe? Beispiel: Generator als Closure 1 def gengen(multiplier): 2 def gen(start): 3 while True: 4 if start % multiplier == 0: 5 yield start 6 start += return gen 9

28 28 Liste von Definitionen u.ä. 10 dreis = gengen(3) 11 viers = gengen(4) for d, v, i in zip(dreis(10), viers(17), range(2)): 14 print (d, v) Ausgabe? 1 pingo_title = "WAs wird hier ausgebenen?" 2 pingo_type = "single" 3 pingo_questions = ["12, 15 und 20, 24", "12, 20 und 15, 24", "10, 17 un 4 pingo_duration = "60" 5 6 %pingo Wesentlicher Punkt: Speicherverbrauch Natürlich kann man das auch über eine list comprehension hinschreiben Aber Speicherverbrauch: List comprehension erzeugt die gesamte Liste vor Verarbeitung; muss im Speicher stehen Generator: nur Platz für eine einzige Iteration notwendig * Also: start, und die Closure für den Generator Generators für List comprehensions Kombination der Vorteile? Elegante Syntax der List comprehension? Ohne den Speicherverbrauch? Generatoren statt Listen! Kleine syntaktische Änderung: Wir ersetzen [] durch () in Schleifen 1 print("mit Liste: ") 2 for i in [x for x in range(17, 40) if x % 3 == 0]: 3 print(i, end=", ") 4 5 print("\nmit Generator: ")

29 11.7. Decorators 29 6 for i in (x for x in range(17, 40) if x % 3 == 0): 7 print(i, end=", ") Mit Liste: 18, 21, 24, 27, 30, 33, 36, 39, Mit Generator: 18, 21, 24, 27, 30, 33, 36, 39, 11.7 Decorators Ausgangspunkt Wir haben folgende Eigenschaften kennengelernt: Funktionen sind first-class citizens in Python Funktionsnamen sind eigentlich auch nur Variablen, die ein Funktionsobjekt referenzieren Solche Referenzen können aus Funktionen zurückgegeben werden Und Referenzen können Funktionsnamen zugewiesen werden Was kann man damit anstellen? Überlegung 1: Wir können aus einer Funktion eine neue Funktion bauen Beispiel: Wir möchten die Ausgaben einer Funktion f mit == einrahmen Ansatz: Baue eine neue Funktion, die = ausgibt f aufruft und nochmal = ausgibt Diese neue Funktion bauen wir als Closure und geben eine Referenz darauf zurück Schauen wir uns den Code in mehreren Schritten an! Eingerahmte Ausgabe Version 1 Version 1: Eine einfache factory 2 print("ausgabe von f")

30 30 Liste von Definitionen u.ä. 3 4 def einrahmer_fabrik(): 5 def einrahmer(): 6 print("=====") 7 f() 8 print("=====") 9 10 return einrahmer f_neu = einrahmer_fabrik() 13 f_neu() ===== Ausgabe von f ===== Eingerahmte Ausgabe Version 2 Version 1 ist unnötig speziell Factory-Muster kann doch Parameter nehmen (Closures!) 2 print("ausgabe von f") 3 4 def g(): 5 print("ausgabe von g") 6 7 def einrahmer_fabrik(fct): 8 def einrahmer(): 9 print("=====") 10 fct() 11 print("=====") return einrahmer f_neu = einrahmer_fabrik(f) 16 g_neu = einrahmer_fabrik(g) f_neu() 19 g_neu() =====

31 11.7. Decorators 31 Ausgabe von f ===== ===== Ausgabe von g ===== Eingerahmte Ausgabe Version 3 Den einrahmenden Text kann man auch zum Parameter machen 2 print("ausgabe von f") 3 4 def g(): 5 print("ausgabe von g") 6 7 def einrahmer_fabrik(fct, s="==========="): 8 def einrahmer(): 9 print(s) 10 fct() 11 print(s) return einrahmer f_neu = einrahmer_fabrik(f, "***********") 16 g_neu = einrahmer_fabrik(g) f_neu() 19 g_neu() *********** Ausgabe von f *********** =========== Ausgabe von g =========== Eingerahmte Ausgabe Version 4 Brauchen wir die ursprüngliche Version von f noch? Nein? Dann brauchen wir auch keinen neuen Namen!

32 32 Liste von Definitionen u.ä. 2 print("ausgabe von f") 3 4 def einrahmer_fabrik(fct, s="==========="): 5 def einrahmer(): 6 print(s) 7 fct() 8 print(s) 9 10 return einrahmer # Wir lassen die Variable f ein neues Funktionsobjekt referenzieren: 13 f = einrahmer_fabrik(f, "***********") f() *********** Ausgabe von f *********** Muster Dieses Muster tritt häufig auf, ist extrem nützlich Einer Funktion wird neues Verhalten hinzugefügt, ohne dass dies für einen Nutzer der Funktion sichtbar ist! Die Signatur der Funktion verändert sich nicht; nicht einmal der Name Nützlich, um vorhandenen Code anzupassen Dekoration (decorator) Definition 11.4 (Das Decorator-Muster). Das Decorator-Muster beschreibt eine typische Struktur, mit der eine Funktion mit weiterer Funktionalität versehen werden kann, ohne die Funktion oder den nutzenden Code zu verändern Decorators: Anwendungen Vorhandenen Code verändern, patchen Fehlersuche, Leistungsmessung Komplexere Code-Strukturen GUI-Frameworks

33 11.7. Decorators 33 * Beispiel: einer Funktion zum Zeichnen eines Fenster werden als decorators Funktionen zum Zeichnen von Scrollbars hinzugefügt Funktion selbst und Aufrufer merken nicht, dass das Fenster Scrollbars hat Webframework (Beispiel: Django) * Die Handhabung von URLs wird durch Dekoratoren angepasst Decorators für Methoden Methoden einer Klasse sind Funktion Also können sie dekoriert werden Decorators: Syntaktischer Zucker Decorators stellen sich als extrem nützlich und vielseitig heraus Aber auch unhandlich Beispiel oben: Die Funktion f wird 3x erwähnt? DRY? Die Dekoration kann an ganz anderer Stelle geschehen; unübersichtlich Kompakter? Sprachunterstützung? Decorators: Syntaktischer Zucker (2) Syntax: Die dekorierende Funktion wird wie üblich vereinbart Sie nimmt einen Parameter: die aufzurufende (zu dekorierende) Funktion Die zu dekorierende Funktion wird durch voranstellen dekoriert Decorator: kompakte Syntax Beispiel 1 def einrahmer_fabrik(fct): 2 def einrahmer(): 3 print("=====") 4 fct() 5 print("=====") 6 7 return einrahmer 8 10 def f(): 11 print("ausgabe von f")

34 34 Liste von Definitionen u.ä f() ===== Ausgabe von f ===== Decorator: kompakte Syntax Beispiel mit typischen Namen Die _fabrik-terminologie wird bei Dekoratoren typischerweise weggelassen 1 def einrahmer(fct): 2 def _einrahmer(): 3 print("=====") 4 fct() 5 print("=====") 6 7 return _einrahmer 8 10 def f(): 11 print("ausgabe von f") f() ===== Ausgabe von f ===== Decorators: Syntaktischer Zucker Kompakt, leicht lesbar, elegant, häufig benutzt Sie werden kaum ein nicht-triviales Python-Programm ohne decorators finden Nachteil: Parameter an dekorierende Funktion übergeben ist umständlich Beispiel Benchmarking Wie bestimmt man Zeitverbrauch einer Funktion?

35 11.7. Decorators 35 Man schaut in einem Dekorator vor und nach dem Aufruf der Funktion auf die Uhr! 1 import time 2 3 def benchmark(fct): 4 def _benchmark(*args, **kwargs): 5 tstart = time.time() 6 r = fct(*args, **kwargs) 7 tend = time.time() 8 9 print("{} (args: {}, kwargs: {}) verbrauchte {} Sekunden".format( 10 fct. name, args, kwargs, tend-tstart)) return r return _benchmark def f1(s): 18 print("anfang f1") 19 time.sleep(s) 20 print("ende f1") f1(0.2) 24 f1(0.6) Anfang f1 Ende f1 f1 (args: (0.2,), kwargs: {}) verbrauchte Sekunden Anfang f1 Ende f1 f1 (args: (0.6,), kwargs: {}) verbrauchte Sekunden Property Tatsächlich kennen wir schon einen Decorator: Property Bisher nur als eingebaute Funktion property Es fehlt also nur noch der Zucker Getter: dekorieren; Funktionsname wird Name der Property

36 36 Liste von Definitionen u.ä. Setter: dekorieren; Funktionsname muss Name der Property sein, mit value 1 class Temperature: 2 def init (self, temp=0): 3 # auch Methoden der Klasse greifen normal auf das Attribut zu: 4 self._temperature = temp 5 7 def temperature(self): 8 print("lesender Zugriff") 9 return self._temperature def temperature(self, value): 13 print("schreibender Zugriff") 14 if value < 0: 15 raise ValueError("Keine negativen Temperaturen in Kelvin!") 16 else: 17 self._temperature = value t1 = Temperature(17) 20 print(t1.temperature) 21 t1.temperature = print(t1.temperature) Lesender Zugriff 17 Schreibender Zugriff Lesender Zugriff 42 Für Fortgeschrittene Warum kann man hier scheinbar eine Funktion doch überschreiben? Das geht doch angeblich nicht? verketten? Siehe auch: Quelle des Beispiels

37 11.7. Decorators 37 1 def star(func): 2 def inner(*args, **kwargs): 3 print("*" * 30) 4 func(*args, **kwargs) 5 print("*" * 30) 6 return inner 7 8 def percent(func): 9 def inner(*args, **kwargs): 10 print("%" * 30) 11 func(*args, **kwargs) 12 print("%" * 30) 13 return inner def printer(msg): 18 print(msg) printer("hallo GP1!") ****************************** %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Hallo GP1! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ****************************** Decorators: Ausblick Das Dekorieren von Methoden einer Klasse ist typisch (siehe Man kann auch Klassen zu decorators machen, nicht nur Funktionen Siehe auch eine lange Liste mit Beispielen War doch gar nicht so schwer Abbildung 11.12: Master of a tiny universe

38 38 Liste von Definitionen u.ä Zusammenfassung Zusammenfassung Und nun? Funktionen können Funktionen definieren Erfordert Erweiterung der Nachschlageregel für Namen: LEGB Macht ein Programmierparadigma Funktionen zu first-class citizens, eröffnen sich viele elegante Möglichkeiten Fabriken / Closures, um Funktionen zur Laufzeit zu erzeugen Generatoren, um große (unendliche) Aufzählungen bei Bedarf zu erzeugen Decorators, um Funktionen zur Laufzeit zu modifizieren Eine elegante Syntax ist dabei für praktische Nützlichkeit wichtig lambda-ausdrücke für anonyme für Decorators Was waren diese seltsamen import-anweisungen??

Programmierkurs Python I

Programmierkurs Python I Programmierkurs Python I Michaela Regneri 2010-01-21 (Folien basieren auf dem gemeinsamen Kurs mit Stefan Thater) Übersicht Mehr Abkürzungen in Python: - map - List Comprehensions Anonyme Funktionen, lambda

Mehr

Informatik I. 4. Funktionen: Aufrufe und Definitionen. 25. Oktober Albert-Ludwigs-Universität Freiburg. Informatik I.

Informatik I. 4. Funktionen: Aufrufe und Definitionen. 25. Oktober Albert-Ludwigs-Universität Freiburg. Informatik I. 4. Funktionen: Aufrufe und en Aufrufe Albert-Ludwigs-Universität Freiburg 25. Oktober 2013 1 / 23 Aufrufe Funktionsaufrufe 2 / 23 Funktionsaufrufe Innerhalb von Programmiersprachen ist eine Funktion ein

Mehr

Programmieren in Python

Programmieren in Python Iteratoren und Generatoren Programmieren in Python 10. Iteratoren und Generatoren Malte Helmert Albert-Ludwigs-Universität Freiburg Überblick über diese Lektion: Iteratoren Generatoren Generator Comprehensions

Mehr

Programmierung in Python

Programmierung in Python Programmierung in Python imperativ, objekt-orientiert dynamische Typisierung rapid prototyping Script-Sprache Funktionales und rekursives Programmieren P raktische Informatik 1, W S 2004/05, F olien P

Mehr

Beispiel 19. December 4, 2009

Beispiel 19. December 4, 2009 Beispiel 9 December 4, 2009 Computermathematik (für Informatik) 4. Übungsblatt (Musterlösung) 2. 2. 2009 Die heutigen Übungen sollen mit dem Computeralgebrasystem Sage gelöst werden. Die Lösung der Beispiele

Mehr

1 Bedingungen und der Typ bool. Informatik I: Einführung in die Programmierung 5. Bedingungen, bedingte Ausführung und Schleifen. Vergleichsoperatoren

1 Bedingungen und der Typ bool. Informatik I: Einführung in die Programmierung 5. Bedingungen, bedingte Ausführung und Schleifen. Vergleichsoperatoren 1 und der Informatik I: Einführung in die Programmierung 5., bedingte Ausführung und Albert-Ludwigs-Universität Freiburg Bernhard Nebel 27. Oktober 2015 27. Oktober 2015 B. Nebel Info I 3 / 21 Der Vergleichsoperatoren

Mehr

Repetitorium Informatik (Java)

Repetitorium Informatik (Java) Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen

Mehr

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme Bisher Datentypen: einfach Zahlen, Wahrheitswerte, Zeichenketten zusammengesetzt Arrays (Felder) zur Verwaltung mehrerer zusammengehörender Daten desselben Datentypes eindimensional, mehrdimensional, Array-Grenzen

Mehr

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML. JavaScript JavaScript wird direkt in HTML-Dokumente eingebunden. Gib folgende Zeilen mit einem Texteditor (Notepad) ein: (Falls der Editor nicht gefunden wird, öffne im Browser eine Datei mit der Endung

Mehr

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 4

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 4 Fakultät Verkehrswissenschaften Friedrich List, Professur für Verkehrsbetriebslehre und Logistik Modul Entscheidungsunterstützung in der Logistik Einführung in die Programmierung mit C++ Übung 4 SS 2016

Mehr

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden Kapitel 8 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Methoden Überladen von Methoden Der this-zeiger Konstruktoren Vererbung WS 07/08

Mehr

Grundlagen von Python

Grundlagen von Python Einführung in Python Grundlagen von Python Felix Döring, Felix Wittwer November 17, 2015 Scriptcharakter Programmierparadigmen Imperatives Programmieren Das Scoping Problem Objektorientiertes Programmieren

Mehr

Objektorientierte Programmierung mit Python Polymorphismus und Vererbung. Eltern

Objektorientierte Programmierung mit Python Polymorphismus und Vererbung. Eltern Objektorientierte Programmierung mit Python Polymorphismus und Vererbung Eltern Kind Kind Kind Kind Prinzipien der objektorientierten Programmierung Vererbung Strukturierung von Klassen. Oberbegriffe beschreiben

Mehr

Funktionales Programmieren in Python

Funktionales Programmieren in Python Wintersemester 2008/2009 1 Funktionen sind Objekte 2 lambda Funktionen 3 apply 4 map 5 zip 6 filter 7 reduce 8 List Comprehension Funktionales Programmieren Wer nicht funktional programmiert, programmiert

Mehr

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme Bisher Datentypen: einfach Zahlen, Wahrheitswerte, Zeichenketten zusammengesetzt Arrays (Felder) zur Verwaltung mehrerer zusammengehörender Daten desselben Datentypes eindimensional, mehrdimensional, Array-Grenzen

Mehr

10 Objektorientierte Programmierung, Teil 1

10 Objektorientierte Programmierung, Teil 1 10 Objektorientierte Programmierung, Teil 1 Wir lernen nun eine andere Technik (vor allem: eine andere Sichtweise) kennen, um unsere Programm zu organisieren, nämlich mittels Klassen und Objekten 184 Objekte,

Mehr

Java Kurs für Anfänger Einheit 5 Methoden

Java Kurs für Anfänger Einheit 5 Methoden Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden

Mehr

Erwin Grüner 15.12.2005

Erwin Grüner 15.12.2005 FB Psychologie Uni Marburg 15.12.2005 Themenübersicht Mit Hilfe der Funktionen runif(), rnorm() usw. kann man (Pseudo-) erzeugen. Darüber hinaus gibt es in R noch zwei weitere interessante Zufallsfunktionen:

Mehr

Grundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden

Grundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden Grundlagen der Programmierung Prof. H. Mössenböck 6. Methoden Parameterlose Methoden Beispiel: Ausgabe einer Überschrift class Sample { static void printheader() { // Methodenkopf Out.println("Artikelliste");

Mehr

Java Einführung Methoden. Kapitel 6

Java Einführung Methoden. Kapitel 6 Java Einführung Methoden Kapitel 6 Inhalt Deklaration und Aufruf von Methoden Lokale und globale Namen (Bezeichner) Sichtbarkeit und Lebensdauer von Variablen in Methoden Überladen von Methoden 2 Methoden

Mehr

6 Speicherorganisation

6 Speicherorganisation Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen Speicherbereich für

Mehr

C.3 Funktionen und Prozeduren

C.3 Funktionen und Prozeduren C3 - Funktionen und Prozeduren Funktionsdeklarationen in Pascal auch in Pascal kann man selbstdefinierte Funktionen einführen: Funktionen und Prozeduren THEN sign:= 0 Funktion zur Bestimmung des Vorzeichens

Mehr

Programmieren in C++ Überladen von Methoden und Operatoren

Programmieren in C++ Überladen von Methoden und Operatoren Programmieren in C++ Überladen von Methoden und Operatoren Inhalt Überladen von Methoden Überladen von Operatoren Implizite und explizite Konvertierungsoperatoren 7-2 Überladen von Methoden Signatur einer

Mehr

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

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik Klassen und höhere Datentypen Objekte, Felder, Methoden Küchlin/Weber: Einführung in die Informatik Klassen Klasse (class) stellt einen (i.a. benutzerdefinierten) Verbund-Datentyp dar Objekte sind Instanzen

Mehr

Präzedenz von Operatoren

Präzedenz von Operatoren Präzedenz von Operatoren SWE-30 Die Präzedenz von Operatoren bestimmt die Struktur von Ausdrücken. Ein Operator höherer Präzedenz bindet die Operanden stärker als ein Operator geringerer Präzedenz. Mit

Mehr

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung Warum Objektorientierung Daten und Funktionen möglichst eng koppeln und nach außen kapseln Komplexität der Software besser modellieren

Mehr

S. d. I.: Programieren in C Folie 4-1. im Gegensatz zu Pascal gibt es in C kein Schlüsselwort "then"

S. d. I.: Programieren in C Folie 4-1. im Gegensatz zu Pascal gibt es in C kein Schlüsselwort then S. d. I.: Programieren in C Folie 4-1 4 Anweisungen 4.1 if-anweisung 1) if (Ausdruck) 2) if (Ausdruck) } else im Gegensatz zu Pascal gibt es in C kein Schlüsselwort "then" es wird nur der numerische Wert

Mehr

Übungspaket 19 Programmieren eigener Funktionen

Übungspaket 19 Programmieren eigener Funktionen Übungspaket 19 Programmieren eigener Funktionen Übungsziele: Skript: 1. Implementierung und Kodierung eigener Funktionen 2. Rekapitulation des Stack-Frames 3. Parameterübergabe mittels Stack und Stack-Frame

Mehr

Funktionen in PHP 1/7

Funktionen in PHP 1/7 Funktionen in PHP 1/7 Vordefinierte Funktionen in PHP oder vom Entwickler geschriebene Funktionen bringen folgende Vorteile: gleiche Vorgänge müssen nur einmal beschrieben und können beliebig oft ausgeführt

Mehr

Praktische Anwendung von Metaklassen

Praktische Anwendung von Metaklassen Praktische Anwendung von Metaklassen Mirko Dziadzka http://mirko.dziadzka.de/ @MirkoDziadzka PyCon DE 2012 1 / 27 Wer bin ich Wer bin ich? Bewege mich mit Softwareentwicklung auf dem Gebiet Unix, Netzwerk,

Mehr

Grundlagen der Programmierung in C Funktionen

Grundlagen der Programmierung in C Funktionen Der erste Mechanismus für Code-Reuse! Grundlagen der Programmierung in C Funktionen Wintersemester 2005/2006 G. Zachmann Clausthal University, Germany zach@in.tu-clausthal.de Ältester Mechanismus für Code-Reuse:

Mehr

Probeklausur: Programmierung WS04/05

Probeklausur: Programmierung WS04/05 Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,

Mehr

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl Funktionen Zusammenfassung von Befehlssequenzen als aufrufbare/wiederverwendbare Funktionen in einem Programmblock mit festgelegter Schnittstelle (Signatur) Derartige prozedurale Programmierung erlaubt

Mehr

Java Vererbung. Inhalt

Java Vererbung. Inhalt Java Vererbung Inhalt 1 Zielsetzung... 2 1.1 Bewertung... 2 2 Grundlagen der Vererbung... 2 2.1 Super und Subklassen... 2 3 Überladen von Methoden... 4 3.1 Unterschiedliche Parameter... 4 3.2 Gleiche Parameter

Mehr

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Klassenmethoden

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Klassenmethoden Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer Programmiertechnik Klassenmethoden Motivation Programm zur Berechnung von public class Eval1 { public static void main(string[] args) { java.util.scanner

Mehr

Überschreiben von Methoden

Überschreiben von Methoden Vergleich der DoME Realisierungen: Methode ausgeben Version 1 (ohne Vererbung): Anzeigen aller Informationen CD: A Swingin Affair (64 Min)* Frank Sinatra Titelanzahl: 16 Mein Lieblingsalbum von Sinatra

Mehr

JAVA - Methoden - Rekursion

JAVA - Methoden - Rekursion Übungen Informatik I JAVA - Methoden - Rekursion http://www.fbi-lkt.fh-karlsruhe.de/lab/info01/tutorial Übungen Informatik 1 1 Methoden Methoden sind eine Zusammenfassung von Deklarationen und Anweisungen

Mehr

Algorithmen & Programmierung. Rekursive Funktionen (1)

Algorithmen & Programmierung. Rekursive Funktionen (1) Algorithmen & Programmierung Rekursive Funktionen (1) Berechnung der Fakultät Fakultät Die Fakultät N! einer nichtnegativen ganzen Zahl N kann folgendermaßen definiert werden: d.h. zur Berechnung werden

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java objektorientierte Programmierung 2 2 Zusammenhang Klasse-Datei In jeder *.java Datei kann es genau eine public-klasse geben wobei Klassen- und Dateiname übereinstimmen. Es können

Mehr

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

Der Operator this. Wir betrachten nochmals die Klassendefinition von Ballon. Der Operator this Wir betrachten nochmals die Klassendefinition von Ballon. public class Ballon { private int durchmesser; private int x1, y1; private Color farbe =Color.black; // Konstruktor ohne Farbe

Mehr

Programmierkurs Python I

Programmierkurs Python I Programmierkurs Python I Stefan Thater & Michaela Regneri Universität des Saarlandes FR 4.7 Allgemeine Linguistik (Computerlinguistik) Übersicht mehr zu OOP: - Hintergründe - Vererbung Methoden zur Operatoren-Überladung

Mehr

Steht in der ersten Zeile #!/usr/bin/python und hat man die Ausführungsrechte gesetzt kann man es direkt ausführen.

Steht in der ersten Zeile #!/usr/bin/python und hat man die Ausführungsrechte gesetzt kann man es direkt ausführen. Python Unter Windows empfiehlt sich der Download von Python unter folgender URL, http:// www.python.org/download/. Linux Distributionen wie z.b. Ubuntu liefern Python direkt in Ihrer Paketverwaltung mit:

Mehr

Funktionale Programmiersprachen

Funktionale Programmiersprachen Funktionale Programmiersprachen An den Beispielen Haskell und Erlang Übersicht Programmiersprachen λ-kalkül Syntax, Definitionen Besonderheiten von funktionalen Programmiersprache, bzw. Haskell Objektorientierte

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 41 Einstieg in die Informatik mit Java Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 41 1 Überblick: Vererbung 2 Grundidee Vererbung 3 Verdeckte Variablen

Mehr

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 03: Wiederholung und Nutzereingaben Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Wiederholung Klassen, Objekte, Attribute und Methoden

Mehr

Programmiertechnik Klassenmethoden

Programmiertechnik Klassenmethoden Programmiertechnik Klassenmethoden Prof. Dr. Oliver Haase Oliver Haase Hochschule Konstanz 1 Motivation Programm zur Berechung von public class Eval1 { public static void main(string[] args) { java.util.scanner

Mehr

<? $ZeilenMax = 9; $SpaltenMax = 9; echo "<pre>";

<? $ZeilenMax = 9; $SpaltenMax = 9; echo <pre>; Vorbemerkungen Diese Schrittanleitung bezieht sich auf die Aufgaben 4 bis 6 von "Übung 2 - Schleifenbeispiele (1)" Sie soll als Anregung dienen, wie Sie Ihren Code blockweise erstellen und testen können.

Mehr

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

Anwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie Anwendungsentwicklung mit Java Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie Vererbung (1) 2 Problem: Objekte mit gleichen Attributen/Methoden, aber nicht völlig identisch, z.b., LKW, PKW,

Mehr

Programmierung mit C Zeiger

Programmierung mit C Zeiger Programmierung mit C Zeiger Zeiger (Pointer)... ist eine Variable, die die Adresse eines Speicherbereichs enthält. Der Speicherbereich kann... kann den Wert einer Variablen enthalten oder... dynamisch

Mehr

Funktionale Programmierung mit C++

Funktionale Programmierung mit C++ Funktionale Programmierung mit C++ Überblick Programmierung in funktionaler Art Warum funktionale Programmierung? Was ist funktionale Programmierung? Charakteristiken funktionaler Programmierung Was fehlt

Mehr

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8 Java 8 Elmar Fuchs Grundlagen Programmierung 1. Ausgabe, Oktober 2014 JAV8 5 Java 8 - Grundlagen Programmierung 5 Kontrollstrukturen In diesem Kapitel erfahren Sie wie Sie die Ausführung von von Bedingungen

Mehr

Objektorientiertes Programmieren für Ingenieure

Objektorientiertes Programmieren für Ingenieure Uwe Probst Objektorientiertes Programmieren für Ingenieure Anwendungen und Beispiele in C++ 18 2 Von C zu C++ 2.2.2 Referenzen und Funktionen Referenzen als Funktionsparameter Liefert eine Funktion einen

Mehr

Übungsblatt 2. Abgabe: Freitag, 7. November 2014, 18:00 Uhr

Übungsblatt 2. Abgabe: Freitag, 7. November 2014, 18:00 Uhr Informatik I: Einführung in die Programmierung Prof. Dr. Bernhard Nebel Dr. Christian Becker-Asano, Dr. Stefan Wölfl Wintersemester 2014/2015 Universität Freiburg Institut für Informatik Übungsblatt 2

Mehr

Bei for-schleifen muss man nur immer bedenken, dass die letzte Anweisung immer erst nach der Ausführung der restlichen Anweisungen der Schleife

Bei for-schleifen muss man nur immer bedenken, dass die letzte Anweisung immer erst nach der Ausführung der restlichen Anweisungen der Schleife 303 Bei for-schleifen muss man nur immer bedenken, dass die letzte Anweisung immer erst nach der Ausführung der restlichen Anweisungen der Schleife durchgeführt wird. 304 305 for-schleifen sind in Aktivitätsdiagrammen

Mehr

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden. Grundwissen Informatik Objekt Attribut Methoden Als Objekte bezeichnet man alle Gegenstände, Dinge, Lebewesen, Begriffe oder Strukturen unserer Welt ( Autos, Räume, Bakterien, Lehrer, Schüler, Kunden,

Mehr

Advanced Programming in C

Advanced Programming in C Advanced Programming in C Pointer und Listen Institut für Numerische Simulation Rheinische Friedrich-Wilhelms-Universität Bonn Oktober 2013 Überblick 1 Variablen vs. Pointer - Statischer und dynamischer

Mehr

Informatik B von Adrian Neumann

Informatik B von Adrian Neumann Musterlösung zum 7. Aufgabenblatt vom Montag, den 25. Mai 2009 zur Vorlesung Informatik B von Adrian Neumann 1. Java I Schreiben Sie ein Java Programm, das alle positiven ganzen Zahlen 0 < a < b < 1000

Mehr

Listenverarbeitung in Python

Listenverarbeitung in Python Listenverarbeitung in Python Datentypen für Sequenzen von Objekten: Tupel, Listen und Strings Tupel und Listen sind analog zu Haskells Tupel und Listen: (1, 2, 3) 3-Tupel aus den Zahlen 1,2,3, [1, 2, 3]

Mehr

Algorithmische Kernsprache. Zuweisung, einfache und bedingte Anweisung, Blöcke, Schleifen, return, debugging.

Algorithmische Kernsprache. Zuweisung, einfache und bedingte Anweisung, Blöcke, Schleifen, return, debugging. Algorithmische Kernsprache Zuweisung, einfache und bedingte Anweisung, Blöcke, Schleifen, return, debugging. Ausdrücke Anweisungen Ausdrücke bezeichnen einen Wert Kontext stellt Werte von Variablen Werte

Mehr

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen. Ziele sind das Arbeiten mit Funktionen und dem Aufzählungstyp (enum), sowie - einfache Verzweigung (if else) - Alternativen switch case - einfache Schleifen (while oder do while) Aufgabe 3: Diese Aufgabe

Mehr

Skriptsprachen am Beispiel Python

Skriptsprachen am Beispiel Python Seminar Programmiersprachen Skriptsprachen am Beispiel Python Norman Thomas 8. Juni 2004 Überblick Was sind Skriptsprachen? Was ist Python? Python und Syntax Datentypen Kontrollstrukturen Module Ausführung

Mehr

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java: Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen

Mehr

Letztes Mal. static int ggt(int a, int b) { if (a == b) return a; else if (a > b) return ggt(a-b,b); else if (a < b) return ggt(a,b-a);

Letztes Mal. static int ggt(int a, int b) { if (a == b) return a; else if (a > b) return ggt(a-b,b); else if (a < b) return ggt(a,b-a); Letztes Mal static int ggt(int a, int b) { if (a == b) return a; else if (a > b) } return ggt(a-b,b); else if (a < b) return ggt(a,b-a); Darf hier nicht stehen! Compiler sagt: Missing return statement

Mehr

Speicher und Adressraum

Speicher und Adressraum Linearer Speicher (Adressraum) Technische Universität München Speicher und Adressraum Freie Speicherhalde (Heap) Freier Speicherstapel (Stack) Globale Variablen Bibliotheksfunktionen Laufzeitsystem Programmcode

Mehr

Studentische Lösung zum Übungsblatt Nr. 7

Studentische Lösung zum Übungsblatt Nr. 7 Studentische Lösung zum Übungsblatt Nr. 7 Aufgabe 1) Dynamische Warteschlange public class UltimateOrderQueue private Order[] inhalt; private int hinten; // zeigt auf erstes freies Element private int

Mehr

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2 Fakultät Verkehrswissenschaften Friedrich List, Professur für Verkehrsbetriebslehre und Logistik Modul Entscheidungsunterstützung in der Logistik Einführung in die Programmierung mit C++ Übung 2 SS 2016

Mehr

Software Engineering Klassendiagramme Einführung

Software Engineering Klassendiagramme Einführung Software Engineering Klassendiagramme Einführung Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Aufgabe Erstellen Sie eine Klasse Person in Java. Jede Person verfügt

Mehr

Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free()

Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free() Übungspaket 29 Dynamische Speicherverwaltung malloc() und free() Übungsziele Skript In diesem Übungspaket üben wir das dynamische Alloziieren 1. und Freigeben von Speicherbereichen 2. von Zeichenketten

Mehr

PIWIN 1 Übung Blatt 5

PIWIN 1 Übung Blatt 5 Fakultät für Informatik Wintersemester 2008 André Gronemeier, LS 2, OH 14 Raum 307, andre.gronemeier@cs.uni-dortmund.de PIWIN 1 Übung Blatt 5 Ausgabedatum: 19.12.2008 Übungen: 12.1.2009-22.1.2009 Abgabe:

Mehr

Modellierung und Programmierung 1

Modellierung und Programmierung 1 Modellierung und Programmierung 1 Prof. Dr. Sonja Prohaska Computational EvoDevo Group Institut für Informatik Universität Leipzig 19. November 2015 Gültigkeitsbereich (Scope) von Variablen { int m; {

Mehr

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 02: Klassen & Objekte Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Klassen Grundstruktur einer Java-Klasse Eigenschaften (Attribute) Variablen

Mehr

Python-Workshop. Python für C/C++ Programmierer. Carl Friedrich Bolz. cfbolz@gmx.de. Carl Friedrich Bolz

Python-Workshop. Python für C/C++ Programmierer. Carl Friedrich Bolz. cfbolz@gmx.de. Carl Friedrich Bolz Python-Workshop Python für C/C++ Programmierer cfbolz@gmx.de 1 Übersicht Einführung: Einfache Datentypen Kontrollstrukturen Komplexe Datentypen strings, lists, dicts, tuples slicing list comprehensions

Mehr

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Einführung in den Einsatz von Objekt-Orientierung mit C++ I Einführung in den Einsatz von Objekt-Orientierung mit C++ I ADV-Seminar Leiter: Mag. Michael Hahsler Syntax von C++ Grundlagen Übersetzung Formale Syntaxüberprüfung Ausgabe/Eingabe Funktion main() Variablen

Mehr

4 Kontrollfluss-Diagramme

4 Kontrollfluss-Diagramme 4 Kontrollfluss-Diagramme In welcher Weise die Operationen eines Programms nacheinander ausgeführt werden, läßt sich anschaulich mithilfe von Kontrollfluss-Diagrammen darstellen. Ingredienzien: Start Stop

Mehr

Objektorientierte Programmierung mit C++ Zusammenfassung der wichtigsten Topics rund um die objektorientierte Programmierung mit C++11

Objektorientierte Programmierung mit C++ Zusammenfassung der wichtigsten Topics rund um die objektorientierte Programmierung mit C++11 Objektorientierte Programmierung mit C++ Zusammenfassung der wichtigsten Topics rund um die objektorientierte Programmierung mit C++11 Wozu objektorientiertes Programmieren? Die Welt besteht für den Menschen

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung Ein Computerprogramm besteht aus Funktionen (Programmabschnitten, die etwas tun) und Variablen (Speicherplätzen für Informationen). Werden Funktionen aktiviert, verändern

Mehr

Funktionale Programmierung mit Haskell

Funktionale Programmierung mit Haskell Funktionale Programmierung mit Haskell Dr. Michael Savorić Hohenstaufen-Gymnasium (HSG) Kaiserslautern Version 20120622 Überblick Wichtige Eigenschaften Einführungsbeispiele Listenerzeugung und Beispiel

Mehr

AuD-Tafelübung T-B5b

AuD-Tafelübung T-B5b 6. Übung Sichtbarkeiten, Rekursion, Javadoc Di, 29.11.2011 1 Blatt 5 2 OOP Klassen Static vs. Instanzen Sichtbarkeit 3 Stack und Heap Stack Heap 4 Blatt 6 1 Blatt 5 2 OOP Klassen Static vs. Instanzen Sichtbarkeit

Mehr

3 Objektorientierte Konzepte in Java

3 Objektorientierte Konzepte in Java 3 Objektorientierte Konzepte in Java 3.1 Klassendeklarationen Fragen an die Klassendeklaration: Wie heißt die Klasse? Wer darf auf die Klasse und ihre Attribute/Methoden zugreifen? Ist die Klasse eine

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 18.4.07, Grundlagen Übersicht 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White Space Zeichen 4 Wortsymbole 5 Interpunktionszeichen 6 Operatoren 7 import Anweisungen 8 Form

Mehr

JAVA - Methoden

JAVA - Methoden Übungen Informatik I JAVA - http://www.fbi-lkt.fh-karlsruhe.de/lab/info01/tutorial Übungen Informatik 1 Folie 1 sind eine Zusammenfassung von Deklarationen und Anweisungen haben einen Namen und können

Mehr

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny 7. Funktionen Einleitung Nach dem Prinzip Divide and Conquer bietet es sich an, größere Aufgaben in kleinere Teile zu unterteilen. Anweisungsblöcke,

Mehr

Schleifen in C/C++/Java

Schleifen in C/C++/Java Schleifen in C/C++/Java Alle 3 Sprachen stellen mindestens die folgenden 3 Schleifenkonstruktionen zur Verfügung. In C gibt es auch keine weiteren, C++, Java und C# haben noch weitere nützliche Varianten.

Mehr

Java Kurzreferenz Für Fortgeschrittene

Java Kurzreferenz Für Fortgeschrittene Java Kurzreferenz Für Fortgeschrittene 1. Initialisierung von Applets: Die Methode init Wenn ein Applet gestartet wird, werden immer zwei Methoden aufgerufen. Diese heissen init und start. Um gewisse Berechnungen

Mehr

Objektorientierung II

Objektorientierung II 9Lehrstuhl für Bioinformatik Einführung in die Programmierung für Bioinformatiker Prof. B. Rost, Dr. L. Richter Blatt 09 19.12.2016 Objektorientierung II Aufgabe 9.1. Modellierung - Geometrische Figuren

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Konstruktor, Statische Methoden Packages Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Initialisierung von Datenstrukturen

Mehr

Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9

Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9 Prof. Dr. Wilhelm Schäfer Paderborn, 15. Dezember 2014 Christian Brenner Tristan Wittgen Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9 Aufgabe 1 Codegenerierung

Mehr

JAVA-Datentypen und deren Wertebereich

JAVA-Datentypen und deren Wertebereich Folge 8 Variablen & Operatoren JAVA 8.1 Variablen JAVA nutzt zum Ablegen (Zwischenspeichern) von Daten Variablen. (Dies funktioniert wie beim Taschenrechner. Dort können Sie mit der Taste eine Zahl zwischenspeichern).

Mehr

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

Beispiel: Zwischen der Oberklasse und der abgeleiteten Klasse besteht eine ist ein Beziehung. Eine abgeleitete Klasse stellt eine Spezialisierung der Vererbung Vererbung ist ein Konzept der objektorientierten Programmierung,, die es ermöglicht neue Klassen von bereits vorhandenen Klassen abzuleiten. In einer abgeleiteten Klasse (subclass) muss nur spezifiziert

Mehr

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur Unterprogramme Unterprogramme sind abgekapselte Programmfragmente, welche es erlauben, bestimmte Aufgaben in wiederverwendbarer Art umzusetzen. Man unterscheidet zwischen Unterprogrammen mit Rückgabewert

Mehr

Praktikum Ingenieurinformatik. Termin 4. Funktionen, numerische Integration

Praktikum Ingenieurinformatik. Termin 4. Funktionen, numerische Integration Praktikum Ingenieurinformatik Termin 4 Funktionen, numerische Integration 1 Praktikum Ingenieurinformatik Termin 4 1. Funktionen. Numerische Integration, Trapezverfahren 1.1. Funktionen Eine Funktion ist

Mehr

Programmieren in C. Operatoren, Variablen und deren Sichtbarkeit. Prof. Dr. Nikolaus Wulff

Programmieren in C. Operatoren, Variablen und deren Sichtbarkeit. Prof. Dr. Nikolaus Wulff Programmieren in C Operatoren, Variablen und deren Sichtbarkeit Prof. Dr. Nikolaus Wulff Auswertung von Ausdrücken Was passiert wenn ein Ausdruck wie z. B. int y,x=2; y = ++x * x++; im Computer abgearbeitet

Mehr

Algorithmen und Programmierung II

Algorithmen und Programmierung II Algorithmen und Programmierung II Vererbung Prof. Dr. Margarita Esponda SS 2012 1 Imperative Grundbestandteile Parameterübergabe String-Klasse Array-Klasse Konzepte objektorientierter Programmierung Vererbung

Mehr

Rekursive Funktionen

Rekursive Funktionen Um Rekursion zu verstehen, muss man vor allem Rekursion verstehen. http://www2.norwalk-city.k12.oh.us/wordpress/precalc/files/2009/05/mona-lisa-jmc.jpg Rekursive Funktionen OOPM, Ralf Lämmel Was ist Rekursion?

Mehr

620.900 Propädeutikum zur Programmierung

620.900 Propädeutikum zur Programmierung 620.900 Propädeutikum zur Programmierung Andreas Bollin Institute für Informatik Systeme Universität Klagenfurt Andreas.Bollin@uni-klu.ac.at Tel: 0463 / 2700-3516 Arrays Wiederholung (1/5) Array = GEORDNETE

Mehr

Programmieren I + II Regeln der Code-Formatierung

Programmieren I + II Regeln der Code-Formatierung Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme WS 2016/2017, SS 2017 Programmieren I + II Regeln der Code-Formatierung In diesem Dokument finden

Mehr

Welche Informatik-Kenntnisse bringen Sie mit?

Welche Informatik-Kenntnisse bringen Sie mit? Welche Informatik-Kenntnisse bringen Sie mit? So gehen Sie vor! Lösen Sie die Aufgaben der Reihe nach von 1 bis 20, ohne das Lösungsblatt zur Hilfe zu nehmen. Der Schwierigkeitsgrad der Aufgaben nimmt

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 26 Einstieg in die Informatik mit Java Felder Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 26 1 Was sind Felder? 2 Vereinbarung von Feldern 3 Erzeugen von Feldern

Mehr

magnum C++ WALTER SAUMWEBER kompakt komplett kompetent

magnum C++ WALTER SAUMWEBER kompakt komplett kompetent magnum C++ WALTER SAUMWEBER kompakt komplett kompetent Quickview... 5 Liebe Leserin, lieber Leser... 13 Teil 1 Grundlagen... 15 1 Was ist Programmieren?... 17 1.1 Was ist eigentlich ein Computerprogramm?...

Mehr

Objektorientierung: Klassen und Objekte

Objektorientierung: Klassen und Objekte Vorlesung und Übung Universität Paderborn Wintersemester 2015/2016 Dr. Peter Pfahler Objektorientierung: Klassen und Objekte EWS, WS 2015/16, Pfahler L-1 Objektorientierung behandelt in "Einführung in

Mehr