Hej,
w tym poście chciałbym omówić pojęcie intrfejsu(interface) w Javie.
Jeżeli nie widziałeś pozostałych postów, to zapraszam tutaj
Pomyślmy sobie o interfejsie jako coś, co jest widoczne na zewnątrz. Weźmy sobie na przykład automat do kupowania napojów. Co tu może być takim interfejsem? No bo przecież nie bierzemy sobie wszystkiego sami z automatu, tylko używamy interfejsu automatu w celu kupienia danego przedmiotu.
Czyli w automacie mamy interfejs jako pewne przyciski, miejsce do wrzucania monet oraz mały ekranik LCD.
Oczywiście sam interfejs automatu do napojów nic nie robi. Musi być on "zaimplementowany", czyli wykorzystany w pewnym "obiekcie".
Tak samo jest z interfejsem w programowaniu. Tworzymy pewien interfejs z nagłówkami metod. Następnie implementuje(podłączamy interfejs do klasy) interfejs do klasy. Przy implementacji, IDE wymusza na programiście stworzenie ustalonych metod z interfejsu i wykonanie pewnych instrukcji.
Dzięki temu, chcąc używać "zagwarantowanych" metod, nawet nie musimy znać ich nazw klas, tylko ich interfejs.
Np. każdy kształt ma pewne pole, prostokąt ma pole, okrąg ma pole, trójkąt ma pole.
Stosując interfejs kształt, możemy powiedzieć, że chcemy pole jakiegoś kształtu. Nie interesuje nas co to za kształt, tylko interesuje nas pole jakie zajmuje. Dzięki takiemu interfejsowi możemy stworzyć tablicę obiektów klas implementujących jakiś interfejs. To znaczy, że nie skupiamy się na typie poszczególnego obiektu, tylko na jego wspólnych właściwościach tj. każda figura geometryczna ma pole.
Przedstawię teraz moje powyższe rozumowanie w kodzie:
Zacznijmy od prostego interfejsu:
interface Shape {
float calculateField();
}
a teraz implementacja interfejsu dla prostokątu:
public class Rectangle implements Shape {
private float a;
private float b;
public Triangle(float a, float b) {
this.a = a;
this.b = b;
}
public float calculateField() {
return a*b;
}
}
tutaj będzie implementacja interfejsu dla trójkąta:
public class Triangle implements Shape {
private float a;
private float h;
public Triangle(float a, float h) {
this.a = a;
this.h = h;
}
public float calculateField() {
return (a*h)/2;
}
}
A tutaj jest przykładowe zastosowanie interfejsów:
public class Main {
public static void main(String[] args) {
Shape[] shapes = new Shape[2];
shapes[0] = new Square(5,5);
shapes[1] = new Triangle(5,10);
float sumOfFields = 0;
for(int i = 0; i < 2; i++) {
sumOfFields += shapes[i].calculateField();
}
System.out.println("Suma pól to " + sumOfFields);
}
}
W zastosowaniu interfejsu Shape, jest kawałek kodu, gdzie po wrzuceniu obiektów do tablicy, tracimy szczegóły związane z wrzuconymi obiektami.
Oczywiście te szczegóły można odzyskać poprzez użycie instanceof oraz castowania, ale to temat na inny post.
Mam świadomość, że post może być mało zrozumiały, ale nie jest prosto pisać na tematy abstrakcyjne. Dlatego poniżej dorzuciłem oficjalne poradniki ze strony Oracle (Firma, która rozwija Javę)
Po sesji chciałbym się wziąć za programowanie, ale póki co nie mam czasu nawet się wyspać :D
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Polecam się w to bawić. Mogę z czasem też dodawać poradniki związane z tworzeniem jakiś prostych programów. Chociażby takie, gdzie wykonuje się coś używając danych z blockchainu steem. Bo uczyć się najlepiej z czymś co nas interesuje. W tym przypadku może to być steemit.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit