Klasse austauschen mit geringem Aufwand

julia1997

Bekanntes Mitglied
Ich habe ein Projekt mit 3 Klassen Program.java, OldLibrary.java und NewLibrary.java.

Ich möchte statt Oldlibrary eine neue BibliothekNewLibrary verwenden.

Ich soll zumindest zwei verschiedene Lösungen finden um die Bibliothek mit möglichst geringem Aufwand zu tauschen. Wie bewerkstelligen Ich den den Austausch?
 

Flown

Administrator
Mitarbeiter
Erst mal den ganzen Übungszettel + Klassen hier posten. Desweiteren sprechende Titel wählen und auch noch im richtigen Unterforum posten.
Alle Punkte erledigt? Dann wird dir schneller geholfen, sonst ist das nur Raterei.
 

julia1997

Bekanntes Mitglied
Hauptprogramm:
Code:
public class Program {

    public static void main(String[] args) {
        Library instance = new OldLibrary();
        for (Integer i : instance.generateRandomNumbers(200)) {
            System.out.println(i);
        }
    }  
}

Alte Library:
Code:
import java.util.LinkedList;
import java.util.List;

public class OldLibrary implements Library {

  
    /**
     * Generates n random numbers in the range [0, 100]
    */
    @Override
    public List<Integer> generateRandomNumbers(int n) {
        List<Integer> randomNumbers = new LinkedList<Integer>();
        for (int i = 0; i < n; i++) {
            randomNumbers.add(Math.round((float) Math.random() * 100));
        }
        return randomNumbers;
    }
}

Neue Library:
Java:
public class NewLibrary {
    private int min;

    private int max;

    public NewLibrary(int min, int max) {
        if (min < 0 || max < 0 || max < min) {
            thrownew IllegalArgumentException("min and max must be positive, where min <= max.");
        }
        this.min = min;
        this.max = max;
    }

    public int getRandomNumber() {
        int difference = max - min;
        return min + Math.round((float) Math.random() * difference);
    }
}
 
Zuletzt bearbeitet von einem Moderator:

julia1997

Bekanntes Mitglied
Im Archiv der Aufgabe finden Sie die 3 Klassen Program.java, OldLibrary.java und NewLibrary.java. Nehmen Sie an, Sie haben sich vor einiger Zeit entschieden in ihrem Programm Progam eine Bibliothek OldLibrary zu verwenden. Leider ist diese fehlerhaft
und veraltet, und muss nun ausgetauscht werden. Sie finden eine ̈ahnliche Bibliothek NewLibrary, die Sie nun gerne verwenden wu ̈rden.

  1. a) Finden Sie zumindest zwei verschiedene L ̈osungen um die Bibliothek mit m ̈oglichst geringem Aufwand zu tauschen und vergleichen Sie diese. Wie bewerkstelligen Sie den Austausch? Wo liegen die Vor- und Nachteile? Achtung: Das Programm in dieser Aufgabe ist sehr kurz, aber ihre L ̈osung sollte auch fu ̈r lange, komplexe Programme umsetzbar sein!

  2. b) Lesen Sie sich in das ,,Adapter”-Pattern1 ein und u ̈berlegen Sie sich, wie dieses zu L ̈osung beitragen k ̈onnte.
c)ImplementierenSieeineL ̈osunganhanddes,,Adapter”-Pattern. DieKlassen OldLibrary und NewLibrary sind als Libraries außerhalb ihrer Kontrolle und du ̈rfen daher nicht angepasst werden. Versuchen Sie Program m ̈oglichst wenig zu ver ̈andern!
 

Meniskusschaden

Top Contributor
Das Hauptprogramm nutzt das Interface Library das von OldLibrary implementiert wird. Also ist es sinnvoll, eine Adapterklasse zu erstellen, die ebenfalls Library implementiert und ein NewLibrary-Objekt nutzt, an das es die Aufrufe von generateRandomNumbers() weiterleitet und das Ergebnis zurück reicht. Dann muss im Hauptprogramm fast nichts geändert werden.
 

Tobse

Top Contributor
Ja aber davor brauche ich noch 2 andere Alternativen :-/
Eine Reicht; du kannst ja bei Teilaufgabe a) schon auf den Adapter gekommen sein.

Mein Vorschlag für die fehlende Lösung für a): Die Klasse Programm anpassen

P.S.: Diese zwei möglichkeiten (1: bestehenden Code anpassen, 2: Adapter / Decorator verwenden) sind eigentlich die einzigen zwei Möglichkeiten, die in so einem Anwendungsfall mit echter Software zur Verfügung stehen. Hier muss man immer schauen, was weniger Aufwand ist. In diesem Fall wäre ganz klar die Anpassung von Programm.java einfacher. In einer Codebasis in welcher 10.000e Zeilen Code auf der auszutauschenden Klasse aufbauen, ist der Adapter/Wrapper die einzige realistische Lösung.
 

mrBrown

Super-Moderator
Mitarbeiter
Indem du alles was mit OldLibrary zu tun hat mit äquivalenten Ausdrücken die nur NewLibrary benutzen ersetzt.
In den Fall müsstest du selbst eine Liste erstellen, diese mit Zahlen, die du mit NewLibrary bekommst, füllen, anstatt die fertig zu bekommen.
 

Tobse

Top Contributor
[...] In den Fall müsstest du selbst eine Liste erstellen, diese mit Zahlen, die du mit NewLibrary bekommst, füllen, anstatt die fertig zu bekommen.

Das ist schon zu kompliziert. Das Hauptprogramm gibt 200 Zufallszahlen im Interval [0; 100] aus. Das selbe muss mit der neuen Library bewerkstelligt werden. Ich würde das so machen:

Java:
NewLibrary rng = new NewLibrary(0, 100);
for (int i = 0;i < 200;i++) {
    System.out.println(rng.getRandomNumber());
}
 

Meniskusschaden

Top Contributor
Du erstellst einfach eine Klasse, die die Schnittstelle Library implementiert:
Java:
public class NewLibraryAdapter implements Library { }
Die Schnittstelle Library gibt dann ja die Methode vor, die du implementieren musst.
 

Neue Themen


Oben