UML, C++


Daniel Frutiger
Diese Lernkarten bieten eine umfassende Einführung in objektorientierte Softwareentwicklung, geeignet für fortgeschrittene Lernende. Sie behandeln zentrale Konzepte wie Klassen, Methoden, Vererbung und Komposition, sowie die Anwendung von SOLID-Prinzipien und Design Patterns. Praktische Beispiele und Abbildungen veranschaulichen die Syntax und Struktur von C++-Klassen und -Containern. Entwickler und Studierende profitieren von den detaillierten Erklärungen zu Algorithmen, Iteratoren und der Standard Template Library (STL), die effiziente Programmierung ermöglichen. Zudem werden Testmethoden wie Blackbox- und Funktionstests sowie der Unified Process als Projektmanagementansatz behandelt.
Cartes-fiches
84
Utilisateurs
11
Langue
Allemand
Catégorie
Informatique
Niveau
Autres
Créé / Mis à jour
02.07.2013 / 15.01.2025

Cartes-fiches

Was bedeutet Objektorientiert? 

 

Die Daten und ihre Beziehungen untereinander stehen im Vordergrund, nicht mehr ein Ablauf (sequentielle Programmierung).

Weiterführung der modularen Programmiereung.

Was ist ein Objekt? 

 

Ein Objekt ist eine Einheit, die bestimmte Eigenschaften aufweist und bestimmte Befehle ausführen kann. Ein Objekt kann eine konkrete Entsprechung in der realen Welt haben, aber auch etwas abstraktes wie einen Algorithmus umfassen.

Was ist eine Klasse? 

 

 

Durch klassifizieren bringt man Struktur in die Menge der Objekte. Dazu werden die Objekte Klassen zugeordnet. Eine Klasse beschreibt ein einzelnes Objekt oder eine Gruppe von Objekten, welche alle die gleichen Arten von Eigenschaften und Fähigkeiten haben. Aber jedes Objekt einer Klasse besitzt individuelle Werte für diese Eigenschaften.

 

Eine Klasse kann auch als Datentyp, und ein Objekt entsprechend als Variable von diesem Typ angesehen werden. 

 

Was ist der Unterschied zwischen Klasse und Objekt? 

 

Eine Klasse beschreibt welche Eigenschaften und Methoden ein Objekt dieser Klasse besitzten kann.
(z.B. das Auto hat eine Farbe)

Das Objekt ist eine Instanz dieser Klasse. Es spezifiziert die Eigenschaft.
(das Auto hat eine rote Farbe)

Was ist eine Methode/Botschaft? 

 

 

Methoden sehen zwar aus wie Funktionen aus der strukturierten Programmierung, und haben auch dieselbe Funktionsprin- zip, aber im Gegensatz zu gewöhnlichen Funktionen werden Methoden auf ein Objekt angewandt. Eine Methode wirkt also immer auf ein Objekt ein. Die Methode hat dabei Zugriff auf alle Attribute und andere Methoden dieses Objektes. Der Aufruf einer Methode wird auch als Senden einer Botschaft bezeichnet.

Erst mit den Methoden wird das Objekt zum Leben erweckt und kann dynamisch mit seiner Umwelt interagieren. Ein Softwaresystem besteht aus vielen Objekten, und erst durch die gegenseitige Kommunikation via Methoden können die Objekte gemeinsam die Funktionalität des Systems liefern.

 

Was ist ein Attribut? 

 

Ein Attribut stellt eine Eigenschaft eines Objektes dar.
(z.B die Farbe, Name)

Was unterscheidet eine Klassenmethode/Klassenattribut von einer gewöhnlichen Methode/Attribut? 

 

Klassenmethoden sind nicht an ein Objekt gebunden, sondern gehören zur Klasse. Klassen-Attribute und Klassen-Methoden können benutzt werden, ohne dass ein Objekt existiert.

Ein Klassenattribut ist eine Art globales Attribut, welches sich alle Objekte dieser Klasse gemeinsam teilen. Klassenattribute gehören sozusagen allen Objekten gemeinsam, und sind deshalb nicht bei einem individuellen Objekt abgelegt. Klassenattribute werden oft für Klasseninterne Verwal- tungsaufgaben eingesetzt.

Ein Beispiel wäre eine Methode, die ausgibt wieviele Objekte der entsprechenden Klasse bisher erzeugt wurden; den dazugehörigen Zähler würde man als Klassenattribut realisieren. 

 

