Temat: Za co się teraz zabrać?
Istnienie akcesorów wg mnie w dużej mierze zależy od konkretnej sytuacji/roli obiektu jaką ma pełnić w systemie - a ta często określa i/lub jest określana przez interfejs.
Są sytuacje gdzie robienie prywatnych/chronionych parametrów wraz z metodami dostepowymi będzie tylko oznaką bezmyślnego trzymania się fajnych słów jak "enkapsulacha" czy "hermetyzacja" bez żadnego projektowego/architektonicznego uzasadnienia.
Dyskutować o akcesorach można w nieskończoność i do żadnego sensownego wniosku nie dojdziecie/dojdziemy, bez znaczenia o jakim języku jest mowa.
Częściej - tak jak napisałem wyżej - ważniejszy jest interfejs, który ma w d. czy parametry są publiczne czy prywatne. Liczy się zestaw metod, to co się za nimi dzieje jest i powinno być nieistotne z perspektywy projektu/architektury.
Trzymając się kolejowego przykładu - nie ważne czy ktoś ma wytatuowaną ilość obserwujących na czole, czy jest skryty i trzeba go pytać.
Każdy z elementów w przedziale - pieski, plecaki, osoby musi implementować TransportableInterface::owner(), zaś osoby dodatkowo muszą implementować PassengerInterface::getTicket().
W efekcie Transportable->owner()->getTicket();
Zaś sama ilość obserwujących powinna być tak:
function checkObservers(TransportableInterface $Transportable) {
if(isset($Transportable->observing)) {
return (int) $Transportable->observing; // skoro widzę na czole, to po co pytam?
}
if(is_callable($Transportable, 'getObservers')) { // sprawdzam czy mogę zapytać, może jest w czyimś bagażu
return $Transportable->getObservers(); // pytam
}
// TODO - próbuj ocenić sam i zwróć wartość
return null; // zwróć null bo nie masz pojęcia
}
funkcja zwraca kolekcję obiektów TransportableInterface (tak na wypadek gdyby prócz pasażerów obserwował mnie pies pani z naprzeciwka i bagaż z półki) lub null w przypadku gdy jesteśmy w tunelu.
[Edit]
Jak widać - implementacja interfejsów całkowicie uwalnia od problemu publiczne/prywatne, gdzie przez interfejs należy rozumieć ustalony zestaw metod, niezależnie czy jest poprzedzony słowem "interface" czy spisany na kartce i wymuszany przez kierownika projektu. Interfejs to interfejs.
[Edit2]
Wg mnie - obserwatora powinno się dodawać do elementów implementujących Obserwowalny::dodajObserwatora(); Jej implementacja określa czy obiekt może być obserwowany czy nie (np. powietrze w przedziale nie implementuje tego, a pieniądze w kieszeni, choć implementują nie informują o zdarzeniach - bo są w kieszeni i ich nie widać).
Michał Wachowski edytował(a) ten post dnia 19.03.12 o godzinie 00:08