- Karakteristika ved arv
- Hierarki
- polymorfi
- Arvstyper
- Unik arv
- Arv på flere niveauer
- Hierarkisk arv
- Hybrid arv
- Flere arv
- Arvstyper fra en baseklasse
- Offentlig arv
- Beskyttet arv
- Privat arv
- eksempler
- Python-eksempel
- Eksempel i C ++
- Referencer
Den arv i objekt - orienteret programmering er en måde at organisere objekter i et hierarki fra det generelle til det specifikke. Det er den gadget, der bruges til at udvide en klasse til en anden klasse, der bevarer en analog udførelse.
I de fleste klassebaserede objektorienterede sprog får et objekt oprettet gennem arv, kaldet et underordnet objekt, alle egenskaber og opførsel for det overordnede objekt.
Enkelt bevis på arv i objektorientering. Kilde: Pluke / CC0 Creative Commons CC0 1.0 Universal Public Domain
Derfor er det en kvalitet, der repræsenterer forholdet mellem forskellige klasser. Arv gør det muligt for en klasse at have den samme adfærd som en anden klasse og at udvide eller tilpasse denne adfærd til at give en særlig handling til specifikke behov.
Arv kan hjælpe med at repræsentere objekter, der har nogle forskelle og nogle ligheder i den måde, de arbejder på. Du kan placere al den funktionalitet, som objekter har til fælles i en baseklasse, og derefter definere en eller flere underklasser med din egen brugerdefinerede funktionalitet.
Karakteristika ved arv
Arv er en af de vigtigste egenskaber ved objektorienteret programmering, der bruges til at definere en ny klasse fra eksisterende klasser.
Det vil sige, nye klasser kan afledes fra eksisterende baseklasser og tilføje nye funktioner. Du behøver ikke at skrive fra bunden. Derfor giver arv en måde at let genbruge eksisterende kode.
Hvis du allerede har en klasse, der gør næsten alt, hvad du vil, kan du oprette en underklasse, hvor nogle af dens opførsel delvis tilsidesættes, eller måske tilføjes en ny funktionalitet.
En afledt klasse arver alle metoder til basisklassen, undtagen for følgende:
- Konstruktører, destruktører og kopikonstruktører af baseklassen.
- Operatører overbelastet fra baseklassen.
- Grundklasse venlige funktioner.
Hierarki
Som et familietræ gør, fungerer arv til at danne et hierarki af klasser. Det er vigtigt at bemærke, at de attributter, der er bestemt for en baseklasse, automatisk vil være til stede i den afledte klasse. Metoderne til baseklassen fungerer også for derivaterne.
En klasse siges at være en underklasse af den klasse, den arver fra. På den anden side vil denne klasse være din superklasse. Den mest generiske klasse kan betegnes som baseklassen, da den er i bunden af hierarkiet.
polymorfi
Arv er meget populær på nogle sprog med statiske typer, fordi det giver programmereren mulighed for at undgå nogle af begrænsningerne for den statiske type.
Et objekt, der arver fra et andet objekt, betragtes som en undertype af det pågældende objekt. Et eksempel kan være objekterne "instruktør" og "studerende", som hver især arver fra "person".
Hvis instruktør og studerende er af samme persontype, kan du skrive en funktion, der accepterer persontypen som en parameter, og som fungerer på instruktøren og de studerendes objekter, fordi de begge er arvinger.
Arvstyper
Unik arv
Når en afledt klasse arver egenskaberne og opførslen for en enkelt baseklasse. Det vil sige, at en klasse udvider til kun en anden klasse.
Arv på flere niveauer
Henviser til den gadget, hvor du kan arve fra en afledt klasse, hvilket gør denne afledte klasse til baseklassen for en ny klasse. Det vil sige, at det resulterer, når en afledt klasse oprettes fra en anden afledt klasse.
Hierarkisk arv
I denne arv arver mange underklasser fra en enkelt klasse. Det vil sige, det sker, når en enkelt baseklasse er arvet af mere end en afledt klasse.
Hybrid arv
Det er den resulterende arv, når en af de tre foregående arv kombineres (enkelt, hierarkisk og flerplan).
Flere arv
Det svarer til arvsfiguren, når en klasse arver fra mere end en superklasse. Ulempen med denne type arv er, at den afledte klasse bliver nødt til at håndtere den afhængighed, den har af to baseklasser.
På den anden side tillader denne type arv programmører at opbygge klasser, der kombinerer aspekterne ved flere klasser og deres tilsvarende hierarkier.
Arvstyper fra en baseklasse
Offentlig arv
Når en klasse stammer fra en offentlig baseklasse, bliver de offentlige medlemmer af baseklassen offentlige medlemmer af den afledte klasse, og de beskyttede medlemmer af baseklassen bliver beskyttede medlemmer af den afledte klasse.
De private medlemmer af en superklasse vil aldrig være tilgængelige direkte fra en afledt klasse, men kan fås adgang via opkald til offentligheden og beskyttede medlemmer af baseklassen.
Beskyttet arv
Når der oprettes en klasse, der arver fra en beskyttet superklasse, bliver både de offentlige og beskyttede medlemmer af denne superklasse beskyttede medlemmer af den afledte klasse.
Privat arv
Når der oprettes en underklasse fra en privat superklasse, vil de offentlige og beskyttede medlemmer af denne superklasse blive private medlemmer af underklassen.
eksempler
Python-eksempel
For at vise, hvordan princippet om arv fungerer, tager vi robotter eller en bedre klasse af robotter på Python-programmeringssprog. For at gøre dette vil en klasse kaldet RobotMédico (PhysicianRobot) blive specificeret, som er afledt af Robot superklassen.
Hvis du ser på koden til klassen RobotMédico, kan du se, at der ikke er defineret nogen attribut eller metode i denne klasse.
Da RobotMedico-klassen er en underklasse af robot, arver den både __init__- og say_hi-metoderne i dette tilfælde. At arve disse metoder betyder, at de kan bruges som om de var blevet defineret i klassen RobotMédico.
Når der oprettes en forekomst af RobotMedico, opretter funktionen __init__ også en navneattribut. Say_hi-metoden kan anvendes på objektet “y” i RobotMédico, som det kan ses i resultatet af den forrige kode.
Eksempel i C ++
En klasse kan arve fra mere end en klasse, hvilket betyder, at den kan arve data og funktioner fra flere superklasser. For at definere en afledt klasse bruger du en klasseafledningsliste til at specificere basisklasser.
En klasseafledningsliste i C ++ navngiver en eller flere baseklasser og har følgende form: klasse afledt-klasse: adgangsspecifik basisklasse, hvor adgangsspecifikation er offentlig, beskyttet eller privat, og baseklasse er navnet på en tidligere defineret klasse. Hvis adgangsspecifikation ikke bruges, tages private som standard.
Superklassen "Form" og dens afledte klasse "Rektangel" kan betragtes som følger:
Når ovenstående kode kompileres og udføres, forekommer følgende output: "Samlet areal: 35".
Referencer
- Dave Braunschweig (2020). Arv og polymorfisme. Rebus Community. Taget fra: press.rebus.community.
- Python Course (2020). Arv. Taget fra: python-course.eu.
- Data Mentor (2020). R arv. Taget fra: datamentor.io.
- Tutorials Point (2020). C ++ arv. Taget fra: tutorialspoint.com.
- Net-information (2020). Forskellige arvstyper. Fra: net-informations.com.