MezData-Logo Creative Commons License 348 :PI-BLUEJ: OOP-Musteraufgaben

Schlüsselwörter: Java, OOP, BlueJ

Entwurf der Tiefe der Lernziele bezüglich der (Aus-) Bildung der Schüler

Lernzieltaxonome nach Bloom
Stufe 1 2 3 4 5 6
Intellektuelle Fähigkeit Wissen Verstehen Anwenden Analyse Synthese Evaluation
Thema TGIT FIAE FISI ITSE
Use-Case-Diagramm 5 6 4 2
Klassendiagramm
Objektdiagramm
6 5 3 2
Struktogramm 6 6 5 5
Sequenzdiagramm 6 2 1 1
Zustandsdiagramm 6 1 1 1

Kasten und Flaschen

Ein Objekt verwaltet viele Objekte einer anderen Klasse.

Hinweise: Kasten.gewicht gibt Gewicht des Kastens in Gramm an. Der Füllstand einer Flasche wird in Milliliter angegeben, der ein Gramm wiegt. Ein Kasten wird durch den Konstruktor mit vollen Flaschen befüllt.

Erstellen Sie den Quellcode zu der Klasse Flasche.

public class Flasche{
private int fuellstand = 500; // {>=0} public Flasche(){}
public int getGewicht(){
return fuellstand;
}
}

Erstellen Sie Struktogramm für die Methode Kasten.berechneGesamtgewicht():GZ, dazu muss das Gewicht jeder Flasche bestimmt und das Kastengewicht dazu ge gerechnet werden. Lösung..

Struktogramm erstellen

Das Bild zeigt einen Ausschnitt eines Klassendiagramms einer Vereinsverwaltungssoftware. Gehen Sie davon aus, dass das Attribut anzahlMitglieder korrekt initialisiert ist und der Verein mindestens ein Mitglied hat. Außerdem sei die Assoziationen bereits aufgebaut. In der Liste gibt es von 0..anzahlMitglieder-1 keine Leerstellen.

Das Durchschnittsalter wird im Attribut dsAlter, das Alter des jüngsten Mitglieds im Attribut minAlter und des ältesten MItglieds im Attribut maxAlter gespeichert.

Erstellen Sie ein Struktogramm für die Operation berechneAlter(), die die aktuellen Werte für die Attribute aus den Mitgliedsdaten ermittelt. Lösung..

 

Videosammlung

KlassendiagrammEin Programm zur Verwaltung einer Videosammlung soll entwickelt werden. Ein Klassendiagramm-Entwurf ist vorhanden. In der Liste gibt es keine Lücken, wenn ein Verweis null ist, gibt es keine weiteren Objekte mehr.

Das Attribut bluray gibt an, ob es sich um eine Blu-Ray-Disk oder eine DVD handelt. Das Attribut titel darf nicht leer sein. Das Attribut verliehen ist null wenn das Video nicht verliehen wurde, sonst beinhaltet es den Namen des Leihers.

Der Konstruktor Video(...) gibt bei leerem Titel t eine Meldung "Kein Titel" aus und trägt als Titel "Kein Titel" ein.
Die Operation Video.info() gibt einen Infotext zurück, Beispiel: "Bluray Panem ist nicht verliehen"

Erstellen Sie den Quellcode zur Klasse Video.

public class Video{
private boolean bluray;
private String titel; // {nicht leer}
private String verliehen;

public Video(boolean b,String t){
if(t==""){
System.out.println("Kein Titel");
titel="Kein Titel";
}
else{
titel = t;
}
bluray = b;
}
public String info(){
String s;
if(bluray){
s="Bluray";
}
else{
s="DVD";
}
s=s+" "+titel;
if(verliehen == null){
s=s+" ist nicht verliehen";
}
else{
s=s+" hat "+verliehen;
}
return s;
}
}

Erstellen Sie ein Objektdiagramm nach Ausführen von Videosammlung.test(). Lösung..

public void test(){
dasVideo[0]= new Video(true,"Panem");
dasVideo[1]= new Video(false,"Herr Schotter");
dasVideo[2]= new Video(false,"");
}

Erstellen Sie ein Struktogramm für die Operation Videosammlung.ausgeben(): Alle vorhandenen Videos werden in der Konsole aufgelistet, verwenden Sie Video.info(). Lösung..

Entwickeln Sie den Quellcode für eine Operation gibIndex(t:Text):GZ, die den Index des Videos aus dasVideo[] zurückgibt, dass den Titel t hat. Falls kein Video vorhanden ist, wird -1 zurückgegeben. Falls nötig ergänzen Sie die Klasse Video um notwendige Operationen.

  public int gibIndex(String t){
int i;
for(i=0;i<dasVideo.length;i++){
if(dasVideo[i]==null) return -1;
if(dasVideo[i].getTitel().equals(t)) return i;
}
return -1;
}

Erstellen Sie ein Struktogramm für die Operation Videosammlung.anzahlAusgeliehen():GZ. Falls nötig, ergänzen Sie die Klasse Video um notwendige Operationen. Lösung..

