Design Pattern - Welche?

archer1000

Mitglied
Ich habe letztes mal eine Klausur geschrieben und die Aufgabe konnte ich nicht lösen. Ich möchte es aber wissen, wie es geht. Hier ist die Audgabe;

[EDIT]In Berlin wollen zwei bekannte Autowerkstätten fusionieren. Im Zuge dessen soll auch eine gemeinsame Software zur Autoverwaltung entwickelt werden. Beide Werkstätten haben bereits eigenständige Klassen, in denen die zu reparierenden Autos verwaltet werden. Werkstatt A verwaltet die Autos in einer LinkedList, Werkstatt B verwendet ein normales Array. In der gemeinsamen Software soll es zunächst nur eine Methode (neben der main Methode) geben, mit der alle Autos ausgegeben werden können.

Wo liegt das Problem aus Sicht eines Software Designers?
Mit welchen Pattern kann man es realisieren?
Erstellen Sie ein UML Diagramm des Patterns spezialisiert auf die obigen beschreibung.
Implementieren Sie eine Methode der gemeinsamen Software unter Verwendung des Patterns.[/EDIT]

Ich weiss nicht mit welchen Pattern es gelöst werden kann, und wie es grob Diagramm aussehen könnte. Kann jemand mir helfen?
 

archer1000

Mitglied
Wenn es so wäre regt mich schon etwas auf, da wir auf der Vorlesung nur Observer und Dekorator Pattern hatten, und ich diese Aufgabe iwie keine von diesen beiden Pattern zuordnen und realisieren konnte. Wie geht Strategy Pattern?
 
S

Spacerat

Gast
Also ich würde schon sagen, dass es sich mit 'nem Decorator realisieren lässt.
Wikipadia hat gesagt.:
The decorator pattern can be used to extend (decorate) the functionality of a certain object at run-time, independently of other instances of the same class, provided some groundwork is done at design time.
Eine der beiden Klassen musst du halt so erweitern, dass sie in die Liste der jeweils anderen passt. Also "Arrays.asList()" und "addAll()" oder "new Array[list1.size() + list2.length]" und dann "System.arrayCopy()" mit "list1.toArray()".
 

Bernd Hohmann

Top Contributor
Dass Du die Aufgabe nicht lösen konntest spricht eher für Dich.

1) Wo liegt das Problem aus Sicht eines Software Designers?
Dass der Fragesteller ungenaue Angaben gemacht hat.

2) Mit welchen Pattern kann man es realisieren?
"Wegschmeissen und neu machen"-Pattern, alternativ "Proxies"

3) Erstellen Sie ein UML Diagramm des Patterns spezialisiert auf die obigen beschreibung.
Ein Rechteck in dem Chuck Norris steht.

4) Implementieren Sie eine Methode der gemeinsamen Software unter Verwendung des Patterns.
Chuck Norris implementiert nicht, er starrt solange auf die "main" Methode bis sich der Source selber schreibt.


Ich habe keine Ahnung, was der Onkel da von Dir will - vorallem weil ich nicht weiss, ob er da wirklich auf ein Array der Sorte "Werkstattauftrag wa[]=new Werkstattauftrag[200]" hinauswill oder sich auf ArrayList bezieht.

Ansonsten wäre der Unterschied halt dass man auf ein Array mit [..] zugreift und sich bei einer LinkedList alles über get/set abspielt.

Als praxisorientierter Mensch fällt mir jetzt keine Methode ein, wie man die beiden Arrays wirkungsvoll mischen kann weil bei einer Fusion von zwei Autohäusern seltenst die beiden Werkstätten zusammengelegt werden. Und wenn doch, dann müsste zumindest irgendein Zeitstempel oder Prioritätskennzeichen das Ergebnis der Zusammenmischung bestimmen.

Naja - ich sehe, dass Informatikunterricht/vorlesung auch nach 25 Jahren noch mit Schwachsinn durchsetzt ist.

Bernd
 
S

Spacerat

Gast
Also ich hab' immer noch nicht Informatik studiert aber immerhin bekäme ich 1,2 und 4 schon mal hin. Bei 3. nehme ich mal an, dass da bei mir der grösste Schwachsinn rüberkäme, weil mir UML alles andere als geläufig ist.
In diesem Sinne:
1. Der Entwickler muss eine LinkedList und ein Array auf einen "Nenner" bringen.
2. Dafür eignet sich das Decorator Pattern (Er dekoriert halt eine Liste mit der anderen).
3. UML? Da hab' ich gefehlt.
4.
Java:
class NewCarList {
  public List<Car> getCars() {
    List<Car> rc = new ArrayList(Arrays.asList(oldCarList1.getCars())); // denke mal, da wird ein Array zurückgegeben
    rc.addAll(oldCarList2.getCars()); // und hier dann wohl 'ne LinkedList
    return rc;
  }
}
@maki: Klar, das Adapterpattern tut's wohl auch. Wichtig ist wohl nur eines mit Wrapper-Funktionalität.
 
Zuletzt bearbeitet von einem Moderator:

steff3

Bekanntes Mitglied
Irgendwie musste ich sofort an Iterator denken, schließlich geht es nur um das Ausgeben.

