• Keine Ergebnisse gefunden

Einführung in die Informatik IIVergleich von Programmierstilenund Abschluss-Besprechung

N/A
N/A
Protected

Academic year: 2022

Aktie "Einführung in die Informatik IIVergleich von Programmierstilenund Abschluss-Besprechung"

Copied!
25
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

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)

2

Überblick für Heute

Vergleich von Programmierstilen

Allerlei

– Kurzfristiges Jobangebot – Interaktives Antwortsystem – Preisinformationen

Evaluierung der Vorlesung

(3)

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)

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

(5)

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)

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

(7)

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)

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

(9)

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)

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

(11)

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)

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

(13)

Ü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)

14

Überblick für Heute

Vergleich von Programmierstilen

Allerlei

– Kurzfristiges Jobangebot – Interaktives Antwortsystem – Preisinformationen

Evaluierung der Vorlesung

(15)

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

(16)

17

Evaluierung

Stoff

Werkzeuge

Folien

Vorlesungsbetrieb

(17)

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

(18)

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

(19)

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

(20)

21

Werkzeuge

Wahlfreiheit lassen bei Entwicklungsumgebungen, Betriebssystemen, Programmiersprachen

(21)

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

(22)

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

(23)

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

(24)

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!

Referenzen

ÄHNLICHE DOKUMENTE

Auch die eingangs erwähnte Ansicht, Informatik nur studieren zu können, wenn man es bereits als Schulfach gewählt hatte, sorgt wohl für einen nahezu gleichbleibend niedrigen

Kann eine dieser Variablen mit der andere berechnet werden, so wird der „Rechnungsweg“ (was wir eben im Kopf rechnen…) als mathematischer Term notiert.. Man kann den Term auch

• Im Gegensatz zu einfach verketteten Listen haben doppelt verkettete Listen in den Knoten eine zusätzliche Instanzvariable für die Referenz auf den Vorgängerknoten. class Node

• Beispielsweise kann man aus der Grammatik nicht ableiten, dass eine Variable erst deklariert werden muss, bevor sie benutzt wird. • Eine Grammatik für Java findet

Eine wichtige Funktion für Listen ist das Verketten von zwei Listen l und ys1. Ergebnis soll eine Liste sein, die durch Anhängen von ys an

Jeder Knoten wird besucht, wenn alle seine abgehenden Jeder Knoten wird besucht, wenn alle seine abgehenden Zweige (Knoten) besucht worden sind, und zwar in der Zweige

Eure Variable soll immer um 1 erhöht werden, wenn ein Kristall eingesammelt wird.. (Das passiert also in der Schleife

 Sicherheit: nicht sehr hoch, weil Seiteneffekte auf Variablen/Zustand möglich.  Effizienz: in Schleifen wird auf eine Variable mehrfach zugewiesen, Zwischenergebnisse