• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Po co są interfejsy ?

Cloud VPS
0 głosów
2,101 wizyt
pytanie zadane 3 grudnia 2017 w PHP przez Krzysio4224 Obywatel (1,690 p.)
Witam

Do jakich celów używa się interfejsów w PHP ?

3 odpowiedzi

+4 głosów
odpowiedź 3 grudnia 2017 przez Tomek Sochacki Ekspert (227,490 p.)
wybrane 3 grudnia 2017 przez Krzysio4224
 
Najlepsza

Polecam lekturę TEGO lub wpisz sobie po prostu w google interfejsy i klasy abstrakcyjne. Generalnie to proponuję abyś poczytał trochę teorii o OOP i szybko załapiesz co i jak.

+2 głosów
odpowiedź 4 grudnia 2017 przez event15 Szeryf (93,790 p.)
https://sjp.pwn.pl/sjp/interfejs;2561771.html

«zasady łączenia ze sobą i współpracy dwóch różnych urządzeń lub programów; też: urządzenie lub program realizujące te zasady»

Dwa programy mają swój zestaw metod, które pozwalają otrzymywać jakieś wyniki. Dajmy na to, Facebook ma swoje API (Application Programming Interface) - czyli zbiór metod i funkcjonalności które są udostępnione dla programistów, tak aby mogli korzystać za pomocą napisanego przez siebie programu z ich aplikacji. Niech to będzie wysłanie posta na tablicy. To, co udostępnia facebook to jest publiczny interfejs. Masz dostęp tylko do nazw metod, wiesz jakie parametry są potrzebne do ich użycia i jakich odpowiedzi od strony facebooka możesz się spodziewać. Tak samo Ty możesz sobie stworzyć swój interfejs do swojej aplikacji. Ktoś już Ci podał do jakiegoś tutoriala link.

Interfejs jest pewnego rodzaju kontraktem między twórcami aplikacji a programistami chcącymi korzystać z niej (nie posiadając jej kodu źródłowego). Kontrakt ten zawiera w sobie informacje na temat wejścia i wyjścia. To forma zachowania ładu i porządku. Poza tym wiąże się z wieloma dobrymi praktykami i wzorcami.
+1 głos
odpowiedź 4 grudnia 2017 przez Crash182 Gaduła (3,600 p.)
edycja 4 grudnia 2017 przez Crash182
Mysle ze najlepiej bedzie wyjasnic to na przykladach, gdyz interfejsy to niby dosc prosty temat ale zajelo mi troche czasu zanim naprawde zaczalem dostrzegac korzysci z uzywania ich.

1. "If w lepszym wydaniu" - kiedys mialem za zadanie zbudowac mechanizm ktory pomoze wielkiej korporacji zatrudniajacej kilka tysiecy pracownikow w rekrutacji i znajdywaniu odpowiednich osob na konkretne stanowisko. Kazdy pracownik mial swoj wlasny profil na ktorym mogl miedzy innymi deklarowac jakie umiejetnosci posiada a inni pracownicy mogli to potwierdzac "lajkujac" jego umiejetnosci. Kazda posada miala swoj profil na ktorym mozna bylo dowiedziec sie o zakresie obowiazkow i wymaganych umiejetnosciach waznych w roznym stopniu. Rekruter mogl wejsc na dany profil a system skanowal, kalkulowal i dopasowywal ludzi do tej posady. W zaleznosci od profilu i jeszcze kilku innych rzeczy, kalkulacja przebiegala w inny sposob. Mozna byloby nawalic mnostwo IFow i ogarnac temat w malo elegancki sposob. Mozna tez to zrobic inaczej. Stworzylem sobie prosty interfejs IScoringSystem z jedna metoda Calculate. Nastepnie stworzylem kilka klas implementujacych ten interfejs ktore robily obliczenia w rozny sposob w zalesnosci od typu profilu. Robiac to w ten sposob, kazda logika jest odseparowana do innej klasy, jesli zajdzie potrzeba dodania kolejnego przypadku to po prostu dodam nowa klase z implementacja, zwroc uwage na to ze dzieki odseparowaniu, dodajac nowa logike, nie musze dotykac istniejacych klas czyli przestrzegana jest druga zasada SOLID. Polecam o nich poczytac.

2. Moduly ktore maja jakies zaleznosci, powinny zalezec od abstrakcji (interface) a nie od konkretnej implementacji. Interface to jest cos w rodzaju kontraktu pomiedzy klasami. Zalozmy ze w swojej aplikacji masz jakis serwis ktory pobiera cos z bazy danych, robi jakies obliczenia i wysyla je do UI. Serwis nie powinien sam pobierac danych, powinien miec modul pod spodem np. repozytorium ktore jest odpowiedzialne TYLKO za gadanie z baza danych (Single Responsibility) Uzywajac interface pomiedzy nimi, jedyna zaleznosc jaka ma serwis to to zeby mu podac jakas klase ktora implementuje ta zaleznosc (wypelnia kontrakt) - nie obchodzi go w jaki sposob dane sa pobierane z bazy danych, moze to byc jakis ORM albo nawet czysty ADO z np stored procedure. Nie ma to dla serwisu zadnego znaczenia.

3. Lubie tez bardzo interfejsy za to ze dzieki nim moge bardzo fajnie rozdzielac prace w zespole. Np mam projekt w ktorym potrzebuje zapisac produkt, wyswietlic wszystkie produkty, wyswietlic produkt po ID. Robie interface IProductRepository z 3 metodami Create, GetAll, GetById a nastepnie prosze kogos o zaimplementowanie go. Ja w tym czasie moge budowac wyzszy modul ktory bedzie zalezny od tego wlasnie interfejsu ale nie bardzo mnie obchodzi w jakis sposob zostanie on zaimplementowany.

4. Wyobraz sobie zespol budujacy gre komputerowa. Pojawia sie problem zeby gra chodzila na kazdej mozliwej konfiguracji komputera. Tworzy sie warstwe abstrakcji odpowiedzialna np za renderowanie grafiki a pozniej rozne implemenracje dla danej konfiguracji. Wyzszy modul ma gdzies logike wyswietlania, on jest tylko zalezny od interfejsu do wyswietlania grafiki.

Mam nadzieje ze dalem troche swiatla na ten temat. Pamieraj jednak ze (przynajmniej wedlug mnie) interfejsy przydaja sie w wiekszych projektach, albo takich gdzie jest plan ze beda rozwijane przez kilka dobrych lat, wiec beda ciagle rozbudowywane i ulepszane. Interfejsy wtedy beda nie raz ratowac Ci zycie i kod bedzie znacznie latwiejszy do ogarniecia. Jesli natomiast robisz cos bardzo malego , sam badz w parze z kolega, czesto interfejsy dodaja tylko niepotrzebnego szumu. Trzeba uzywac ich madrze i tylko jesli zauwazysz ze jest taka potrzeba w przeciwnym wypadku jest to sztuka dla sztuki czyli tzw over engineering.

 

Pozdrawiam serdecznie
komentarz 4 grudnia 2017 przez Krzysio4224 Obywatel (1,690 p.)
Dziękuję za odpowiedź, trochę bardziej mi się rozjaśniło
komentarz 4 grudnia 2017 przez event15 Szeryf (93,790 p.)
Trochę koloryzujesz. Interfejsy to powszechna rzecz w programowaniu obiektowym i wcale nie są po to by ratować komuś życie. Wcale nie jest to wymagane w większych projektach. Przecież to zwykła sktruktura w programie porządkująca kod. Pamiętajmy, że sama idea programowania obiektowego jest stworzona dla ludzi. Maszyny i tak tego nie rozumieją ;)

Podobne pytania

0 głosów
1 odpowiedź 228 wizyt
0 głosów
2 odpowiedzi 236 wizyt
pytanie zadane 9 października 2019 w C i C++ przez torelq Nowicjusz (190 p.)
0 głosów
3 odpowiedzi 711 wizyt

93,460 zapytań

142,454 odpowiedzi

322,724 komentarzy

62,838 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...