JavaRush /Java Blog /Random-TL /Coffee break #95. Paano malutas ang maraming problema sa ...

Coffee break #95. Paano malutas ang maraming problema sa pamana sa Java

Nai-publish sa grupo
Pinagmulan: Ang FreeCodeCamp Java ay isa sa pinakasikat na object-oriented programming language na ginagamit ngayon. Dahil ito ay independyente sa platform, makakahanap ka ng mga Java application sa bawat uri ng device at bawat operating system. At dahil ang Java ay medyo madaling matutunan, ito ay isa sa mga wika na pinagkadalubhasaan ng maraming programmer. Ang isang mahalagang tampok ng Java na dapat mong pamilyar ay ang pamana ng klase. Binibigyang-daan ka ng inheritance na i-optimize ang iyong code, na ginagawang mas madaling gamitin muli ang mga klase. Kapag maaari mong gamitin muli ang code na nasubok na at na-debug, ang ikot ng buhay ng pagbuo ng software ay nagiging mas maikli at mas mura. Coffee break #95.  Paano malutas ang maraming problema sa pamana sa Java - 1Bagama't isang simpleng konsepto sa teorya, ang coding inheritance relationships ay nangangailangan ng pansin sa detalye. Lalo na tungkol sa maramihang mana, kung saan ang isang klase ng bata ay nagmamana ng mga pag-aari mula sa maraming klase ng magulang. Tinatanggihan ng Java ang maramihang mga relasyon sa mana dahil lumilikha sila ng kalabuan, ngunit may ilang mga paraan upang makamit ang marami sa parehong mga epekto kung alam mo kung ano ang gagawin. Sa artikulong ito, titingnan natin ang mga isyu sa maramihang inheritance at tatalakayin ang mga alternatibong opsyon sa coding sa Java.

Terminolohiya ng mana

Minsan, para maging matagumpay na programmer, kailangan mong maging isang problem solver para makahanap ng mga solusyon para sa mga karaniwang error o problema. Ito ay isang mahalagang bahagi ng secure at matalinong coding. Ang isang ganoong problema ay nauugnay sa maramihang pamana (o sa halip, kakulangan nito) sa Java. Coffee break #95.  Paano malutas ang maraming problema sa pamana sa Java - 2Upang lubos na maunawaan ang inheritance sa Java, kailangan mong maging pamilyar sa basic inheritance terminology ng object-oriented programming (OOP).
  • Ang mga klase ay ang pangunahing istraktura ng pattern sa object-oriented programming language. Tinutukoy ng isang klase ang mga karaniwang katangian para sa isang pangkat ng mga bagay.
  • Parent class : Kilala rin bilang mga base class o super class. Ang parent class ay isang extensible class na nagbibigay ng functionality sa isang child class. Pinapayagan nito ang muling paggamit. Ang mga kahulugan at pag-andar ng parent class ay muling ginagamit kapag gumagawa ng mga child class.
  • Child class : Mas karaniwang tinatawag na subclass, ang child class ay nagmamana ng functionality mula sa ibang klase. Ang mga klase ng bata ay pinalawig o hinangong mga klase.
  • Pamana : Ang relasyon sa pagitan ng mga klase ng magulang at anak.

Mga uri ng pamana ng OOP

Maraming sikat na object-oriented programming language na ginagamit ngayon, kabilang ang Java, C++, JavaScript, Python, PHP, Ruby, at Perl. Bagama't ang pamana ay isang karaniwang konsepto sa mga OOP na wikang ito, hindi lahat ng uri ng pamana ay umiiral sa bawat isa sa mga wikang ito. Napakahalagang malaman ang mga karaniwang uri ng mana at ang mga paghihigpit sa mana sa partikular na wika na iyong ginagamit. Kung mas marami kang alam tungkol sa pamana, magiging mas epektibo kang developer. Ang mga uri ng mana na sinusuportahan ng Java ay kinabibilangan ng:
  • Single-level inheritance : Kapag ang isang child class ay nagmana ng mga feature mula sa isang solong parent na klase.
  • Multi-level inheritance : Isa itong multi-level na anyo ng single-level inheritance. Sa multi-level inheritance, ang isang child class ay maaari ding kumilos bilang isang parent class para sa iba pang child class. Ang ugnayan sa pagitan ng bawat antas ay linear - walang mga sangay na mas mataas kaysa sa maraming mana. Sa kasong ito, ang panghuling klase ng bata ay may mga function mula sa lahat ng antas sa itaas.
  • Hierarchical inheritance : Ang kabaligtaran ng multiple inheritance. Sa hierarchical inheritance, ang isang single parent na klase ay may higit sa isang child class. Kaya sa halip na magkaroon ng mga sanga sa itaas nito, ito ay sumasanga sa ibaba.
  • Hybrid Inheritance : Gaya ng ipinahihiwatig ng pangalan, ang hybrid na mana ay kumbinasyon ng iba pang uri ng mana.
Bilang karagdagan sa mga uri ng inheritance na nakalista sa itaas, may iba pang mga uri na hindi sinusuportahan ng Java.
  • Multiple inheritance : Sa multiple inheritance, ang child class ay may higit sa isang parent class. Bagama't hindi sinusuportahan ng Java at JavaScript ang maramihang pamana, ginagawa ng mga wikang OOP tulad ng C++.
  • Multi-path inheritance : Isang hybrid ng multiple, multi-level at hierarchical inheritance, sa multi-path inheritance, namana ng child class ang mga katangian at function nito mula sa parent class at ilang child class ng parent class. Dahil ang multipath inheritance ay nakabatay sa multiple inheritance, hindi sinusuportahan ng Java ang paggamit nito.

Bakit hindi sinusuportahan ng Java ang maramihang mana

Ang pangunahing problema sa maramihang mana ay maaari itong lumikha ng mga kalabuan sa mga klase ng bata. Sa isang puting papel noong 1995, sinabi ng nangungunang taga-disenyo ng Java na si James Gosling na ang mga problema sa maramihang pamana ay isa sa mga dahilan kung bakit nilikha ang Java. Ang mga kumplikadong likas sa maramihang pamana ay pinakamalinaw na nakikita sa problema sa brilyante. Sa problema sa brilyante, ang parent class A ay may dalawang natatanging child class na B at C; ibig sabihin, ang mga klase ng bata na B at C ay nagpapalawak ng klase A. Coffee break #95.  Paano malutas ang maraming problema sa pamana sa Java - 3Ngayon ay lumikha kami ng isang bagong klase ng bata D na nagpapalawak ng parehong klase B at klase C. Tandaan na mayroon kaming maramihang mana (D umaabot sa B at C), hierarchical inheritance ( B at C extend A) at multi-level inheritance (D umaabot sa A, B at C). Sa problema sa brilyante, ang mga klase ng bata na B at C ay nagmamana ng isang pamamaraan mula sa parent class na A. Parehong na-override ng B at C ang minanang pamamaraan. Ngunit ang mga bagong pamamaraan sa B at C ay sumasalungat sa isa't isa. Ang panghuling child class D ay nagmamana ng dalawang independyente at magkasalungat na pamamaraan mula sa maraming magulang nito na B at C. Hindi malinaw kung aling paraan ng klase D ang dapat gamitin, kaya lumitaw ang kalabuan. Ang iba pang mga OOP programming language ay nagpapatupad ng iba't ibang pamamaraan para sa paglutas ng kalabuan ng maramihang mana.

Paano malutas ang maraming problema sa pamana sa Java

Dahil lang na may problema ang multiple inheritance ay hindi ibig sabihin na wala itong silbi. Maraming mga sitwasyon kung saan maaaring gusto mong magkaroon ng mga function ang isang klase mula sa iba pang mga klase. Isipin lang ang Tesla Roadster na bibilhin mo kapag naging matagumpay ka nang software developer. Ang mga teknikal na katangian nito ay nakabatay sa parehong klase ng sports car at klase ng electric vehicle. Isa pang halimbawa: ang browser kung saan mo binabasa ang artikulong ito. Mayroon itong mga tampok mula sa klase ng mga solusyon sa privacy sa Internet at mula sa pangkalahatang klase ng Internet browser. Ngunit hindi mo maaaring pahabain ang maramihang mga klase sa Java. Kaya paano nakikitungo ang wikang ito sa problema ng maramihang pamana? Gumagamit ang Java ng mga istrukturang tinatawag na mga interface. Ang mga interface ay mga abstract na uri na tumutukoy sa pag-uugali na ipapatupad ng mga klase. Dahil abstract ang mga ito, ang mga interface ay hindi naglalaman ng mga detalyadong tagubilin sa kanilang pag-uugali. Sa halip, ang mga klase ay nagbibigay ng mga konkretong pagpapatupad ng pag-uugali ng interface. Ang mga interface ay may ilang mga katangian ng pagtukoy:
  • Hindi tulad ng mga klase, hindi ka gumagawa ng mga interface. Sa halip, ang mga klase ay nagpapatupad ng mga interface.
  • Ang mga interface ay naglalaman lamang ng mga pampublikong palaging kahulugan at mga header ng pamamaraan.
  • Ang mga interface ay maaari lamang i-extend ang iba pang mga interface, hindi mga klase.
  • Ang mga interface ay maaaring magpalawak ng maraming interface, at ang mga klase ay maaaring magpatupad ng maraming interface.
Mabisa na natin ngayong malutas ang problema sa brilyante gamit ang mga interface. Ang pag-alala na ang mga interface lamang ang makakapagpalawig lamang ng iba pang mga interface, at anumang klase na nangangailangan ng maramihang katangian ng pamana ay dapat magpatupad ng maraming interface, maaari nating i-override ang mga klase ng problema sa brilyante. Ang dating mga klase A, B, at C ay nagiging mga interface na A, B, at C. Ang mga Interface B at C ay nagpapalawak pa rin ng interface A, ngunit wala sa mga interface na ito ang may partikular na paggana, tanging mga partikular na pag-uugali. Ang Class D ay nananatiling klase na may pananagutan para sa partikular na pagpapatupad ng gawi na makikita sa mga interface B at C. Tandaan ang isang pangunahing pagkakaiba: hindi pinalawak ng class D ang mga interface B at C. Sa halip, ipinapatupad nito ang mga ito. Sa paraang ito, wala ka talagang maraming mana. Sa halip, binago mo lang ang problema.

Konklusyon

Ang pag-unawa sa pamana ay mahalaga para sa anumang epektibong developer ng Java. Mahalaga rin na malaman ang mga limitasyon ng inheritance at ang built-in na workaround ng Java para sa tradisyunal na maraming problema sa inheritance. Ang pag-aaral kung paano lumikha ng mga interface upang muling likhain ang mga epekto ng maramihang pamana sa Java ay magpapahusay sa iyong pagiging produktibo at mga pagkakataon sa pag-hire.
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION