Prof. Bernd Brügge, Ph.D Institut für Informatik
Technische Universität München
Sommersemester 2004 22. Juli 2004
Einführung in die Informatik II
Vergleich von Programmierstilen
und Abschluss-Besprechung
2
Überblick für Heute
Vergleich von Programmierstilen
Allerlei
– Kurzfristiges Jobangebot – Interaktives Antwortsystem – Preisinformationen
Evaluierung der Vorlesung
Programmierstile
Funktionale Programmierung
Imperative Programmierung
Objekt-basierte Programmierung
Objekt-orientierte Programmierung
Ereignis-basierte Programmierung
Regel-basierte Programmierung (in Info I/II nicht behandelt, Vorlesung Wissensbasierte Systeme)
4
System-Kategorien und Sprachniveaus
Der Programmierstil ist nur eine von vielen Dimensionen, um
Aspekte eines Informatik-Systems zu berurteilen. Andere Aspekte:
– System-Kategorie – Sprachniveau
System-Kategorie
1. Berechnung von Funktionen 2. Interaktive Systeme
3. Prozeßüberwachung 4. Eingebettete Systeme 5. Adaptive Systeme
Sprachniveau
Modellierungssprache
Höhere Programmiersprache Maschinennahe Sprache
Maschinensprache
Modellierungs- sprache
(UML, OMT,E/R...) Höhere
Programmier- sprache
(Java, C++, C,...) Maschinen- nahe Sprache (Intel Assembler,
PMI Assembler) Maschinen-
Sprache (PMI, Java-
Bytecode)
Sprach- Niveau
System-Klasse
Berechnung von Funk-
tionen
Interaktive Systeme
Prozess- überwachung
Eingebettete Systeme
Adaptive Systeme
Funk- Impe- Objekt- Objekt- Ereignis- Regel-
6
Modellierungs- sprache
(UML, OMT,E/R...) Höhere
Programmier- sprache
(Java, C++, C,...) Maschinen- nahe Sprache (Intel Assembler,
PMI Assembler) Maschinen-
Sprache (PMI, Java-
Bytecode)
Sprach- Niveau
System-Klasse
Berechnung von Funk-
tionen
Interaktive Systeme
Prozess- überwachung
Eingebettete Systeme
Adaptive Systeme
Programmierstil
Funk-
tional Impe-
rativ Objekt-
Basiert Objekt-
Orientiert Ereignis-
Orientiert Regel- basiert
PMI
Bumpers
Fibo- nacci
Kon- trol -Struk-
turen
Such- Sortier- Algorith-
men Fibo-
nacci
Dimensionen von Programmierstilen
Elemente: Was sind die wesentlichen Bestandteile des Stils?
Sicherheit: Sind Seiteneffekte möglich?
Effizienz: Wie hoch ist die Laufzeiteffizienz?
Nachweis der Korrektheit: Wie leicht ist es zu beweisen, dass ein im Stil geschriebenes Programm das Spezifikationsmodell korrekt implementiert?
Nachweis der Terminierung: Wie leicht ist es, zu beweisen, dass das Programm anhält?
Enkapsulierbarkeit: Erlaubt der Stil Zugriffsschutz (z.b. durch Sichtbarkeitsregeln)
Erweiterbarkeit: Unterstützt der Stil die Einführung von neuen Typen?
Lesbarkeit: Wieweit kann man das Programm durch Lesen des Quelltextes verstehen?
Wiederverwendbarkeit: Wie leicht kann man existierende Programme bei der Lösung anderer Probleme einsetzen?
8
Funktionaler Programmierstil
Wesentliche Elemente: Funktionsanwendung, Fallunterscheidung, Rekursion
Sicherheit: hoch, keine Seiteneffekte
Effizienz: für jeden Aufruf wird eine Inkarnation (Aktivierungssegment) angelegt
Nachweis Korrektheit : partielle Korrektheit
durch strukturelle Induktion
Nachweise Terminierung: Terminierungsfunktion
Enkapsulierung: Gering
Erweiterbarkeit: Schwierig
Lesbarkeit OK
Wiederverwendbarkeit: Gering
Imperativer Programmierstil
Wesentliche Elemente: Zuweisung, Kontrollstrukturen,
Anweisungssequenzen, Programmzustand
Sicherheit: nicht sehr hoch, weil Seiteneffekte auf Variablen/Zustand möglich
Effizienz: in Schleifen wird auf eine Variable mehrfach zugewiesen, Zwischenergebnisse können gespeichert werden (i.A.höhere Effizienz)
Nachweis Korrektheit: Durch Zusicherungen (Hoare Kalkül)
Sehr aufwendig schon für kleine Programme
Nachweis Terminierung: Schwierig
Enkapsulierbarkeit: Gering
Erweiterbarkeit: Schwierig
Lesbarkeit OK
Wiederverwendbarkeit: Gering
10
Objekt-basierter Programmierstil
Wesentliche Elemente: Imperativer Programmierstil + Klassenkonzept
Sicherheit: Seiteneffekte durch Klassenkonzept auf lokale Variablen/Zustand einschränkbar
Effizienz: in Schleifen wird auf eine Variable mehrfach zugewiesen, Zwischenergebnisse können gespeichert werden (i.A.höhere Effizienz)
Nachweis Korrektheit: Entwurf durch Verträge, aufwendig
Nachweis Terminierung: Schwierig
Enkapsulierbarkeit: Hoch
Erweiterbarkeit: Schwierig
Lesbarkeit OK
Wiederverwendbarkeit: Nicht sehr hoch
Objekt-Orientierter Programmierstil
Wesentliche Elemente Objekt-basierter Programmierstil + Vererbung und Polymorphismus
Sicherheit: Seiteneffekte durch Klassenkonzept auf lokale Variablen/Zustand einschränkbar
Effizienz: mittelmäßig (i.A. geringere Effizienz als beim imperativen Stil, insbesondere durch dynamischen Polymorphismus)
Nachweis Korrektheit: Entwurf durch Verträge, aufwendig
Nachweis Terminierung: Schwierig
Enkapsulierbarkeit: Hoch
Erweiterbarkeit: Sehr gut
Lesbarkeit OK
Wiederverwendbarkeit: Sehr gut
12
Ereignis-Orientierter Programmierstil
Wesentliche Elemente Kontrollfluss durch Ereignisse, kein Hauptprogramm
Sicherheit: gefährdet, weil Seiteneffekte auf Variablen/Zustand möglich
Effizienz: hoch (wie beim imperativen Stil)
Nachweis Korrektheit: Sehr schwierig wegen fehlendem Kontrollfluss
Nachweis Terminierung: Äusserst schwierig (aber im allgemeinen garnicht erwünscht:-)
Enkapsulierbarkeit: Gering
Erweiterbarkeit: Sehr gut
Lesbarkeit Schlecht
Wiederverwendbarkeit: Mittelmäßig
Übersichtstabelle
Sicherheit Effizienz Nachweis der Korrektheit
Nachweis
der Terminierung Enkapsulierung Erweiterbarkeit
Lesbarkeit Wiederverwend-
Funktional Imperativ Objekt- basiert
Ereignis- orientiert
Objekt- orientiert
+ - 0 - 0
- + 0 + 0
+ - 0 - 0
+ - - -- -
- - + - +
- - 0 - +
0 0 0 - 0
- - 0 - +
14
Überblick für Heute
Vergleich von Programmierstilen
Allerlei
– Kurzfristiges Jobangebot – Interaktives Antwortsystem – Preisinformationen
Evaluierung der Vorlesung
Software-Entwickler gesucht!
Projekt: Logistiktool für die chemische Industrie
Was wir benötigen:
– Informatikstudenten für 2-3 monatige Hiwi-Anstellung – MS Access - Kenntnisse wünschenswert
Wann:
– Semesterferien (ab Anfang August)
Was wir anbieten:
– Echte Projekterfahrung, richtiger Kunde (Fortführung eines aktuellen Softwareprojekts)
– Extreme Programming
– Erfahrung sammeln in Visual Basic und Datenbanken
17
Evaluierung
Stoff
Werkzeuge
Folien
Vorlesungsbetrieb
Stoff
Bemühung um Modernisierung der VL
GUI Benutzung (könnte auch schon ins 1. Semester)
Java, nur eine Programmiersprache, nicht 3 auf einmal
Moderne Beispiele
Bumpers
Erklärung mit UML
Aufbau der Vorlesung insgesamt
19
Stoff
Mehr Hintergrundwissen zur eigentlichen Informatik
Weniger Themen anschneiden, dafür gründlicher
Inhalt nicht redundant aufschreiben, sondern nur Stichpunkte
Im Skript nur Sachliches, nicht “Heute fällt die ZU aus”
Zuviele abstrakte Konzepte, die im Raum rumgeistern
Kein OCL im Grundstudium
“Bitte mehr Praxisbezug”, “Bitte mehr Theorie”
Gewisses logisches/mathematisches Grundverständnis voraussetzen
Vorlesungsbetrieb
Skript im Netz
Unterstützung der TUM-BWL Übung in der Innenstadt
2x Tutorübung in der Woche!
Pause zwischen langen Vorlesungen
Zentralübung nur bei Bedarf
21
Werkzeuge
Wahlfreiheit lassen bei Entwicklungsumgebungen, Betriebssystemen, Programmiersprachen
Folien
Folien sind deutlich überfrachtet.
Die letzten Folien länger stehen lassen.
Das Konzept der Folien funktioniert einfach nicht, Tafelanschrieb wäre deutlich hilfreicher
Prof. Brügge wirkte oft unvorbereitet, als ob er die Folien nicht kennen würde
– Powerpoint und Animationen
23
Sonstiges
Keine Experimente
– Wirklich nicht? Warum haben Sie Informatik gewählt?
Weniger gequälte Übersetzung englischer Begriffe, Englisch ist nun einmal die Sprache der Informatik
Das Problem ist nicht Englisch vs Deutsch, sondern “Denglisch”
Es ist nicht Sinn einer Vorlesung, für eine Firma zu werben Ziel war Werbung für die Ferienakademie
Manchmal könnte das Mikro lauter sein, da im (vollen) Saal ein gewisser Lärmpegel herrscht.
Der Lärmpegel war besonders hoch, als das Mikro gut war.
Prof. etwas freundlicher, Überreaktion bei erhöhtem Lärmpegel Schwätzen ist unfair bezüglich der anderen Studierenden
Keine Vorlesung um 8:30
Ein weiteres Experiment
Interaktives Fragesystem
iVote
– Erstellt von Studierenden im Webobjects Praktikum
URL fuer Endbenutzer – http
://macbruegge27.informatik.tu-muenchen.de/cgi-bin/WebObjects/i Vote
Fragen
– Hat es Ihnen geholfen, dass wir die PPS Folien ins Netz gestellt haben? Ja, Nein
– Sollen wir die Vorlesung interaktiver machen?
– Ja, Nein, nur die Zentralübung
– Möchten Sie die Animation für die Huffmann-Codierung sehen?
– Ja, Nein
– Haben Sie Interesse an Angeboten wie dem Ferienjob? Ja, Nein
25
Ein letzter Tip: Prüfungsvorbereitung
Ein Skript ist Rohmaterial, kein Kondensat, für die Prüfung.
Destillieren Sie die wesentlichen Punkte aus dem Skript – Erarbeiten Sie eine Zusammenstellung der Konzepte
Üben Sie nochmals möglichst viele Übungsaufgaben
Gehen Sie mental durch eine Prüfung durch – Was kann passieren?
Arbeiten Sie mit anderen zusammen!
Viel Glück im weiteren Studium!