matthias spohrer · tu münchen 10. präsenzveranstaltung 02.06.2003 – tu stammgelände innenstadt...
TRANSCRIPT
Matthias Spohrer · TU München
10. Präsenzveranstaltung 02.06.2003 – TU Stammgelände Innenstadt
Nachqualifizierungskurs für Informatiklehrkräfte
Nachqualifizierungskurs für InformatiklehrkräfteMatthias Spohrer · TU München
Seite 2
Tagesordnung
1. Infos und Neuigkeiten
2. Objektorientierte Modellierung
3. Haskell-Übungen
Nachqualifizierungskurs für InformatiklehrkräfteMatthias Spohrer · TU München
Seite 3
Infos – Termin im KM
Abbrecherquote• München TU ca. 1-3• München LMU ca. 5-7• Passau 2• Erlangen 2• Würzburg 4• Summe: bei 120 Anfängern ca. 14-19, d.h. mehr als 10%
Lehren...•Algorithmik-Teil wird überarbeitet (insbes. Mathematischer Hintergrund)•Algorithmik-Teil wird ausgedehnt (Faktor 1,5), die anderen Teile entsprechend gekürzt•Fester Tag auch im ersten Jahr (Dienstag), Schreiben vom KM an die Schulen•Auswahlgespräche für Nichtmathematiker
UrsachenEvaluation...
Nachqualifizierungskurs für InformatiklehrkräfteMatthias Spohrer · TU München
Seite 4
Infos – Kurs 03/05
Anmeldungen (Stand 26.05.)• München 31• Passau 4• Erlangen 7• Würzburg 12• Anmeldeschluss 30.05.... Fraglich, welche Kurse überhaupt zustande kommen...
Lehren...•Algorithmik-Teil wird überarbeitet (insbes. Mathematischer Hintergrund)•Algorithmik-Teil wird ausgedehnt (Faktor 1,5), die anderen Teile entsprechend gekürzt•Fester Tag auch im ersten Jahr (Dienstag), Schreiben vom KM an die Schulen•Auswahlgespräche für Nichtmathematiker
Ursachen???
Nachqualifizierungskurs für InformatiklehrkräfteMatthias Spohrer · TU München
Seite 5
Infos – Klausur
Termin: Donnerstag, 26.06.03 HS 0220 Arbeitszeit: 10 – 12 UhrHilfsmittel: Duden5 Aufgaben à 20 BE80 BE entsprechen 100% oderoder Auswahlmöglichkeit 4 aus 5Minimalziel: mehr als 32 BE
Stoff•Zustandsmodell, EA•OOP mit JAVA•Rekursion, Entrekursivierung, Terminierungsbeweis•Funktionale Programmierung mit HASKELL•OOM
•Aufgaben möglichst nah an bisherigen SE-Aufgaben, aber auch an neueren (erst kommenden?!) SE-Aufgaben (Modellierung...)
Nachqualifizierungskurs für InformatiklehrkräfteMatthias Spohrer · TU München
Seite 6
Infos – nächstes Jahr
Stoff:
Nachqualifizierungskurs für InformatiklehrkräfteMatthias Spohrer · TU München
Seite 7
Tagesordnung
1. Infos und Neuigkeiten
2. Objektorientierte Modellierung
3. Haskell-Übungen
Nachqualifizierungskurs für InformatiklehrkräfteMatthias Spohrer · TU München
Seite 8
Modellierung – warum und wie?
(z.B.) „Objektorientiertes Programm“
= Menge von Klassen
Menge von Objekten (Instanzen der Klassen), die untereinander
kommunizieren
ModellierungModell ist aber immer Abstraktion/Vereinfachung der Wirklichkeit• Es gibt i.d.R. keine Ausprägung eines Modells, das die Realität
vollständig abbildet• Es gibt aber sicher mehrere hinreichend gute Ausprägungen, die
aber meist auf bestimmte Aspekte des gegebenen Problems abgestimmt sind.
(Komplexes)Problem
Compilierung und Programmstart
Nachqualifizierungskurs für InformatiklehrkräfteMatthias Spohrer · TU München
Seite 9
Objektorientierte Modellierung – wie und warum?
Zweck der Modellierung Grundkonzepte1. „Finden“ der Klassen
2. Strukturierung der Klassen • Generalisierung ( Hierarchie)• Spezialisierung ( Hierarchie)• Abstrakte Klasse ( Festlegung eines
Grundrepertoires an Operationen, Hierarchie, )
• Interface ( gleiches Verhalten)
3. Herstellen von Beziehungen zwischen den Klassen
• Assoziationen• Delegation• Aggregation• Komposition
Für die Grundkonzepte bieten objektorientierte Sprachen in den meisten Fällen „Standard“- Implementierungen an
Nachqualifizierungskurs für InformatiklehrkräfteMatthias Spohrer · TU München
Seite 10
Praktisches Vorgehen bei OOM1. Finden der Klassen durch Betrachten des gegebenen Szenarios
• Welche Objekte (=Gegenstände, Konzepte) kommen vor?• Gibt es gleichartige Objekte, deren Bauplan (Eigenschaften und
Operationen) in einem „Bauplan“ ( Klasse) festgelegt werden kann?2. Strukturierung der Klassen
• Gibt es Hierarchiebeziehungen ( Generalisierung, Spezialisierung)• Müssen in Hierarchiebeziehungen zu gegebener Zeit noch Klassen
eingebaut werden, deren genaue Realisierung man noch nicht kennt, von denen man aber bestimmte Operationen verlangt ( Abstrakte Klassen)
• Müssen verschiedene Klassen, die nicht in einer Hierarchie stehen, dasselbe Verhalten aufweisen ( Interface)?
3. Finden der Beziehungen zwischen den Klassen durch Betrachten des vorgegebenen Szenarios und der bereits herausgefilterten Objekte
• Welche Beziehungen/Kommunikationsstränge gibt es zwischen den Objekten? Kann man diese auf die entsprechenden Klassen „übertragen“, d.h. welche Klasse ist auf Methoden anderer Klassen angewiesen?
• Gibt es Teile-Ganze-Beziehungen ( Aggregation, Komposition)?• ...
Nachqualifizierungskurs für InformatiklehrkräfteMatthias Spohrer · TU München
Seite 11
Übung 1
Eine Bank benötigt Software zur Abwicklung von Autokrediten. Dabei liegt folgendes Szenario zugrunde:Besitzer eines oder mehrerer Autos können Personen, Firmen oder Banken sein. Alle „Besitzer“ haben Namen und Adresse. Bei Personen wird zusätzlich das Geburtsdatum, bei Banken die Bankleitzahl benötigt. Personen können bei maximal drei Arbeitgebern (Firmen, Banken) beschäftigt sein. Wichtige Merkmale der Autos sind Modell und Baujahr. Ein Auto kann nur einen Besitzer haben. Zur Finanzierung eines Autos kann eine Besitzer einen Kredit (Festlegung eines Kontonummer und des Zinssatzes, Abspeicherung des aktuellen Kontostandes) bei einer Bank aufnehmen. Kann eine Besitzer seinen Kreditforderungen nicht nachkommen, so hat die Bank, das Recht das Auto zu pfänden
Entwerfen Sie ein UML-Modell!
Nachqualifizierungskurs für InformatiklehrkräfteMatthias Spohrer · TU München
Seite 12
Übung 1
Eine Bank benötigt Software zur Abwicklung von Autokrediten. Dabei liegt folgendes Szenario zugrunde:Besitzer eines oder mehrerer Autos können Personen, Firmen oder Banken sein. Alle „Besitzer“ haben Namen und Adresse. Bei Personen wird zusätzlich das Geburtsdatum, bei Banken die Bankleitzahl benötigt. Personen können bei maximal drei Arbeitgebern (Firmen, Banken) beschäftigt sein. Wichtige Merkmale der Autos sind Modell und Baujahr. Ein Auto kann nur einen Besitzer haben. Zur Finanzierung eines Autos kann eine Besitzer einen Kredit (Festlegung eines Kontonummer und des Zinssatzes, Abspeicherung des aktuellen Kontostandes) bei einer Bank aufnehmen. Kann eine Besitzer seinen Kreditforderungen nicht nachkommen, so hat die Bank, das Recht das Auto zu pfänden
Person
Firma Bank
Auto
Kredit
Besitzer
Arbeitgeber
Nachqualifizierungskurs für InformatiklehrkräfteMatthias Spohrer · TU München
Seite 13
Übung 1 Eine Bank benötigt Software zur Abwicklung von Autokrediten. Dabei liegt folgendes Szenario zugrunde:Besitzer eines oder mehrerer Autos können Personen, Firmen oder Banken sein. Alle „Besitzer“ haben Namen und Adresse. Bei Personen wird zusätzlich das Geburtsdatum, bei Banken die Bankleitzahl benötigt. Personen können bei maximal drei Arbeitgebern (Firmen, Banken) beschäftigt sein. Wichtige Merkmale der Autos sind Modell und Baujahr. Ein Auto kann nur einen Besitzer haben. Zur Finanzierung eines Autos kann eine Besitzer einen Kredit (Festlegung eines Kontonummer und des Zinssatzes, Abspeicherung des aktuellen Kontostandes) bei einer Bank aufnehmen. Kann ein Besitzer seinen Kreditforderungen nicht nachkommen, so hat die Bank, das Recht das Auto zu pfänden
Person
Firma Bank
Auto
Kredit
Besitzer
Arbeitgeber
besitzt 1..*
arbeitet_bei
stellt_ein
0..31..*
BankBLZ
Nachqualifizierungskurs für InformatiklehrkräfteMatthias Spohrer · TU München
Seite 14
Übung 1
Nachqualifizierungskurs für InformatiklehrkräfteMatthias Spohrer · TU München
Seite 15
Literatur zur OOM
Bernd Oesterreich
Objektorientierte Softwareentwicklung
Oldenbourg
ISBN 3-486-25573-8
www.oose.de/uml
Nachqualifizierungskurs für InformatiklehrkräfteMatthias Spohrer · TU München
Seite 16
Tagesordnung
1. Infos und Neuigkeiten
2. Objektorientierte Modellierung
3. Haskell-Übungen
Nachqualifizierungskurs für InformatiklehrkräfteMatthias Spohrer · TU München
Seite 17
Übung 2
Gesucht ist eine Funktion ltest, die bei Eingabe eines String und einer Integer-Zahl die Differenz zwischen der Länge der Zeichenkette und der eingegebenen Zahl berechnet, also beispielsweise
ltest(„hallo“,3) = 2
ltest(„hallo“, 9) = - 4
ltest(„informatik, 10) = 0
function ltest (String wort, Int zahl): Int
return if wort = ““ then –zahl else 1+ltest(wort.rest, zahl) fi
ltest :: (String, Int) -> Int
ltest (““,zahl) = -zahl
ltest(wort, zahl) = 1 + (ltest( (tail wort), zahl))
Nachqualifizierungskurs für InformatiklehrkräfteMatthias Spohrer · TU München
Seite 18
Fallunterscheidung
Gesucht ist eine Funktion ltest, die bei Eingabe eines String und einer Integer-Zahl die Differenz zwischen der Länge der Zeichenkette und der eingegebenen Zahl berechnet, also beispielsweise
ltest(„hallo“,3) = 2
ltest(„hallo“, 9) = - 4
ltest(„informatik, 10) = 0
function ltest (String wort, Int zahl): Int
return if wort = ““ then –zahl else 1+ltest(wort.rest, zahl) fi
ltest :: (String, Int) -> Int
ltest (wort, zahl)
| wort==““ = -zahl
| otherwise = 1 + (ltest( (tail wort), zahl))
Nachqualifizierungskurs für InformatiklehrkräfteMatthias Spohrer · TU München
Seite 19
Übung: Liste
Listen in Haskell [ a ]
String als spezielle Liste [char]
Mit : wird ein Element vor einer Liste angefügt (x:xe)
tail (x:xe) wäre dann die Liste xe
produkt :: [Int] -> Int
produkt [] = 1
produkt (x:xe) = x * produkt xe
Nachqualifizierungskurs für InformatiklehrkräfteMatthias Spohrer · TU München
Seite 20
Übung: Liste
passend :: Int -> [Int] -> [Int]
passend zahl [] = []
passend zahl (x:xe)
|zahl == x = x:passend zahl xe
|otherwise = passend zahl xe
Nachqualifizierungskurs für InformatiklehrkräfteMatthias Spohrer · TU München
Seite 21
map
ist1 :: Int -> Bool
ist1 zahl
| zahl == 1 = True
| otherwise = False
map wendet auf alle Elemente einer Liste des Typs a dieselbe Funktion a -> b an und überführt somit die Liste vom Typ [a] in eine Liste vom Typ [b].
passend4 :: [Int] -> [Bool]
passend4 = map ist1
passend4 [1,2,0,1,2]
[True, False, False, True, False]
Nachqualifizierungskurs für InformatiklehrkräfteMatthias Spohrer · TU München
Seite 22
map
ist1 :: Int -> Bool
ist1 zahl
| zahl == 1 = True
| otherwise = False
passend1 :: [Int] -> [Bool]
passend1 = map ist1
passend1 [1,2,0,1,2]
[True, False, False, True, False]
istx :: Int -> Int -> Bool
istx x zahl
| zahl == x = True
| otherwise = False
passendx :: Int -> [Int] -> [Bool]
passendx x = map (istx x)
passendx 1 [1,2,0,1,2]
[True, False, False, True, False]
Nachqualifizierungskurs für InformatiklehrkräfteMatthias Spohrer · TU München
Seite 23
filter
filter „filtert“ die Elemente aus einer Liste, die einer bestimmten Bedingung genügen. Diese Bedingung ist eine Funktion a -> Bool
istx :: Int -> Int -> Bool
istx x zahl
| zahl == x = True
| otherwise = False
passendf :: Int -> [Int] -> [Int]
passendf x = filter (istx x)
passendf 1 [1,2,0,1,2]
[1,1]
Nachqualifizierungskurs für InformatiklehrkräfteMatthias Spohrer · TU München
Seite 24
Fragen
?