Ich habe das Buch zwar gerade nicht hier, aber ich bin mir sicher, dass in Head First Design Patterns ein ähnlicher Fall beschrieben wird. Da haben eine Pizzeria und noch jemand fusioniert und es musste die Speisekarte ausgegeben werden. Einer benutzte ein Array und der andere irgendeine Liste. Bin mir eigentlich sicher, dass die Aufgabe aus dem Buch kommt...
 
J

JohannisderKaeufer

Gast
Also mit dem DecoratorPattern sähe das so aus

Java:
public interface Werkstatt{
List<Car> getCars();
}

//Die Ursprüngliche Werkstatt A implementiert lediglich das neue Interface Werkstatt
public class A implements Werkstatt {
  private LinkedList cars;
  public List<Car> getCars(){
    return list;
  }
}

public class B {
  private Car[] cars;
  public Car[] getCars(){
    return cars;
  }
}

public class WerkstattBDekorator implements Werkstatt {
  private B b;
  public List<Car> getCars(){
    return Arrays.asList(b.getCars());
  }
}
//Wobei werkstaetten einmal A und den WerkstattBDekorator enthält
public class GemeinsameWerkstatt implements Werkstatt {
  private List<Werkstatt> werkstaetten;
  public List<Car> getCars(){
    List<Car> cars = new LinkedList<Car>();
    for(Werkstatt w: werkstaetten)
      cars.addAll(w.getCars());
    return cars;
  }
}
 
S

Spacerat

Gast
@JohannisDerKäufer: Ob man in Klausuren soviel Zeit bekommt, es derartig auszuwalzen? :D Aber nee, hast natürlich Recht. Ich denke da grad' an die Werkstätten in den nächsten Klausuren, die zusätzlich fusionieren wollen aber ihre Autos noch ganz anders verwalten. Ein Interface und ein Wrapper (Decorator) macht da schon Sinn. Nur sollte man noch erwähnen, dass A in deinem Beispiel ebenfalls schon ein Decorator sein müsste, weil man kaum davon ausgehen kann, dass auch nur eine der Werkstätten bereits das gemeinsame Interface implementiert. Da wird mindestens ein Method-Delegate in einer neuen Klasse fällig. (Nehme mal an, du hattest nicht genügend Zeit. :lol:)
 
Zuletzt bearbeitet von einem Moderator:

ssoul26

Bekanntes Mitglied
@JohannisDerKäufer: Ob man in Klausuren soviel Zeit bekommt, es derartig auszuwalzen? :D Aber nee, hast natürlich Recht. Ich denke da grad' an die Werkstätten in den nächsten Klausuren, die zusätzlich fusionieren wollen aber ihre Autos noch ganz anders verwalten. Ein Interface und ein Wrapper (Decorator) macht da schon Sinn. Nur sollte man noch erwähnen, dass A in deinem Beispiel ebenfalls schon ein Decorator sein müsste, weil man kaum davon ausgehen kann, dass auch nur eine der Werkstätten bereits das gemeinsame Interface implementiert. Da wird mindestens ein Method-Delegate in einer neuen Klasse fällig. (Nehme mal an, du hattest nicht genügend Zeit. :lol:)

Wenn du dich sehr gut vorbereitest bekommst du das in einer Klausur locker hin, ansonsten musst du, wie 90% der restlichen Kommillitonen, dich wirklich sehr sehr anstrengen um alle Aufgaben innerhalb der Zeit zu schaffen. Wie schon gesagt wurde, würde hier ein Interface mit der zu abstrahierenden Methode reiche. Ich würde hier jedoch auch noch aufpassen, dass die Methode nicht die Liste als Objekt zurückgibt, sondern den Inhalt über toString(). Nicht, dass es hier dann noch zu Punktabzügen kommt:)
 

Ark

Top Contributor
Ich habe keine Ahnung, was der Onkel da von Dir will - vorallem weil ich nicht weiss, ob er da wirklich auf ein Array der Sorte "Werkstattauftrag wa[]=new Werkstattauftrag[200]" hinauswill oder sich auf ArrayList bezieht.
Dann üb mal lesen, denn eigentlich ist es eindeutig festgelegt. Und mal davon abgesehen, geht es in dieser Aufgabe wohl allem Anschein nach auch nicht (oder zumindest nicht primär) um Java.

Ansonsten wäre der Unterschied halt dass man auf ein Array mit [..] zugreift und sich bei einer LinkedList alles über get/set abspielt.
Genau das ist das Problem, das quasi wegabstrahiert werden soll.

Als praxisorientierter Mensch fällt mir jetzt keine Methode ein, wie man die beiden Arrays wirkungsvoll mischen kann weil bei einer Fusion von zwei Autohäusern seltenst die beiden Werkstätten zusammengelegt werden. Und wenn doch, dann müsste zumindest irgendein Zeitstempel oder Prioritätskennzeichen das Ergebnis der Zusammenmischung bestimmen.
Du denkst da, glaube ich, viel zu kompliziert und außerdem an der Aufgabe vorbei: Nirgends steht, dass irgendwelche Arrays oder wasauchimmer gemischt werden sollen.

