240 likes | 355 Views
Einführung in die Informatik II Vergleich von Programmierstilen und Abschluss-Besprechung. Prof. Bernd Brügge, Ph.D Institut für Informatik Technische Universität München Sommersemester 2004 22. Juli 2004. 2. Überblick für Heute. Vergleich von Programmierstilen Allerlei
E N D
Einführung in die Informatik IIVergleich von Programmierstilenund Abschluss-Besprechung Prof. Bernd Brügge, Ph.D Institut für Informatik Technische Universität München Sommersemester 2004 22. Juli 2004 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)
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
System-Klasse Sprach- Niveau Adaptive Systeme Modellierungs- sprache (UML, OMT,E/R...) Eingebettete Systeme Höhere Programmier- sprache (Java, C++, C,...) Prozess- überwachung Interaktive Systeme Maschinen- nahe Sprache (Intel Assembler, PMI Assembler) Berechnung von Funk- tionen Maschinen- Sprache (PMI, Java- Bytecode) Funk- tional Impe- rativ Objekt- Basiert Objekt- Orientiert Ereignis- Orientiert Regel- basiert Programmierstil
System-Klasse Sprach- Niveau Adaptive Systeme PMI Bumpers Modellierungs- sprache (UML, OMT,E/R...) Fibo- nacci Kon- trol -Struk- turen Such- Sortier- Algorith- men Eingebettete Systeme Höhere Programmier- sprache (Java, C++, C,...) Prozess- überwachung Fibo- nacci Interaktive Systeme Maschinen- nahe Sprache (Intel Assembler, PMI Assembler) Berechnung von Funk- tionen Maschinen- Sprache (PMI, Java- Bytecode) Funk- tional Impe- rativ Objekt- Basiert Objekt- Orientiert Ereignis- Orientiert Regel- basiert Programmierstil
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?
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
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
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 Objekt- basiert Ereignis- orientiert Objekt- orientiert Funktional Imperativ - Sicherheit 0 - 0 + Effizienz + 0 + 0 - Nachweis der Korrektheit + - 0 - 0 Nachweis der Terminierung + - - -- - - - + - + Enkapsulierung Erweiterbarkeit - - 0 - + Lesbarkeit 0 0 0 - 0 Wiederverwend- barkeit - - 0 - + Legende: + (hoch), 0 (mittel), - (gering/schwierig)
Ü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 • Kontakt: bruegge@in.tum.de
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
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
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
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/iVote • 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 • Haben Sie Interesse, an der Weiterentwicklung von iVote mitzumachen?
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!