Sadržaj
Ovo je treći dio niza vodiča usmjerenih na pregled osnovnih tema jezika Java kako bi čitatelja pripremili za korištenje Spring Framework -a. Prvi dio ove serije vodiča možete preuzeti ovdje, a drugi dio ovdje. U ovom vodiču govorit ćemo o tome što su sučelja, što su programska sučelja, njegove prednosti i kako se odnosi na Spring Framework.Već smo vidjeli koncepte nasljeđivanja i polimorfizma, a sučelja su vrsta Java klase koju karakterizira predstavljanje određene funkcionalnosti. U svom najčešćem obliku sučelja su klasa sastavljena od metoda bez implementacije.
sučelje Drawable {public void draw (); public void chooseColor (Boja niza); }
Sučelja su uvijek javna i apstraktna bez obzira na to postavljate li modifikatore ili ne i predstavljaju način na koji drugi objekti stupaju u interakciju s objektom koji ih implementira. Možda zvuči komplicirano, ali je jednostavno, kada klasa implementira sučelje, prisiljena je dati tijelo odgovarajućim metodama. To znači da sve dok objekt implementira sučelje možete biti potpuno sigurni da spomenuti objekt ima metode koje odgovaraju spomenutom sučelju.
U Javi sučelja su implementirana s ključnom riječi "implements", a klasa može implementirati jedno ili više sučelja, ali je prisiljena preopteretiti metode koje odgovaraju svakom sučelju bez iznimke ili će prevoditelj baciti pogrešku.
javna klasa Square implementira Drawable {public String borderColor; javna popunjena boja za nizove; javni int visok; public int width; @Override public void draw () {System.out.println ("Kvadrat se iscrtava širinom" + širinom + ", visinom" + visinom + "i bojom" + ispuna boje); } @Override public void chooseColor (Boja niza) {fillcolor = color; }}
javna klasa Line implementira Drawable {public String strokecolor; dugi javni niz; @Override public void draw () {System.out.println ("Nacrtaj liniju od" + long); } @Override public void chooseColor (Boja niza) {strokecolor = color; }}
U ovom slučaju, sučelje vam omogućuje da bez problema manipulirate bilo kojim brojem objekata koristeći koncept polimorfizma koji smo vidjeli u drugom dijelu i ti objekti ne moraju biti međusobno povezani međusobno, osim po načinu na koji druge klase međusobno djeluju sa njima. U slučaju našeg primjera, kasnije biste mogli imati peterokutne, pejzažne ili čak ArtWork objekte koji implementiraju Drawable sučelje, a njima se može baviti bilo koja klasa koja može manipulirati Drawable sučeljem.
uvoz java.awt.Color; uvoz java.util. *; javna klasa DrawThings {// Ova klasa generira nasumično crtane objekte i crta ih u nasumičnim bojama public static void main (String [] args) {List l = new ArrayList (); for (int i = 0; i0.5) {l.add (novi redak ()); } else {l.add (novi kvadrat ()); }} za (Drawable d: l) {float H, S, B; H = (float) Math.random (); S = (float) Math.random (); B = (float) Math.random (); Boja c = Boja.getHSBCboja (H, S, ; d.chooseColor (String.valueOf (c)); d. draw (); }}}
Kao što ćete vidjeti u primjeru, glavna metoda može se podijeliti na 2 glavne metode, onu koja ispunjava Popis iscrtanih objekata i onu koja crta objekte na popisu. Pozivam vas da koristite ove klase i vidite kako se ponašaju prije nego prijeđete na sljedeći odjeljak gdje ćemo vidjeti zašto biste htjeli programirati sučelje.
Na kraju, sučelje je isto kao i njegov pravi kolega, vaša tipkovnica i miš su sučelje s kojim komunicirate s računalom, unutarnji detalji o tome kako se stvari poput "Klik" ili "Pritisnite tipku Esc" izvode iz sučelje vašeg računala skriveno je od vas i nije vam potrebno. Jedino što je važno je da pomoću tog sučelja možete pritisnuti tipku Esc i klik.
Nakon što ste pregledali što je sučelje, nadam se da možete shvatiti koliko može biti važno programirati ga. U osnovi se usredotočujete na stvaranje svojih programa razmišljajući o sučelju koje ćete koristiti, a ne toliko o objektu koji bi vam se proslijedio kao parametar. U slučaju primjera koji smo do sada obradili, može se prepisati na sljedeći način:
uvoz java.awt.Color; uvoz java.util. *; javna klasa DrawThings {// Ova klasa generira nasumično crtane objekte i crta ih u nasumičnim bojama public static void main (String [] args) {List l = new ArrayList (); fillList (l); drawList (l); } public static void fillList (List l) {for (int i = 0; i0.5) {l.add (new Line ()); } else {l.add (novi kvadrat ()); }}} public static void drawList (List l) {for (Drawable d: l) {float H, S, B; H = (float) Math.random (); S = (float) Math.random (); B = (float) Math.random (); Boja c = Boja.getHSBCboja (H, S, ; d.chooseColor (String.valueOf (c)); d. draw (); }}}
Svakako sam samo dijelio dijelove glavne metode u 2 podređene metode, ali ljepota je u tome što te 2 metode održavaju neovisnost jedna o drugoj i održavaju neovisnost o implementacijama Drawable sučelja. Da želim promijeniti jednu od 2 metode, druga ne bi bila ni najmanje pogođena, da se pojave implementacije Pentagona i ArtWorka, mogli biste ih dodati u procesu stvaranja metode fillList (List l) i drawList ( List). L) ne bi zahtijevale nikakve promjene jer je programirana u sučelju.
+ VažnoČini se da obje metode mogu pripadati različitim klasama, njima se može rukovati u različitim okruženjima i čak nikada ne mogu znati s kojim objektom doista rukuju, ali sve dok implementiraju Drawable sučelje moći će njime manipulirati i moći izvršiti 2 metode koje su povezane s tim sučeljem.
Znam da se u ovom trenutku čini užasno kompliciranim, ali kasnije ćemo vidjeti kako Spring rješava sve programirano na sučelju, pa ćemo čak vidjeti i kako će nam aspektno orijentirano programiranje i razumijevanje toga puno pomoći da razumijemo kako Spring funkcionira.
Nadam se da ćemo nastaviti s ovim vodičima iz tjedna u tjedan, ne zaboravite ostaviti svoje komentare do sljedećeg puta!Je li vam se svidio i pomogao ovaj vodič?Autor možete nagraditi pritiskom na ovaj gumb kako biste mu dali pozitivan bod