Was ist das Gegenteil von der Vererbung?

Die Generalisierung

Für welchen Zweck wird das Objektdiagramm eingesetzt?

Bei einem Objektdiagramm wird die Momentaufnahme eines Systems zu einem bestimmten Zeitpunkt dargestellt. Man kann damit bestimmte Systemzustände oder Anwendungsfälle zeigen. Dabei werden alle im Moment existierenden oder interessierenden Objekte und ihre Beziehungen zueinander abgebildet.

Für welchen Zweck wird das Sequenzdiagramm eingesetzt?

Mit Sequenzdiagrammen stellt man den Ablauf einer bestimmten Aktion dar. Dieses Diagramm betont vor allem den zeitlichen Ablauf. Es dient einerseits der Kontrolle ob man alle möglichen (Anwendungs-) Fälle korrekt abgedeckt hat aber auch zur Demonstation wie man sich den Ablauf der Handlung vorstellt.

Für welchen Zweck wird das Kollaborationsdiagramm eingesetzt?

Mit Kollaborationsdiagrammen kann man den gleichen Sachverhalt wie mit den Sequenzdiagrammen darstellen, aber die Betonung liegt nicht auf dem zeitlichen Ablauf, sondern auf der Zusammenarbeit der verschiedenen Objekten und deren Kommunikation. Die Reihenfolge der Methodenaufrufe wird hier durch Numerierung kenntlich gemacht.

Für welchen Zweck wird das Paketdiagramm eingesetzt?

Mit Paketdiagrammen werden die Klassen zu Paketen zusammengefasst. Das Ziel dabei ist, logisch zusammengehörende Klassen in grössere Einheiten zusammenzufassen. Zudem werden die Abhängig- keiten der Pakete untereinander dargestellt. Wenn irgendeine Klasse in einem Paket von einer Klasse in einem anderen Paket abhängt, dann ist auch die Pakete voneinander abhängig.

Für welchen Zweck wird das Klassendiagramm eingesetzt?

Das Klassendiagramm zeigt welche Verbindungen bzw. Abhängigkeiten die Klassen untereinander haben. (Assoziation, Aggregation, Komposition, Kardinalität, Vererbung, usw.)

Für welchen Zweck wird das Use-Case Diagramm eingesetzt?

Im Anwendungsfalldiagramm werden die Anwendungen des Systems mit den entsprechenden Anwen- dern dargestellt. Aus diesem Diagramm lassen sich die Anforderungen an das System entnehmen. Ein Anwendungsfall sollte eine in sich geschlossene Interaktion eines Anwenders mit dem System darstellen. Wobei Anwender nicht nur Personen, sondern auch andere Systeme sein können.

Für welchen Zweck wird das Aktivitäsdiagramm eingesetzt?

Beim Aktivitäsdiagramm wird ein Ablauf dargestellt, wobei sich ein Ablauf auch in mehrere, parallel ablaufende Zweige aufteilen kann. Ein Aktivitätsdiagramm sieht ähnlich aus wie ein Flussdiagramm, unterliegt aber der Einschränkunge dass ein Aktivitätsdiagramm immer einem Objekt, einer Klasse oder einem Anwendungsfall untergeordnet sein muss. Der grösste Unterschied zu einem Flussdiagramm aber ist, dass auch parallele Aktivitäten modelliert werden können.

Für welchen Zweck wird das Zustandsdiagramm eingesetzt?

Mit Zustandsdiagrammen kann das Verhalten eines Systems dargestellt werden. Dabei werden die verschiedenen Zustände des Systems aufgeführt, und wie diese Zustände aufgrund von Ereignissen ineinander übergehen können.

Was bedeutet Vererbung?

Um nicht jedesmal eine komplett neue Klasse entwerfen zu müssen, kann man festlegen, dass eine Klasse alle Elemente und Methoden einer bereits existierenden Klasse 'erben' soll, d.h. die neue Klasse enthält von vornherein schon alle Attribute und Methoden dieser Klasse. Die Attribute und Methoden der neuen Klasse können anschliessend um weitere ergänzt werden, Methoden können bei Bedarf auch überschrieben (überschreiben = für die neue Klasse neu de??niert) werden.

Wo wird Vererbung eingesetzt?

Bei Spezialisierungen oder Generalisierungen

Wie bezeichnet man die beiden an einer Vererbung beteiligten Klassen?