Naja - ich sehe, dass Informatikunterricht/vorlesung auch nach 25 Jahren noch mit Schwachsinn durchsetzt ist.
Das kommt wohl sehr darauf an, wie man das sieht. Vielleicht erscheint es dir ja als Schwachsinn, weil du – wie oben geschrieben – zu kompliziert an die Aufgabe herangehst. Ich dagegen denke, es geht hier (für Leute wie dich) unter anderem darum, Vorgaben einfach mal zu akzeptieren und als gegeben hinzunehmen – ganz egal, wie "unpraktisch", "unrealistisch" das erscheint.

Und wenn man diese Denkblockade überwunden hat, ist man ganz froh darüber, dass die Aufgabe eigentlich recht simpel ist. Und die Prosa hilft ungemein dabei, sich die Sache relativ konkret und plastisch vorstellen zu können. Damit kann das Gehirn viel besser umgehen als mit nichtssagenden Variablennamen oder Unmengen an Abstrakta. Ich musste zu meinem Leidwesen öfter mal Klausuren schreiben, in denen irgendwelche x, y, z mit u, v, w (ja, bitte noch mehr Buchstaben, die man selbst gedruckt kaum auseinanderhalten kann!) verwurstet werden. Das ist schwachsinnig! Denn gerade solche Aufgaben sind extrem realitätsfern (sonst hätte man die Variablen ja sprechend benennen können), und die verwirrenden Bezeichner sind eher eine Behinderung als eine geistige Hilfe. (Und in der Klausureinsicht sagen einem die Dozenten dann noch, wie einfach die Aufgabe doch war, weil man ja nicht so viel schreiben musste, weil das alles so schön kurz benannt war. Ja, klar! :bloed: Da frage ich mich echt manchmal, wo die ihre Lehrbefähigung herhaben.)


