2010-06-01 11 views
5

Masz klasę, która idealnie pasuje do abstrakcji, ale ta klasa nie może działać normalnie bez danych dostarczonych z klasy pochodnej. Nie jest wygodne przekazywanie wszystkich danych do konstruktora, ponieważ nie wszystkie mogą być potrzebne, a wiele z nich może być dynamicznych (wynik z funkcji podrzędnej).Co jest częstą praktyką wypełniania zajęć abstrakcyjnych?

Jakie są najlepsze praktyki dotyczące komponowania takiej struktury? Czy to na pewno zły projekt?

  1. Zadeklarować abstrakcyjne funkcje, które dziecko musi wdrożyć?
  2. Zadeklarowanie normalnych funkcji, które zostały zastąpione w klasie potomnej?

Odpowiedz

1

Jeśli istnieje uzasadnione domyślne zachowanie funkcji, na której można polegać u większości dzieci, można ją wdrożyć jako normalną. W przeciwnym wypadku (domyślne zachowanie i/lub większość dzieci nie może go zastąpić), lepiej jest zadeklarować je jako abstrakcyjne. Efektem ubocznym jest to, że nigdy nie zapomnisz zdefiniować go w klasie dziecka, ponieważ niepowodzenie to zostanie natychmiast zgłoszone.

Inną możliwością jest użycie kontenerów (na przykład tablic) do danych, które są specyficzne dla klas potomnych, ale nadal podlegają ogólnym kontrolom lub innym metodom przetwarzania, które można wykonać we wspólnym przodku. W ten sposób definiujesz zmienną przechowującą dane, ale same dane są wypełnione dziećmi. Kod w klasie nadrzędnej może iterować nad tym kontenerem i wykonywać rutynową pracę nad wszystkimi elementami.

+0

Dobra odpowiedź, dziękuję. –