- Kjennetegn på arv
- hierarki
- polymorfisme
- Arvstyper
- Unik arv
- Arve på flere nivåer
- Hierarkisk arv
- Hybridarv
- Flere arv
- Arvstyper fra en baseklasse
- Offentlig arv
- Beskyttet arv
- Privat arv
- eksempler
- Python-eksempel
- Eksempel i C ++
- referanser
Den arv i objekt - orientert programmering er en måte å organisere objekter i et hierarki fra det generelle til det spesifikke. Det er dingsen som brukes til å utvide en klasse til en annen klasse, og bevare en analog utførelse.
I de fleste klassebaserte objektorienterte språk får et objekt opprettet gjennom arv, kalt et barnobjekt, alle egenskapene og atferden til foreldreobjektet.

Enkelt bevis på arv i objektorientering. Kilde: Pluke / CC0 Creative Commons CC0 1.0 Universal Public Domain
Derfor er det en kvalitet som representerer forholdet mellom forskjellige klasser. Arv gjør at en klasse kan ha samme oppførsel som en annen klasse og utvide eller tilpasse den atferden til å gi en spesiell handling for spesifikke behov.
Arv kan bidra til å representere objekter som har noen forskjeller og noen likheter i måten de fungerer på. Du kan sette all funksjonaliteten som objektene har til felles i en baseklasse, og deretter definere en eller flere underklasser med din egen tilpassede funksjonalitet.
Kjennetegn på arv
Arv er en av nøkkelegenskapene ved objektorientert programmering, brukt til å definere en ny klasse fra eksisterende klasser.
Det vil si at nye klasser kan avledes fra eksisterende baseklasser, og legge til nye funksjoner. Du trenger ikke å skrive fra bunnen av. Derfor gir arv en måte å enkelt bruke eksisterende kode på.
Hvis du allerede har en klasse som gjør nesten alt du vil, kan du opprette en underklasse der noen av oppførselen delvis blir tilsidesatt, eller kanskje lagt til ny funksjonalitet.
En avledet klasse arver alle metodene til baseklassen, bortsett fra følgende:
- Konstruktører, destruktører og kopikonstruktører av baseklassen.
- Operatører overbelastet fra baseklassen.
- Grunnleggende vennlige funksjoner.
hierarki
Som et familietre gjør, tjener arv til å danne et hierarki av klasser. Det er viktig å merke seg at attributtene som er bestemt for en baseklasse, automatisk vil være til stede i den avledede klassen. Metodene for baseklassen vil også fungere for derivatene.
En klasse sies å være en underklasse av klassen den arver fra. På den annen side vil denne klassen være superklassen din. Den mest generiske klassen kan bli referert til som baseklassen, siden den ligger til grunn for hierarkiet.
polymorfisme
Arv er veldig populært på noen språk med statiske typer, fordi det gjør at programmereren kan unngå noen av begrensningene for den statiske typen.
Et objekt som arver fra et annet objekt regnes som en undertype av det objektet. Et eksempel kan være objektene "instruktør" og "student", som hver arver fra "person".
Hvis instruktør og student er av samme persontype, kan du skrive en funksjon som godtar persontypen som en parameter og som fungerer på instruktøren og studentobjektene, fordi de begge er arvinger av personen.
Arvstyper
Unik arv
Når en avledet klasse arver egenskapene og oppførselen til en enkelt baseklasse. Det vil si at en klasse utvides til bare en annen klasse.
Arve på flere nivåer
Henviser til dingsen der du kan arve fra en avledet klasse, noe som gjør denne avledede klassen til baseklasse for en ny klasse. Det vil si at det resulterer når en avledet klasse opprettes fra en annen avledet klasse.
Hierarkisk arv
I denne arven arver mange underklasser fra en enkelt klasse. Det vil si at det skjer når en enkelt baseklasse arves av mer enn en avledet klasse.
Hybridarv
Det er den resulterende arven når en av de tre foregående arvene kombineres (enkelt, hierarkisk og flernivå).
Flere arv
Det tilsvarer arvefiguren når en klasse arver fra mer enn en superklasse. Ulempen med denne typen arv er at den avledede klassen må håndtere avhengigheten den har av to baseklasser.
På den annen side lar denne typen arv programmerere bygge klasser som kombinerer aspektene ved flere klasser og deres tilsvarende hierarkier.
Arvstyper fra en baseklasse
Offentlig arv
Når en klasse er avledet fra en offentlig baseklasse, blir de offentlige medlemmene av baseklassen offentlige medlemmer av den avledede klassen, og de beskyttede medlemmene av baseklassen blir beskyttede medlemmer av den avledede klassen.
De private medlemmene i en superklasse vil aldri være tilgjengelig direkte fra en avledet klasse, men kan nås via samtaler til publikum og beskyttede medlemmer av baseklassen.
Beskyttet arv
Når det opprettes en klasse som arver fra en beskyttet superklasse, vil både de offentlige og beskyttede medlemmene i denne superklassen bli beskyttede medlemmer av den avledede klassen.
Privat arv
Når en underklasse opprettes fra en privat superklasse, vil de offentlige og beskyttede medlemmene av denne superklassen bli private medlemmer av underklassen.
eksempler
Python-eksempel
For å vise hvordan prinsippet om arv fungerer, vil vi ta roboter eller en bedre klasse roboter på programmeringsspråket Python. For å gjøre dette vil det bli spesifisert en klasse kalt RobotMédico (PhysicianRobot), som er avledet fra Robot superklassen.

Hvis du ser på koden til RobotMédico-klassen, kan du se at det ikke er definert noen attributt eller metode i denne klassen.
Siden RobotMedico-klassen er en underklasse av robot, arver den både __init__ og say_hi-metodene i dette tilfellet. Arving av disse metodene betyr at de kan brukes som om de hadde blitt definert i RobotMédico-klassen.
Når en forekomst av RobotMedico opprettes, vil __init__-funksjonen også opprette et navneattributt. Say_hi-metoden kan brukes på objektet "y" til RobotMédico, som det kan sees i resultatet av den forrige koden.
Eksempel i C ++
En klasse kan arve fra mer enn en klasse, noe som betyr at den kan arve data og funksjoner fra flere superklasser. For å definere en avledet klasse bruker du en klassederivasjonsliste for å spesifisere baseklasser.
En klassedivasjonsliste i C ++ navngir en eller flere baseklasser og har følgende form: klasse avledet klasse: tilgangspesifikk baseklasse, der tilgangspesifikator er offentlig, beskyttet eller privat, og baseklasse er navnet på en tidligere definert klasse. Hvis tilgangspesifikator ikke brukes, tas private som standard.
Superklassen "Shape" og dens avledede klasse "Rectangle" kan betraktes som følger:

Når koden ovenfor er kompilert og utført, oppstår følgende utgang: "Totalt areal: 35".
referanser
- Dave Braunschweig (2020). Arv og polymorfisme. Rebus Community. Hentet fra: press.rebus.community.
- Python Course (2020). Arv. Hentet fra: python-course.eu.
- Data Mentor (2020). R Arv. Hentet fra: datamentor.io.
- Tutorials Point (2020). C ++ Arv. Hentet fra: tutorialspoint.com.
- Nettinformasjon (2020). Ulike typer arv. Hentet fra: net-informations.com.