Zur Klausuraufgabe: Ich tendiere auch zu Adapter, wobei ein simpler Iterator für Arrays (warum gibt's den eigentlich nicht schon in java.util?) für genau diese Aufgabe vollkommen ausreichen würde.

Ark
 
M

maki

Gast
Zur Klausuraufgabe: Ich tendiere auch zu Adapter, wobei ein simpler Iterator für Arrays (warum gibt's den eigentlich nicht schon in java.util?) für genau diese Aufgabe vollkommen ausreichen würde.
IMHO ist es schwieriger einen Iterator zu schreiben als einen Adapter in so einem Falle.

Aber, eigentlich tut es ja schon ein List.toArray bzw. den Array contructor von ArrayList zu nutzen, ganz pragmatisch, so ganz ohne Pattern und so... aber darum scheint es ja nicht zu gehen.

Den code den ich hier so als "Decorator" sehe ist dem Adapter ganz ähnlich (und meist sind es nur Adapter), Decorator ist etwas anderes (hinzufügen von neuer Funktionalität) und IMHO etwas unpassend für diese Problemstellung, Adapter oder eben Bridge.

Am Ende ist sowieso alles nur Polymorphie :)
 

Bernd Hohmann

Top Contributor
Du denkst da, glaube ich, viel zu kompliziert und außerdem an der Aufgabe vorbei: Nirgends steht, dass irgendwelche Arrays oder wasauchimmer gemischt werden sollen.

Ich habe den Satz "In der gemeinsamen Software soll es zunächst nur eine Methode (neben der main Methode) geben, mit der alle Autos ausgegeben werden können." so interpretiert, dass irgendwo eine "LinkedList<KaputtAuto> llAutos" sowie ein Array "KaputtAuto arAutos[]" existieren und die neue Methode jetzt alle Autos aus beiden Listen in Form von ?? ausgibt. Also muss ich schon irgendwie die beiden Listen zusammenkloppen.

Bernd
 

Marco13

Top Contributor
Ich finde die Aufgabenstellung auch fragwürdig. Man bennötigt wohl Hintergrundwissen darüber, was in der Vorlesung behandelt wurde, zusammen mit einigem Einfühlungsvermögen in die Intention des Fragestellers, um zu erahnen, was man dort "für die volle Punktzahl" schreiben muss. (und nebenbei finde ich den Gedanken, dass jemand das schafft, und eine 1.0 bekommt, und wegen sowas dann glaubt, er sei ein "guter Programmierer" (oder er auch von anderen als solcher angesehen wird) etwas unbehaglich. Aber das soll kein Urteil sein.)

Für diejenigen, die glauben, die Aufgabe lösen zu können oder gelöst zu haben, aber insbesondere für den Aufgabensteller:
Java:
class WerkstattA
{
    private LinkedList<BrokenCar> brokenCars;
 
    public void addBrokenCar(BrokenCar b) { brokenCars.add(b); }
    public void removeBrokenCar(BrokenCar b) { brokenCars.remove(b); }
}

class WerkstattB
{
    private Auto autos[] = new Auto[10000];
    private int n = 0;

    public void merkeAuto(Auto a) { autos[n++] = a; }
    public void löscheAuto(int index) { ... }
}

Und nun?

Wenigstens Pseudocode oder Interfaces für die Werkstätten wären IMHO notwendig, um da halbwegs sinnvoll antworten zu können :bahnhof:
 

ssoul26

Bekanntes Mitglied
Ich finde die Aufgabenstellung auch fragwürdig. Man bennötigt wohl Hintergrundwissen darüber, was in der Vorlesung behandelt wurde, zusammen mit einigem Einfühlungsvermögen in die Intention des Fragestellers, um zu erahnen, was man dort "für die volle Punktzahl" schreiben muss. (und nebenbei finde ich den Gedanken, dass jemand das schafft, und eine 1.0 bekommt, und wegen sowas dann glaubt, er sei ein "guter Programmierer" (oder er auch von anderen als solcher angesehen wird) etwas unbehaglich. Aber das soll kein Urteil sein.)

Für diejenigen, die glauben, die Aufgabe lösen zu können oder gelöst zu haben, aber insbesondere für den Aufgabensteller:
Java:
class WerkstattA
{
    private LinkedList<BrokenCar> brokenCars;
 
    public void addBrokenCar(BrokenCar b) { brokenCars.add(b); }
    public void removeBrokenCar(BrokenCar b) { brokenCars.remove(b); }
}

class WerkstattB
{
    private Auto autos[] = new Auto[10000];
    private int n = 0;

    public void merkeAuto(Auto a) { autos[n++] = a; }
    public void löscheAuto(int index) { ... }
}

Und nun?

Wenigstens Pseudocode oder Interfaces für die Werkstätten wären IMHO notwendig, um da halbwegs sinnvoll antworten zu können :bahnhof:

Kurze Verständnisfrage:

Wenn man da jetzt ein Interface definieren würde mit einer Methode getCars und die jeweiligen Werkstätten diese nach ihren Bedürfnissen implementieren würden. Wäre das dann schon Decorator Pattern?
 

Niki

Top Contributor
mit dem Decorator pattern kannst du zur Laufzeit dynamisch Funktionalität hinzufügen. Da gibts eh auf der wiki Seite ein gutes Beispiel mit dem Kaffee. Du willst aber eigentlich zwei Interfaces vereinen, ohne zusätzlicher Funktionalität. Daher Adapter / Wrapper,...
 

Marco13

Top Contributor
So grundlegend, allgemein anerkannt und sinnvoll "Design Patterns" (nicht nur an sich, sondern speziell auch in bezug auf das gleichnamige Buch) sind, so pragmatisch kann man sagen: Praktisch alle Design Patterns sind nur "irgendeine" spezielle Form, Polymorphie auszunutzen. Deswegen bin ich nicht sicher, ob man da über Namensdetails streiten sollte, auch wenn das "Pattern" ja gereade das ist: Ein Name für eine bestimmte Form von Polymorphie. Es gäbe sicher verschiedene solcher Patterns/Namen, die man bei der Lösung des konkreten Problemes anwenden könnte. Hilfreich wäre dabei zu wissen, was das konkrete Problem eigentlich IST ;) Wenn es schon sowas gäbe wie
Java:
interface Werkstatt {
    int getSize();
    Car getCar(int index);
    void addCar(Car car);
    void removeCar(Car car);
}
und eben
Java:
class WerkstattA implements Werkstatt { private LinkedList<Car> cars = ... }
class WerkstattB implements Werkstatt { private Car[] cars = ... }
(was man, wenn man den Aufgabensteller ärgern wollte, in die Aufgabenstellung reininterpretieren könnte) würde sich die Aufgabe praktisch erübrigen, durch eine
Java:
class CombinedWerkstatt implements Werkstatt { List<Werkstatt> delegates = ... }

Aber so gehe ich mal davon aus, dass die auf irgendwas wie Adapter (Entwurfsmuster) ? Wikipedia hinauswollten :bahnhof:
 

Warrior7777

