Herentzia (I): orokortze-erlazioa / espezializazioa edo klaseen artekoa

logo OPP min

Orokortze/espezializazio erlazioa bi klaseren arteko erlazio gisa defini daiteke, non klase batek (klase aita edo oinarria edo superklasea) beste klasearen portaera orokortzen duena (klase alabaren edo azpimota edo klase eratorria). Edo beste ikuspuntu batetik begiratuta, klase alabak klase aitaren portaera espezializatzen du. Modu praktikoagoan, herentzia defini dezakegu aurreko batetik abiatuta klase berri bat definitzeko aukera ematen duen mekanismo gisa, eta haien arteko desberdintasunak deskribatzen dituen mekanismo gisa.

Asoziazioak ez bezala (instantzien arteko harremana), orokortzea/espezializazioa klaseen arteko harremana da.

Garrantzitsua da argi izatea klase alabak (edo azpiklaseak) heredatu egiten dituela klase gurasoan publiko edo babestutzat jotako atributuak eta metodo guztiak.

Horrek esan nahi du klase alabak ezin duela zuzenean sartu aita-klasean deklaratutako atributu pribatuetara, ez eta aita-klasean deklaratutako metodo pribatuak erabili ere, bi kasuetan ez baitira heredatu.

Herentzia simplea

Herentziaren kasu erabiliena herentzia sinplea da, objektuetara bideratutako programazio-lengoaia guztiek onartzen duten herentzia-mota delako.

OBPren paradigmatik hitz egiten dugunean, klase alabak klase aitarengandik heredatu egiten duela esaten dugu. Alegia, SmartTV telebistatik heredatzen du.

Orduan, Telebista klaseak SmartTV klasearen portaera orokortzen du. Telebista guztiek kate bat, bolumen bat, bolumena igotzeko eta jaisteko metodo bat, kanala aldatzeko beste bat eta abar dituzte. Hauek telebista guztiek dituzten elementu komunak dira.

Bestalde, SmartTV batek telebista baten portaera orokorra zehazten du. Telebista klaseak egiten duen guztia egiteaz gain, portaera berri bat eransten dio: Interneten sartzea.

Ohartu beharra dago harreman horrek ez duela kardinalitaterik, ez baikara instantzien arteko harremanaz ari, baizik eta, besterik gabe, esaten ari garela klase batek (alaba) beste baten (hau da, klase aitaren) propietateak dituela eta/edo aldatzen dituela.

Herentzia anizkoitza

Klase batek klase aita bat baino gehiago hederatu ditzake. Arazoa da programazio-lengoai guztiek ez dutela herentzia anizkoitza onartzen, hau da, klase aita batetik baino gehiagotatik heredatzea. adibidez, ez Javak, ez C# ez PHPk ez dute herenztzia anizkoitza onartzen, eta C++ eta Python bai.

Demagun Autozikleta izeneko ibilgailu berri bat asmatu nahi dugula, Autoaren eta Motozikletaren ahalmenak dituena. Erraza da pentsatzea Autozikletak Autoa eta Motozikletaren atributuak eta metodoak jasoko dituela.

Gainera, herentzia anizkoitzak arazo bat dakar, eta hori ahalbidetzen duten lengoaiek konpondu behar dute.

Autozikletaren adibidean ikus dezakegu bi klase aitek motorra izeneko atributua dutela eta String motakoa. Bada, Autozikleta klase alabak bi atributuak heredatuko ditu. Hori dela eta, programazio-lengoaiak mekanismoren bat eman behar dio programatzaileari, errepikatutako bi atributuetatik zeini egiten dion erreferentzia kodearen jarraibide bakoitzean. Herentzia anizkoitzaren ohiko arazoa da hori.

Iragankortasuna

B klaseak A klase aitarengandik jaso dezake herentzia, eta C klaseak B klasetik heredatu dezake.

Kasu horretan, Langileak soldata atributua eta heredatutako izena izango ditu. Nagusiak, berriz, hiru atributu izango ditu: berea, kargua, gehi langilearengandik eta pertsonarengandik heredatutakoak, soldata eta izena baitira, hurrenez hurren (herentzian jasoko dira, ikuspena babestua dutelako). Hau da, heremtzia ez da hierarkiaren sakontasun maila batera mugatzen (lehen ahaidetasun maila), baizik eta herentzia, nolabait esatearren, harreman iragankor bat da: elementu bat beste batekin herentzia mekanismoaren bidez erlazionatzen bada, eta azken hori hirugarren batekin ere herentziaren bidez, orduan lehenengoa hirugarrenarekin erlazionatzen da.

Utzi erantzun bat

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Aldatu )

Google photo

You are commenting using your Google account. Log Out /  Aldatu )

Twitter picture

You are commenting using your Twitter account. Log Out /  Aldatu )

Facebook photo

You are commenting using your Facebook account. Log Out /  Aldatu )

Connecting to %s