Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Interfejsy, czy to jest naprawdę do czegoś potrzebne?
sztosz
post
Post #1





Grupa: Zarejestrowani
Postów: 866
Pomógł: 32
Dołączył: 2.06.2004
Skąd: Wrocław

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


Mam jedno pytanie: Do czego tak na prawdę mogą się przydać interfejsy w programowaniu? Bo za cholerę nie wiem. Szukam unikalnego zastosowania, którego nie dało by się z powodzeniem zastąpić czymś innym i nie znajduję. Do czego to więc?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
vokiel
post
Post #2





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


Osobiście dla mnie interfejsy są zasadne w kilku przypadkach:
Pluginy - gdy plugin musi mieć określone metody (instalacja, dodanie do menu w panelu, sprawdzenie wersji, wyswietlenie na stronie, etc). Interfejs wymusza zastosowanie tych metod, dzięki czemu wiem, że nie dołączę pluginu bez instalatora.

Drivery - ostatnio pisałem loggera. Przedstawię na przykładzie:
  1. <?php
  2. interface logInterface {
  3. public static function error($err);
  4. public static function warn($err);
  5. public static function info($err);
  6. }
  7.  
  8. class logFile implements logInterface {
  9. public static function error($err){
  10. // zapis błędu do pliku
  11. }
  12. public static function warn($err){
  13. // zapis ostrzeżenia do pliku
  14. }
  15. public static function info($err){
  16. // zapis informacji do pliku
  17. }
  18. }
  19. ?>

Każda następna klasa implementująca logInterface musi posiadać te 3 metody. Dzięki temu mogę utworzyć klasę log która będzie przyjmowała obiekty klas implementujących logInterface.
W przypadku zmian, dodaniu innego sterownika logów, użycie będzie zawsze takie samo:
  1. log::info($err);
Wystarczy na początku skryptu zmienić sterownik:
  1. log::addDriver(new logDb());
  2. log::useDriver('logDb');

I już mogę używać logowania do bazy zamiast do pliku, bez zmian w całym kodzie.

Można to osiągnąć przez użycie klasy abstrakcyjnej. W tym przypadku logowanie do pliku odbywa się zupełnie inaczej niż logowanie do bazy. Zatem klasa abstrakcyjna musiałby mieć tylko zarysy metod, bez ciała - co w rezultacie sprowadza się do interfejsu.

Interfejs dodaje warstwę abstrakcji, którą w przypadku zmian łatwo wymienić nie ingerując w cały kod wykorzystujący dane rozwiązanie.
Go to the top of the page
+Quote Post

