typy obiektów w abstrakcyjnej klasie

0

Witam

to mój pierwszy wpis na forum, więc proszę o wyrozumiałość ;)

koduję w Java taką sytuację:

Tworzę abstrakcyjną klasę, którą będzie implementował klient.
U klienta na pewno występują obiekty takie jak decyzja i stan
Klasa definiuje abstrakcyjne metody operujące między innymi na obiektach klienta - metody przyjmują je jako parametry i zwracają. Implementacja tych metod jest po stronie klienta. Przykładowo jakaś metoda przyjmuje jako parametr stan a zwraca decyzję.
Metody te są użyte w głównej metodzie, zaimplementowanej (w abstrakcyjnej klasie) przeze mnie, więc klient nie musi jej implementować. Metoda ta, jak już można się domyśleć, operuje na stanach, decyzjach i innych danych i coś tam robi... i klient się z tego cieszy (pod warunkiem, że dobrze zaimplementował wcześniej wspomniane metody abstrakcyjne)

I teraz pytanie, czy prawidłowe / dopuszczalne jest takie zdefiniowanie metod abstrakcyjnych, że np. jako parametr przyjmują stan jako obiekt typu Obiekt, który w implementacji klienta będzie konkretnym obiektem stanu o typie zdefiniowanym po stronie klienta. Ja od stanu i decyzji nic nie potrzebuję, żadnego interfejsu, więc trochę nie widzę potrzeby ich definiowania. Moja główna metoda tak operuje na stan i decyzja, że do nich nie zagląda, operuje na nich metodami zaimplementowanymi przez klienta.

Mam nadzieję, że w miarę jasno się określiłem na tym abstrakcyjnym poziomie, jeśli nie to oczywiście spróbuję doprecyzować...
Z góry dzięki!

0

Nic nie rozumiem, proszę o streszczenie tematu.

0

Oki, poniżej jest fragment kodu. Jest to abstrakcyjna klasa z definicją abstrakcyjnych metod i jedną zaimplementowaną metodą wykorzystującą abstrakcyjne metody (do zaimplementowania po stronie klienta).

Pytanie jeszcze raz: czy użycie jako parametrów metod zmiennych typu Obiekt, lub zwracanie takich obiektów jest dopuszczalne, czy jest to ok?

public abstract class NetTrainerEnvy {
    //prepares input state (case specific object)
    public abstract Object prepInState();
    //prepares input data (array) for solver for given input state (case specific object)
    public abstract double[] prepSolverIN(Object inState);
    //interprets solver output data (array) and returns decision (case specific object)
    public abstract Object intpSolverOUT(double[] solverOUT);
    //prepares envy specific feedback
    public abstract genericEnvyFeedback prepEnvySpecificFeedback(Object decision);
    //moves envy to next state
    public abstract void moveEnvyToNextState();
    // runs environment
    public void runEnvy()
    {
            solv.getEnvyFeedback( prepEnvySpecificFeedback( intpSolverOUT( solv.runFWD( prepSolverIN( prepInState() ) ) ) ) );
            moveEnvyToNextState();
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1