Klassendiagramm und OOP

Klassendiagramm 

Was bedeutet überladen?

Beim überladen einer Methode werden mehrere Methoden gleichen Namens innerhalb einer Klasse definiert, die sich durch ihre Parameterlisten unterscheiden.

-> Methode hat den selben Namen, aber verschiedene Parameter! 

Was bedeutet überschreiben?

Beim überschreiben einer Methode wird eine Methode der Basisklasse in der abgeleiteten Klasse neu definiert. Die Parameterliste ändert sich dabei nicht. Hier wird die Methode "toString" überschrieben, indem in jeder abgeleiteten Klasse der jeweilige Typ mit angegeben wird. 

-> Methode wird in Unterklasse überschrieben! 

Was bedeuten die Zugriffsparameter

Was ist eine Assoziation

assoziation.jpgWas ist eine Aggregation

Komposition

grafik.png

Was bedeutet {abstract} im Klassendiagramm 

Was bedeutet {static} im Klassendiagramm

Aufgaben 

grafik.png

Die Methode "getAusverkauft" ist folgendermaßen implementiert:

public static Ausverkauft getAusverkauft()
{
  falls ausverkauft = null 
    ausverkauft = new Ausverkauft()
  rueckgabe ausverkauft 
}

public static Ausverkauft getAusverkauft()
{
  falls ausverkauft = null 
    ausverkauft = new Ausverkauft()
  rueckgabe ausverkauft 
}

Erläutern Sie hieran die Besonderheiten der Singleton-Klasse "Ausverkauft" 

Warum ist diese Methode "static"?

Ausverkauft a = Ausverkauft.getAusverkauft();

Implementieren Sie einen Konstruktor der Klasse "Konzert", der u.a. die Zahl der verkauften Karten auf 0 und den Zustand auf "nichtAusverkauft" setzt. 

public Konzert(datum Date, küenstler String)
{
  this.datum = datum,
  this.kuenstler = kuenstler,
  this.verkaufteKarten = 0,
  this.Zustand = NichtAusverkauft.getNichtAusverkauft()
}

Implementieren Sie die Methode "auswertung" der Klasse "nichtAusverkauft". Diese prüft, ob für das betreffende Konzert mehr als 1000 Karten verkauft werden wurden. In diesem Fall setzt sie den Zustand des Konzerts auf "Ausverkauft".

Public void auswertung(Konzert konzert)
{
  wenn konzert.verkaufteKarten > 1000
    konzert.Zustand = Ausverkauft.GetAusverkauft()
}

Implementieren Sie die Methode "kartenverkauf", der die Zahl der verkauften Karten erhöht und anschließend eine Auswertung des Zustands auslöst. 

public void kartenverkauf(int anzahl)
{
  verkaufteKarten = verkaufteKarten + anzahl 
  zustand.auswertung(this) // this, weil wir uns in der Klasse "Konzert" befinden. 
}

Implementieren Sie die folgende Funktion, die die Anzahl ausverkaufter Konzerte bestimmt.

public int anzahlAsuverkaufterKonzerte (Konzert[] liste)
{
  zaehler = 0
  fuer alle Konzert in liste
    falls konzert.zustand hatTyp Ausverkauft 
      zaehler = zaehler + 1 
}

__________________

Ergänzen Sie das folgende unvollständige UML-Klassendiagramm nach den folgenden Vorgaben.

grafik.png

----------------------------

Es ist folgendes Pflichtenheft gegeben:

grafik.png

Das Pflichtenheft wird um folgende Punkte erweitert:

grafik.png


Implementieren Sie in Pseudocode die Methode "getVersandkosten" der Klasse Warenkorb

public double getVersandkosten()
{
  double versankosten = versand.berechnen(this)
  rueckgabe versandkosten 
}

-----------------------

grafik.png

Erläutern Sie den Unterschied zwischen den Relationen "Aggregation" und "Komposition"

Bei einer Aggregation handelt es sich um eine Teil-Ganzes Beziehung, und bei einer Komposition um eine Abhängigkeitsbeziehung, was bedeutet das eine Klasse nicht ohne die Andere existieren kann. Beide Beziehungen beschreiben Abhängigkeiten voneinander und enthalten Multiplizitäten.

Die Relation "Raum" enthält Ausstattung entspricht einer m:n-Relation in einem Entity-Relationship-Diagramm. Erläutern Sie die unterschiedliche Umsetzung einer m:n Relation in einer Datenbank gegenüber der entsprechenden Relation in einem objektorientierten Modell.  (Hinweis: Beziehen Sie sich in ihrer Erläuterung auf die 1. Normalform)

Das ein Raum mehrere Ausstattungsmerkmale haben kann und ein Ausstattungsmerkmal bei mehreren Räumen auftreten kann, wird in einem Klassendiagramm durch listenförmige Attribute dargestellt.

Die erste Normalform verbietet listenförmige Attribute in einer Datenbank. Stattdessen werden m:n-Relationen durch eine Zwischentabelle dargestellt, die die Schlüsselattribute beider Relationspartner miteinander kombiniert. 

Die Umsetzung der Relation "Wohnung enthält Raum" ist redundant gestaltet

Geben Sie den Quellcode des Konstruktors der Klasse "Wohnung" an, der den Wert des Attributs "zimmer" setzt und für jeden Raum angibt, dass er Teil dieser Wohnung ist.

public Wohnung (Raum[] raeume)
{
  zimmer = raeume 
  foreach(Raum r in Zimmer)
  {
    r.istTeilvon(this);
  }
}

Geben Sie den Quellcode der Methode "beschreibung" der Klasse "Wohnung" an. Die Methode soll für alle Räume der Wohnung deren Beschreibung liefern.

public string beschreibung()
{
  string ergebnis = "";
  foreach(Raum r in Zimmer)
  {
    ergebnis += r.beschreibung();
  }
  return ergebnis;
}

 Die in Aufgabe 2 genannte Klasse "Raum" verfügt über folgende Methode 

public string beschreibung()
{
  string ausgabe = name + " verfügt über folgende Ausstattungsmerkmale: ";
  for (int i = 0; i <= einrichtung.size; i++)
  {
    ausgabe += einrichtung[i].name + ", ";
  }
  return ausgabe;
}

Beim Aufruf dieser Methode erscheint zunächst die Meldung "NullReferenceException". Nach entsprechender Korrektur des Programms erscheint die Meldung "ArrayOutOfBoundsException".

aa) Erklären Sie den Begriff Exception im Allgemeinen

Eine Exception ist ein Objekt welches beim Debuggen Aufschluss über die Art des Fehlers liefert

ab) Um welche speziellen Exceptions handelt es sich hier? 

NullReferenceException gibt an, wenn eine undeklarierte Variable vor der Deklaration verwendet wird 

ArrayOutOfBoundsException wird ausgegeben wenn der falsche Index übergeben wird, der die Gesamtgröße des Arrays übersteigt.

ac) Wie kann man ein Programm erweitern, um eine Exception abzufangen? 

Mit Try Catch Blöcken kann eine Exeption zur Laufzeit erkannt und ausgegeben werden. 

ad) Korrigieren Sie das Programm so, dass beide Exceptions nicht mehr auftreten 

public string beschreibung()
{
  string ausgabe = this.name + " verfügt über folgende Austattungsmerkmale: ";
  
  for(int i = 0; i < einrichtung.size; i++)
  {
    ausgabe += einrichtung[i].name + ", ";
  }
  return ausgabe;
}

b) Sollte das Attribut "name" der Klasse "Raum" keinen Wert haben, führt das Programm zu einem nicht zufreidenstellenden Ergebnis. Formulieren Sie den Code des Konstruktors der Klasse "Raum" so, dass dieses Problem nicht entsteht

Public Raum(name string)
{
  this.name = "Kein Name";
}

c) Nennen Sie einen weiteren Grenzfall, der beim Testen des Programms zu beachten ist und der zu einem nicht zufriedenstellenden Ergebnis führt

Es sollte in Betracht gezogen werden, dass Raum keinen Namen haben könnte. 

Die Kfz-Kennzeichen werden in einem Array gespeichert. Zur Suche nach einem bestimmten Kennzeichen soll die folgende Funktion verwendet werden:

int suchen(String suchwert, String[] parkliste, int startposition, int endposition)
{
  int mitte=(startposition+endposition)/2;
  falls suchwert < parkliste[mitte]
    rueckgabe suchen(suchwer, parkliste, startposition, mitte+1)
  falls suchwert > parliste[mitte]
    rueckgabe suchen(suchwert, parkliste, mitte+1, endposition)
}

Schreiben Sie in Pseudocode einen Algorithmus, der ein Arrayelement an der Stelle i löscht. Die länge des Arrays beträgt parkliste.laenge 

Weitere OOP Begrifflichkeiten 


Revision #5
Created 22 April 2025 16:43:46 by Admin
Updated 5 May 2025 15:05:32 by Admin