Objektorientierte Programmierung OOP

KE 1 Von der Aufgabenstellung zum Programm; Begriffe, Beispiele und Definitionen

KE 1 Von der Aufgabenstellung zum Programm; Begriffe, Beispiele und Definitionen


Fichier Détails

Cartes-fiches 81
Utilisateurs 11
Langue Deutsch
Catégorie Informatique
Niveau Université
Crée / Actualisé 08.02.2013 / 28.11.2022
Lien de web
https://card2brain.ch/box/objektorientierte_programmierung_oop3
Intégrer
<iframe src="https://card2brain.ch/box/objektorientierte_programmierung_oop3/embed" width="780" height="150" scrolling="no" frameborder="0"></iframe>

Begriff: enthält Beziehung (include)

Wenn ein Anwendungsfall das Verhalten eines anderen mit einschließt, so wird dieses durch eine Enthält-Beziehung ausgedrückt. Dabei zeigt ein gestrichelter Pfeil Enthält-Beziehung mit einer unausgefüllten Spitze auf den Anwendungsfall, der enthalten ist. Der Pfeil ist mit <<include>> beschriftet.

Begriff: Erweitert-Beziehung (extend)

Die Erweitert-Beziehung drückt aus, dass ein Anwendungsfall an einer bestimmten Stelle unter bestimmten Bedingungen durch einen anderen erweitert wird. Die Beziehung wird häufig dafür benutzt, optionales Verhalten vom Standardverhalten zu unterscheiden. Dabei zeigt ein gestrichelter Pfeil mit einer unausgefüllten Spitze auf den Anwendungsfall, der erweitert wird. Der Pfeil ist mit dem Stereotyp <<extend>> beschriftet.

Beispiel: Generalisierung Jeder PKW ist ein Fahrzeug, umgekehrt gilt dies jedoch nicht. Genauso wenig gilt die Aussage, dass jeder PKW ein LKW ist.

Jeder PKW ist ein Fahrzeug, umgekehrt gilt dies jedoch nicht. Genauso wenig gilt die Aussage, dass jeder PKW ein LKW ist.

Definition: Generalisierung  

Eine Generalisierung zwischen zwei Klassen drückt aus, dass die speziellere Klasse die Eigenschaften, das Verhalten und die Beziehungen der Allgemeineren erbt und dabei erweitern oder überschreiben kann. Ein Exemplar der spezielleren Klasse kann überall dort verwendet werden, wo ein Exemplar der allgemeineren Klasse verwendet werden kann.

Bemerkung: Generalisierung  

Die allgemeinere Klasse wird in der Regel als Oberklasse und die speziellere als Unterklasse bezeichnet. Der Umstand, dass die Unterklasse von der Oberklasse Eigenschaften und verhalten übernimmt, wird auch Vererbung genannt. 

Definition: Mehrfachvererbung  

Wenn eine Klasse die Spezialisierung mehrere anderer Klassen ist, so nennen wir dies Mehrfachvererbung.

Beispiel: Mehrfachvererbung  

Wir haben die Hierarchie aus der letzten Abbildung (Fahrzeug) um einige Klassen erweitert, bei denen Mehrfachvererbung nötig ist.

Begriff: Nachricht  

Die Zusammenarbeit von Objekten läuft mit Hilfe von Nachrichten ab. Ein Objekt kann eine Nachricht an ein anderes Objekt oder gelegentlich auch sich selbst verschicken. Eine solche Nachricht enthält die Information, welche Methode ausgeführt werden soll, und wenn nötig noch weitere Informationen, die das Objekt benötigt, um die Nachricht zu verarbeiten. Das versendende Objekt wartet in der sequenziellen Programmierung so lange, bis das empfangende Objekt eine Antwort sendet, und setzt erst dann seine Arbeit fort

Beispiel: Nachricht  

Stellen wir uns vor, eine Kundin will einen Strauß Blumen kaufen. Durch die Eingabe des Verkäufers wird das für einen Verkauf zuständige Objekt zunächst eine Nachricht an das Lagerobjekt verschickt, die es auffordert zu überprüfen, ob alle benötigten Blumen in ausreichender Anzahl verfügbar sind, und, wenn dies der Fall ist, die benötigten Blumen aus dem Lager zu entnehmen. Anschließend wird ein neues Rechnungsobjekt erzeugt. Dieses erhält die Nachricht, den Blumenstrauß als Rechnungsposten hinzuzufügen. Sodann kann das Rechnungsobjekt nach dem endgültigen Preis gefragt werden und nach erfolgreicher Bezahlung darüber informiert werden.

Bemerkung: Sequenzielle Programmierung  

In diesem Kurs werden wir uns nur mit sequenzieller Programmierung beschäftigen. In der sequenziellen Programmierung wird zu jedem Zeitpunkt des Programms nur eine Aktion ausgeführt. In der nebenläufigen oder parallelen Programmierung können hingegen mehrere Aktionen gleichzeitig ausgeführt werden.

Beispiel: Ungenügende Modellanalyse  

Ein Unfall einer Lufthansa-Maschine beim Landeanflug konnte eindeutig auf die unvollständige Modellierung der Phänomene der Wirklichkeit zurückgeführt werden:

 

Das Bremssystem dieser Maschine war so ausgelegt, dass der Umkehrschub, der ein Flugzeug nach der Landung stark abbremst, erst eingeschaltet werden kann, wenn die Maschine tatsächlich gelandet ist. Dadurch sollte ein versehentliches Einschalten des Umkehrschubs in der Luft verhindert werden. Allerdings hatten die Ingenieure den Zustand des Gelandetseins so festgelegt, dass beide Fahrwerke mit einem vorgegebenen Anpressdruck auf der Fahrbahn aufliegenmüssen. Da an jenem Tag starker Regen und strenge Scherwinde herrschten, erreichte die Maschine trotz Bodenkontakt nicht den vorgesehenen Anpressdruck. Der Umkehrschub konnte nicht rechtzeitig aktiviert werden, und die Maschine rollte mit hoher Geschwindigkeit über die Landebahn hinaus.

Bemerkung: Zur systematischen Aufgabenbeschreibung müssen wir uns folgende Fragen stellen.

• Welche dinglichen und abstrakten Gegenstände werden bearbeitet, verändert oder tauchen in Kommunikationssituationen auf?

• Welche Eigenschaften zeichnen diese Gegenstände aus? • Welche Beziehungen bestehen zwischen ihnen?

• Wie wird mit ihnen umgegangen?

• Welche Rollen treten auf, und für welche Handlungen sind sie verantwortlich?

Begriff: Substantivanalyse

Bei der Substantivanalyse werden Substantive als mögliche Kandidaten für Klassen, Attribute oder Assoziationen und Verben als Kandidaten für Methoden identifiziert. Konkrete Attributwerte oder Objekte interessieren bei der Erstellung des Klassenmodells eher weniger.

Beispiel: Substantivanalyse

  Betrachten wir die Fallstudie, so finden wir unter anderem uninteressante Substantive und konkrete Namen wie Zukunft, Geschäftsprozesse, Adas Blumenland und Ada König. Wir stoßen jedoch auch auf Klassenkandidaten wie Pflanze, Dekorationsartikel und Chefin.

 

Definition: UML-Klassendiagramm  

Ein UML-Klassendiagramm beschreibt grafisch die Attribute, Methoden sowie Assoziationen und Generalisierungen zwischen Klassen.

Begriff Attribut im UML-Klassendiagramm

 

Attribut

Begriff: Methoden im UML-Klassendiagramm

 

Methoden

Begriff: Assoziation im UML-Klassendiagramm

 

Eine Assoziation zwischen zwei Klassen wird als einfache Linie zwischen den Klassen angedeutet. Der Name der Assoziation wird an die Linie geschrieben. Solange keine einfachen Pfeilspitzen an den Enden angegeben oder die Enden mit einem X gekennzeichnet werden, ist die Navigierbarkeit der Assoziation undefiniert. Die Navigierbarkeit gibt an, welches der beteiligten Objekte einen Verweis auf das jeweils andere besitzt.

Begriff: Multiplizitäten

Um auszudrücken, dass eine Rechnung für genau einen Kunden ausgestellt wird, steht an dem Ende der Assoziation bei der Klasse Kunde eine 1. Die Aussage, dass es zu einem Kunden mehrere Rechnungen geben kann, wird durch ein * an dem anderen Ende der Assoziation dargestellt. Ein * steht dabei für beliebig viele.

Begriff: Generalisierungsbeziehung in der UML

Eine Generalisierungsbeziehung wird mit unausgefüllten Pfeilspitzen dargestellt, wobei die Pfeilspitze zur allgemeineren Klasse zeigt.

Begriff: UML-Objektdiagramm

Um konkrete Situationen beschreiben zu können, ist es manchmal hilfreich Objekte darzustellen. In einem UML-Objektdiagramm wird ein Objekt durch ein Rechteck dargestellt. In dem Rechteck stehen, durch einen Doppelpunkt getrennt, der Name und die Klasse des Objekts. Hat das Objekt keinen speziellen Namen, so kann dieser auch entfallen. Wenn gewünscht, kann auch noch ein Abschnitt für die Attributwerte ergänzt werden.

