Polimorfismul în Java: concepte, tipuri, caracteristici și exemple

Publicat: 2022-04-18

Javascript este unul dintre cele mai populare și utilizate limbaje de programare orientată pe obiecte, împreună cu C#, PHP, Python, C++ etc. Permite utilizatorilor să expună și să abordeze concepte din viața reală prin programare, deoarece totul este reprezentat ca un obiect. Caracteristicile Java ca limbaj de programare oferă mai multe căi de simplificare a dezvoltării software, făcând codurile mai dinamice și ușurând întreținerea.

În acest articol, vom explora Java ca limbaj de programare orientată pe obiecte și vom înțelege conceptele de moștenire, abstractizare, polimorfism și încapsulare a datelor. Vom analiza, de asemenea, tipurile de polimorfism în Java, avantajele și dezavantajele acestora.

Cuprins

Prezentare generală a programării orientate pe obiecte

Limbile de programare orientată pe obiecte (OOP) se referă la acele limbaje de calculator care utilizează conceptul de „obiecte” în timp real în codificare. Are ca scop implementarea entităților lumești precum moștenirea, polimorfismul, buclele, abstracția datelor etc., prin programare.

Există câteva concepte de bază ale programarii orientate pe obiecte cu care programatorii trebuie să se familiarizeze. Acești termeni conceptuali sunt necesari pentru a învăța despre caracteristicile speciale și unice ale OOP, cum ar fi încapsularea, polimorfismul etc.

1. Clasa

O „clasă” reprezintă un set de proprietăți și metode care se aplică tuturor „obiectelor” specificate din cadrul clasei. Obiectele pot fi de diferite tipuri, cum ar fi întreg, matrice sau șir, etc. O clasă este ca un prototip definit de utilizator, folosindu-se de care pot fi create diferite „obiecte”.

2. Obiect

Un obiect este cea mai fundamentală unitate a limbajelor OOP, reprezentând date reale în viața reală. Obiectele poartă proprietățile clasei (claselor) în care sunt invocate.

3. Metoda

O metodă este un set de instrucțiuni care implică diferite funcții care sunt puse împreună pentru a îndeplini o anumită sarcină. Returnează rezultatul după finalizarea instrucțiunilor definite de utilizator. De asemenea, poate îndeplini sarcini care nu oferă rezultate. Metodele permit programatorilor să refolosească codurile fără să le tasteze din nou. Java necesită ca toate metodele să aparțină unei clase, spre deosebire de limbaje precum C++, C sau Python.

Concepte POO

Există patru principii principale ale programării orientate pe obiecte – Java prezintă toate aceste proprietăți:

1. Abstracția

Abstracția datelor este o proprietate a limbajelor OOP care prezintă detaliile necesare, păstrând în același timp celelalte detalii irelevante ale obiectului de la vizibilitate pentru utilizator, cum ar fi codul de implementare. Doar detaliile esențiale și relevante sunt afișate de această caracteristică, care îi ajută pe dezvoltatori să facă rapid modificările adecvate ale funcționalității unei clase.

2. Încapsulare

Încapsularea datelor se referă la împachetarea datelor în unități. Această proprietate a limbajelor OOP protejează datele încapsulate de alte funcții și metode. Leagă împreună codul și metodele specificate pentru a efectua operațiuni în unități singulare, prevenind astfel manipularea sau accesarea acestora prin metode externe. Acest lucru este cunoscut și sub numele de Ascundere a datelor.

3. Moștenirea

Moștenirea este o altă caracteristică importantă a limbajelor OOP care permite unei clase să moștenească proprietăți de la alte clase. Funcționează pe conceptul de reutilizare a codurilor, reducând astfel nevoia de a reintroduce caracteristicile clasei în mod repetat. Clasa care moștenește de la o altă clasă este cunoscută sub denumirea de subclasă, iar clasa moștenită este cunoscută sub denumirea de superclasă.

4. Polimorfism

Polimorfismul permite unui obiect să ia mai multe forme și să îndeplinească sarcini similare sau să prezinte comportamente similare în diferite metode.

