Zpo-13-wyk-Slajd26

Z Studia Informatyczne
Wersja z dnia 07:49, 21 sie 2006 autorstwa Bwalter (dyskusja | edycje)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacjiPrzejdź do wyszukiwania

"Dobry obywatel"

"Dobry obywatel"


Korzystając z okazji, warto przypomnieć pojęcie dobrego obywatela , użyte przez J. Blocha (współarchitekta języka Java) w odniesieniu do klas spełniających pewne warunki. Klasa jest dobrym obywatelem, jeżeli postępuje w przewidywalny sposób, zatem korzystające z niej klienty mogą czynić pewne założenia dotyczące jej stanu.

Wśród wielu atrybutów dobrego obywatelstwa, z zasadą odwróconego sterowania są związane trzy:

  • spójność stanu oznacza, że konstruktor zawsze tworzy prawidłowy obiekt lub zgłasza wyjątek. Dodatkowe metody inicjujące, które muszą zostać wywołane po konstruktorze, są błędem projektowym;
  • testowalność , oznaczająca, że klasa wszelkie zależności otrzymuje z zewnątrz. Dzięki temu można zależności zastąpić np. obiektami zastępczymi (ang. mock objects ; zob. wykład nt. testowania jednostkowego);
  • szybkie zgłoszenie błędu , które pozwala uniknąć niepotrzebnego zużycia zasobów na nieistotne w kontekście błędu operacje.

Warto zauważyć, że zasada dobrego obywatelstwa, choć odpowiada części warunków stawianych komponentom, jest naruszana przez wiele cieszących się dobrą opinią i dużą popularnością produktów i technologii komponentowych. Jest powszechną praktyką ograniczanie konstruktora obiektu wyłącznie do realizacji podstawowych operacji, które nie spowodują zgłoszenia wyjątku. Rolę "logicznego" konstruktora przejmuje w takim przypadku określona metoda, dzięki czemu można obsłużyć zgłaszane przez nią wyjątki bez konieczności tworzenia nowej instancji obiektu (co miałoby miejsce w przypadku zgłoszenia wyjątku przez konstruktor). Przykładem takiego rozwiązania jest technologia Java Servlets, w której cyklem życia serwletu zarządza kontener, i on fizycznie tworzy instancje tej klasy. Programista ma do dyspozycji jedynie metody związane z cyklem życia: init (), wykonywaną tuż po utworzeniu obiektu, oraz destroy (), związaną z jego finalizacją.

Dlatego stosowanie się do zasady dobrego obywatelstwa zależy od przyjętej filozofii projektowania i nie należy bezwzględnie jej przestrzegać.


<< Poprzedni slajd | Spis treści | Następny slajd >>