Basisklasse - Abgeleitete Klasse; Elternklasse - Kinderklasse

Welche Beziehungen zwischen Klassen gibt es?

Assoziation, Aggregation, Komposition, Vererbung/Generalisierung

Was ist eine Komposition?

Bei einer Komposition wird meist eine Gruppe von Objekten miteinander verknüpft, um eine be- stimmte Aufgabe zu erledigen. Dabei wird normalerweise ein Objekt allen anderen als Koordinator übergeordnet, und der Rest des Systems kommuniziert nur mit dem Koordinator. Die untergeordne- ten Objekte verlieren ihre Selbständigkeit, sie werden meistens direkt vom Koordinator erzeugt, und auch wieder gelöscht. Die Elemente einer Komposition können nicht auseinander genommen werden, da die Objekte alleine keine Sinnvolle Aufgabe erledigen können.

Was ist eine Aggregation?

Bei einer Aggregation wird eine 'ist Teil von' Beziehung dargestellt. Z. B. das Rad ist Teil eines Autos, es kann aber auch alleine existieren (Reserverad im Keller). Bei einer Aggregation wird meist eine Gruppe von Objekten miteinander verknüpft, um eine bestimmte Aufgabe zu erledigen. Dabei wird normalerweise ein Objekt allen anderen als Koordinator übergeordnet, und der Rest des Systems kommuniziert nur mit dem Koordinator. Wenn die Aufgabe gelöst ist, können die Objekte wieder voneinander getrennt werden.

Was ist eine Assoziation?

Bei einer Assoziation kennen die beteiligten Objekte einander, existerien aber weiterhin unab- hängig voneinander. Eine Assoziation ist meist von kurzzeitiger Natur. Z. B. Das Auto benutzt die Strasse.

Was bedeutet Kardinalität?

Mit der Kardinalität wird bei den Assoziationen angegeben, wieviele Objekte einer Klasse mit wievielen Objekten einer anderen Klasse in Beziehung stehen.

Was ist der Unterschied zwischen Aggregation und Komposition?

Aggregation und Komposition sind Spezialfälle von Assoziationen. Eine reine Aggregation hat die Bedeutung von 'Enthält', eine Komposition die von 'Besteht aus'. Die Aggregation ist etwas lockerer als die Komposition. Teilnehmer einer Komposition gehören normalerweise nur zu einer Komposition, Teilnehmer einer Aggregation können zu verschiedenen Aggregationen gehören. Eine Komposition ist eine feste Einheit, die einzelnen Mitglieder können nicht selbständig existieren und sind von Aussen meist nicht sichtbar.

Was sind Designpattern (Entwurfsmuster)?

In der Objektorientierten Programmierung stellen sich sehr oft immer wieder ähnliche Probleme. Erfahrene Programmierer können deshalb häufig von diesen Ähnlichkeiten profitieren und auf bereits existierende Designs zurückgreifen. Im Laufe der Zeit haben sich so immer wiederkehrende Entwurfsmuster herausgebildet, welche für bestimmte Probleme eine gute Lösung darstellen. Man spricht dabei von Designpatterns oder eben Entwurfsmuster. Viele dieser Muster wurden mit Namen versehen und sind in der OO-Welt unter diesen Namen bekannt.

Welches sind die vier wichtigsten Grundlagen der OOP?

Polymorphismus, Vererbung, Kapselung, Abstraktion

Was bedeutet der Polymorphismus?

In einer abgeleiteten Klasse können Methoden der Basisklasse überschreiben werden. Dadurch hat die abgeleitete Klasse eine neue Methode, die aber immer noch den gleichen Namen trägt wie die Methode der Basisklasse. Polymorphismus bedeutet, dass nun überall, wo ein Objekt der Basisklasse erwartet wird, auch ein davon abgeleitetes Objekt eingesetzt werden kann. Beim Aufruf von Methoden werden aber die Me- thoden des tatsächlichen Objektes, und nicht die der Basisklasse benutzt. Es wird somit nicht wie sonst üblich zur Compilezeit bestimmt, welche Methode aufgerufen wird, sondern erst zur Laufzeit. Setzt späte oder sehr späte Bindung voraus.

Was bedeutet der Kapselung?

Die Daten mit den zugehörigen Funktionen zusammenzuführen und gegen Aussen möglichst zu verstecken. Diesen Prozess bezeichnet man als Kapselung, die daraus resultierende Datenstruktur nennt sich Klasse.