Bekanntes Mitglied
[OT]Ich kenn mich überhaupt nicht mit Design Patterns aus, ich kenne eigentlich nicht einmal den Unterschied zu Algorithmen. Algorithmen sind doch auf einer allgemeineren bzw. abstrakteren Ebene als Design Patterns (oder umgekehrt?). :oops: Die Themen scheinen jedoch sehr wichtig zu sein... Ich werd mich mal nach ein paar geeigneten Büchern umsehen, die sollten das Programmieren ziemlich vereinfachen, da man das Rad nicht immer neu erfinden muss. :) Kann mir jemand eine persönliche Empfehlung geben? Ich weiß, Amazon bietet da einiges. Blöderweise liefern da viele Anbieter nicht in die Schweiz. :([/OT]
 
J

JohannisderKaeufer

Gast
Sorry, hab bei meinem Beispiel wohl ein paar Fehler gemacht. Das entsprach so nicht dem Decorator Pattern.

Aber hab das nochmals als "echtes" Decorator Pattern zusammengehackt.

Die Ausgangssituation sei diese, Car sei erstmal bei beiden gegeben, bei A ein array, B eine LinkedList
Java:
class Car {}

class A {
    Car[] cars = new Car[]{new Car(), new Car()};
}

class B {
    LinkedList<Car> cars = new LinkedList<Car>();
}

Ein gemeinsames Interface das Fahrzeuge zum Ausgeben bereitstellt
Java:
interface Werkstatt {
    List<Car> getCars();
}

Da man das DecoratorPattern umsetzen möchte, benötigt man etwas das dekoriert werden kann.
Diese Klasse implementiert das Interface und liefert eine leere Liste zurück.
Java:
class Decoratee implements Werkstatt {
    /**@return's an EmptyList */
    public List<Car> getCars() {
        System.out.println("Adding the Cars from Decoratee");
        return new ArrayList<Car>();
    }
}

Nun habe ich eine Abstracte Klasse verwendet um ein paar Dinge der Decoratoren zusammenzufassen.
In der Klasse wird ein Decoratee/Werkstatt gekappselt und von einem Konkreten Dekorator, der davon abgeleitet ist, wird verlangt eine Methode getDecoratorCars zurückzuliefern.
Java:
abstract class AbstractDecorator implements Werkstatt {
    private Werkstatt w;

    AbstractDecorator(Werkstatt w) {
        this.w = w;
    }

    public final List<Car> getCars() {
        List<Car> result = new ArrayList<Car>();
        result.addAll(w.getCars());
        result.addAll(getDecoratorCars());
        return result;
    }
    abstract List<Car> getDecoratorCars();
}

Nun kommt ein Decorator für die WerkstattA der von dem AbstractDecorator abgeleitet wurde
Dieser bildet, wenn man es so ausdrücken will einen Adapter, der aus Werkstatt A einen Decorator macht.
Java:
class DecoratorA extends AbstractDecorator {
    private A a;

    DecoratorA(Werkstatt w, A a) {
        super(w);
        this.a = a;
    }

    @Override
    List<Car> getDecoratorCars() {
        System.out.println("Adding the Cars from A");
        return Arrays.asList(a.cars);
    }
}

Das selbe für Klasse B
Java:
class DecoratorB extends AbstractDecorator {
    private B b;

    DecoratorB(Werkstatt w, B b) {
        super(w);
        this.b = b;
    }

    @Override
    List<Car> getDecoratorCars() {
        System.out.println("Adding the Cars from B");
        return b.cars;
    }
}

Die Dekoratoren und AbstractDecorator hätte man auch ohne Vererbung umsetzen können. Aber seis drum.

Und das ganze kann jetzt so verwendet werden.
Java:
public class WerkstattApp {
    public static void main(String[] args) {
        Werkstatt werkstatt = new Decoratee();
        werkstatt = new DecoratorA(werkstatt, new A());
        werkstatt = new DecoratorB(werkstatt, new B());
        for (Car car : werkstatt.getCars()) {
            System.out.println(car);
        }
        //Es wird beschlossen B zu zerschlagen und mit C zu mergen
        werkstatt = new Decorator();
        werkstatt = new DecoratorA(werkstatt, new A());
        werkstatt = new DecoratorC(werkstatt, new C());
        ...
    }
}

Der Vorteil und die Sinnhaftigkeit hier ein Decorator-Pattern zu verwenden ergibt sich daraus, dass wenn man nun mit einer Werkstatt C merged lediglich ein DecoratorC geschrieben werden muß und per main-Methode relativ dynamisch eingebunden werden kann. Bei Spring, wären das früher 3 Zeilen XML gewesen, Guice 2 Codezeilen.
Die DecoratorA und DecoratorB Klassen würde ich als Adapter-Klassen für die Klassen A und B sehen, so daß ich sagen würde, dass das DecoratorPattern hier in diesem Fall intern das Adapter-Pattern verwendet.
 
S

Spacerat

Gast
@JohannisDerKäufer: Genau darauf wollte ich hinaus, dank' für die Mühe.
Mal angemerkt: Kann es sein, dass das Decorator- das Adapter-Pattern impliziert? Mal ändert man eine Funktionalität (Adapter), ein anderes mal erweitert man eine (Dekorator). Faktisch ändert man durch Erweitern ja auch ein wenig.
 

Marco13

Top Contributor
Das meinte ich oben mit den Begrifflichkeiten. Ich würde das in bezug auf die existierenden Werkstätten als Adapter bezeichnen. Dass man die Adapter auch innerhalb eines Decorator-Patterns verwenden kann halte ich für nicht relevant.
(Aber in Anlehung an meine bereits geäußerten Bedenken: Man bräuchte da gar keine Patterns und Vererbung und keine gemeinsamen Interfaces und so...
Java:
List<Car> allCars = new ArrayList<Car>();
allCars.addAll(werkstattA.theLinkedList);
allCars.addAll(Arrays.asList(werkstattB.theArray));
feddich....)
 
S

Spacerat

Gast
Java:
List<Car> allCars = new ArrayList<Car>();
allCars.addAll(werkstattA.theLinkedList);
allCars.addAll(Arrays.asList(werkstattB.theArray));
feddich....)
Aha... ;)
http://www.java-forum.org/java-basics-anfaenger-themen/142514-design-pattern-welche.html#post948226
Okay... ich bin irgendwie davon ausgegangen, dass die Werkstätten entsprechende Ausgabemethoden implementieren. Deswegen plädierte ich ja auch für Decorator. Aber auf die Art könnte man es fast auch noch Kompositum nennen.

