Sens |
Sens |
12.07.2016, 20:55:31
Post
#1
|
|
Grupa: Zarejestrowani Postów: 72 Pomógł: 11 Dołączył: 8.05.2016 Ostrzeżenie: (0%) |
Witam.
Nie rozumiem paru rzeczy w programowaniu obiektowym, mianowicie sensu interfejsów i abstrakcji. Przecież taki interfejs w ogóle jest niepotrzebny i tylko zwiększa (nieznacznie) rozmiar naszego pliku, albowiem on tylko wymusza zdefiniowanie jakiejś metody. Ogólnie tą metodę możemy zdefiniować bez żadnego interfejsu - efekt ten sam.
Abstrakcji też nie rozumiem. Przecież ów deklaracja jest absolutnie niepotrzebna; można to zrobić w klasie, która coś dziedziczy.
Ogólnie nie widzę sensu w użytku tego - jest to używane tylko do debugowania albo przejrzystości czy jak? Bo ogółem nie ma to innego sensu raczej. |
|
|
13.07.2016, 12:17:09
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 366 Pomógł: 1115 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
Po pierwsze stosuje się PSR-4 http://www.php-fig.org/psr/psr-4/ i interface, trait oraz wszystkie klasy powinny być definiowane w osobnych plikach.
Po drugie implementacja interface w klasie wymusza własną implementację danej metody czyli w twoim pierwszym przykładzie intf::example(). Strukturyzuje też kod. Załóżmy gdybyś miał: UserStorageInterface.php
DbUserStorage.php
ArrayUserStorage.php
ExternalServiceUserStorage.php - czyli dane pochodzące z obcych serwisów pobierane przez API
W każdej z klas musiałbyś zaimplementować pobieranie danych o użytkownikach. Metoda na zrobienie tego byłaby różna w zależności od klasy (wybranie z bazy, pobranie z tablicy albo z zewnątrz) ale miałbyś pewność że klasy te posiadają daną metodę. I teraz jeszcze ważniejsze:
Oraz co za tym idzie rzutowanie: UserRepository.php
Dzięki temu do klasy UserRepository możesz przekazać dowolny obiekt który implementuje UserStorageInterface. Jakiś czas temu pisałem też o klasach gdzie masz wytłumaczoną abstrakcję. Ten post edytował viking 13.07.2016, 12:26:45 -------------------- |
|
|
Wersja Lo-Fi | Aktualny czas: 23.06.2024 - 02:07 |