Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> App pod kątem PHPUnit i dobrej praktyki OOP
trzczy
post
Post #1





Grupa: Zarejestrowani
Postów: 460
Pomógł: 49
Dołączył: 5.06.2011

Ostrzeżenie: (0%)
-----


W aplikacji jest kilka klas implementujących ten sam interfejs.

W dalszym opisie będę te klasy nazywał "tymi klasami"

Każda z tych klas ma metody, które musi posiadać ze względu na wymóg zawarty w interfejsie. Oprócz tego każda z tych klas korzysta z kilku metod, takich samych dla każdej z tych klas.

I teraz pytanie: jak udostępnić te wspólne metody dla każdej z tych klas?

Jest kilka możliwości:

1. Te klasy dziedziczą metody wspólne dla tych klas po klasie abstrakcyjnej, która te metody deklaruje.
2. Te klasy używają wspólnego trait z tymi metodami wspólnymi dla tych klas.
3. Specjalny obiekt zawierający wspólne dla tych klas metody wstrzykiwany jest do instancji każdej z tych klas.
4. Instancja każdej z tych klas wstrzykiwana jest do instancji pewnej specjalnej klasy, która posiada te metody wspólne dla tych klas.

A może jeszcze inaczej?

Mam nadzieję, że to zrozumiałe. Z góry dziękuję
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
trzczy
post
Post #2





Grupa: Zarejestrowani
Postów: 460
Pomógł: 49
Dołączył: 5.06.2011

Ostrzeżenie: (0%)
-----


Napisałem wyjaśnienie na prośbę @lukaskolista, ale straciłem internet ma pewien czas. Kiedy odzyskałem, pojawił się komentarz @Skie. Z tego co czytam, Skie zrozumiał o co biega, i faktycznie ten temat interface jest tu raczej bez znaczenia. Istotne jest to, że kilka klas korzysta z tej samej logiki, tych samych metod.

Przy okazji: co to jest strategia? Albo gdzie o tym czytać.




Odpowiedź dla @lukaskolista zasejwowana przed utratą internetu: ;-)
Ta aplikacja zajmuje się ustalaniem kolejności grup różnych rzeczy. Przykładowo stringów albo obiektów stdClass, albo liczb, albo tablic.

Danymi wejściowymi są te rzeczy oraz info, że niektóre rzeczy są poprzedzone przez inne rzeczy. Jest pewien algorytm matematyczny, który na podstawie tej info ustala grupy rzeczy i kolejność tych grup. Zatem wypluwana jest tablica tablic z tymi rzeczami.


W zależności od tego, jakie to są rzeczy, tworzona jest inna klasa, implementująca ten sam interfejs. Załóżmy, że zajmujemy się sortowaniem pewnych obiektów stdClass. Wtedy tworzymy klasę np. MyStdClassObjects implementującą interfejs, który narzuca zadeklarowanie metody isLike.

Metoda isLike jest to metoda, dzięki której można określać tożsamość poszczególnych rzeczy typu stdClass. Jest ona porzebna, aby właściwie intepretować informację o tym, że jakiś obiekt stdClass jest poprzedzony innym obiektem stdClass.

Gdybyśmy zajmowali się sortowaniem liczb, wymagana interfejsem metoda isLike by po prostu sprawdzała równość liczb.

Ale wróćmy do sortowania obiektów stdClass i do klasy MyStdClassObjects. Z zasobów tej klasy korzysta metoda create, która pozwala uzyskać końcową tablicę tablic. Metoda create jest literalnie ta sama bez względu na to, co sortujemy: czy liczby, czy stringi, czy obiekty itd. Metoda create korzysta z właściwej metody isLike. Poza tym korzysta z kilku metod pomocniczych, które są takie same niezależnie od tego, co sortujemy. Jedną z takich metod jest metoda hasFormerThings, która mówi, czy dana rzecz następuje po innej rzeczy.

Zatem widać, że są metody wspólne, takie same dla każdej implementacji interfejsu. I pytanie brzmi, jak te metody mają się komunikować z klasą implementującą ten interfejs, czyli np. z klasą MyStdClassObjects. Gdzie mają być zgrupowane. Jak mają być udostępnione tej klasie?
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 10.10.2025 - 18:57