Posty w temacie
- sztosz   Interfejsy   1.09.2009, 22:06:52
- - Speedy   Jeśli chodzi o interfejsy w php, to mogą się one p...   1.09.2009, 22:34:36
- - wookieb   Przydają się np do tego jak tworzysz klasy element...   1.09.2009, 22:41:15
- - Speedy   CytatRóżnica pomiędzy interfejsem a klasą abstrakc...   1.09.2009, 23:05:19
- - sztosz   Ale to w takim razie sprowadza się do tego że do i...   1.09.2009, 23:31:05
- - dr_bonzo   CytatBo co za różnica czy dziedziczę po x klas i i...   1.09.2009, 23:42:55
|- - sztosz   Cytat(dr_bonzo @ 2.09.2009, 00:42:55 ...   2.09.2009, 00:07:35
- - dr_bonzo   1. A od kiedy mozesz? Na pewno *mozesz* w C++, w ...   2.09.2009, 00:25:23
|- - sztosz   Cytat(dr_bonzo @ 2.09.2009, 01:25:23 ...   2.09.2009, 09:58:10
- - LBO   Przede wszystkim interfejsy umożliwiają poprawną ...   2.09.2009, 03:29:09
- - Cysiaczek   @sztosz - w OOP jest kilka tematów na temat interf...   2.09.2009, 07:07:45
- - Crozin   CytatCzytam i czytam i wychodzi na to że Interfejs...   2.09.2009, 13:54:34
|- - sztosz   Mnie fascynuje Python, PHP denerwuje. Do zagwarant...   2.09.2009, 14:41:42
- - Crozin   CytatMnie fascynuje Python, PHP denerwuje.Mnie też...   2.09.2009, 15:01:34
- - sztosz   No i to jest właśnie ten problem którego chciałem ...   2.09.2009, 16:00:51
- - Crozin   Ahh... zapomniałem, że temat miał być ogólny - mój...   2.09.2009, 16:26:40
- - sztosz   O widzisz, i zaczynam poniekąd znajdować zastosowa...   2.09.2009, 16:51:06
- - dr_bonzo   CytatZ tego tematu wynika że w PHP interfejs jest ...   2.09.2009, 20:11:58
- - vokiel   Osobiście dla mnie interfejsy są zasadne w kilku p...   3.09.2009, 07:59:04
- - sztosz   @vokiel: Ale do tego żeby to zrobić, nie potrzebuj...   3.09.2009, 12:04:08
- - vokiel   CytatAle nie widzę nigdzie przykładu gdzie interfe...   3.09.2009, 13:04:33
- - erix   Teraz moje trzy grosze. ;p [PHP] pobierz, plainte...   3.09.2009, 14:34:51
- - dr_bonzo   @sztosz CytatJak na razie wiem, że w językach któ...   3.09.2009, 20:45:09
- - Cysiaczek   Dziedziczenie to w większości przypadków zło wciel...   4.09.2009, 09:22:14
|- - sztosz   Cytat(Cysiaczek @ 4.09.2009, 10:22:14...   4.09.2009, 10:56:46
- - Spawnm   Bo w większości przypadków jest zbędne , a początk...   4.09.2009, 11:02:31
|- - phpion   Cytat(Spawnm @ 4.09.2009, 12:02:31 ) ...   4.09.2009, 11:31:53
- - phpion   Pierwsze słyszę opinię, że dziedziczenie to zło. M...   4.09.2009, 11:05:17
- - LBO   Cytat(phpion @ 4.09.2009, 12:05:17 ) ...   4.09.2009, 11:09:15
- - nospor   CytatBo w większości przypadków jest zbędnelatanie...   4.09.2009, 11:13:20
- - phpion   Równie dobrze można powiedzieć, że klasy to ponie...   4.09.2009, 11:20:17
- - sztosz   Używanie intefejsów jest zbędne, a prawie wszyscy ...   4.09.2009, 11:22:13
- - Spawnm   Czy napisałem że zło wcielone? Napisałem że przyda...   4.09.2009, 11:22:25
- - nospor   CytatCzy napisałem że zło wcielone?No to spojrzmy:...   4.09.2009, 11:28:39
- - Spawnm   OK. W takim razie rozwinę : dziedziczenie to zło w...   4.09.2009, 11:44:17
- - nospor   No to czego na tak ogolne pytanie odpowiadasz tylk...   4.09.2009, 11:57:23
|- - plurr   Cytat(nospor @ 4.09.2009, 12:57:23 ) ...   4.09.2009, 13:10:41
- - Crozin   CytatNo i to jest właśnie ten problem którego chci...   4.09.2009, 13:26:35
- - Cysiaczek   Jeśli nieprecyzyjnie się wyraziłem, to sprostuję. ...   5.09.2009, 11:29:54
- - batman   Interface jest idealnym przykładem różnicy między ...   5.09.2009, 14:13:02
- - sztosz   Chyba się mylisz ~batman. Parser/kompilator nic ni...   5.09.2009, 17:26:32
- - batman   ~sztosz pytałeś czysto teoretycznie, abstrahując o...   5.09.2009, 17:34:41
- - sztosz   A czemu niby typ ma być dziedziczony po interfejsi...   5.09.2009, 17:49:26
- - batman   CytatA czemu niby typ ma być dziedziczony po inter...   5.09.2009, 17:55:48
- - LBO   batman, jak mniemam chodzi Tobie o to samo na czym...   5.09.2009, 17:55:59
- - Crozin   Cytatskoro taki interfejs, jak już do tego doszliś...   5.09.2009, 17:59:03
- - batman   Cytat(LBO @ 5.09.2009, 18:55:59 ) bat...   5.09.2009, 17:59:34
- - LBO   Cytat(batman @ 5.09.2009, 18:59:34 ) ...   5.09.2009, 18:04:19
- - batman   LBO CytatJa tylko niosę pomoc Jeśli chciałbym pi...   5.09.2009, 18:10:55
|- - sztosz   Cytat(batman @ 5.09.2009, 19:10:55 ) ...   5.09.2009, 21:40:59
- - LBO   Cytat(batman @ 5.09.2009, 19:10:55 ) ...   5.09.2009, 18:31:22
- - batman   Niestety nie poznałem LINQ na tyle, by móc prowadz...   5.09.2009, 18:37:52
- - LBO   Cytat(batman @ 5.09.2009, 19:37:52 ) ...   5.09.2009, 18:49:17
- - Crozin   [JAVA] pobierz, plaintext interface Moveable...   5.09.2009, 22:55:21
- - sztosz   Czy na pewno to ze coś implentuje jakiś interfejs ...   5.09.2009, 23:17:42
- - Crozin   Tak, ponieważ Pies dziedzicząc po Ssak otrzymuje j...   5.09.2009, 23:32:23
- - sztosz   OK, zwracam więc honor, miałem zupełnie inne wyobr...   5.09.2009, 23:41:03
- - dr_bonzo   (odpowiedz na ost. 2 strony postow) @sztosz Cyta...   6.09.2009, 14:04:56
- - bim2   Najlepszy przykład podał właśnie Crozin. W Thinkin...   6.09.2009, 17:29:45
- - sztosz   Mi się wydawało zawsze że można iterować po czymko...   6.09.2009, 21:40:07
- - plurr   Nasunęła mi się jeszcze jedna myśl, a propos inter...   7.09.2009, 07:50:45


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: 16.10.2025 - 16:48