Erstellen Sie den Quellcode für die Operation Videosammlung.ausleihen(t:Text,n:Text), falls das Video t nicht in der Sammlung vorkommt wird z.B. ausgegeben: "Panama ist nicht im Bestand", falls das Video verliehen ist wird z.B. ausgegeben: "Video Panem ist schon an Oliver verliehen", sonst wird der Name n in das Attribut verliehen eingetragen. Verwenden Sie die Operation gibIndex(t:Text):GZ. Falls nötig, ergänzen Sie die Klasse Video um notwendige Operationen.

Erstellen Sie den Quellcode für die Operation Videosammlung.zurueckgeben(t:Text), falls das Video t nicht in der Sammlung vorkommt wird z.B. ausgegeben: "Panama ist nicht im Bestand", sonst wird das Attribut verliehen auf null gesetzt. Verwenden Sie die Operation gibIndex(t:Text):GZ.

Lösungen: Video.java Videosammlung.java

Festplatten Videorecorder

Für einen Festplatten-Videorecorder soll eine OO-Software erstellt werden, die den Bestand verwaltet. Der Kunde hat folgende Vorstellungen:

Titel, Datum, Uhrzeit, Kanal, Länge werden gespeichert. Datum und Uhrzeit müssen zusammen als Sekunden seit dem 1.1.1970 kodiert werden, aber getrennt abrufbar sein.
Es soll nach Titeln gesucht werden können und die Restlaufzeit abrufbar sein. Wird der Platz auf der Festplatte knapp, wird der älteste Film überschrieben.

Entwickeln Sie ein Klassendiagramm nach dem 3-Schichten-Modell (Human-Interface, Steuerung, Datenhaltung). Verwenden Sie dabei die Klassennamen:

Oberflaeche, Steuerung, Archiv, Film. Beachten Sie den sinnvollen Umgang mit "private" und "public" wie auch die folgenden Designrichtlinien:

Designrichtlinien

  1. Informationsexperte
    Wer ist der Informationsexperte für diese Aufgabe? D.h. wer hat bzw. sollte die Information für diese Aktion haben, wer muss also angefragt werden?
  2. Geringe Kopplung
    Eine Klasse sollte möglichst wenig Verbindungen zu anderen Klassen aufweisen, so sind bei Änderungen weniger Klassen betroffen.
  3. Hoher Zusammenhalt
    Die Verantwortlichkeit einer Klasse sollte sich möglichst nur auf eine logische Aufgabe beziehen.
  4. Erzeuger
    Die Klasse ist für die Erzeugung neuer Objekte zuständig, welche die zu erzeugenden Objekte beinhaltet (Komposition, Aggregation), welche die Informationen zum Start des neuen Objekts enthält oder das zu erzeugende Objekt eng verwendet.

Erstellen Sie ein Struktogramm für die Methode Archiv.getGesammtspielzeit() : GZ die aus dem Datenbestand derFilm[] die Summe der Längen in Sekunden ermittelt.

Erstellen Sie ein Struktogramm für die Methode Archiv.getOldie(): GZ die den Index des ältesten Filmes zurückliefert.

Erstellen Sie ein Struktogramm für die Methode Archiv.delete(n: GZ) die den Eintrag mit dem Index n entfernt (Destruktor!) und alle nachfolgenden Einträge nach vorne verschiebt (das Archiv wird kleiner!).

Klassen- und Objekt-Diagramm erstellen

public class Spider {
  static int individuals = 0;
  private int ortX,ortY,spiderID;
  private double laufRichtung;
  public Spider(int x,int y){
    spiderID = individuals++;
    ortX=x;
    ortY=y;
    laufRichtung = 0;
  }
  public int getX(){
    return ortX;
  } 
  public int getY(){
    return ortY;
  }
  public void malen(Graphics g){
    ...
  }	
}

Links ist ein Ausschnitt der Spider-Klasse des Spider-Projekts zu sehen.

Hinweis: Das Programm wurde gerade erst gestartet, es existieren noch keine Spinnen!

Erstellen Sie ein Klassen-Diagramm

Erstellen Sie ein Objektdiagramm für Spider klara = new Spider( 50, 150)

Wozu benötigt man die get-Methoden, worin besteht der Sinn des "Geheimnis-Prinzips"

Musterlösung..

Ideensammlung

Weitere Methoden zu einer graphischen Form-Klasse

2D-Formen: Diagonallänge, Umfang, Rotation um Punkt, Verschiebung

3D-Formen: Volumen, Projektion auf Fläche.

Alle Elemente einer Liste bearbeiten

Gegeben Box mit Rechteckobjekten. Gesucht Methode Box.gesamtFlaeche():GZ die die Gesamtfläche der Rechteckobjekte der Box ermittelt (For-Schleife über Array).

Zeichnen in vorgegebenen Bereichen

Zeichne n Kreise zufällig in einem gegebenen Rechteck, zeichne Flecken usw.

Prädikate sind boolsche Funktionen

  Gegeben zwei Rechtecke auf einer Fläche. Gesucht Methode ueberlappt(Rechteck r1, Rechteck r2) : Boolean die true ist bei überlappung false sonst

Entfernung von zwei Formen berechnen unter Berücksichtigung ihrer Grösse.

Animation von Viechern

Zittern, dribbeln, schwingen, hüpfen

Drehen, schrupfen, wachsen, laufen, kriechen, plappern..