Polimorfismul în Java

Polimorfismul permite realizarea unei singure sarcini în diferite moduri. Este o proprietate care ajută la identificarea și diferențierea între entități de cod similare, sporind astfel eficiența limbajelor OOP.

În Java, polimorfismul este prezentat prin declararea obiectelor ca entități separate. În acest mod, aceeași acțiune poate fi efectuată în mai multe moduri. Polimorfismul este activat împreună cu moștenirea, permițând obiectelor să îndeplinească diferite sarcini folosind proprietățile moștenite ale diferitelor clase. Diferențele în desemnarea metodelor sau obiectelor disting două entități.

Învață cursuri de dezvoltare software online de la cele mai bune universități din lume. Câștigați programe Executive PG, programe avansate de certificat sau programe de master pentru a vă accelera cariera.

Caracteristicile polimorfismului

1. Constrângere

Conversia implicită a tipurilor de date pentru a preveni erorile de tip în timpul compilației este constrângere. Nu include conversii explicite de tip de date, ci urmează doar ierarhia de conversie pe care o permite Java. De exemplu, dacă un operand este plutitor și operatorul este un număr întreg, rezultatul va fi plutitor.

2. Parametri/ variabile polimorfe

Un obiect sau o variabilă care poate deține valori de diferite tipuri în timpul execuției este cunoscută ca variabilă sau parametru polimorf. Dictează că, în timp ce se declară o clasă, aceleași nume de variabile pot conține tipuri de date diferite, iar aceleași nume de metode pot conține parametri și tipuri de returnare diferiți.

3. Supraîncărcarea operatorului intern

Supraîncărcarea operatorului folosește un simbol al operatorului, așa cum este cerut de utilizator. Java acceptă supraîncărcarea operatorului intern. Este, de asemenea, un exemplu de polimorfism static.

Tipuri de polimorfism în Java

În Java, polimorfismul poate fi invocat folosind:

1. Supraîncărcarea metodei

Supraîncărcarea metodelor este procesul de creare a mai multor obiecte sau metode care poartă același nume și aparțin aceleiași clase. Funcționează în cadrul unei clase.

2. Anularea metodei

Suprascrierea metodei este modul în care o subclasă constituie aceleași metode ca cele declarate în superclasă. Funcționează între clase. Dacă subclasa conține aceleași metode deja prezente în superclasă, atunci funcția din subclasă este suprascrisă.

Polimorfismul de subtip în Java

Polimorfismul subtipului depinde de Upcasting și Late Binding.

  • Upcasting-ul este un proces prin care un obiect sau o metodă poate promova un tip de date (float, întreg etc.) de la un subtip la un supertip prin mutarea acestuia în sus în ierarhia moștenirii.
  • Legarea tardivă este utilizată pentru a apela metode care sunt instanțe non-finale.

Niciun operator nu este implicat în acest lucru deoarece subtipul însuși este membru al supertipului. De exemplu, dacă o clasă este numită culori, subtipurile sale pot fi roșu, albastru, portocaliu, verde etc. Polimorfismul subtipului include subtipurile pentru a prezenta proprietățile supertipului. Cu toate acestea, accesul la proprietățile individuale ale fiecărui subtip este pierdut.

Polimorfismul runtime în Java

În Java, polimorfismul runtime este cunoscut și sub numele de Dynamic Method Dispatch sau Dynamic Binding. Se realizează prin suprascrierea metodei – apelarea unei metode suprascrise pentru a oferi soluții dinamice în timpul execuției. Se poate realiza prin funcții și nu prin obiecte.

Iată un exemplu de polimorfism de rulare în Java:

masina de clasa{

void run(){System.out.println(„conducere”);}

}

clasa Volkswagen extinde mașina{

void run(){System.out.println(„Conducerea în siguranță cu 90 km”);}

public static void main(String args[]){

Mașina c = Volkswagen nou();//upcasting

b.run();

}

}

Ieșire :

Conduceți în siguranță cu 90 km

Compilați polimorfismul timpului în Java

Polimorfismul în timp de compilare se realizează prin supraîncărcarea metodei. Este procesul în care apelul pentru o metodă supraîncărcată este efectuat și rezolvat în timpul compilării. Este cunoscut și ca polimorfism static. Java este suficient de flexibil pentru a permite utilizatorului să folosească metode sau obiecte având aceleași nume atâta timp cât declarațiile și proprietățile semnăturii sale rămân diferite.

Iată un exemplu de polimorfism în timp de compilare în Java:

clasa SimpleCalc

{

int add(int x, int y)

{

returnează x+y;

}

int add(int x, int y, int z)

{

returnează x+y+z;

}

}

Demo de clasă publică

{

public static void main(Argumente șir[])

{

SimpleCalc obj = new SimpleCalc();

System.out.println(obj.add(20, 30));

System.out.println(obj.add(40, 30, 20));

}

}

Ieșire :

50

90

Importanța polimorfismului

Polimorfismul permite scrierea de metode care pot constitui diferite tipuri de entități purtând același nume. Polimorfismul este esențial în Java datorită diverselor sale beneficii de utilizare și a domeniului de aplicare pe care îl oferă pentru a face codul dinamic:

  1. Permite reutilizarea codurilor - aceleași coduri nu trebuie scrise de mai multe ori.
  2. Permite unei variabile să prezinte mai multe comportamente – având același nume, dar proprietăți diferite pot deschide spațiu pentru menținerea coerenței în coduri.
  3. Reducerea codurilor în vrac – ajută la depanare, în același timp scurtând timpul de compilare, economisind memoria utilizatorului, energie și timp.

Probleme posibile în implementarea polimorfismului

Polimorfismul poate fi confuz de utilizat și implementat. Reduce lizibilitatea codurilor, amenințând astfel mai multe erori și erori. De asemenea, creează probleme cu îndeplinirea funcțiilor după cum este necesar.

Există o problemă clasică la care trebuie urmărită: problema Clasei de bază fragile. Se referă la asamblarea și codificarea necorespunzătoare a unei clase moștenite, care are ca rezultat metode care arată rezultate imprevizibile.

Concluzii

Natura fragilă a moștenirii poate duce la coduri disfuncționale și sparte, în ciuda faptului că toate celelalte criterii rămân îndeplinite. Această problemă arhitecturală de bază este considerată problema Clasei de bază fragile. Aflați mai multe despre modul în care Java prezintă concepte OOP, alăturându-vă la programul Executive PG de la upGrad în Dezvoltare Software – Specializare în Dezvoltare Full Stack . Fiți îndrumați de experți din industrie și construiți cunoștințe practice prin implicarea în proiecte practice, de colaborare cu colegii.

Rezervă-ți locul astăzi!

Ce este legarea statică și dinamică?

Obiectele care sunt determinate în momentul compilării sunt cunoscute sub denumirea de legare statică. Pe de altă parte, tipurile de legături dinamice ale obiectelor sunt determinate în timpul execuției. Primul este utilizat în timpul supraîncărcării metodei, iar cel de-al doilea în timpul suprascrierii metodei.

Care sunt cele două diferențe fundamentale dintre suprasolicitarea metodei și supraîncărcarea metodei?

În Java, suprascrierea metodei nu suprascrie metodele statice, private și finale, în timp ce supraîncărcarea metodelor supraîncărcă metodele statice, private și finale în Java. De asemenea, metodele de suprasolicitare supune legăturii dinamice și, pe de altă parte, metodele supraîncărcate trec prin legarea statică.

Care sunt diferențele dintre polimorfism și moștenire în Java?

În Java, există mai multe puncte de diferență între polimorfism și moștenire:

1. Moștenirea este o reprezentare a relației părinte-copil din lumea reală în codificare. Dar polimorfismul este un catalizator care folosește această relație pentru a face programul mai dinamic.
2. Moștenirea permite reutilizarea codurilor din clasa copil prin moștenirea acelorași din clasa părinte. Polimorfismul, în schimb, permite clasei copil să-și redefinească comportamentul existent din nou în interiorul clasei părinte.