51
Einführung in die Programmierung Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Embed Size (px)

Citation preview

Page 1: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Einführung in die Programmierung

Vorlesung SS 2006

Paul Manthey

Page 2: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Motivation: Warum Programmierung?

Notwendigkeit

• Ausgangspunkt „strukturiertes Denken“: systematische und strukturierte Analyse und Lösung von Aufgaben (abstrakt)

• Systementwicklung liefert formale Modelle für Anwendungssysteme, Abläufe, Steuerungen / Geräte, . . .

• Beschreibung und Programmierung von durch den Computer bearbeitbaren Aufgaben (real).

Grenzen

• Nicht alles ist berechenbar: Ist eine Funktion f: identisch 0, gilt also für alle reellen x: f(x) = 0?

• Nicht alles ist entscheidbar: Hält ein Java-Programm P mit der Eingabe D (Datei) irgendwann an oder läuft es unendlich weiter (Halteproblem)?

Page 3: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Informaler Problembegriff

Definition

Unter einem Problem (Problemklasse) versteht man eine allgemeine Frage, die beantwortet werden soll. Gewöhnlich besitzt es Parameter (freie Variable), deren Werte zu spezifizieren sind. Ein Problem wird charakterisiert durch

• Eine allgemeine Beschreibung seiner Parameter.

• Eine Aussage darüber, welche Eigenschaften die Antwort oder Lösung des Problems erfüllen muss.

Eine Probleminstanz erhält man als Spezialfall einer Problemklasse, wenn alle Parameter des Problems mit konkreten Werten spezifiziert werden.

Der Unterschied zwischen einer Problemklasse und einer Probleminstanz liegt darin, dass Lösungen für eine Klasse immer die zugehörigen Instanzen lösen, aber nicht umgekehrt.

Page 4: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Beispiele (1)

Allgemeine Form

• Eingabe: Eine Liste von Parametern.Ausgabe: Antwort auf eine Fragestellung.

Spezielle Form

• MULTEingabe: a, b ZAusgabe: Welchen Wert hat das Produkt a · b?

• PRIMEingabe: a NAusgabe: Ist a eine Primzahl?

Page 5: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Beispiele (2)

Optimale Teilung für 2 Teilnehmer

• Eingabe: Ein teilbares Objekt.

• Wie teilt man das Objekt so, dass alle Beteiligten zufrieden sind?

Mögliche Eingabe-Parameter

• Anzahl der Beteiligten

• Konstanz der Anzahl

• Art des Objektes

• Beschaffenheit der Teile

Page 6: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Datenmodell und Algorithmus

Alle Problemlösungen haben Gemeinsamkeiten

• Sie beziehen alle Parameter des Problems in ihre Eingabe ein.

• Sie beschreiben Schritt für Schritt den Weg zur Lösung.

• Sie enden nach einer endlichen Anzahl von Schritten.

• Sie liefern die Lösung in einer dem Problem angemessenen Ausgabe.

Definition

Als Datenmodell bezeichnen wir die Gesamtheit aller Abstraktionen, die ein Problem beschreiben. Datenmodelle bilden die Grundlage für die Umsetzung eines Problems auf einen Computer. Die Zusammenfassung von Problemparametern und/oder Zwischenergebnissen beim Lösen des Problems nennen wir Datenstrukturen (Datentypen.

Definition

Als Algorithmus bezeichnen wir eine Technik, die mit endlich vielen Schritten oder Anweisungen Parameter einer Probleminstanz als Eingabegrößen in die gewünschten Ausgabegrößen transformiert.

Page 7: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Historischer Überblick

• 300 v. Chr.: Euklids Algorithmus zur Bestimmung des ggT, (7. Buch der Elemente):

ggT(300, 200) = 100

• 800 n. Chr.: Muhammed ibn Musa abu Djafar alChoresmi: Aufgabensammlung für Kaufleute und Testamentsvollstrecker (lat.: Liber Algorithmi, Kunstwort aus dem Namen und griechisch „arithmos“ für Zahl)

• 1574: Adam Rieses Rechenbuch

• 1614: Napiers Logarithmentafeln (30 Jahre für Berechnung!)

• 1703: Binäres Zahlensysteme (Leibnitz)

• 1931: Gödels Unvollständigkeitssatz

• 1936: Church’sche These

Page 8: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Eigenschaften von Algorithmen (1)

Korrektheit

Wir setzen voraus, dass mit einem Algorithmus das gestellte Problem richtig gelöst werden kann. Meist ist dies offensichtlich der Fall, manchmal muss jedoch ein formaler Beweis die Tauglichkeit zeigen.

Der Nachweis durch Test einiger Lösungen für Probleminstanzen ist nicht ausreichend, da damit – wie Dijkstra einst bemerkte – nur „die Anwesenheit, aber nicht die Abwesenheit von Fehlern“ gezeigt werden kann.

Terminierung

Ein Algorithmus muss nach einer endlichen Anzahl von Schritten abbrechen. Tut er das nicht, werden wir ihn als Berechnungsmethode oder Prozess bezeichnen. Prozesse treten vor allem dort auf, wo Algorithmen mit ihrer Umgebung interagieren (z.B. bei Betriebssystemen, Shells).

Page 9: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Eigenschaften von Algorithmen (2)

Determinismus

Jeder Schritt des Algorithmus muss so genau bestimmt sein, dass er zu einem unzweideutigen – nicht zufälligen – Ergebnis führt. Das bedeutet in der Praxis, dass bei gegebener, gleicher Problemklasse für unterschiedliche Probleminstanzen die Eingabegrößen gleichartig in Ausgabegrößen transformiert werden. Offenbar hängt diese Eigenschaft stark davon ab, in welcher Form der Algorithmus dargestellt wird.

Effizienz

Die Güte eines Algorithmus ist nicht einfach zu bestimmen.

• Soll der Algorithmus auf einen Computer „leicht“ umsetzbar sein und darf er nur eingeschränkt Ressourcen benutzen – wie z.B. Zeit, Speicherplatz, CPU oder Papier?

• Sind nur bestimmte Schritte im Algorithmus zugelassen bzw. kann er auf bestehende Algorithmen aufbauen?

• Soll der Algorithmus ein bestimmtes Paradigma unterstützen, z.B. Objektorientierung oder modulare Programmiertechniken?

Page 10: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Algorithmisierbare Prozesse

• Kochrezepte

• Pizza aufwärmen

• Seeteufel mit Kräuterkruste auf Lauch

• Bedienungsanleitungen

• Suchen eines Telefonbucheintrags

• Herausgeben von Wechselgeld

• Sortieren von Spielkarten

• Berechnungsvorschriften

• schriftliches Addieren

• Berechnung der Fakultät (x! = x · (x − 1) · · · · · 3 · 2 · 1)

• Berechnung des größten gemeinsamen Teilers ggT zweier Zahlen

Page 11: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Darstellungsformen von Algorithmen (1)

Umgangssprache

• Meist unvollständig

• Nicht immer ausreichend exakt, um eine spätere Transformation des Algorithmus auf einen Computer durchzuführen

Beispiel 1:

• Koche Wasser.

• Gib Kaffeepulver in Tasse.

• Fülle Wasser in Tasse.

Beispiel 2:

• S1: Gib Kaffeepulver in Tasse.

• S2: Koche Wasser.

• S3: Fülle Wasser in Tasse.

Page 12: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Darstellungsformen von Algorithmen (2)

Diagrammformen

• Flussdiagramm (englisch Flowchart) ist die grafische Darstellung der Ablaufstruktur eines Algorithmus, die die Aufeinanderfolge von Schritten sichtbar macht. Spezielle Flussdiagramme der Informatik sind Datenflussplan und Ablaufplan.

• Struktogramm (Nassi-Shneiderman-Diagramm) benutzt als Grund-element den als Rechteck dargestellte Strukturblock mit einer Eingangs- und einer Ausgangskante, der für einen Algorithmusschritt steht und in dem diese Funktion benannt oder beschrieben wird.

Page 13: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Kontrollstrukturen in Algorithmen

Sequenz

• Besteht aus Schritten bzw. Anweisungen, die als zusammengesetzter Strukturblock oder eben als Sequenz bezeichnet werden.

Auswahl (Verzweigung)

• Wird innerhalb eines Algorithmus eingesetzt, wenn eine oder mehrere Folgeanweisungen nur unter einer bestimmten Bedingung auszuführen sind.

• Existiert als einfache, zweifache und CASE-Verzweigung

Wiederholung (Schleife)

• Steuert die Wiederholungen einer oder einer Folge von Anweisungen unter Beachtung eines bestimmten Zustandes

• Existiert als kopf- bzw. fußgesteuerte WHILE- bzw. REPEAT-Schleife

Subalgorithmus (Prozedur)

• Als eigenständiger Algorithmus implementierte Prozedur oder Funktion, die von einem Hauptalgorithmus aus aufgerufen wird.

Page 14: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Diagrammdarstellungen (1)

Sequenz

Page 15: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Diagrammdarstellungen (2)

Auswahl (Verzweigung)

Page 16: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Diagrammdarstellungen (3)

Wiederholung (Schleife)

Page 17: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Diagrammdarstellungen (4)

Subalgorithmus (Prozedur)

Page 18: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Darstellungsformen von Algorithmen (3)

Pseudocode

• Semi-formale Sprache

• Beschreibt Ablaufstrukturen eines Algorithmus grob durch Texte und fest vorgegebene Schlüsselwörter

Beispiel

• procedure Euklid (m, n)loop

r = m mod nm = nn = r

until r = 0return m

end procedure

Page 19: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Effizienz

Neben den bisher vorgestellten, formalen Eigenschaften interessieren vor allem eine Frage: Die Effizienz, d.h. Leistungsfähigkeit bei der Ausführung, z.B. zum Vergleich verschiedener vorhandener Algorithmen.

Frage

Wie misst man die Effizienz eines Algorithmus? Üblicherweise durch die von dem Algorithmus für die Lösung des Problems benötigten Ressourcen:

• Den benötigten Platz und

• Die benötigte Zeit.

Definition

Unter der Speicherkomplexität eines Algorithmus versteht man die Messung des zu seiner Ausführung nötigen Speicherplatzes, unter Zeitkomplexität analog die nötige Laufzeit.

Frage

Wie misst man die benötigte Zeit und den benötigten Platz?

Page 20: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Die Random Access Maschine

Zur Präzisierung der Begriffe Rechenzeit und Speicherbedarf benötigt man ein präzises (idealisiertes) Rechnermodell.

Definition

Eine Random-Access-Maschine (RAM) (mit k Registern) besteht aus

• k Registern 0, . . . , k.

• Einer unendlichen Zahl von Speicherzellen Ri , i ∈ N.

• Einem Programm P, bestehend aus Befehlen P0, . . . , Pl.

• Einem Befehlszähler .

Jedes Register und jede Speicherzelle enthält eine natürliche Zahl. Die Inhalte werden mit X bezeichnet.

Page 21: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Funktionsweise der RAM

In jedem Schritt tut die RAM folgendes:

1. Lese den Inhalt i von .

2. Erhöhe um eins.

3. Lade Befehl Pi .

4. Führe den Befehl aus.

Bei der Ausführung des Befehls werden unter Umständen die Inhalte der Register, der Speicherzellen und des Befehlszählers geändert - nicht jedoch das Programm.

Page 22: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Befehlssatz der RAM: Transportbefehle

Page 23: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Befehlssatz der RAM: Sprungbefehle

Page 24: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Befehlssatz der RAM: Arithmetische und Indexbefehle

Page 25: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Beispiel: Berechnung von 2n mit 2 Registern

Page 26: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Nachteile des RAM-Modells

Die RAM ist natürlich in folgenden Hinsichten unrealistisch:

• Es stehen unendlich viele Speicherzellen zur Verfügung

• Jedes Register und jede Speicherzelle (und jeder Befehl) kann eine beliebige natürliche Zahl speichern (d.h. bereits unendlicher Speicher pro Zelle)

Dennoch spiegelt das Modell sehr gut die Eigenschaften eines „natür-lichen“ Computers wider.

Um die Effizienz von Algorithmen auf diesem Rechnermodell messen zu können, benötigen wir ein Kostenmodell. Im Folgenden führen wir zwei gebräuchliche Kostenmaße ein und anschließend ein Konzept zur Laufzeitbetrachtung, das uns ermöglicht, das Verhalten von Algorithmen zu bewerten.

Page 27: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

RAM: Kostenmaße (1)

Einheitskostenmaß (uniforme Kosten)

• Jeder Speicherzugriff kostet eine Einheit.

• Jede Ausführung eines Kernbefehls kostet eine Einheit.

Dieses Maß ist realistisch, wenn die vorkommenden Parameter jeweils in eine Speicherzelle eines realen Computer passen (Wortgröße)

Logarithmisches Kostenmaß

• Jeder Kernbefehl kostet eine Einheit.

• Die Kosten für alle anderen Argumente sind proportional zur Länge der Binärdarstellung der Zahlen, d.h.

Page 28: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

RAM: Kostenmaße (2)

Page 29: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Verhalten im schlechtesten Fall

Um einen Algorithmus A möglichst detailliert bewerten zu können, könnte man einfach für jede mögliche Eingabe x die Zeit TA(x) messen, die A be-nötigt, um das Problem zu lösen.

Dies ist im Allgemeinen jedoch nicht praktikabel. Daher beschränkt man sich üblicherweise auf das Verhalten im schlechtesten Fall.

Dazu weist man jeder Eingabe x eine Größe |x| N zu, und betrachtet die maximale Zeit, die der Algorithmus zum Lösen des Problems auf allen Eingaben derselben Größe benötigt.

Definition (Worst-Case-Laufzeit)

TA(n) := sup {TA(x) | x PROBLEM, |x| = n}

Page 30: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Verhalten im Mittel

In vielen Fällen stellt das Verhalten im schlechtesten Fall nur ein ungenaues Maß dar. So kann z.B. die Lösung eines bestimmten Falles sehr lange brauchen, während alle anderen Fälle in sehr viel kürzerer Zeit gelöst werden können.

In solchen Fällen kann man das Verhalten im Mittel betrachten. Dazu nimmt man an, dass die Eingabe x mit einer gewissen Wahrschein-lichkeit 0 < p(x) < 1 auftritt.

Definition (Expected-Time-Laufzeit)

TAavg(n) := E( {TA(x) | x PROBLEM, |x| = n}) = p(x) TA(x)

x PROBLEM

|x| = n

Page 31: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Komplexitätsanalyse und Big-O-Notation

Definition (Big-O-asymptotisch)

Die Funktion f(n) ist von der Größenordnung der Funktion g(n) bzw. f(n) ist O(g(n)) oder f(n) ist in O(g(n)), geschrieben f(n) = O(g(n), falls Kon-stante c1, c2 und n0 existieren, so dass gilt

f(n) c1 g(n) + c2 n n0.

Um auszudrücken, dass eine Größenordnung die kleinstmögliche ist, kann die in der Literatur bekannte -Notation verwendet werden

Definition

Es gilt f(n) = (g(n)), falls f(n) = O(g(n)) ist und Konstante c1, c2 und n0 existieren, so dass gilt

f(n) c1 g(n) + c2 n n0,

d.h. f(n) und g(n) unterscheiden sich für großes n nur um eine Konstante.

Page 32: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Komplexität von Problemen: Obere Schranken

Definition

Ein Problem PROB hat die Zeitkomplexität O(f ) für f : N N, wenn es einen Algorithmus A für PROB gibt mit

TA(n) O(f ).

Eine solche obere Schranke für die Zeitkomplexität eines Problems kann somit durch die Analyse eines Algorithmus erreicht werden.

Häufig ergeben sich recht einfache obere Schranken, die aber sehr ungenau sind.

Page 33: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Beispiel: Kosten für die Berechnung von 2n (1)

Page 34: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Beispiel: Kosten für die Berechnung von 2n (2)

Page 35: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Beispiel: Kosten für die Berechnung von 2n (3)

Page 36: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Beispiel: Kosten für die Berechnung von 2n (4)

Page 37: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Vergleichswerte von Größenordnungen

Page 38: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Darstellungsformen von Algorithmen (4)

Definition

Ein Programm ist ein in einer Programmiersprache formulierter Algorithmus

Definition

Eine Programmiersprache besteht aus einem Alphabet von Zeichen, wobei die Wörter einer Sprache durch (formale) Regeln - die Grammatik - gebildet werden. Die Grammatik einer Programmiersprachen heisst Syntax, ihre inhaltliche Bedeutung Semantik.

Syntax: Formale Regeln, welche Sätze gebildet werden können:

„Der Elefant aß die Erdnuss.“ (syntaktisch korrekt)„Der Elefant aß Erdnuss die.“ (syntaktisch falsch)

Semantik: (Formale) Regeln, welche Sätze eine Bedeutung haben:

„Der Elefant aß die Erdnuss.“ (semantisch korrekt, „sinnhaft“)„Die Erdnuss aß den Elefanten.“ (semantisch falsch, „sinnlos“)

Page 39: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Eigenschaften von Java

• einfach

• automatisierte Speicherverwaltung

• Verzicht auf Zeiger und goto

• objektorientiert

• robust und sicher

• starke Typisierung

• Laufzeitüberprüfung von Zugriffen

• interpretiert und dynamisch

• virtuelle Java-Maschine

• „kleine“ Programme

• architekturneutral und portabel

• plattformunabhängiger Zwischencode (Bytecode)

• Programme sind ohne Änderungen ablauffähig unter Windows, Unix, MacOS, . . .

Page 40: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Systemprogramme zur Programmierung (1)

Compiler

Programme werden als Quelltext formuliert und durch einen Compiler in eine, dem Computer verständliche (Maschinen-)Sprache übersetzt.

Aufgaben des Compilers

• Zeichenweises Einlesen des als Text formulierten Programms

• Erkennung von Grundsymbolen. Diese sind:

• Operatoren wie z.B. = , + , - , /, & ...

• Trennzeichen wie z.B. ( ) { } , : ; [ ] ...

• Schlüsselworte wie if, then, else, while, ...

• Konstanten wie 1, -5, +1.5, - 3e10 ...

• Bezeichner, das sind Namen für Programmobjekte, die der Programmierer selbst vergeben kann wie z.B. Variablennamen

• Prüfen auf syntaktische Korrektheit

• Übersetzen des Textes in die Maschinensprache

Page 41: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Systemprogramme zur Programmierung (2)

Linker (Binder) und Loader (Lader)

Ein Programm benutzt i.a. mehrere Programmobjekte, die zu einem Programm zusammengesetzt werden, z.B.

• Programmstücke, mit denen man Daten einlesen und ausgeben kann

• Zugriff auf Eingabegeräte

• Funktionen des Betriebssystems

Aufgabe des Linkers

• übersetzte Module zu einem lauffähigen Programm zusammenfügen

• Informationen zur Speicherverwaltung eintragen

• Das Programm in einer Datei auf Festplatte speichern (executable).

Aufgabe des Laders

• das in Maschinensprache übersetzte Programm von der Programmdatei in den Arbeitsspeicher laden und von der CPU ausführen lassen.

Page 42: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Systemprogramme zur Programmierung (3)

Interpreter

Interpreter übersetzen Programme zeilenweise im Quelltext. Jede Zeile wird sofort in Maschinensprache übertragen und ausgeführt. Fehler im Programmfluss können sofort während der Übersetzung erkannt werden.

Nachteil

• Die Programmabarbeitung wird deutlich langsamer, da nach jeder Ausführung von Maschinenanweisungen erst wieder der Interpreter die nächste Zeile bearbeitet.

• Jeder neue Programmlauf wird wieder neu übersetzt.

• Computerressourcen werden mehrfach benutzt

Page 43: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Java-Werkzeuge (1)

• Java-Compiler javac

• überprüft Quelltext auf Fehler

• übersetzt Quelltext in plattformneutralen Zwischencode (Bytecode)

• Java-Interpreter java

• interpretiert Bytecode

• implementiert virtuelle Java-Maschine

Page 44: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Java-Werkzeuge (2)

Page 45: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Paradigma 1: Strukturierte Programmierung

• liegt der klassischen, prozeduralen Programmierung zugrunde.

• Arbeitet mit Kontrollstrukturen

• Programmiersprachen: Fortran, Basic, Pascal, C.

• Computer = Maschine zur Veränderung von Variablenwerten.

• Programm = Plan für den Berechnungsprozess mit Angabe der Befehle

• Programmfindung: Elementare Einzelschritte finden und in flexible Reihenfolge bringen.

Page 46: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Paradigma 2: Objektorientierte Programmierung

• Verfolgt einen ganzheitlichen Ansatz, in dem Daten und Programmcode miteinander verbunden sind.

• Programmiersprachen: Simula, C++, Smalltalk, Delphi, Java,...

• Computer = Umgebung für virtuelle Objekte

• Programm = Auflistung von (Objekt-) Klassen, d.h. allgemeiner Spezifikationen von Objekten, die zur Laufzeit des Programms (mehrfach) kreiert und wieder vernichtet werden können und miteinander kommunizieren.

• Programmfindung: Spezifikation der Klassen (Daten und Methoden), die Objektstruktur und -verhalten festlegen.

Page 47: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Struktur eines Java-Programms

Page 48: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Konzepte der Objektorientierung

Definition

Als Objekt bezeichnet man in der objektorientierten Programmierung (engl.: object-oriented programming; OOP) die Instanz einer Klasse. Das Objekt enthält Daten, die Klasse enthält die Funktionen (Methoden) zu deren Verarbeitung. Das Objekt wird als eine Einheit (Entität) behandelt. Ein Objekt existiert nur für die Dauer der Laufzeit des entsprechenden Programms. Ist das Programm abgelaufen, beendet das Objekt seine Existenz.

Haupteigenschaften von Objekten

• Kapselung: Verbergen der Implementierungsdetails eines Objekts.

• Vererbung: Fähigkeit, bestehende Objekte bei der Erstellung neuer, stärker spezialisierter Objekte wiederzuverwenden.

• Polymorphie: Fähigkeit des Codes, abhängig vom verwendeten Objekt unterschiedliche Verhaltensweisen zu zeigen.

Page 49: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Kapselung

Definition

Kapselung bedeutet das Verbergen der Details eines Objekts vor anderen Teilen des Programms. Das Objekt kann nur über seine Zugriffsmethoden verwendet werden, die das Objekt konsistent und geschützt halten.

Kapselung lässt ein Objekt wie eine Blackbox aussehen: Das Innere einer Box ist vor Blicken geschützt. Von außen gibt es einige Steuerelemente, die für den Anwender die einzige Möglichkeit darstellen, die Box zu verwenden.

Beispiel

Ein Fernsehgerät versperrt dem Benutzer den Zugang zu den meisten inneren Abläufen. Der Benutzer kommuniziert mit dem Gerät über wohl definierte Steuerelemente. Die Steuerelemente werden auch als Interface bezeichnet.

Page 50: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Vererbung

Definition

In der objektorientierten Softwareentwicklung können Klassen Eigenschaften von anderen Klassen erben. Wenn eine Klasse von einer Basisklasse geerbt hat, spricht man davon, dass sie von der Basisklasse abgeleitet ist. Abgeleitete Klassen besitzen alle Operationen und Attribute der Basisklasse, können aber auch zusätzliche Eigenschaften haben.

Fazit

• Vererbung bedeutet Spezialisierung

• Abgeleitete Klassen können Operationen von Basisklassen überschreiben.

• Klassen können nur von einer Basisklasse abgeleitet werden (Java) oder auch von mehreren (C++). Mehrfachvererbung bedeutet, dass eine Klasse von mehreren Basisklassen abgeleitet sein kann.

Page 51: Einführung in die Programmierung Vorlesung SS 2006 Paul Manthey

Einführung in die Programmierung

Polymorphie

Definition

Polymorphie („Vielgestaltigkeit“) bedeutet, dass Funktionen bzw. Methoden einem bestimmten Typ bzw. einer bestimmten Klasse zugeordnet sind, und je nach Typ/Klasse eines bestimmten Objekts die zugehörige Funktion/Methode ausgeführt wird.

Beispiel

In einem Zeichenprogramm existieren geometrische Primitive wie Linie, Ellipse, Rechteck usw. Falls alle von einer Basisklasse eine Methode zeichnen ableiten sollen, wird jede Klasse die ihr gemäße Zeichenoperation überschreiben, um gerade oder runde Linien zu erzeugen. Trotzdem kann der Name zeichnen weiterhin von allen gemeinsam verwendet werden.