Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Sens
IAmBoskiM
post 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.

  1. <?php
  2. //******************** kod 1
  3. interface intf {
  4. public function example();
  5. }
  6. class klasa implements intf {
  7. public function example() {
  8. echo 'Example function';
  9. }
  10. }
  11. //********************
  12. //******************** kod 2
  13. class klasa {
  14. public function example() {
  15. echo 'Example function';
  16. }
  17. }
  18. //********************
  19. // Efekt? Ten sam, a zatem po co te interfejsy??
  20. ?>


Abstrakcji też nie rozumiem. Przecież ów deklaracja jest absolutnie niepotrzebna; można to zrobić w klasie, która coś dziedziczy.

  1. <?php
  2. //*************** kod 1
  3. abstract class abstr {
  4. abstract public function absfunc ();
  5. public function example () {
  6. echo 'example';
  7. }
  8. }
  9. class klasa extends abstr {
  10. public function absfunc () {
  11. echo 'abstr';
  12. }
  13. }
  14. //***************
  15. //*************** kod 2
  16. class notabstr {
  17. public function example () {
  18. echo 'example';
  19. }
  20. }
  21. class klasa extends notabstr {
  22. public function absfunc () {
  23. echo 'abstr';
  24. }
  25. }
  26. //***************
  27. // Efekt? Ten sam...
  28. ?>


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Lion
post 14.07.2016, 07:15:38
Post #2





Grupa: Zarejestrowani
Postów: 148
Pomógł: 14
Dołączył: 23.02.2013

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


Interfejs jest po to abyś mógł podpowiedzieć sobie lub innemu programiście czego oczekujesz od danego obiektu klasy, co powinien on umieć zrobić. Gdy np. przyjmujesz obiekt poprzez dependency injection, jak zostało to pokazane wyżej w UserRepository, to możesz się spodziewać że przekazany Ci obiekt będzie robił to co interfejs UserStorageInterface mu każe. Oznacza to że spokojnie w innym miejscu możesz wywoływać na danym obiekcie metody zaimplementowane z interfejsu UserStorageInterface bez obaw że ich tam nie ma i że dostaniesz fatal error podczas wykonywania kodu. Gdy natomiast jesteś zainteresowany tym by skorzystać z UserRepository to od razu wiesz jakie metody powinieneś zaimplementować w swoich obiektach.


--------------------
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Wersja Lo-Fi Aktualny czas: 22.06.2024 - 19:50