Beispiel: Problem vs. Problemklasse

Will man die Zahlenfolge 6, 32, 1, 64, 12 sortieren, so handelt es sich dabei um ein konkretes Problem, für das man auch einfach eine Lösung benennen kann. Die dazugehörige Problemklasse ist jedoch die Sortierung einer beliebigen Zahlenfolge mit einer endlichen Anzahl an Elementen. Dafür kann man keine konkrete Lösung angeben, sondern lediglich ein Verfahren beschreiben, das alle Probleme dieser Art löst. Man könnte das Problem noch allgemeiner formulieren, wenn man nicht nur Zahlenfolgen, sondern Folgen mit beliebigen Elementen mit einer eindeutigen Ordnung sortieren will.

Definition: Algorithmus

Ein Algorithmus ist eine wohldefinierte Verfahrensbeschreibung, die aus einem oder mehreren Eingabewerten einen oder mehrere Ausgabewerte mit bestimmten Eigenschaften produziert. Ein Algorithmus löst dabei immer eine Klasse von Problemen.

Eigenschaften: Algorithmus

• Terminierung: Ein Algorithmus muss bei allen möglichen Eingaben nach endlich vielen Schritten beendet sein und ein Ergebnis liefern.    • Finitheit: Die Beschreibung des Algorithmus muss endlich sein, ebenso wie der zur Ausführung benötigte Speicher.   • Effektivität: Alle Schritte eines Algorithmus müssen eindeutig und in einer endlichen Zeit ausführbar sein.   • Determiniertheit: Ein Algorithmus liefert bei den gleichen Eingaben immer das gleiche Ergebnis.   • Determinismus: Bei einer Ausführung ist zu jedem Zeitpunkt eindeutig festgelegt, welcher Schritt als nächstes ausgeführt wird.

Bemerkung: effektiv vs. effizient

Ein Algorithmus muss effektiv sein, d. h. in einer endlichen Zeit das Problem lösen. Häufig sind jedoch effiziente Algorithmen gesucht, die das Problem zum Beispiel in relativ kurzer Zeit oder mit wenig Speicher lösen.

Bemerkung: Verfahrensbeschreibungen aus anderen Bereichen

Verfahrensbeschreibungen aus anderen Bereichen als der Informatik erfüllen oft nicht alle Eigenschaften, die wir von einem Algorithmus verlangen.

Beispiel 4.1-2: Algorithmus von Euklid

Noch viel früher in der Zeitrechnung als Al-Chwârismî entwarf im 3. Jahrhundert v. Ch. der Mathematiker Euklid aus Alexandria in Ägypten in seinem Buch „Die Elemente“ das noch heute gebräuchliche Verfahren zur Bestimmung des größten gemeinsamen Teilers zweier natürlicher Zahlen. Der nachfolgende Algorithmus bestimmt den größten gemeinsamen Teiler der positiven ganzen Zahlen a und b. 1. Wenn b > a ist, vertausche a und b. 2. Sei c der Rest der Division von a durch b. 3. Wenn c = 0 ist, dann ist der Algorithmus zu Ende und b das Ergebnis. 4. a wird der Wert von b zugewiesen und b der Wert von c. 5. Fahre mit Schritt 2 fort.

Begriff: Korrektheit eines Algorithmus

 Ein Algorithmus ist korrekt, wenn er sich bei der Ausführung so verhält, wie wir dies bei der Formulierung beabsichtigten. In kritischen Anwendungsbereichen wie der Flugsicherung, der Medizin oder der Prozesssteuerung können durch inkorrekte Algorithmen verursachte Fehlfunktionen katastrophale Schäden anrichten. Ein fehlerhafter Algorithmus in einem Chipentwurf kann erhebliche Kosten für den verantwortlichen Hersteller nach sich ziehen, wenn der Fehler erst nach Auslieferung der Prozessoren entdeckt wird.

Beispiel: Spezifikation des Sortierproblems

Die Aufgabe eines Sortieralgorithmus besteht darin, eine gegebene Folge von Werten  

hd1, d2, d3, . . ., dni  

gemäß einer vorgegebenen Ordnung „≤“ in eine permutierte Folge:

hd ′ 1 , d ′ 2 , d ′ 3 , . . ., d ′ n i

zu bringen, sodass gilt:

d ′ 1 ≤ d ′ 2 ≤ d ′ 3 ≤ · · · ≤ d ′ n

Die Ausgangsreihe ist eine Permutation der Eingangsreihe.

 

Bemerkung: Permutation

Eine Permutation ist eine Umordnung einer Folge von Elementen in einer Weise, dass kein Element hinzugefügt wird oder verloren geht und auch kein Element verändert wird. Die Anzahl der Permutationen einer Folge mit n Elementen ergibt sich zu n! (Fakultät).

