Hallo Leute,
ich habe ein Problem bei der Umsetzung des Beobachter-Patterns zur Nutzung des MVC-Entwurfsmusters:
Ich habe zuerst eine abstrakte Klasse "AbstractObserver" erstellt. Diese Realisiert die Funktionalitäten des Beobachters. Danach habe ich eine Klasse "AbstractView" erstellt, die diese Klasse spezialisiert. Diese hat zusätzlich als Attribut eine Instanz vom Typ "Model". Model widerum hat als Attribut eine Instanz einer Klasse "Problem" und eine Methode "Problem getProblem()".
Wenn ich jetzt anfang eine Klasse "TextView" zu erstellen (diese spezialisiert AbstractView), und in dieser in der update-Methode (die Methode die beschreibt, wie der Observer/die View mit Änderungen des Observables/Models umgeht) die Methode "this.Observable.getProblem()" aufrufen will, bringt mir der Compiler die Meldung, dass die Klasse AbstractObservable keine Methode namens "getProblem()" enthält.
Aber zu diesem Zeitpunkt ist das "AbstractObservable" ja bereits vom Typ "Model". Deshalb frage ich mich, warum die Methode dort nicht aufgerufen werden kann. Ich habe absolut keine Ahnung, woran das liegen könnte ???:L. Hier ist noch der Quelltext der einzelnen Klassen (das ist jetzt sicherlich extrem viel, aber ich hoffe es findet sich jemand, der mir helfen kann )
Schonmal danke im Vorraus an alle
ich habe ein Problem bei der Umsetzung des Beobachter-Patterns zur Nutzung des MVC-Entwurfsmusters:
Ich habe zuerst eine abstrakte Klasse "AbstractObserver" erstellt. Diese Realisiert die Funktionalitäten des Beobachters. Danach habe ich eine Klasse "AbstractView" erstellt, die diese Klasse spezialisiert. Diese hat zusätzlich als Attribut eine Instanz vom Typ "Model". Model widerum hat als Attribut eine Instanz einer Klasse "Problem" und eine Methode "Problem getProblem()".
Wenn ich jetzt anfang eine Klasse "TextView" zu erstellen (diese spezialisiert AbstractView), und in dieser in der update-Methode (die Methode die beschreibt, wie der Observer/die View mit Änderungen des Observables/Models umgeht) die Methode "this.Observable.getProblem()" aufrufen will, bringt mir der Compiler die Meldung, dass die Klasse AbstractObservable keine Methode namens "getProblem()" enthält.
Aber zu diesem Zeitpunkt ist das "AbstractObservable" ja bereits vom Typ "Model". Deshalb frage ich mich, warum die Methode dort nicht aufgerufen werden kann. Ich habe absolut keine Ahnung, woran das liegen könnte ???:L. Hier ist noch der Quelltext der einzelnen Klassen (das ist jetzt sicherlich extrem viel, aber ich hoffe es findet sich jemand, der mir helfen kann )
Java:
package observerPattern;
import problem.*;
public abstract class AbstractObserver implements ObserverInterface {
protected AbstractObservable observable;
public abstract void update();
public void setObservable(AbstractObservable observable){
//this.observable.deleteObserver(this);
this.observable = observable;
this.observable.registerObserver(this);
}
}
Java:
package view;
import observerPattern.*;
import model.*;
public abstract class AbstractView extends AbstractObserver implements ViewInterface {
String name;
public AbstractView(String name){
super();
this.name = name;
this.setObservable(new Model());
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public abstract void resetView();
}
Java:
package view;
import problem.*;
import observerPattern.*;
import model.*;
public class TextView extends AbstractView {
String text = "";
public TextView(){
super("TextView");
}
public void resetView(){
this.text = "";
}
public void update(){
//hier wird entschieden, wie TextView mit einer Änderung des Models/Problems umgeht
Problem tempProblem = observable.getProblem(); // HIER TRITT DER FEHLER AUF!!!!
System.out.println(tempProblem.getIsFinished());
}
}
Java:
package observerPattern;
import java.util.*;
import problem.*;
public abstract class AbstractObservable{
protected List<AbstractObserver> observers;
Object object = new Object();
public AbstractObservable(){
observers = new ArrayList<AbstractObserver>();
}
public void registerObserver(AbstractObserver observer){
observers.add(observer);
}
public void deleteObserver(AbstractObserver observer){
observers.remove(observer);
}
public void notifyObservers(){
for(AbstractObserver o : observers){
o.update();
}
}
public void update(Object newProblem){
this.object = newProblem;
notifyObservers();
}
public Object getObject(){
return this.object;
}
}
Java:
package model;
import observerPattern.*;
import problem.*;
import algorithm.*;
public abstract class AbstractModel extends AbstractObservable{
AbstractAlgorithm algorithm;
protected Problem problem;
public void performAlgorithm(){
}
public void performStep(){
this.algorithm.performStep();
}
public AbstractModel(){
super();
this.problem = new Problem();
this.algorithm = new ForwardScheduling(this.problem);
}
public Problem getProblem(){
return this.problem;
}
}
Java:
package model;
public class Model extends AbstractModel{
}
Zuletzt bearbeitet: