what is abstraction java learn with examples
Ten samouczek wyjaśnia, czym jest abstrakcja w Javie, wraz z przykładami programowania. Dowiesz się również, czym jest klasa abstrakcyjna i dlaczego jest używana:
W tej serii JAVA omówimy ważne cechy programowania obiektowego (OOP), które są również znane jako cztery filary, tj. Abstrakcja, enkapsulacja, dziedziczenie i polimorfizm.
Pierwszym filarem OOP jest „Abstrakcja”. „Abstrakcja to proces wybierania danych, aby pokazać użytkownikowi tylko istotne informacje”.
=> Zapoznaj się z podręcznikiem Java dla początkujących tutaj.
Czego się nauczysz:
- Abstrakcja w OOP
- Co to jest abstrakcja w Javie
- Różnica między abstrakcją a hermetyzacją
- Wniosek
Abstrakcja w OOP
Mówiąc prościej, abstrakcja „wyświetla” tylko odpowiednie atrybuty obiektów i „ukrywa” niepotrzebne szczegóły.
Na przykład, kiedy prowadzimy samochód, martwimy się tylko o prowadzenie samochodu, takie jak uruchamianie / zatrzymywanie samochodu, przyspieszanie / hamowanie, itp. Nie przejmujemy się tym, jak rzeczywisty mechanizm start / stop lub proces przyspieszania / hamowania działa wewnątrz. Po prostu nie interesują nas te szczegóły.
To, co nas niepokoi, to „abstrakcyjne” spojrzenie na te operacje, które pomogą nam pchać samochód do przodu i dotrzeć do celu. To jest prosty przykład abstrakcji.
W ten sposób samochód posiada wszystkie mechanizmy i procesy, ale z perspektywy użytkownika końcowego, czyli z perspektywy kierowcy samochodu, będzie on zainteresowany tylko abstrakcyjnym spojrzeniem na te procesy.
Abstrakcja zmniejsza wysiłki związane z programowaniem, a tym samym zmniejsza złożoność. Użytkownik końcowy korzystający z aplikacji nie musi martwić się o sposób implementacji określonej funkcji. Może po prostu korzystać z funkcji zgodnie z wymaganiami.
Zatem w abstrakcji zajmujemy się ideami, a nie wydarzeniami. Oznacza to, że ukrywamy szczegóły implementacji przed użytkownikiem i udostępniamy tylko funkcjonalność użytkownikowi końcowemu. Dzięki temu użytkownik będzie wiedział tylko „co robi”, a nie „jak to robi”.
Abstrakcja w OOP może być dwojakiego rodzaju.
1) Abstrakcja danych
W abstrakcji danych najczęściej tworzymy złożone typy danych i ukrywamy ich implementację. Ujawniamy tylko operacje do manipulowania tymi typami danych bez wchodzenia w szczegóły ich implementacji.
Jedną z zalet tego podejścia jest to, że możemy zmienić implementację w dowolnym momencie bez zmiany zachowania, które jest widoczne dla użytkownika.
# 2) Abstrakcja kontrolna
Abstrakcja kontroli zbiera wszystkie instrukcje sterujące, które są częścią aplikacji i uwidacznia je jako jednostkę. Ta funkcja jest używana, gdy musimy wykonać operację za pomocą tej jednostki sterującej.
Abstrakcja sterowania stanowi główną jednostkę programowania strukturalnego, a za pomocą abstrakcji sterowania możemy definiować proste funkcje w złożonych strukturach.
Co to jest abstrakcja w Javie
Ponieważ Java jest językiem OOP, abstrakcja może być postrzegana jako jedna z ważnych cech i elementów składowych języka Java. W Javie abstrakcja jest implementowana przy użyciu klasy abstrakcyjnej i interfejsu.
Jak więc zaimplementować abstrakcję w Javie? Java udostępnia modyfikator „abstract” bez dostępu do implementacji abstrakcji. Ten abstrakcyjny modyfikator może być używany z klasami i metodami, ale nie ze zmiennymi.
Interfejs zapewnia pełną abstrakcję, tj. Udostępnia tylko prototypy metod, a nie ich implementację. Klasa abstrakcyjna zapewnia częściową abstrakcję, w której co najmniej jedna metoda nie powinna być implementowana.
W tym samouczku szczegółowo omówimy abstrakcję z klasami abstrakcyjnymi. Szczegółowo zbadamy interfejsy w naszych kolejnych samouczkach.
Przykład abstrakcji języka Java
Rozważmy poniższy przykład.
//abstract class abstract class Car{ abstract void accelerate(); } //concrete class class Suzuki extends Car{ void accelerate(){ System.out.println('Suzuki::accelerate'); } } class Main{ public static void main(String args()){ Car obj = new Suzuki(); //Car object =>contents of Suzuki obj.accelerate(); //call the method } }
Wynik:
Podany powyżej prosty przykład abstrakcji ma klasę Car. W tej klasie Car mamy abstrakcyjną metodę przyspieszania (). Następnie dziedziczymy tę klasę w klasie Suzuki. W klasie Suzuki wdrażamy metodę przyspieszenia.
Powyższy przykład po prostu pokazuje sposób, w jaki klasa abstrakcyjna jest definiowana, dziedziczona, a następnie używana w programie.
Co to jest klasa abstrakcyjna języka Java
Wspomnieliśmy już, że Java implementuje abstrakcję za pomocą abstrakcyjnych klas i interfejsów. Najpierw przyjrzyjmy się klasie abstrakcyjnej.
Klasa abstrakcyjna może być zdefiniowana jako klasa zadeklarowana za pomocą słowa kluczowego „abstract” i ma ograniczenie, że nie można jej utworzyć.
Klasa abstrakcyjna może, ale nie musi, mieć jakąkolwiek metodę abstrakcyjną (metodę bez implementacji). Jeśli chodzi o JVM, klasa abstrakcyjna jest niekompletną klasą, która nie ma pełnego zachowania.
Ogólna składnia klasy abstrakcyjnej jest podana poniżej:
abstract class { public abstract void abstractMethod(); public void normalMethod() { //method body } }
Jak pokazano w składni powyższej klasy abstrakcyjnej, w klasie abstrakcyjnej możemy mieć zarówno metody abstrakcyjne, jak i nieabstrakcyjne. Słowo kluczowe „abstract” poprzedza deklarację klasy.
Krótko mówiąc, klasę abstrakcyjną można opisać, jak pokazano poniżej.
Metoda abstrakcyjna w Javie
Metoda abstrakcyjna to metoda poprzedzona słowem kluczowym „abstract” bez żadnej implementacji. Metoda abstrakcyjna jest zadeklarowana wewnątrz klasy abstrakcyjnej.
Metoda abstrakcyjna to taka, która powoduje, że klasa jest niekompletna, ponieważ nie ma implementacji. Stąd, kiedy włączymy abstrakcyjną metodę do klasy, naturalnie klasa stanie się niekompletna.
Możemy użyć metody abstrakcyjnej, implementując ją w podklasie, tj.klasa dziedziczy klasę abstrakcyjną, a następnie implementuje lub dostarcza kod dla wszystkich metod abstrakcyjnych zadeklarowanych w klasie abstrakcyjnej, zastępując je.
W związku z tym obowiązkowe staje się zastąpienie metody abstrakcyjnej w podklasie. Jeśli metoda abstrakcyjna nie jest zaimplementowana również w podklasie, to musimy zadeklarować podklasę również jako „abstrakcyjną”.
Ogólna deklaracja metody abstrakcyjnej to:
abstrakcyjny unieważnić nazwa metody (lista_parametrów);
Pisząc metodę abstrakcyjną należy pamiętać o następujących zasadach:
- Klasa zawierająca jedną lub więcej metod abstrakcyjnych jest klasą abstrakcyjną.
- Ze słowem kluczowym abstract nie należy używać innych słów kluczowych.
Dlatego poniższe kombinacje są niedozwolone w Javie.
- finał
- abstrakcyjny rodzimy
- abstrakcyjne statyczne
- streszczenie prywatne
- streszczenie zsynchronizowane
- streszczenie ścisłefp
Zaimplementujmy przykład klasy abstrakcyjnej i metody abstrakcyjnej.
jak zrobić kopię tablicy java
//abstract class abstract class Bank{ abstract int getInterestRate(); } //concrete class class Citi extends Bank{ int getInterestRate(){return 7;} } //concrete class class HSBC extends Bank{ int getInterestRate(){return 6;} } class Main{ public static void main(String args()){ Bank b; b = new Citi (); // concrete class object System.out.println('Citi Rate of Interest is: '+b.getInterestRate()+'%'); b = new HSBC (); // concrete class object System.out.println('HSBC Rate of Interest is: '+b.getInterestRate()+'%'); } }
Wynik:
W powyższym przykładzie mamy klasę Bank. W tej klasie mamy abstrakcyjną metodę getInterestRate (). Następnie deklarujemy dwie klasy - ICICI i BOI, które dziedziczą po klasie Bank. Obie te klasy implementują metodę getInterestRate (), zwracając odpowiednie stopy procentowe.
Następnie w metodzie głównej tworzymy obiekt banku. Po pierwsze, obiekt bankowy zawiera obiekt klasy ICICI i wyświetla stopę procentową. Następnie tworzony jest obiekt BOI, który wyświetla stopę procentową.
Możemy więc przyjąć, że klasa Bank to rodzaj szkicu lub struktury, która pozwala uzyskać oprocentowanie. Z tej struktury możemy stworzyć tyle konkretnych klas, ile chcemy, a następnie możemy uzyskać odpowiednie stopy procentowe dla każdego obiektu banku (jest to pokazane w głównej metodzie).
Jaki jest pożytek z klasy abstrakcyjnej w Javie
Dlaczego używamy klasy abstrakcyjnej, skoro w rzeczywistości nie ma ona własnej implementacji?
Wraz z odpowiedzią na powyższe pytanie zilustrujemy również, jak używać klasy abstrakcyjnej w poniższym przykładzie.
Rozważmy przykład pojazdów. Wiemy, że pojazdy mogą być różnego rodzaju. Możemy mieć samochody, skutery, rowery, motorowery, autobusy, itp. Chociaż istnieje wiele typów pojazdów, mają one pewne właściwości lub atrybuty, które są wspólne dla wszystkich pojazdów, niezależnie od ich typu.
Na przykład, każdy pojazd ma model, numer podwozia, kolor itp. Każdy z nich ma funkcje takie jak uruchamianie, zatrzymywanie, przyspieszanie, hamowanie itd. Teraz każdy pojazd będzie miał powyższe właściwości i metody, które są również wspólne dla pozostałych. Jednocześnie jako użytkownik pojazdu niektóre aspekty mogą nas nie interesować.
Na przykład, jeśli dana osoba prowadzi samochód, to co będzie jej zainteresować, to tylko uruchomienie i zatrzymanie pojazdu lub przyspieszenie lub zahamowanie pojazdu. Nie będzie zainteresowany tym, jak pojazd się uruchamia lub zatrzymuje. Interesuje nas tylko abstrakcyjne działanie funkcji, a nie ich szczegóły.
Jeśli chcemy przedstawić powyższy przykładowy system w aplikacji, to jak go zaprojektujemy? Przede wszystkim zaimplementujemy pewną abstrakcję. Teraz wiemy, że niektóre funkcje są wspólne, ale w zależności od modelu implementacja tych funkcji będzie inna.
Na początek deklarujemy abstrakcyjną klasę „Pojazd”.
Poniżej pokazaliśmy ten system:
Będziemy więc mieć abstrakcyjną klasę Vehicle i będzie konkretna klasa reprezentująca każdy model pojazdu. W celach ilustracyjnych wykorzystaliśmy tylko trzy modele, tj. Samochód, rower i skuter.
Poniżej podano hierarchię klas z powyższego systemu.
abstract class Vehicle{ abstract void start () ; abstract void stop (); abstract void accelerate (); abstract void brake (); } class Car extends Vehicle{ void start () { //code here…} void stop () { //code here…} void accelerate () { //code here…} void brake () { //code here…} } class Bike extends Vehicle{ void start () { //code here…} void stop () { //code here…} void accelerate () { //code here…} void brake () { //code here…} } class Scooter extends Vehicle{ void start () { //code here…} void stop () { //code here…} void accelerate () { //code here…} void brake () { //code here…} }
Będziemy więc mieć klasę abstrakcyjną Pojazd i trzy klasy Samochód, Rower i Skuter. Każda z tych klas rozszerzy klasę Vehicle i zastąpi każdą z metod abstrakcyjnych.
Tak więc ogólnie, ilekroć musimy przedstawić taki system, który ma wspólne metody lub operacje do przedstawienia, a następnie przedstawić użytkownikowi tylko zewnętrzną perspektywę, idziemy po abstrakcję. W rezultacie usuwamy typowe metody i przedstawiamy je jako metody abstrakcyjne i zbieramy te metody abstrakcyjne we wspólnej klasie abstrakcyjnej.
Gdy już mamy zarys systemu reprezentowanego jako klasa abstrakcyjna i operacje jako metody abstrakcyjne, możemy następnie wyprowadzić dowolną liczbę klas z danej klasy abstrakcyjnej i zastąpić metody abstrakcyjne, aby zaimplementować te operacje dla każdej klasy.
pl sql wywiad z programistą pytania i odpowiedzi
W ten sposób przydatne staje się zaprojektowanie systemu.
Klasa abstrakcyjna i interfejs
Widzieliśmy powyżej klasę abstrakcyjną. Interfejsy to kolejne bloki konstrukcyjne implementujące abstrakcję. Interfejsy to kontrakty, a klasy implementujące interfejs muszą honorować te kontrakty.
Kontrakty w interfejsach to nic innego jak metody, które nie są zaimplementowane. Wewnątrz interfejsów będziemy mieć tylko prototypy metod. Nie będzie jednej implementacji metod wewnątrz interfejsów.
Jeśli mamy deklarację interfejsu w następujący sposób:
public interface interfaceA{ void myInterfaceMethod (); }
Następnie każda klasa, która implementuje interfejs A, musi nadpisać „myInterfaceMethod”.
Jeśli w ogóle nie nadpisujemy metody w klasie, to ta klasa jest reprezentowana jako abstrakcyjna.
abstract class TestClass implements interfaceA{ // not a compulsion to override myInterfaceMethod. }
Później będziemy mieć osobny samouczek dotyczący interfejsu.
Następnie omówmy niektóre różnice między klasami abstrakcyjnymi a interfejsami w Javie.
Różnica między abstrakcyjną klasą a interfejsem
Klasa abstrakcyjna | Berło |
---|---|
Klasa abstrakcyjna może mieć prywatnych lub chronionych członków danych oprócz publicznych członków. | Członkowie interfejsu są domyślnie publiczne. |
Klasa abstrakcyjna może mieć metody abstrakcyjne i / lub nieabstrakcyjne. | Interfejs może mieć tylko metody abstrakcyjne. |
Streszczenie może, ale nie musi, zawierać końcowe zmienne. | Interfejsy mogą ostateczne zmienne jako zmienne domyślne. |
Klasa abstrakcyjna może mieć zmienne końcowe, statyczne, niestatyczne lub niekońcowe. | Interfejsy mogą mieć tylko końcowe i statyczne zmienne. |
Klasa abstrakcyjna może zapewnić implementację interfejsu. | Interfejsy nie mogą implementować klasy abstrakcyjnej. |
Klasa abstrakcyjna jest dziedziczona za pomocą słowa kluczowego „extends”. | Interfejs jest implementowany przy użyciu słowa kluczowego „implements”. |
Klasa abstrakcyjna może rozszerzać inne klasy lub implementować wiele interfejsów. | Interfejs może implementować tylko inny interfejs. |
Kiedy używać klasy abstrakcyjnej i interfejsu w Javie
Decyzję o tym, kiedy używać klasy abstrakcyjnej, a kiedy interfejsów w aplikacji Java, należy podjąć inteligentnie po dokładnym zrozumieniu problemu. Istnieją dwa aspekty, które musimy wziąć pod uwagę, jak pokazano poniżej.
Klasy abstrakcyjne z częściowym zachowaniem
Wiemy, że klasy abstrakcyjne mogą nie być całkowicie zaimplementowane w mniejszym stopniu. Mogą mieć częściowe zachowanie. Z drugiej strony interfejsy nie mają żadnej implementacji. Kiedy więc musimy wybierać między klasą abstrakcyjną a implementacją, musimy wziąć pod uwagę ten aspekt naszej aplikacji.
Oznacza to, że musimy najpierw zdecydować, czy projektowana przez nas aplikacja ma jakąś wspólną implementację częściową, którą możemy oddzielić w klasie abstrakcyjnej.
Na przykład, weź pod uwagę, że projektujemy aplikację internetową. W tym celu będziemy musieli użyć pewnych technologii internetowych, takich jak serwlet, REST API, itp. Teraz każda z tych technologii internetowych ma pewne techniki lub kroki, które mają zostać wdrożone niezależnie od aplikacji, którą rozwijamy. Następnie tworzymy naszą niestandardową aplikację.
W tym przypadku określony kod, który musi wykonać technologia sieciowa, można umieścić w klasie abstrakcyjnej. Czy możemy mieć do tego interfejs? Nie. Dzieje się tak, ponieważ interfejs nie może mieć implementacji.
Interfejsy objęte umową
Wiemy, że interfejsy mają kontrakty lub metody, które są jego częścią. Te metody to tylko prototypy. Musimy zaimplementować te interfejsy w klasie, a następnie nadpisać metody.
Rozważmy teraz interfejs Map w Java Collections Framework. Wiele klas, takich jak HashMap, TreeMap i HashTable itp., Implementuje ten interfejs. Każda z tych klas ma inną implementację. Nie mają żadnego typowego zachowania, które można by przedstawić w klasie abstrakcyjnej.
Więc co robimy, to projektujemy interfejs z prototypami metod, a następnie implementujemy każdą z klas.
W ten sposób powinniśmy odpowiednio zważyć każdy czynnik, zanim wybierzemy pomiędzy abstrakcyjną klasą a interfejsem.
Różnica między abstrakcją a hermetyzacją
Omówmy niektóre różnice między abstrakcją a jeszcze jedną ważną cechą OOP, tj. Hermetyzacją.
Abstrakcja | Kapsułkowanie |
---|---|
Proces pozyskiwania i abstrakcji informacji | Proces wiązania informacji. |
Technika abstrakcji jest na poziomie projektu lub interfejsu. | Mechanizm hermetyzacji jest na poziomie implementacji. |
Abstrakcja ukrywa szczegóły. | Hermetyzacja wiąże informacje w jednej jednostce, zapewniając bezpieczeństwo informacji. |
Abstrakcja jest implementowana przy użyciu abstrakcyjnych klas i interfejsów. | Modyfikatory dostępu, a mianowicie publiczne, prywatne i chronione i domyślne odgrywają rolę w hermetyzacji. |
W skrócie, jedyny abstrakcyjny widok jest prezentowany użytkownikowi, podczas gdy złożone i szczegółowe dane są ukryte przed użytkownikiem. | W hermetyzacji dane są pakowane jako jednostka i mogą być chronione lub udostępniane za pomocą modyfikatorów dostępu oraz metod pobierających i ustawiających. |
Często Zadawane Pytania
P # 1) Czy ukrywanie abstrakcji i danych to to samo?
Odpowiedź: Nie, abstrakcja i ukrywanie danych to nie to samo. Ale obie są ważnymi cechami programowania obiektowego. Podczas gdy abstrakcja jest procesem ukrywania szczegółów tła, ukrywanie danych jest techniką izolowania danych przed bezpośrednim dostępem.
P # 2) Jakie są zalety abstrakcji?
Odpowiedź: Poniżej podano kilka zalet abstrakcji:
- Ukrywając szczegóły tła i udostępniając użytkownikowi tylko abstrakcyjny widok, abstrakcja sprawia, że kod jest prostszy i bardziej czytelny.
- Ponieważ abstrakcja zasłania niepotrzebne szczegóły, zmniejsza rozmiar kodu.
- Bez abstrakcji utrzymanie kodu może stać się złożone i trudne.
P # 3) Dlaczego abstrakcja jest tak ważna?
Odpowiedź: Abstrakcja pozwala nam ukryć szczegóły tła, które są ważne i mogą doprowadzić do chaosu, jeśli wyciekną na świat. Ukrywając szczegóły tła i udostępniając użytkownikowi tylko wymagany interfejs, abstrakcja upraszcza aplikacje.
Q # 4) Wyjaśnij abstrakcję na przykładzie czasu rzeczywistego.
Odpowiedź: Istnieje wiele przykładów abstrakcji w czasie rzeczywistym, w tym kształty geometryczne, pojazdy itp. Jeszcze innym przykładem jest ATM (Automated Teller Machine). Bankomat obsługuje takie operacje, jak wypłata gotówki, sprawdzenie salda, przekaz pieniężny itp. Nie wiemy jednak, jak te operacje działają wewnętrznie.
Otrzymujemy tylko monitor z interfejsem użytkownika do wybierania i wykonywania wymaganych operacji.
P # 5) Czy możemy osiągnąć abstrakcję bez enkapsulacji?
Odpowiedź: Abstrakcja chroni szczegóły implementacji, a hermetyzacja ukrywa szczegóły obiektu. Obiekt jest abstrakcyjną formą świata rzeczywistego, a jego szczegóły są ukryte za pomocą enkapsulacji. Dlatego do abstrakcji wymagana jest hermetyzacja.
Wniosek
W tym samouczku szczegółowo omówiliśmy abstrakcję w Javie. Abstrakcja to technika ukrywania niepotrzebnych szczegółów przed użytkownikiem. Użytkownik ma dostęp tylko do istotnych danych. Operacje pojazdów lub operacje bankomatów to klasyczne przykłady abstrakcji w prawdziwym świecie.
Kiedy korzystamy z bankomatu, jesteśmy zainteresowani jedynie wykonywaniem operacji, takich jak wypłata gotówki itp., Bez konieczności posiadania szczegółowych informacji o tym, jak dokładnie ta operacja jest wykonywana wewnętrznie.
Java zapewnia abstrakcję poprzez klasy abstrakcyjne i interfejsy. Podczas gdy interfejsy zapewniają 100% abstrakcji, klasy abstrakcyjne zapewniają częściową abstrakcję. Wyboru między interfejsami a klasami abstrakcyjnymi należy dokonać w zależności od aplikacji, która ma być tworzona, a także od tego, jakie informacje mają być udostępnione użytkownikowi.
Omówiliśmy również metody abstrakcyjne w tym samouczku oraz różnice między klasami abstrakcyjnymi i interfejsami.
=> Sprawdź WSZYSTKIE samouczki Java tutaj.
rekomendowane lektury
- Interfejs Java i samouczek klasy abstrakcyjnej z przykładami
- Klasa Java Integer i Java BigInteger z przykładami
- Samouczek klasy skanera Java z przykładami
- Co to jest wektor Java | Samouczek klasy wektorowej Java z przykładami
- Java Enum: samouczek wyliczania w języku Java z przykładami
- Podstawy języka Java: składnia języka Java, klasa języka Java i podstawowe pojęcia dotyczące języka Java
- Samouczek JAVA dla początkujących: ponad 100 praktycznych samouczków wideo Java
- Java Iterator: Naucz się używać iteratorów w Javie z przykładami