Dann evtl. noch mal 'ne Anregung (ist vllt. das, was Marco13 uns sagen wollte):
1. Man findet eine zufriedenstellende Lösung für ein Problem und implementiert sie.
2. Man versucht zu erraten, welches Designpattern man schliesslich dafür verwendet hat (just for Fun XD). Aber Vorsicht: Das Murks-Pattern (eigene Wortschöpfung) ist definitiv ein Antipattern und sollte vermieden werden.

Ergo: Wieso sollte man sich Gedanken um Designpatterns machen, wenn man erstens nicht mal alle kennt (was btw. keine Kunst ist) und sich deswegen zweitens daraus keine Lösung erschliesst?
 

Bernd Hohmann

Top Contributor
Mit Verlaub, aber ich empfinde die laufende Diskussion nicht als ein Zeugnis dafür dass sich qualifizierte Softwareentwickler daran beteiligen.

Es gibt eine Aufgabenstellung und bislang wurde keine Lösung gepostet - man kommt nur vom Stöckchen auf Hündchen und auf den Elephanten.

Nach dem Hinweis von Ark das Ganze unkompliziert anzugehen, gebe ich als Lösungsvorschlag an die LinkedList und das Array in ein neues Array zu mergen. Das Pattern dazu würde ich "Archer1000 Pattern" nennen, das UML dazu aus einem Porno kopieren (A ---> B). Die Probleme eines Software Designers zum Thema ergeben sich aus diesem Thread.

Das Thema kann hiermit geschlossen werden, Prosit!

Bernd
 

Marco13

Top Contributor
Mit Verlaub, aber ich empfinde die laufende Diskussion nicht als ein Zeugnis dafür dass sich qualifizierte Softwareentwickler daran beteiligen.

Ich empfinde die Aufagenstellung nicht als ein Zeichen dafür, dass sie von einer (in bezug auf Didaktik, oder wie auch immer man das nennen soll) qualifizierten Person gestellt wurde. So ist das mit Empfindungen. Aber das hast du ja selbst in deiner ersten Antwort angedeutet. Sicher ist dieses unfundierte "Musterlösungsraten" nicht zielführend, aber man könnte ja die naive Hoffnung haben, dass dieser Thread auch von Personen gelesen wird, die irgendwann mal irgendjemandem "(Klausur)-Aufgaben" stellen müssen, und sie dadurch (was auch immer das genau bedeuten mag) "positiv beeinflusst werden".
 

Bernd Hohmann

Top Contributor
Sicher ist dieses unfundierte "Musterlösungsraten" nicht zielführend, aber man könnte ja die naive Hoffnung haben, dass dieser Thread auch von Personen gelesen wird, die irgendwann mal irgendjemandem "(Klausur)-Aufgaben" stellen müssen, und sie dadurch (was auch immer das genau bedeuten mag) "positiv beeinflusst werden".

Die Informatik-Hochschulszene hab ich erst als Student und dann als Dozent erlebt.

Aus dieser intimen Kenntnis heraus bezweifle ich, dass sich hier jemals irgendein Professor verirren wird - die Konfrontation mit realen Problemen würde sie zu sehr belasten :)

Bernd
 
S

Spacerat

