Obsah
Toto je třetí část série tutoriálů zaměřených na zopakování základních témat jazyka Java a přípravu čtenáře na používání Spring Framework. První část této série tutoriálů lze získat zde a druhou část zde. V tomto tutoriálu budeme hovořit o tom, co jsou to rozhraní, co je programovací rozhraní, jeho výhody a jak souvisí s Spring Framework.Už jsme viděli koncepty dědičnosti a polymorfismu a rozhraní jsou typem třídy Java, který se vyznačuje reprezentací určité funkce. Ve své nejběžnější podobě jsou rozhraní třídou tvořenou metodami bez implementace.
interface Drawable {public void draw (); public void chooseColor (String color); }
Rozhraní jsou vždy veřejná a abstraktní bez ohledu na to, zda nastavíte modifikátory nebo ne, a představují způsob, jakým ostatní objekty interagují s objektem, který je implementuje. Může to znít složitě, ale je to jednoduché, když třída implementuje rozhraní, je nucena dát tělo odpovídajícím metodám. To znamená, že pokud objekt implementuje rozhraní, můžete si být zcela jisti, že uvedený objekt má metody odpovídající uvedenému rozhraní.
V Javě jsou rozhraní implementována pomocí klíčového slova „implement“ a třída může implementovat jedno nebo více rozhraní, ale je nucena přetížit metody odpovídající každému rozhraní bez výjimky nebo kompilátor vyvolá chybu.
public class Square implementuje Drawable {public String borderColor; public String fillcolor; public int high; public int width; @Override public void draw () {System.out.println ("Čtverec je nakreslen o šířce" + šířka + ", výška" + výška + "a barva" + fillcolor); } @Override public void chooseColor (String color) {fillcolor = color; }}
public class Line implementuje Drawable {public String strokecolor; dlouhý veřejný řetězec; @Override public void draw () {System.out.println ("Nakreslete čáru" + dlouhý); } @Override public void chooseColor (String color) {strokecolor = color; }}
V tomto případě vám rozhraní umožňuje bez problémů manipulovat s libovolným počtem objektů pomocí konceptu polymorfismu, který jsme viděli ve druhé části, a tyto objekty spolu nemusí být vnitřně příbuzné, kromě způsobu, jakým interagují jiné třídy s nimi. V případě našeho příkladu byste později mohli mít objekty typu pětiúhelník, krajina nebo dokonce ArtWork, které implementují rozhraní Drawable, a všechny by mohla zpracovávat jakákoli třída, která může manipulovat s rozhraním Drawable.
import java.awt.Color; import java.util. *; public class DrawThings {// Tato třída generuje náhodně kreslitelné objekty a kreslí je v náhodných barvách public static void main (String [] args) {List l = new ArrayList (); pro (int i = 0; i0.5) {l.add (nový řádek ()); } else {l.add (new Square ()); }} for (Drawable d: l) {float H, S, B; H = (float) Math.random (); S = (float) Math.random (); B = (float) Math.random (); Barva c = Color.getHSBColor (H, S, ; d.chooseColor (String.valueOf (c)); d. draw (); }}}
Jak uvidíte v příkladu, hlavní metodu lze rozdělit na 2 hlavní metody, tu, která vyplňuje Seznam nakreslených objektů a tu, která kreslí objekty do seznamu. Zvu vás k použití těchto tříd a uvidíme, jak se chovají, než přejdeme k další části, kde uvidíme, proč možná budete chtít rozhraní naprogramovat.
Nakonec je rozhraní stejné jako jeho skutečný protějšek, klávesnice a myš jsou rozhraní, se kterými komunikujete s počítačem, interní podrobnosti o tom, jak se věci jako „Kliknutí“ nebo „Stiskněte klávesu Esc“ provádějí z rozhraní k vašemu počítači je před vámi skryto a není pro vás nutné. Jediná věc, na které záleží, je, že můžete v tomto rozhraní stisknout klávesu Esc a kliknout.
Jakmile zkontrolujete, co je to rozhraní, doufám, že pochopíte, jak důležité může být jeho naprogramování. V zásadě se soustředíte na to, abyste při vytváření programů mysleli na rozhraní, které budete používat, a ne tolik na objekt, který by vám byl předán jako parametr. V případě příkladu, který jsme dosud zpracovali, jej lze přepsat následujícím způsobem:
import java.awt.Color; import java.util. *; public class DrawThings {// Tato třída generuje náhodně kreslitelné objekty a kreslí je v náhodných barvách public static void main (String [] args) {List l = new ArrayList (); fillList (l); drawList (l); } public static void fillList (Seznam l) {for (int i = 0; i0.5) {l.add (new Line ()); } else {l.add (nové Square ()); }}} 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 (); Barva c = Color.getHSBColor (H, S, ; d.chooseColor (String.valueOf (c)); d. draw (); }}}
Jistě jsem pouze rozdělil části hlavní metody na 2 podřízené metody, ale krása na tom je, že tyto 2 metody udržují vzájemnou nezávislost a zachovávají nezávislost na implementacích rozhraní Drawable. Pokud bych chtěl změnit jednu ze dvou metod, druhá by nebyla nijak ovlivněna, pokud by se objevily implementace Pentagonu a ArtWorku, mohli byste je přidat v procesu vytváření metody fillList (List l) a drawList ( List). L) nevyžaduje žádné změny, protože byl naprogramován do rozhraní.
+ DůležitéJe to tak, že obě metody mohou patřit do různých tříd, mohou být zpracovávány v různých prostředích a dokonce nikdy nemohou vědět, jaký objekt skutečně zpracovávají, ale pokud implementují rozhraní Drawable, budou s ním moci manipulovat a budou být schopen spustit 2 metody, které jsou spojeny s tímto rozhraním.
Vím, že to v tuto chvíli vypadá strašně komplikovaně, ale později uvidíme, jak Spring zvládne vše naprogramované na rozhraní, a dokonce uvidíme, jak programování a porozumění tomuto aspektu nám hodně pomůže pochopit, jak Spring funguje.
Doufám, že v těchto cvičeních budeme pokračovat týden co týden, nezapomeňte zanechat své komentáře až příště!Líbil se vám tento návod a pomohl mu?Autora můžete odměnit stisknutím tohoto tlačítka, čímž mu dáte kladný bod