„Bună, Amigo! Am ajuns în sfârșit la ceva cu adevărat interesant. Astăzi am să vă povestesc despre moștenirea multiplă . Moștenirea multiplă este într-adevăr un instrument foarte fascinant și puternic. Și dacă nu ar fi mai multe probleme, atunci Java ar accepta moștenirea multiplă a claselor. Dar nu este așa, așa că trebuie să ne mulțumim cu moștenirea multiplă a interfețelor . Ceea ce este, de asemenea, destul de grozav."

Moștenirea mai multor interfețe - 1

Imaginează-ți că scrii un joc pe computer. Iar personajele sale (obiectele tale) trebuie să se comporte în moduri foarte complexe: plimbă-te pe o hartă, colectează obiecte, efectuează misiuni, comunică cu alte personaje, omoară pe cineva, salvează pe altcineva. Să presupunem că ați reușit să împărțiți toate obiectele în 20 de categorii. Asta înseamnă că, dacă ai noroc, te vei putea descurca cu doar 20 de clase pentru a-ți defini obiectele. Dar iată problema: câte forme unice de interacțiune vor avea aceste obiecte? Fiecare tip de obiect poate avea interacțiuni unice cu alte 20 de tipuri de obiecte (numărăm și interacțiunile cu obiecte de același tip). Cu alte cuvinte, va trebui să scrieți cod pentru 20 x 20 = 400 de interacțiuni! Și dacă numărul de tipuri de obiecte unice nu este 20, ci 100, atunci numărul de interacțiuni ar putea fi 10.000!

"Uau! Acum înțeleg de ce programarea este o muncă atât de dificilă."

„Este simplu. Mulțumită multor abstracții. Și nu puțin mulțumită moștenirii multiple a interfețelor.”

De multe ori putem simplifica interacțiunea cu obiectele dacă rolurile și/sau abilitățile interacționează mai degrabă decât obiectele în sine. Și după cum știm deja, abilitățile pot fi adăugate cu ușurință la o clasă atunci când implementează o anumită interfață.

Când scriu un program mare, dezvoltatorii fac de obicei acest lucru de la bun început:

1) Identificați toate abilitățile/rolurile.

2) Definiți interacțiunea dintre aceste roluri.

3) Apoi, pur și simplu atribuiți roluri tuturor claselor.

— Poate un exemplu?

„Desigur. Să ne uităm la rolurile din desenul animat „Tom și Jerry”.”

Cod Java Descriere
interface Moveable
{}
— Rol/capacitate de mișcare.
interface Eatable
{}
— Rol/capacitate de a fi mâncat.
interface Eat
{}
— Rol/capacitate de a mânca pe cineva.
class Tom extends Cat implements Moveable, Eatable, Eat
{}
Tom este o pisică care are trei roluri:
1) Se poate mișca
2) Poate să mănânce pe cineva
3) Poate fi mâncat de cineva (un câine)
class Jerry extends Mouse implements Moveable, Eatable
{}
Jerry este un șoarece care are două roluri:
1) Se poate mișca
2) Poate fi mâncat de cineva
class Killer extends Dog implements Moveable, Eat
{}
Ucigașul este un câine cu două roluri: 1) Se poate mișca 2) Poate mânca pe cineva

Cunoscând doar aceste trei roluri (interfețe), puteți scrie un program și puteți descrie interacțiunea corectă dintre aceste roluri. De exemplu, un obiect va urmări (prin interfața Moveable) după „cel pe care îl poți mânca” și va fugi de „cel care te poate mânca”. Și toate acestea fără a ști despre anumite obiecte. Dacă adăugați mai multe obiecte (clase) în program și păstrați aceste roluri, va funcționa în continuare frumos, controlând comportamentul obiectelor dvs.