Gast
Es ist durchaus möglich, dass dieser Thread nur im Suff zu ertragen ist ;(
So war das aber nicht gemeint. Ich habe an dem Thread nichts auszusetzen, bis auf die Tatsache, dass ich nie versuchen würde, eine Implementation in irgendwelche Pattens pressen zu wollen. Das bedeutet, ich würde erst etwas implementieren und dann (evtl. wenn ich Zeit habe), feststellen, nach welchem Muster ich implementiert habe.
Was die Aufgabe angeht, so gibt es in diesem Thread sicher schon genug Lösungen (von deiner Chuck-Norris-Lösung mal abgesehen), die den Dozenten zufrieden stellen. Es gibt zwar konkret noch kein UML-Diagramm, aber dazu kann man sich ja passenden Text zu den Diagrammen in den Wiki-Links denken. Letztendlich ist es Sache der Dozenten ihre Aufgaben im Rahmen der von ihnen vermittelten Kenntnisse zu stellen und Sache der Komolitonen (oder Schüler, Padawane oder was auch immer) diese Aufgaben nach bestem Wissen und Gewissen zu lösen. Was allerdings gar nicht geht, ist einem Dozenten stets seine Unfähigkeit, jemandem etwas beibringen zu wollen, an den Kopf zu schmeissen, während man selbst nicht im geringsten lernbereit und/oder -willig ist.
Wenn du bereits beide Seiten erlebt hast, wundert mich deine "Chuck-Norris-Lösung" noch umso mehr, würde nämlich implizieren, dass dir als Dozent niemals solche "Patzer" passiert sind oder evtl. noch passieren werden, dass wiederum, dass du dich selbst für den besten Dozenten "ever" hälst, was dann letztendlich nur Eigenlob wäre.
Die Aufgabe jedoch lässt sich lösen, man muss nur gewissenhaft vorgehen.
 

Bernd Hohmann

Top Contributor
Was die Aufgabe angeht, so gibt es in diesem Thread sicher schon genug Lösungen

Unter der Prämisse, dass die Aufgabenstellung "Java" betrifft und mit "Methode" eine Java-Methode der Sorte "public irgendwas machwas()" gemeint ist hab ich in der laufenden Diskussion keine Lösung gefunden.

Wenn mit "Methode" eine beliebige Vorgehensweise gemeint ist, dann sind fast alle Vorschläge dieses Threads eine valide Lösung (vom Einzeiler bis zur akademischen Lösung).

Für den Rest Deines Postings: Du hast natürlich Recht - aber mit 25 Jahren Praxis jenseits des Informatikstudiums sieht die Welt ganz anders aus.

Ich bin halt so ein Opa.

Bernd
 
S

Spacerat

Gast
Wenn mit "Methode" eine beliebige Vorgehensweise gemeint ist, dann sind fast alle Vorschläge dieses Threads eine valide Lösung (vom Einzeiler bis zur akademischen Lösung).
...und genau da könnte man darin übereinstimmen, dass der Dozent es hätte besser spezifizieren müssen, wenn er etwas spezielleres haben wollte. Niemand weis ja, was der Dozent eigentlich gemeint hat. Zumindest kann der Dozent nicht sagen, das auch nur eine der ernst gemeinten Lösungen (also alle bis auf deine CN-Lösung) hier, grundsätzlich falsch sei.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D was ist der vorteil vom Builder-design pattern? Java Basics - Anfänger-Themen 11
F Design pattern Java Basics - Anfänger-Themen 29
D Design Pattern Command Java Basics - Anfänger-Themen 3
Tarrew Proxy Design-Pattern Java Basics - Anfänger-Themen 1
S Je nach erhaltene Daten unterschiedlich reagieren (Design Pattern?) Java Basics - Anfänger-Themen 3
Rudolf OOP Übungen zu Design Pattern in Java Java Basics - Anfänger-Themen 6
R Welches Design pattern Java Basics - Anfänger-Themen 10
N BMI Rechner Was haltet ihr von dem Code habt ihr Verbesserungsvorschläge weil design teschnisch ist das nicht das geilste würde das gerne überarbeiten Java Basics - Anfänger-Themen 12
A Frage zum UML Design Java Basics - Anfänger-Themen 1
B Frage zu Datenbank Design - Rechnungen, Angebote... und deren Positionen Java Basics - Anfänger-Themen 4
N design time vs build time vs compile time Java Basics - Anfänger-Themen 2
H Eclipse , Design-Modus, unvollständige Darstellung Java Basics - Anfänger-Themen 0
M LookandFeel Design Java Basics - Anfänger-Themen 4
M Erste Schritte Eclipse + design view Java Basics - Anfänger-Themen 3
J Design Patterns Java Basics - Anfänger-Themen 8
D Besseres Design Frage Java Basics - Anfänger-Themen 1
N Was bedeutet "Implementierung vor dem Client verbergen" bei Design Patterns? Java Basics - Anfänger-Themen 2
J MVC- Design Frage Java Basics - Anfänger-Themen 3
C Java Klassen Design? Java Basics - Anfänger-Themen 5
OnDemand Software-Design Java Basics - Anfänger-Themen 1
B Warum haben Java Programme ein anderes Design? Java Basics - Anfänger-Themen 5
S Singleton (Design Patterns) Java Basics - Anfänger-Themen 16
K Interface als Instanzvariable = gutes Design Java Basics - Anfänger-Themen 6
S Eclipse Design-Reiter fehlt Java Basics - Anfänger-Themen 6
D Design-Tipps für neues Programm (Excel-Charts-...) Java Basics - Anfänger-Themen 3
M Button mit eigenem Design Java Basics - Anfänger-Themen 6
S Gutes Design mit statischen oder Member-Methoden Java Basics - Anfänger-Themen 53
X Externer GUI Code verwenden / (Design Ansicht) Java Basics - Anfänger-Themen 3
B OOP Frage zu Klassen Design Java Basics - Anfänger-Themen 5
Hamstinator Design und Listener in verschiedenen Klassen Java Basics - Anfänger-Themen 6
J Methoden design Java Basics - Anfänger-Themen 3
hdi Design-Problem Java Basics - Anfänger-Themen 2
hdi Kleine Design/Convention Frage zu Konstruktoren Java Basics - Anfänger-Themen 4
Q Listen - DefaultListModel trotz Design ueber GUI? Java Basics - Anfänger-Themen 10
B Java-Anwendung im Windows Design Java Basics - Anfänger-Themen 8
hdi Design-Frage: bin unzufrieden Java Basics - Anfänger-Themen 11
M code design Java Basics - Anfänger-Themen 14
M log4j design Java Basics - Anfänger-Themen 11
D Design Fragen Java Basics - Anfänger-Themen 5
M Design: Abfrage auf korrekte Eingabe Java Basics - Anfänger-Themen 4
W Design Problem Java Basics - Anfänger-Themen 7
T Wie wichtig ist Design Patterns in einer Firma? Java Basics - Anfänger-Themen 8
M Java Design Frage Java Basics - Anfänger-Themen 2
S log4j "Richtiges" Design Java Basics - Anfänger-Themen 4
D JButton - Design ändern Java Basics - Anfänger-Themen 8
S Frage zum Design der Vererbung (Kartendeck und Dupletten) Java Basics - Anfänger-Themen 12
S Design Frage Java Basics - Anfänger-Themen 5
W GoF-Pattern im Programmierer-Alltag Java Basics - Anfänger-Themen 113
D Java Pattern mit X Ausgabe Stern Java Basics - Anfänger-Themen 4
J Methoden Observer-Pattern mit Consumer und accept( ) Java Basics - Anfänger-Themen 6
Dimax Erste Schritte Pattern.matcher,die Besonderheiten. Java Basics - Anfänger-Themen 12
N Best Practice Frage zum MVC-Pattern Java Basics - Anfänger-Themen 2
J Implementierung von Observer und Singleton-Pattern Java Basics - Anfänger-Themen 9
W RegEx Matcher + Pattern und Emails Java Basics - Anfänger-Themen 8
M Schlüsselworte Unterschied: String.matches und Pattern.compile Java Basics - Anfänger-Themen 2
C Best Practice JTable in MVC Pattern Java Basics - Anfänger-Themen 7
Bregedur Methoden Matcher und Pattern bei sich wiederholenden Werten Java Basics - Anfänger-Themen 1
fLooojava MVC Pattern und Observer Pattern Java Basics - Anfänger-Themen 6
S Regex Pattern Java Basics - Anfänger-Themen 3
Z Pattern und Matcher substring zu String möglich? Java Basics - Anfänger-Themen 4
B Pattern für Email Liste Java Basics - Anfänger-Themen 3
J Builder Pattern implementieren Java Basics - Anfänger-Themen 3
M Methoden Pattern Matching Vokal Java Basics - Anfänger-Themen 2
agent47 Pattern split Java Basics - Anfänger-Themen 2
J MVC Pattern, mehrere Controller/Views/Models Java Basics - Anfänger-Themen 0
B Strategy Pattern - Rechner Java Basics - Anfänger-Themen 6
I Vertändnisfrage zu Prototype Pattern Java Basics - Anfänger-Themen 0
L Kompositum-Pattern Hilfe :O Java Basics - Anfänger-Themen 4
F eigenes Listener Pattern mit Interface Java Basics - Anfänger-Themen 1
B Pattern Matching ohne Match-Methoden Java Basics - Anfänger-Themen 11
Furtano OOP Memento Pattern | übergabe einer Kopie des Arrays Java Basics - Anfänger-Themen 0
F Erste Schritte Pattern zum Zerlegen von selbstdefinierten Dateinamen Java Basics - Anfänger-Themen 7
M MVC + Strategy Pattern Ansatz (mit Code) Java Basics - Anfänger-Themen 5
A Observer Pattern Problem Java Basics - Anfänger-Themen 15
J Interface Frage zu Interfces am Beispiel Observer Pattern Java Basics - Anfänger-Themen 8
S OOP Regex Pattern Java Basics - Anfänger-Themen 2
P Grundsatzfrage zu Decorator-Pattern Java Basics - Anfänger-Themen 6
L Pattern Matching Java Basics - Anfänger-Themen 3
L RegExp bzw Pattern in Java Java Basics - Anfänger-Themen 6
Helgon Observer Pattern - hasChanged() immer false Java Basics - Anfänger-Themen 10
R aktualisierung des View im MVC-Pattern Java Basics - Anfänger-Themen 5
M RegEx Pattern Matcher Java Basics - Anfänger-Themen 16
R Pattern bzw. Regex HTML-Code Java Basics - Anfänger-Themen 10
N Regexp Pattern & Matcher Problem Java Basics - Anfänger-Themen 4
I OOP Verständnisfrage zu Singelton Pattern Java Basics - Anfänger-Themen 21
B static und Pattern matching Java Basics - Anfänger-Themen 22
T pattern klappt nicht so Java Basics - Anfänger-Themen 6
T Decorator Pattern Java Basics - Anfänger-Themen 7
A Pattern und Matcher Java Basics - Anfänger-Themen 9
T Frage zu Pattern/Matcher Java Basics - Anfänger-Themen 6
D Pattern in Midi-Sequencer Java Basics - Anfänger-Themen 2
V Frage zu Decorator-Pattern Java Basics - Anfänger-Themen 4
S OOP Factory Pattern Java Basics - Anfänger-Themen 2
C OOP Observer Pattern Java Basics - Anfänger-Themen 2
M Regex-Pattern Java Basics - Anfänger-Themen 2
Haubitze_Broese Pattern für Links in RSS-Reader Java Basics - Anfänger-Themen 6
Raidri Pattern liefert false Java Basics - Anfänger-Themen 9
megachucky regex-Problem ( mit den Klassen Matcher / Pattern) --> XML prüfen Java Basics - Anfänger-Themen 11
O useDelimiter / Muster im Parameter (Pattern) Java Basics - Anfänger-Themen 6
S Problem mit Pattern Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben