Java / Spring - Interfejsy programistyczne

Spisie treści
Jest to trzecia część serii samouczków skupiających się na omówieniu podstawowych tematów języka Java, aby przygotować czytelnika do korzystania ze Spring Framework. Pierwsza część tej serii samouczków jest dostępna tutaj, a druga część jest dostępna tutaj. W tym samouczku będziemy rozmawiać o tym, czym są interfejsy, czym są interfejsy programistyczne, jakie są jego zalety i jak to ma się do Spring Framework.
Widzieliśmy już koncepcje dziedziczenia i polimorfizmu, a interfejsy są rodzajem klasy Java, która charakteryzuje się reprezentacją określonej funkcjonalności. W swojej najpowszechniejszej formie interfejsy są klasą złożoną z metod bez implementacji.
 interfejs Drawable {public void draw (); public void wybierzKolor (kolor ciągu); } 

Interfejsy są zawsze publiczne i abstrakcyjne, niezależnie od tego, czy ustawisz modyfikatory, czy nie i reprezentują sposób, w jaki inne obiekty wchodzą w interakcję z obiektem, który je implementuje. Może to wydawać się skomplikowane, ale jest proste, kiedy klasa implementuje interfejs, jest zmuszona do nadania treści odpowiednim metodom. Oznacza to, że dopóki obiekt implementuje interfejs, możesz być całkowicie pewien, że ten obiekt posiada metody odpowiadające wspomnianemu interfejsowi.
W Javie interfejsy są implementowane za pomocą słowa kluczowego „implements”, a klasa może zaimplementować jeden lub więcej interfejsów, ale jest zmuszona do przeciążenia metod odpowiadających każdemu interfejsowi bez wyjątku, w przeciwnym razie kompilator zgłosi błąd.
 public class Square implementuje Drawable {public String borderColor; public String kolor wypełnienia; publiczne int wysokie; public int szerokość; @Override public void draw () {System.out.println ("Kwadrat jest rysowany z szerokością" + szerokość + ", wysokość" + wysokość + "i kolor" + kolor wypełnienia); } @Override public void wybierzKolor (Kolor ciągu) {kolor wypełnienia = kolor; }} 

 public class Line implementuje Drawable {public String strokecolor; długi ciąg publiczny; @Override public void draw () {System.out.println ("Narysuj linię" + długa); } @Override public void wybierzKolor (Kolor ciągu) {kolor obrysu = kolor; }} 

W tym przypadku interfejs pozwala bez problemu manipulować dowolną liczbą Obiektów korzystając z koncepcji polimorfizmu, którą widzieliśmy w drugiej części i te obiekty nie muszą być wewnętrznie powiązane ze sobą poza sposobem, w jaki inne klasy oddziałują na siebie z nimi. W przypadku naszego przykładu możesz później mieć pięciokąt, krajobraz, a nawet obiekty ArtWork, które implementują interfejs Drawable i wszystkie mogą być obsługiwane przez dowolną klasę, która może manipulować interfejsem Drawable.
 import java.awt.Color; import java.util.*; public class DrawThings {// Ta klasa generuje losowo rysowalne obiekty i rysuje je w losowych kolorach public static void main (String [] args) {List l = new ArrayList (); for (int i = 0; i0.5) {l.add (nowa linia ()); } else {l.add (nowy kwadrat ()); }} dla (Drawable d: l) {float H, S, B; H = (zmiennoprzecinkowa) Matematyka.losowa (); S = (zmiennoprzecinkowa) Matematyka.losowa (); B = (zmiennoprzecinkowa) Matematyka.losowa (); Kolor c = Kolor.getHSBKolor (H, S, B); d.chooseColor (String.valueOf (c)); d. remis (); }}} 

Jak zobaczysz w przykładzie, główną metodę można podzielić na 2 główne metody, tę, która wypełnia listę obiektów do rysowania i tę, która rysuje obiekty z listy. Zapraszam do skorzystania z tych klas i zobaczenia, jak się zachowują, zanim przejdziemy do następnej sekcji, w której zobaczymy, dlaczego warto zaprogramować interfejs.
W końcu interfejs jest taki sam, jak jego prawdziwy odpowiednik, klawiatura i mysz są interfejsami, za pomocą których wchodzisz w interakcję z komputerem, wewnętrzne szczegóły dotyczące tego, jak wykonywane są takie rzeczy, jak „Kliknij” lub „Naciśnij klawisz Esc”. interfejs do twojego komputera jest przed tobą ukryty i nie jest ci potrzebny. Liczy się tylko to, że możesz nacisnąć klawisz Esc i kliknąć za pomocą tego interfejsu.
Po sprawdzeniu, czym jest interfejs, mam nadzieję, że zrozumiesz, jak ważne może być jego zaprogramowanie. Zasadniczo skupiasz się na tworzeniu programów, myśląc o interfejsie, którego będziesz używać, a nie o obiekcie, który zostanie Ci przekazany jako parametr. W przypadku przykładu, który do tej pory obsługiwaliśmy, można go przepisać w następujący sposób:
 import java.awt.Color; import java.util.*; public class DrawThings {// Ta klasa generuje losowo rysowalne obiekty i rysuje je w losowych kolorach public static void main (String [] args) {List l = new ArrayList (); wypełnićListę(l); Lista losowań (l); } public static void fillList (Lista l) {for (int i = 0; i0.5) {l.add (new Line ()); } else {l.add (nowy kwadrat ()); }}} public static void drawList (Lista l) {for (Drawable d: l) {float H, S, B; H = (zmiennoprzecinkowa) Matematyka.losowa (); S = (zmiennoprzecinkowa) Matematyka.losowa (); B = (zmiennoprzecinkowa) Matematyka.losowa (); Kolor c = Kolor.getHSBKolor (H, S, B); d.chooseColor (String.valueOf (c)); d. remis (); }}} 

Oczywiście rozdzieliłem tylko części głównej metody na 2 metody podrzędne, ale piękno tego polega na tym, że te 2 metody zachowują niezależność od siebie i zachowują niezależność od implementacji interfejsu Drawable. Gdybym chciał zmienić jedną z 2 metod, druga nie zostałaby naruszona w najmniejszym stopniu, gdyby pojawiły się implementacje Pentagonu i ArtWork, można by je dodać w procesie tworzenia metody fillList (List l) oraz drawList ( List) l) nie wymagałby żadnych zmian, ponieważ został zaprogramowany w interfejsie.
+ WażneChodzi o to, że obie metody mogą należeć do różnych klas, mogą być obsługiwane w różnych środowiskach i nawet nigdy nie mogą wiedzieć, jaki obiekt naprawdę obsługują, ale dopóki implementują interfejs Drawable, będą mogli nim manipulować i będą być w stanie wykonać 2 metody powiązane z tym interfejsem.
Wiem, że w tej chwili wydaje się to strasznie skomplikowane, ale później zobaczymy, jak Spring radzi sobie ze wszystkim, co zostało zaprogramowane w interfejsie, a nawet zobaczymy, jak programowanie aspektowe i zrozumienie tego bardzo nam pomoże zrozumieć, jak działa Spring.
Mam nadzieję, że będziemy kontynuować te tutoriale tydzień po tygodniu, nie zapomnij zostawić komentarzy do następnego razu!Podobał Ci się i pomógł ten samouczek?Możesz nagrodzić autora, naciskając ten przycisk, aby dać mu pozytywny punkt
wave wave wave wave wave