Was bedeutet der Abstraktion?

Durch Abstraktion werden die wesentlichen Eigenschaften eines Objektes erfasst. Die unwesentlichen oder irrelevanten Eigenschaften werden ignoriert. Die Konzentration auf das Wesentliche erlaubt eine von den Details losgelöste Sicht. Es wird genau beschrieben, was zu tun ist, aber nicht wie.

Was bedeutet späte Bindung?

Bei der späten Bindung kennt der Compiler alle möglichen Methoden, die an die- ser Stelle aufgerufen werden könnten, aber die e??ektive Auswahl der Methode ??ndet zur Laufzeit abhängig vom Objekttyp statt. Das heisst, dass immer die e??ektiv zum Objekt gehörende Methode benutzt wird, sofern sie in der abgeleiteten Klasse überladen wurde. Wenn die Methode nicht über- laden wurde, wird die Methode der Oberklasse benutzt. Dies erfordert zusätzlichen Rechenaufwand zur Laufzeit, ist aber eine wesentliche Voraussetzung für OOP. Späte Bindung wird in C++ mit virtuellen Methoden realisiert, und ist in Java das standard Verhalten.

Was bedeutet frühe Bidnung?

Bei der frühen Bindung wird bereits wärend der Übersetzung vom Compiler ent- schieden und festgelegt, welche Methode aufgerufen wird. Damit können nur Methoden des erwarteten Objektes benutzt werden, Objekte von abgeleiteten Klassen werden wie Objekte der Basisklasse behandelt. Dieses Verhalten entspricht der gewöhnlichen Prozeduralen Programmierung, auch nicht virtuelle Methoden in C++ werden so behandelt.

Was bedeutet sehr späte Bindung?

Bei der sehr späten Bindung wird grundsätzlich erst während der Laufzeit nach Methoden gesucht, die an dieser Stelle auszuführen sind. Es ist sogar Möglich, dass zur Laufzeit Methoden vorhanden sind, welche beim erstellen und Compilieren des Programmes noch gar nicht existierten. Dafür kann es auch zur Laufzeit geschehen, dass eine gewünschte Methode gar nicht verfügbar ist, dann wird das Programm mit einer Fehlermeldung abgebrochen. Dafür können sogar zur Laufzeit einem System neue Klassen und Methoden hinzugefügt werden ('Plug in'). Samlltalk hat von Haus aus späte Bindung, in C++ muss dieses Verhalten vom Programmierer implementiert werden (Z. B. über dynamic link libraries [dll]).

Was ist eine abstarkte Klasse?

Klassen die durch Generalisieren entstanden sind, haben oft keine konkrete Bedeutung und dienen nur der Strukturierung. Von diesen Klassen sollen oft auch gar keine Objekte erzeugt werden (kön-nen). In einem solchen Fall handelt es sich um eine abstrakte Klasse. Eine abstrakte Klasse wird nur in der Klassenhierarchie als Oberklasse benutzt, es gibt aber keine sinnvollen konkreten Instanzen dieser Klasse (Ein Objekt dieser Klasse hätte keine sinnvolle Bedeutung oder Funktion). Wenn eine Klasse als abstrakt definiert ist, können von ihr keine Objekte erzeugt werden.

Wann glit eine Klasse als abstakte Klasse?

Wenn sie eine virtuelle Methode besitzt.

Erbt eine Klasse von der Elternklasse alle Methoden?

Nein, sie erbt nur die public und protected Methoden.

Was bedeutet unstrukturierte Programmierung?

Programm besteht aus einem einzigen Hauptproramm; viele goto; unübersichtlich

Was bedeutet prozedurale Programmierung?

Programm ist in mehrere Prozeduren aufgeteilt; übersichtlicher

Was bedeutet modulare Programmierung?

Zusammengehörende Funktionen werden zu Modulen zusammengefasst; Module können einzeln getestet werden;

Was ist der Unterschied zwischen Überladen und Überschreiben einer Methode?

Überschrieben wird eine Methode in zusammenhang mit einer Vererbung. Wird in der Abgeleiteten Klasse eine Methode mit dem selben Namen, wie sie schon in der Elternklasse vorhanden ist, erstellt, so wird diese Methode überschrieben. Eine Methode wird überladen, wenn in einer Klasse eine Methode exisitert, welche den selben Namen wie ander Methoden der selben Klasse oder einer Basisklasse besitzt, jedoch eine andere Argumentenliste.

Study