Aggregierte Datentypen und Standardbibliothek

Werbung
Vorkurs Programmierung
Aggregierte Datentypen und Klassenbibliothek von Python
Prof. Dr. Detlef Krömker
Dipl.-Inf. Jörg Demmer
Professur für Graphische Datenverarbeitung
Institut für Informatik
Fachbereich Informatik und Mathematik (12)
Hier wird Wissen Wirklichkeit
Übungs-Nachlese
‣
Aufgabe 1
Parameter können in Python mit Default-Werten belegt werden, indem
man sie in der Funktionsdeklaration zuweist:
def foo(a, b, c = "Default", d = 4):
...
Mögliche Aufrufe:
foo(4,5) => a ist 4, b ist 5, c ist "Default", d ist 4
foo(4,5,"XYZ") => a ist 4, b ist 5, c ist “XYZ", d ist 4
foo(4,5,"XYZ",3) => a ist 4, b ist 5, c ist “XYZ", d ist 3
2
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
Übungs-Nachlese
‣
Eine beliebige Anzahl von Parametern kann übergeben werden, indem
man dem letzten Parameter einen Stern voranstellt. Dann werden alle
übergebenen Parameter in ein Tupel verpackt (oder zwei Sterne, dann
wird es ein Dictionary):
def foo(a, b, *rest):
print "a ist", a
print "b ist", b
print "Rest ist:"
for i in rest: print i
foo('A', 'B', 'CD', 'EF', 'GH')
3
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
1
Übungs-Nachlese
Ausgabe:
a ist A
b ist B
Rest ist:
CD
EF
GH
4
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
Übungs-Nachlese
‣
Aufgabe 2
def betrag(operand):
"""Liefert den Betrag von operand"""
return (operand**2)**0.5
def fak_it(operand):
"""Berechnet die Fakultaet von operand iterativ"""
fak = 1
for i in range(1,operator+1):
fak *= i
return fak
5
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
Übungs-Nachlese
def fak_rek(operand):
"""Berechnet die Fakultaet von operand (rekursiv)"""
if operand == 1:
return 1
else:
return operand * fak_rek(operand-1)
6
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
2
Übungs-Nachlese
while 1 == 1:
operand = input("Operand: ")
operator = raw_input("Operator: ")
if operator == "ende": break
elif operator == "betrag": print betrag(operand)
elif operator == "fakultaet":
print fak_it(operand)
print fak_rek(operand)
else:
operand2 = input("Operand 2: ")
if operator == "+": print operand + operand2
elif operator == "-": print operand - operand2
elif operator == "*": print operand * operand2
elif operator == "/": print operand / operand2
elif operator == "**": print operand ** operand2
elif operator == "%": print operand % operand2
7
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
Rückblick
‣ Wir haben die wichtigsten Kontrollstrukturen kennen gelernt und
gesehen, wie man Programme in Funktionen und Modulen
organisieren kann
‣ Jetzt wollen wir uns ansehen, welche Bordmittel Python liefert,
um Problemlösungen einfacher zu machen
8
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
Lernziele
‣
Die eingebauten aggregierten Datentypen/-strukturen kennen lernen:
‣ Listen
‣ Tupel
‣ Dictionaries
‣
Überblick erhalten über die wichigsten Funktionen der
Klassenbibliothek:
‣ Mathematische Funktionen
‣ I/O
‣ Kommandozeilenparameter
‣ Serialisierung
9
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
3
Aggregierte Datentypen - Datenstrukturen - Objekte
‣
Zusammengesetzte (aggregierte) Datentypen sind Datenkonstrukte,
welche aus einfacheren (elementaren) Datentypen oder
zusammengesetzten Datentypen bestehen.
‣
Eine Abgrenzung zu dem Begriff Datenstruktur ist kaum möglich, da
sie nahezu beliebig komplex werden können.
‣
Datenstruktur: Der Fokus der Diskussion liegt auf der Strukturierung/(der Kodierung und Anordnung) der gespeicherten Daten
‣
Aggregierter Datentyp: Der Fokus der Diskussion liegt auf den
Operationen (im Sinne eines abstrakten Datentyps).
10
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
Aggregierte Datentypen - Datenstrukturen - Objekte
‣
Die Definition von Datenstrukturen erfolgt im Allgemeinen durch die
Angabe einer Spezifikation zur Datenhaltung und
‣
der Operationen an der Schnittstelle.
Diese Spezifikation legt das allgemeine Verhalten der Operationen fest
und abstrahiert damit von der konkreten Implementation der
Datenstruktur.
‣
Von den meisten Datenstrukturen gibt es neben ihrer Grundform viele
Spezialisierungen, die eigens für die Erfüllung ganz bestimmter
Aufgaben spezifiziert wurden.
11
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
Aggregierte Datentypen
‣
stehen in den meisten Programmiersprachen zur Verfügung.
‣
Programmiersprachen können aggregierte Datentypen auf zwei
Ebenen unterstützen:
1. Sie stellt Konstruktoren zur Verfügung, mit deren Hilfe der Aufbau
eines aggregierten Datentyps beschrieben werden kann.
2. Sie verfügen über vordefinierte aggregierte Datentypen
(builtins).
12
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
4
Einige wichtige Builtins von Python
Python bietet eine eingebaute Unterstützung für die folgenden
linearen Datenstrukturen, die wir uns jetzt genauer ansehen
wollen:
‣ Listen / Tupel
‣ Dictionaries
‣ Mengen (Set / Frozenset)
13
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
Listen I
‣
Listen haben wir bereits als eine Möglichkeit kennen gelernt, um etwa
mit Hilfe der range()-Funktion Mengen zur Aufzählung in ForSchleifen zu generieren.
‣
Das ist jedoch längst nicht alles, was Listen können. Die Liste ist in
Python eine dynamische Datenstruktur zur Speicherung beliebiger
Datentypen (Integers, Longs, Strings, …).
‣
Man Elemente hinzufügen, löschen, auf Existenz prüfen, sortieren …
‣
Eine Übersicht aller Möglichkeiten liefert help(list)
14
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
Listen II
‣
Listen werden initialisiert, indem man Elemente in eckige Klammern
setzt, durch Kommata getrennt:
liste
liste
#
#
‣
15
= [] # leere Liste
= [ 10, 4.0, "Test" ] # Liste wird
initialisiert mit Integerzahl 10,
Float 4.0 und String "Test"
Auf die einzelnen Elemente kann über Indizes, in eckige Klammern
gesetzt, zugegriffen werden. Wichtig: Die Zählung beginnt dabei mit 0,
nicht mit 1!
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
5
Listen III
>>> liste[0]
10
>>> liste[2]
'Test'
‣
Mit Hilfe der bereits kennen gelernten Slice-Operatoren kann man auch
auf Teile der Liste zugreifen oder die Reihenfolge ändern:
>>> liste[1:2]
[4.0]
>>> liste[::-1]
['Test', 4.0, 10]
16
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
Listen IV
‣
Oft benötigt man auch die Länge einer Liste. Diese erfährt man über
den Befehl len:
>>> len(liste)
3
‣
Man kann auf einzelne Elemente nicht nur zugreifen, sondern sie auch
verändern:
>>> liste[2] = 20
>>> liste
[10, 4.0, 20]
17
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
Listen V
‣
Mit dem Befehl del liste[i] kann das Element an Position i
gelöscht werden:
>>> del liste[1]
>>> liste
[10, 20]
18
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
6
Listen VI
‣
Weitere Befehle:
>>> liste.append(15)
>>> liste
[10, 20, 15]
>>> 20 in liste
True
>>> liste.sort()
>>> liste
[10, 15, 20]
‣
19
u.v.m. siehe help(list) und die Python-Dokumentation
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
Tupel
‣
Tupel verhalten sich ähnlich wie Listen, mit dem Unterschied, dass sie
nach Initialisierung nicht mehr verändert werden können:
tupel = (10, 20, 3.0)
>>> tupel
(10, 20, 3.0)
tupel[2] = 2
Traceback (most recent call last):
File "<pyshell#37>", line 1, in <module>
tupel[2] = 2
TypeError: 'tuple' object does not support item assignment
20
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
Einwurf: mutable vs. immutable
‣
Objekte, die nach ihrer Erzeugung verändert werden können, nennt
man mutable (veränderlich). Dazu gehören unter Python Listen,
Dictionaries und Mengen.
‣
Objekte, die nicht verändert werden können, sind immutable
(unveränderlich). Dies sind vor allem Strings, in Python auch Tupel
‣
Anwendung: z.B. bei Multithreading
21
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
7
Dictionaries I
‣
Dictionaries (auch bekannt als assoziative Arrays) sind
Datenstrukturen, die einem bestimmten Schlüsselobjekt Werte
zuordnen. Auf die Elemente wird dann nicht über einen Index, sondern
über den Schlüssel zugegriffen.
‣
Jeder Schlüssel kann nur einmal verwendet werden; wird ein neues
Element mit einem bereits vorhandenen Schlüssel eingefügt, geht der
alte Wert verloren
‣
Wenn versucht wird, auf einen nicht vorhandenen Schlüssel
zuzugreifen, führt dies zu einem Fehler.
‣
Deklaration: Geschweifte Klammern { } und Schlüssel/Wert-Paare,
duch Doppelpunkt markiert und Kommata getrennt
22
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
Dictionaries II
>>> telnummer = { 'Mueller':1234, 'Schmidt':5678, 'Kaiser':1122 }
>>> telnummer['Mueller']
1234
>>> telnummer = { 'Mueller':1234, 'Schmidt':5678, 'Kaiser':1122,
'Mueller':2233 }
>>> telnummer['Mueller']
2233
>>> telnummer['Becker']
Traceback (most recent call last):
File "<pyshell#46>", line 1, in <module>
telnummer['Becker']
KeyError: 'Becker'
23
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
Mengen (Sets)
‣
Mengen sind ungeordnete Sammlungen von Elementen, die keine
Duplikate enthalten.
‣
Grundlegende Operationen sind Test auf Mitgliedschaft und
Beseitigung von Duplikaten
‣
Außerdem: Schnitt, Vereinigung, Differenz
‣
Deklaration: Schlüsselwort set und als Parameter ein aufzählbares
Objekt (z.B. eine Liste)
24
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
8
Mengen (Sets)
>>> liste = [ 'a', 'b', 'c', 'a' ]
>>> menge1 = set(liste)
>>> menge1
set(['a', 'c', 'b'])
>>> 'a' in menge1
True
>>> 'd' in menge1
False
>>> menge2 = set([ 'a', 'd', 'f' ])
>>> menge1 | menge2 # Vereinigung
set(['a', 'c', 'b', 'd', 'f'])
>>> menge1 - menge2 # Differenz
set(['c', 'b'])
>>> menge1 & menge2 # Schnitt
set(['a'])
>>> menge1 ^ menge2 # Symmetrische Differenz
set(['c', 'b', 'd', 'f'])
25
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
Klassenbibliothek: Eingebaute Funktionen
‣
Die eingebauten Funktionen von Python sind immer im globalen Namensraum
verfügbar. Es muss also kein Modul importiert werden, um auf sie zuzugreifen
‣
Wir haben bereits bei raw_input() gesehen, dass es manchmal nötig sein
kann, Datentypen explizit zu konvertieren. Für Konvertierungen unter den
elementaren Datentypen bietet Python folgende Funktionen:
float(x) – Konvertiert einen String oder eine Zahl zu einer Fließkommazahl
int(x[,Radix]) – Konvertiert einen String oder eine Zahl zu einer Integerzahl,
oder zu einem Long, wenn der Integer-Wertebereich überschritten wird. Der
optionale Parameter Radix gibt die Basis an, die verwendet werden soll.
Beispiel:
>>> int("10100",2)
20
26
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
Klassenbibliothek: Eingebaute Funktionen
‣
Entsprechend konvertiert long(x[,Radix]) zu einem long.
‣
str([Object]) liefert von Objekten eine Stringrepräsentation (bei
Zahlen die entsprechenden Literale)
‣
abs(x) liefert den Absolutbetrag einer Zahl
‣
cmp(x,y) – vergleicht zwei Objekte und liefert ein Integer. Ist kleiner
null wenn x < y, null wenn x == y, größer null sonst
‣
help() – Online-Hilfe starten
27
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
9
Klassenbibliothek: Eingebaute Funktionen
‣
len (Object): Die Länge eines Objekts
‣
input() und raw_input() – Einlesen von Daten
‣
range([start,]stop[,step]) – Erzeugen von Folgen, nützlich
bei Schleifen
‣
type(Object) – Liefert den Typ eines Objekts
28
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
Klassenbibliothek: Wichtige Module
‣
‣
‣
‣
‣
help()
math: sin(x), cos(x), floor(x), ceil(x), sqrt(x)
random: Erzeugung von Zufallszahlen
time: Liefert die Systemzeit und Routinen zur Umrechnung
decimal: Bruchrechnung ohne Rundungsfehler
>>> import decimal
>>> x = decimal.Decimal("10")
>>> x
Decimal("10")
>>> 1 / x
Decimal("0.1")
>>> 1 / 10.0
0.10000000000000001
29
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
Klassenbibliothek: Modul copy
‣
Variablen sind in Python nur Referenzen auf Objekte, die im Speicher
liegen.
‣
Kann Probleme geben, wenn man Objekte kopieren will. Wenn man
nur eine Zuweisung zur Variablen macht, verweisen beide auf
dasselbe Objekt:
>>>
>>>
[1,
>>>
>>>
[1,
>>>
>>>
[1,
>>>
[1,
30
a = [1, 2, 3]
a
2, 3]
b = a
b
2, 3]
b[1] = 4
b
4, 3]
a
4, 3]
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
10
Klassenbibliothek: Modul copy
‣
Dieses Problem lässt sich umgehen, indem man die Funktion
copy.copy() verwendet:
>>>
>>>
>>>
[1,
>>>
>>>
>>>
[1,
>>>
[1,
31
import copy
a = [1, 2, 3]
a
2, 3]
b = copy.copy(a)
b[1] = 4
b
4, 3]
a
2, 3]
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
Klassenbibliothek: Modul copy
‣
copy() macht allerdings nur eine oberflächliche Kopie. Wenn unser
Objekt Daten enthält, die keine elementaren Datentypen sind, sondern
ebenfalls nur Referenzen, werden auch wieder nur die Referenzen
kopiert:
>>> a = [[1, 2], [3, 4]]
>>> a
[[1, 2], [3, 4]]
>>> b = copy.copy(a)
>>> b
[[1, 2], [3, 4]]
>>> b[0][1] = 5
>>> b
[[1, 5], [3, 4]]
>>> a
[[1, 5], [3, 4]]
32
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
Klassenbibliothek: Modul copy
‣
deepcopy() macht eine tiefe Kopie, d.h. es geht rekursiv hinunter, bis
nur noch elementare Datentypen angetroffen werden, und kopiert die
gesamte Datenstruktur:
>>> a = [[1, 2], [3, 4]]
>>> b = copy.deepcopy(a)
>>> b[0][1] = 5
>>> b
[[1, 5], [3, 4]]
>>> a
[[1, 2], [3, 4]]
33
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
11
Klassenbibliothek: Modul sys
‣
argv – Liste mit den Parametern, die auf der Kommandozeile
übergeben wurden
Beispiel:
import sys
print sys.argv[0], sys.argv[1]
Speichern als argv.py, aufrufen mit python argv Hallo ergibt
argv.py Hallo
34
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
Klassenbibliothek: Modul sys
‣
exit([x]) – Programm beenden und Code x zurückgeben
‣
getfilesystemencoding() – Zeichensatz des Dateisystems
‣
path – Liste mit den Verzeichnissen des Suchpfades. Hier kann man
auch eigene Pfade einfügen.
35
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
Dateizugriff
‣
Eine Datei kann man mit dem Befehl open() öffnen:
‣
F = open(“datei.txt“, “w“)
‣
‣
F ist dann ein Objekt, das auf die Datei verweist (dazu morgen mehr)
Der erste Parameter ist der Dateiname; kann sowohl einen
vollständigen Verzeichnispfad enthalten als auch einen relativen zum
aktuellen Arbeitsverzeichnis
Der zweite Parameter gibt den Modus an: r für Lesezugriff, w für
Schreibzugriff (dabei wird neue Datei erstellt und existierende
überschrieben). r+ bedeutet Lese- und Schreibzugriff, a Daten
anfügen.
‣
36
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
12
Dateizugriff
‣
Um Daten aus der Datei zu lesen, kann man die Methode
F.read([size]) benutzen. Wenn size angegeben wird, werden
entsprechend viele Bytes aus der Datei gelesen, sonst bis zum Ende
der aktuellen Zeile.
‣
F.readline() liest eine ganze Zeile, F.readlines() liest alle
Zeilen und speichert sie in einer Liste.
‣
Mit F.write(String) kann man einen String in die Datei schreiben.
‣
Mit F.close() wird die Datei wieder geschlossen.
37
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
Serialisierung (Modul pickle)
‣
Wir können also Strings in Dateien schreiben oder lesen. Aber wie ist
es mit binären Objekten wie Zahlen, Listen, Mengen oder noch
komplexeren Datenstrukturen?
‣
Diese müssen in eine String-Repräsentation gebracht werden,
zumindest in ein Format, mit dem Datenaustausch möglich ist.
‣
Die Umwandlung komplexer Objekte in serielle, für den
Datenaustausch geeignete Objekte nennt man Serialisierung.
‣
In Python bietet das Modul pickle Funktionalität zur Serialisierung von
Objekten.
38
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
Serialisierung (Modul pickle)
‣ Das Modul pickle macht Serialisierung sehr einfach. Wenn
man ein Fileobjekt F hat und ein beliebiges Datenobjekt O, kann
man mit dem Befehl pickle.dump(O, F) das Objekt in die
Datei schreiben.
‣ Mit dem Befehl O = pickle.load(F) lädt man das Objekt
wieder.
39
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
13
Threading
‣
Von Threading (Nebenläufigkeit) spricht man, wenn innerhalb eines
laufenden Programms (Prozesses) Codeteile parallel abgearbeitet
werden
‣
Threads teilen sich denselben Speicherbereich, haben aber eigene
Befehlszähler und Stacks
‣
Bei konkurrierendem Zugriff auf Daten muss sichergestellt werden,
dass durch geeignete Synchronisationsmechanismen stets ein
definierter Zustand besteht
40
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
Threading
import threading, time
class Hintergrund(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
print "Beginne langwierige Berechnung...\n"
time.sleep(5) # 5 Sekunden nichts tun
print "Ende der langwierigen Berechnung.\n"
background = Hintergrund()
background.start() # Berechnung im Hintergrund starten
print "Hauptprogramm bleibt im Vordergrund.\n"
background.join() # Warte auf Ende des Threads
print "Hauptprogramm hat Ende der Berechnung abgewartet.\n"
41
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
Zusammenfassung und Ausblick
‣
Wir kennen jetzt die wichtigsten zusammengesetzten Datentypen in Python:
Listen, Tupel, Mengen, Dictionaries.
‣
Wir haben uns einen Eindruck von der Klassenbibliothek und der Möglichkeiten,
alltägliche Aufgaben zu verrichten, verschafft.
‣
Ist natürlich nur ein erster Einblick; die komplette Klassenbibliothek müssen Sie
nicht an einem Tag verstehen
‣
Lesen Sie aber in der Referenz nach und vertiefen Sie kontinuierlich Ihre
Kenntnisse, auch im Laufe des Semesters!
‣
Morgen beschäftigen wir uns noch mit dem wichtigen Konzept der
objektorientierten Programmierung
42
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
14
Vielen Dank für Ihre Aufmerksamkeit!
43
Vorkurs Programmierung
WS 2007/2008
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
Dipl.-Inf. Jörg Demmer
Hier wird Wissen Wirklichkeit
Fragen?
44
Vorkurs Programmierung
WS 2007/2008
15
Herunterladen