Begriff: Komplexität

Die Komplexität eines Algorithmus befasst sich mit dem Mindestaufwand, den ein Algorithmus zur Lösung einer Aufgabe benötigt. Die Komplexitätstheorie untersucht sowohl den Rechenaufwand als auch den Speicherplatzbedarf. Beim Rechenaufwand ist nicht die effektive Ausführungszeit auf einem Rechner von Belang, sondern die Zahl der Bearbeitungsschritte in Abhängigkeit von der jeweiligen Eingangsgröße. Auf die Details der Komplexitätsbewertung von Algorithmen können wir im Rahmen dieses Kurse jedoch nicht weiter eingehen.

Begriff: Robustheit

Es gibt noch eine Reihe weiterer Eigenschaften von Algorithmen und Programmen, wie Robustheit, Anpassbarkeit, Wiederverwendbarkeit, die je nach Anwendungsfall mehr oder weniger von Bedeutung sind. Unter Robustheit verstehen wir die Eigenschaft eines Algorithmus, auch in ungewöhnlichen Situationen definiert zu arbeiten, d. h. fehlerhafte und widersprüchliche Eingabedaten abzuweisen und auch umfangreiche Eingabedaten abzuhandeln. Der Aspekt Robustheit ergänzt den Aspekt Korrektheit, denn die Korrektheit betrifft das Verhalten eines Algorithmus im Rahmen der durch die Spezifikation erfassten Fälle und Bedingungen. Robustheit charakterisiert dagegen das Verhalten bei nicht spezifizierten Bedingungen.

Begriff: Anpassbarkeit

Anpassbarkeit ist ein Maß für den Aufwand, mit dem ein Algorithmus an eine geänderte Spezifikation angepasst werden kann. Diese Eigenschaft ist vor allem für große Programmsysteme von erheblicher Bedeutung, weil die Auswirkungen von Änderungen an einer Stelle - anders als in kleinen Programmen - kaum zu überschauen sind.

Begriff: Wiederverwendbarkeit

Die Wiederverwendbarkeit drückt aus, wie einfach ein Algorithmus in vielen verschiedenen Anwendungen ohne Änderung benutzt werden kann.

Definition: Aktivität

 

Aktivität In der UML ist eine Aktivität ein benanntes Verhalten. Ein Aktivitätsdiagramm spezifiziert eine solche Aktivität.  

Bemerkung: Aktivitätv

Eine solche Aktivität kann zum Beispiel das Verhalten einer einzelnen Methode widerspiegeln, aber auch grobgranularer ganze Geschäftsprozesse beschreiben. Im Rahmen des Kurses werden wir Aktivitäten für die Beschreibung einzelner Methoden verwenden

Begriff: Aktionen, Kontrollknoten, Sequenz, Initialknoten und Aktivitätsendknoten (UML-Aktivitätsdiagramm)

Innerhalb der Aktivität befinden sich die verschiedenen atomaren Kontrollknoten, die die Ausführungsreihenfolge der Aktionen festlegen. Diese sind mit gerichteten Kanten miteinander verbunden. Eine Aktion wird ebenfalls durch ein Rechteck mit abgerundeten Ecken dargestellt. Sie kann beispielsweise für den Aufruf einer Methode stehen, in diesem Fall wird entweder der Methodenname in die Aktion geschrieben oder das Verhalten anderweitig beschrieben. Die Beschreibung kann umgangssprachlich sein, wie zum Beispiel „Adresse erfassen“, oder auch formaler Natur in Form von Berechnungen „c = a + b“. Später werden wir zur Beschreibung solcher Aktionen auch Java-Quelltext verwenden. Im einfachsten Fall besteht eine Aktivität aus einer Sequenz mehrerer Aktionen. Dafür benötigen wir noch den Initial- und den Aktivitätsendknoten. Der Erste von beiden kennzeichnet den Beginn des Ablaufs und der Zweite markiert das Ende der Ausführung.

 

Begriff: Entscheidungs und Überwachungsknoten (UML-Aktivitätsdiagramm)

Entscheidung mit annotierten Entscheidungsverhalten

Begriff: Wiederholung oder Schleife (UML-Aktivitätsdiagramm)

Ein Aktivitätsdiagramm mit einer enthaltenen Schleife (grau markiert).

Beispiel: Übersetzung zweier Java-Klassen  

Befinden sich zwei korrekte Java-Klassen Kunde und Rechnung in den beiden Dateien Kunde.java und Rechnung.java, so werden diese mit Hilfe des Java-Übersetzers in die beiden class-Dateien Kunde.class und Rechnung.class übersetzt.