Nasljeđivanje (programiranje)

(Preusmjereno sa Nasljedstvo (računarstvo))

U objektno orijentiranom programiranju, nasljeđivanje je mehanizam zasnivanja objekta ili klase na bazi drugog objekta (prototipsko nasljeđivanje) ili klase (klasno nasljeđivanje), zadržavajući sličnu implementaciju. Također se definira kao izvođenje novih klasa (podklasa) iz postojećih koje se nazivaju super klasa ili bazna klasa te formiranje istih u hijerarhiju klasa. U većine objektno orijentiranih jezika s klasama, objekt kreiran kroz nasljeđivanje, child objekt, preuzima sva svojstva i ponašanja parent objekta, izuzev: konstruktora, destruktora, overloadanih operatora i friend funkcija bazne klase. Nasljeđivanje omogućava kreiranje klasa koje su napravljene na osnovu postojećih klasa,[1] kako bi se opisala nova implementacija dok se zadržavaju ista ponašanja, za ponovno iskorištenje koda i nezavisno proširenje originalnog softvera preko javnih klasa i interfejsa. Veze među objektima ili klasama kroz nasljeđivanje daje strukturu poznatu kao usmjeren graf.

Nasljeđivanje je izumljeno 1969. godine za Simulu[2] a danas se koristi u objektno orijentiranim jezicima kao što su Java, C++ ili Python.

Naslijeđena klasa se zove subklasa ili podklasa svoje roditelj klase tj. super klase. Termin "nasljeđivanje" se labavo koristi za klasno i prototipsko programiranje, ali u uskoj upotrebi termin je rezervisan za programiranje bazirano na klasama (jedna klasa se nasljeđuje iz druge), sa odgovarajućom tehnikom u prototipskom programiranju koje se ispravnije naziva delegacija (jedan objekt delegira na drugi).

Nasljeđivanje se ne treba pobrkati sa terminom podtipiranje.[3][4] U nekim jezicima nasljeđivanje i podtipiranje se slažu,[a] dok se u drugih razlikuju; općenito, podtipiranje omogućava is-a vezu, gdje nasljeđivanje samo ponovno koristi implementaciju i uspostavlja sintatsku vezu, a ne nužno semantičku vezu (nasljeđivanje ne osigurava podtipiranje ponašanja). Za razlikovanje ovih koncepata, podtipiranje je također poznato kao nasljeđivanje interfejsa, dok je nasljeđivanje - kako je ovdje definirano - poznato kao nasljeđivanje implementacije ili nasljeđivanje koda.[5] Ipak, nasljeđivanje je često korišten mehanizam za uspostavu podtipskih veza.[6]

Nasljeđivanje je u kontrastu sa objektnom kompozicijom, gdje jedan objekt sadržava drugi objekt (ili objekti jedne klase sadrže objekte druge klase); Kompozicija implementira has-a vezu, u kontrastu sa is-a veze podtipiranja.

Također pogledajte

uredi

Reference

uredi
  1. ^ Johnson, Ralph (26. 8. 1991). "Designing Reusable Classes" (PDF). www.cse.msu.edu.
  2. ^ Mike Mintz, Robert Ekendahl (2006). Hardware Verification with C++: A Practitioner's Handbook. United States of America: Springer. str. 22. ISBN 978-0-387-25543-9.
  3. ^ Cook, William R.; Hill, Walter; Canning, Peter S. (1990). Inheritance is not subtyping. Proc. 17th ACM SIGPLAN-SIGACT Symp. on Principles of Programming Languages (POPL). str. 125–135. CiteSeerX 10.1.1.102.8635. doi:10.1145/96709.96721. ISBN 0-89791-343-4.
  4. ^ Šablon:Cite techreport
  5. ^ Mikhajlov, Leonid; Sekerinski, Emil (1998). A study of the fragile base class problem (PDF). Proc. 12th European Conf. on Object-Oriented Programming (ECOOP). Lecture Notes in Computer Science. 1445. str. 355–382. doi:10.1007/BFb0054099. ISBN 978-3-540-64737-9. Arhivirano s originala (PDF), 13. 8. 2017. Pristupljeno 5. 3. 2021.
  6. ^ Tempero, Ewan; Yang, Hong Yul; Noble, James (2013). What programmers do with inheritance in Java (PDF). ECOOP 2013–Object-Oriented Programming. str. 577–601.


Greška kod citiranja: <ref> oznake postoje za grupu pod imenom "lower-alpha", ali nije pronađena pripadajuća <references group="lower-alpha"/> oznaka, ili zatvarajući </ref> nedostaje