Abstracția în Java este procesul în care arătăm utilizatorului doar detalii/funcționalități esențiale. Detaliile neesențiale de implementare nu sunt afișate utilizatorului.
În acest articol, vom afla despre abstracție și ce înseamnă abstract.
Exemplu simplu pentru a înțelege abstracția:
Telecomanda televizorului este un excelent exemplu de abstractizare . Simplifică interacțiunea cu un televizor ascunzând complexitatea din spatele butoanelor și simbolurilor simple, făcându-l ușor fără a fi nevoie să înțelegeți detaliile tehnice ale modului în care funcționează televizorul.
Ce este abstractizarea în Java?
În Java, abstracția se realizează prin interfețe și clase abstracte . Putem realiza o abstractizare 100% folosind interfețe.
Abstracția datelor poate fi, de asemenea, definită ca procesul de identificare doar a caracteristicilor necesare ale unui obiect ignorând detaliile irelevante. Proprietățile și comportamentele unui obiect îl diferențiază de alte obiecte de tip similar și ajută, de asemenea, la clasificarea/gruparea obiectelor.
Abstracție Exemplu din viața reală:
Luați în considerare un exemplu din viața reală a unui bărbat care conduce o mașină. Bărbatul știe doar că apăsarea accelerației va crește viteza unei mașini sau aplicarea frânelor va opri mașina, dar nu știe cum la apăsarea accelerației crește efectiv viteza, nu știe despre mecanismul interior al mașinii. sau punerea în aplicare a accelerației, frânelor etc. în mașină. Aceasta este abstractizarea.
Clase Java Abstract și metode Java Abstract
- O clasă abstractă este o clasă care este declarată cu un cuvânt cheie abstract.
- O metodă abstractă este o metodă care este declarată fără implementare.
- O clasă abstractă poate avea sau nu toate metodele abstracte. Unele dintre ele pot fi metode concrete
- Un abstract definit de metodă trebuie să fie întotdeauna redefinit în subclasă, făcând astfel depășind obligatoriu sau facând subclasa în sine abstractă.
- Orice clasă care conține una sau mai multe metode abstracte trebuie, de asemenea, declarată cu un cuvânt cheie abstract.
- Nu poate exista niciun obiect al unei clase abstracte. Adică, o clasă abstractă nu poate fi instanțiată direct cu nou operator .
- O clasă abstractă poate avea constructori parametrizați, iar constructorul implicit este întotdeauna prezent într-o clasă abstractă.
Algoritm pentru implementarea abstracției în Java
- Determinați clasele sau interfețele care vor face parte din abstractizare.
- Creați o clasă abstractă sau o interfață care definește comportamentele și proprietățile comune ale acestor clase.
- Definiți metode abstracte în cadrul clasei sau interfeței abstracte care nu au detalii de implementare.
- Implementați clase concrete care extind clasa abstractă sau implementează interfața.
- Ignorați metodele abstracte din clasele concrete pentru a furniza implementările lor specifice.
- Utilizați clasele concrete pentru a implementa logica programului.
Când să folosiți clase abstracte și metode abstracte?
Există situații în care vom dori să definim o superclasă care declară structura unei abstracțiuni date fără a oferi o implementare completă a fiecărei metode. Uneori vom dori să creăm o superclasă care definește doar o formă de generalizare care va fi partajată de toate subclasele sale, lăsând fiecare subclasă să completeze detaliile.
Luați în considerare un exemplu de formă clasică, poate folosit într-un sistem de proiectare asistată de computer sau simulare de joc. Tipul de bază este forma și fiecare formă are o culoare, dimensiune și așa mai departe. Din aceasta, sunt derivate (moștenite) tipuri specifice de forme - cerc, pătrat, triunghi și așa mai departe - fiecare dintre acestea poate avea caracteristici și comportamente suplimentare. De exemplu, anumite forme pot fi răsturnate. Unele comportamente pot fi diferite, cum ar fi atunci când doriți să calculați aria unei forme. Ierarhia tipurilor întruchipează atât asemănările, cât și diferențele dintre forme.
Clasă abstractă în Java
Exemplu de abstractizare Java
Exemplul 1:
Java
deconectați-vă de la contul Google pe Android
// Java program to illustrate the> // concept of Abstraction> abstract> class> Shape {> > String color;> > > // these are abstract methods> > abstract> double> area();> > public> abstract> String toString();> > > // abstract class can have the constructor> > public> Shape(String color)> > {> > System.out.println(> 'Shape constructor called'> );> > this> .color = color;> > }> > > // this is a concrete method> > public> String getColor() {> return> color; }> }> class> Circle> extends> Shape {> > double> radius;> > > public> Circle(String color,> double> radius)> > {> > > // calling Shape constructor> > super> (color);> > System.out.println(> 'Circle constructor called'> );> > this> .radius = radius;> > }> > > @Override> double> area()> > {> > return> Math.PI * Math.pow(radius,> 2> );> > }> > > @Override> public> String toString()> > {> > return> 'Circle color is '> +> super> .getColor()> > +> 'and area is : '> + area();> > }> }> class> Rectangle> extends> Shape {> > > double> length;> > double> width;> > > public> Rectangle(String color,> double> length,> > double> width)> > {> > // calling Shape constructor> > super> (color);> > System.out.println(> 'Rectangle constructor called'> );> > this> .length = length;> > this> .width = width;> > }> > > @Override> double> area() {> return> length * width; }> > > @Override> public> String toString()> > {> > return> 'Rectangle color is '> +> super> .getColor()> > +> 'and area is : '> + area();> > }> }> public> class> Test {> > public> static> void> main(String[] args)> > {> > Shape s1 => new> Circle(> 'Red'> ,> 2.2> );> > Shape s2 => new> Rectangle(> 'Yellow'> ,> 2> ,> 4> );> > > System.out.println(s1.toString());> > System.out.println(s2.toString());> > }> }> |
>
gimp export ca jpg
>Ieșire
Shape constructor called Circle constructor called Shape constructor called Rectangle constructor called Circle color is Redand area is : 15.205308443374602 Rectangle color is Yellowand area is : 8.0>
Exemplul 2:
Java
// Java Program to implement> // Java Abstraction> > // Abstract Class declared> abstract> class> Animal {> > private> String name;> > > public> Animal(String name) {> this> .name = name; }> > > public> abstract> void> makeSound();> > > public> String getName() {> return> name; }> }> > // Abstracted class> class> Dog> extends> Animal {> > public> Dog(String name) {> super> (name); }> > > public> void> makeSound()> > {> > System.out.println(getName() +> ' barks'> );> > }> }> > // Abstracted class> class> Cat> extends> Animal {> > public> Cat(String name) {> super> (name); }> > > public> void> makeSound()> > {> > System.out.println(getName() +> ' meows'> );> > }> }> > // Driver Class> public> class> AbstractionExample {> > // Main Function> > public> static> void> main(String[] args)> > {> > Animal myDog => new> Dog(> 'Buddy'> );> > Animal myCat => new> Cat(> 'Fluffy'> );> > > myDog.makeSound();> > myCat.makeSound();> > }> }> |
>
>
Formatator de date simplu în javaIeșire
Buddy barks Fluffy meows>
Explicația programului Java de mai sus:
Acest cod definește o clasă abstractă Animal cu o metodă abstractă makeSound(). Clasele Dog și Cat extind Animal și implementează metoda makeSound(). Metoda main() creează instanțe de câine și pisică și apelează metoda makeSound() pe ele.
Aceasta demonstrează conceptul de abstractizare în Java, unde definim un șablon pentru o clasă (în acest caz Animal), dar lăsăm implementarea anumitor metode să fie definită de subclase (în acest caz makeSound()).
Interfață
Interfețele sunt o altă metodă de implementare a abstractizării în Java. Diferența cheie este că, prin utilizarea interfețelor, putem obține o abstractizare 100% în clasele Java. În Java sau în orice alt limbaj, interfețele includ atât metode, cât și variabile, dar le lipsește un corp de metodă. În afară de abstractizare, interfețele pot fi folosite și pentru a implementa interfețe în Java.
Implementare: Pentru a implementa o interfață folosim cuvântul cheie unelte cu clasa.
Java
// Define an interface named Shape> interface> Shape {> > double> calculateArea();> // Abstract method for> > // calculating the area> }> > // Implement the interface in a class named Circle> class> Circle> implements> Shape {> > private> double> radius;> > > // Constructor for Circle> > public> Circle(> double> radius) {> this> .radius = radius; }> > > // Implementing the abstract method from the Shape> > // interface> > public> double> calculateArea()> > {> > return> Math.PI * radius * radius;> > }> }> > // Implement the interface in a class named Rectangle> class> Rectangle> implements> Shape {> > private> double> length;> > private> double> width;> > > // Constructor for Rectangle> > public> Rectangle(> double> length,> double> width)> > {> > this> .length = length;> > this> .width = width;> > }> > > // Implementing the abstract method from the Shape> > // interface> > public> double> calculateArea() {> return> length * width; }> }> > // Main class to test the program> public> class> Main {> > public> static> void> main(String[] args)> > {> > // Creating instances of Circle and Rectangle> > Circle myCircle => new> Circle(> 5.0> );> > Rectangle myRectangle => new> Rectangle(> 4.0> ,> 6.0> );> > > // Calculating and printing the areas> > System.out.println(> 'Area of Circle: '> > + myCircle.calculateArea());> > System.out.println(> 'Area of Rectangle: '> > + myRectangle.calculateArea());> > }> }> |
>
>Ieșire
Area of Circle: 78.53981633974483 Area of Rectangle: 24.0>
Avantajele abstracției
Iată câteva avantaje ale abstractizării:
- Reduce complexitatea vizionarii lucrurilor.
- Evită duplicarea codului și crește reutilizabilitatea.
- Ajută la creșterea securității unei aplicații sau program, deoarece numai detaliile esențiale sunt furnizate utilizatorului.
- Îmbunătățește mentenabilitatea aplicației.
- Îmbunătățește modularitatea aplicației.
- Îmbunătățirea va deveni foarte ușoară deoarece, fără a afecta utilizatorii finali, putem efectua orice tip de modificări în sistemul nostru intern.
- Îmbunătățește reutilizarea și mentenabilitatea codului.
- Ascunde detaliile implementării și expune doar informații relevante.
- Oferă utilizatorului o interfață clară și simplă.
- Mărește securitatea prin împiedicarea accesului la detaliile interne ale clasei.
- Sprijină modularitatea, deoarece sistemele complexe pot fi împărțite în părți mai mici și mai ușor de gestionat.
- Abstracția oferă o modalitate de a ascunde de utilizator complexitatea detaliilor de implementare, făcându-l mai ușor de înțeles și utilizat.
- Abstracția permite flexibilitate în implementarea unui program, deoarece modificările detaliilor de implementare subiacente pot fi făcute fără a afecta interfața cu utilizatorul.
- Abstracția permite modularitatea și separarea preocupărilor, făcând codul mai ușor de întreținut și mai ușor de depanat.
Dezavantajele abstracției în Java
Iată principalele dezavantaje ale abstractizării în Java:
- Abstracția poate face mai dificilă înțelegerea modului în care funcționează sistemul.
- Poate duce la creșterea complexității, mai ales dacă nu este utilizat corespunzător.
- Acest lucru poate limita flexibilitatea implementării.
- Abstracția poate adăuga complexitate inutilă codului dacă nu este utilizată corespunzător, ceea ce duce la creșterea timpului și a efortului de dezvoltare.
- Abstracția poate face mai dificilă depanarea și înțelegerea codului, în special pentru cei care nu sunt familiarizați cu straturile de abstractizare și detaliile de implementare.
- Folosirea excesivă a abstracției poate duce la scăderea performanței din cauza straturilor suplimentare de cod și indirectă.
Citește și:
- Interfețe în Java
- Clase de abstracte în Java
- Diferența dintre clasa abstractă și interfață
- cuvânt cheie abstract în Java
Abstracția în Java – Întrebări frecvente
Î1. De ce folosim abstract?
Un motiv cheie pentru care folosim concepte abstracte este simplificarea complexității. Imaginați-vă că încercați să explicați întregul univers cu fiecare atom și fiecare stea! Rezumatele ne permit să micșorăm, să luăm ideile principale, cum ar fi gravitația și energia, și să înțelegem totul fără a ne pierde în detalii.
Iată câteva alte motive pentru care folosim abstract în Java:
alfabet cu numere1. Abstracția : Clasele abstracte sunt folosite pentru a defini un șablon generic pentru alte clase de urmat. Ei definesc un set de reguli și linii directoare pe care subclasele lor trebuie să le urmeze. Prin furnizarea unei clase abstracte, ne putem asigura că clasele care o extind au o structură și un comportament consistent. Acest lucru face codul mai organizat și mai ușor de întreținut.
2. Polimorfism : Clasele și metodele abstracte permit polimorfismul în Java. Polimorfismul este capacitatea unui obiect de a lua mai multe forme. Aceasta înseamnă că o variabilă de tip abstract poate deține obiecte din orice subclasă concretă a acelei clase abstracte. Acest lucru face codul mai flexibil și mai adaptabil la diferite situații.
3. Cadre și API-uri: Java are numeroase cadre și API-uri care folosesc clase abstracte. Folosind clase abstracte, dezvoltatorii pot economisi timp și efort, bazându-se pe codul existent și concentrându-se pe aspectele specifice aplicațiilor lor.
Q2. Care e diferenta dintre Încapsularea și abstracția datelor?
Iată câteva diferențe cheie între încapsularea și abstracția alb/n:
Încapsulare
Abstracția
Încapsularea este ascunderea datelor (ascunderea informațiilor) Abstracția este ascunderea detaliată (ascunderea implementării). Încapsularea grupează datele și metodele care acționează asupra datelor Abstracția datelor se ocupă cu expunerea interfeței către utilizator și ascunderea detaliilor implementării Clasele încapsulate sunt clase Java care urmează ascunderea și abstracția datelor Implementarea abstracției se face folosind clase și interfețe abstracte Încapsularea este o procedură care are loc la nivelul implementării abstractizarea este un proces la nivel de proiectare
Q3. Care este un exemplu real de abstractizare a datelor?
Telecomanda televizorului este un exemplu excelent de abstractizare în viața reală. Simplifică interacțiunea cu un televizor ascunzând complexitatea din spatele butoanelor și simbolurilor simple, făcându-l ușor fără a fi nevoie să înțelegeți detaliile tehnice ale modului în care funcționează televizorul.
Î4. Care este diferența dintre clasele abstracte și interfețele din Java?
Iată câteva diferențe cheie între clase și interfețe abstracte în Java:
Clasa abstracte
cum să selectați coloanele din tabele diferite în sqlInterfețe
Clasele abstracte acceptă metode abstracte și non-abstracte Suporturile de interfață au numai metode abstracte. Nu acceptă moștenirea multiplă Acceptă moștenirea multiplă Clasele abstracte pot fi extinse prin clase Java și interfețe multiple Interfața poate fi extinsă numai prin interfața Java. Membrii clasei abstracte în Java pot fi privați, protejați etc. Interfețele sunt publice în mod implicit. Exemplu:
clasă abstractă publică vehicul{
public abstract void drive()
}Exemplu:
interfață publică Animal{
void vorbesc();
}