Witam
Zacznę może od początku. Piszę grę, w której gracz porusza statkami. W pierwotnym zamyśle istniał tylko jeden typ statku.
Był on jednocześnie encją w bazie danych (z następującymi polami: id, położenie na mapie, typ) i tworzonym z niej obiektem klasy 'Statek', w którym znajdowały się te same pola co we wcześniej wspomnianej encji + szybkość, nazwa, opis itp.
Miało to na celu ograniczenie ilości pól w bazie. Tworzenie takiego obiektu wyglądało mniej więcej tak:
Statek statek = new Statek(statekEncja)
Potrzebne pola były pobierane z encji i ustawiane w konstruktorze . Reszta była ustawiana 'na sztywno'.
Problem pojawił się w momencie, gdy wpadłem na pomysł tworzenia różnych typów statków, jak np. handlowe czy wojenne. Pierwszym odruchem było utworzenie klasy abstrakcyjnej 'Statek', w której umieściłem wszystkie wspólne pola.
Następnie utworzyłem dziedziczącą klasę 'Statek handlowy'.
I w tym miejscu właśnie pojawia się problem. W jaki sposób można dodać pola i metody (np. pojemość ładowni w statku handlowym), w ten sposób żeby statek handlowy dalej był typu 'Statek'? Dodam, że nie chodzi mi o modyfikację kodu metod, jak we wzorcu dekorator, a raczej o całościowy sposób rozwiązania tego problemu, łącznie ze sposobem zapisu do bazy danych. Mam nadzieję, że wystarczająco jasno przedstawiłem problem.
Pozdrawiam i czekam na sugestie:)