Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Ideologia Klas, czy ktoś pomoże mi zrozumieć klasy?
Forum PHP.pl > Forum > Przedszkole
Raven1122
Witam,

Czytam sobie na internecie przerozne artykuly poswiecone OOP no i poszukuje dokladnej definicji klasy, znalazlem takie cos tez:


skup się na interfejsach, nie natomiast na implementacji
uzależniaj kod od abstrakcji,a nie od klas rzeczywistych
twórz klasy luźno ze sobą powiązane
stosuj kompozycję obiektów, zamiast dziedziczenia (rozumiem, że ren punkt sie odnosi do nadmiernego uzywania extends tak?)

Prosze o wytlumaczenie mi tego wszystkiego bo nigdzie nie moge znalezc zadnego dobrego opisu.
Kshyhoo
Poczytaj kursy albo oglądnij na YT. Przecież nikt nie będzie tego pisał po raz 1000...
Raven1122
chodzilo mi bardziej o wyjasnienie tych 4 punktow co tam napisalem
Crozin
Cytat
skup się na interfejsach, nie natomiast na implementacji
Chodzi o to, by w miejscu gdzie spodziewasz się obiektu danego typu, korzystać z interfejsów zamiast konkretnych klas, przykładowo:
  1. public function save(DatabaseStorage $storage) { ... } // źle, ograniczasz się wyłącznie do konkretnej implementacji
  2. public function save(StorageInterface $storage) { ... } // dobrze, możesz skorzystać w tym miejscu z DatabaseStorage, ArrayStorage, MemchaeStorage, AmazonS3Storage czy czegokolwiek sobie zażyczysz
Cytat
uzależniaj kod od abstrakcji,a nie od klas rzeczywistych
j/w
Cytat
twórz klasy luźno ze sobą powiązane
Przede wszystkim: j/w. Kolejną sprawą jest IoC, czyli zamiast bezpośrednio "łączyć" ze sobą dwie klasy:
  1. class Foo {
  2. public function __construct() {
  3. $this->service = new Bar();
  4. }
  5. }
  6.  
  7. // Klasa Foo jest bezpośrednio powiązana z klasą Bar
Utwórz zależność poprzez wstrzyknięcie jej jako argument konstruktora:
  1. class Foo {
  2. public function __construct(Bar $bar) { // bądź BarInterface $bar
  3. $this->service = $bar;
  4. }
  5. }
Cytat
stosuj kompozycję obiektów, zamiast dziedziczenia (rozumiem, że ren punkt sie odnosi do nadmiernego uzywania extends tak?)
To się odnosi do jeden z fundamentalnych zasad OOP - rozumienia relacji pomiędzy obiektami/klasami. Kompozycja to relacja typu has a (posiada) - obiekt A posiada/wykorzystuje w swoim działaniu obiekt B. Dziedziczenie z kolei to relacja is a (jest) - obiekt A jest wyspecjalizowaną formą obiektu B, ale z ideologicznego punktu widzenia są tym samym.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.