Een van de moeilijkste onderdelen van het schrijven van een serie voor beginners over objectgeoriënteerd programmeren is weten waar te stoppen.
Er zijn zoveel onderwerpen om aan te pakken dat we langzaam kunnen beginnen met de richting van geavanceerde programmeertechnieken aan te gaan en uiteindelijk af te zien van wat onze beoogde missie was: om beginners te wapenen met een reeks hulpmiddelen, strategieën en inzicht in beginconcepten.
Merk allereerst op dat we in de laatste post in de serie onze eerste, volledige plug-in hebben voltooid met behulp van objectgerichte technieken. Voor het grootste deel heeft het alles ingekapseld dat we in dit deel van de serie hebben verdoezeld (behalve uiteraard overerving).
Hiertoe moet u de volgende artikelen lezen:
Het is veel, ik weet het, maar onthoud: het doel van de serie is om de absolute beginner voor te bereiden met alles wat nodig is om met PHP te werken en WordPress plug-ins te schrijven met behulp van object-georiënteerde technieken.
Daarom heb ik besloten om deze serie te gaan afronden met het artikel in twee delen (met een derde, laatste deel als samenvatting) dat een deel biedt in het volgende onderwerp van ontwikkeling voor aspirant PHP-programmeurs: Inheritance.
Nogmaals, voor degenen die meer ervaren programmeurs zijn, is overerving geen onderwerp voor jou; Als je echter een beginner bent, is overerving een van de concepten die gemakkelijk te bevatten is, een beetje uitdagender om te implementeren (geloof het of niet), en dat kan nog meer verwarring veroorzaken als het gaat om onderwerpen als polymorfisme ( waar we later over zullen praten)
In de volgende twee artikelen probeer ik al het bovenstaande samen met voorbeeldcode te gebruiken om het te ondersteunen. Maar voordat we naar code gaan kijken, denk ik dat het belangrijk is om de concepten van belang te begrijpen, om een paar stappen te bekijken die nodig zijn om objectgerichte code voor te bereiden op overerving.
In dit artikel gaan we overerving definiëren, proberen een conceptueel model te vormen van wat er feitelijk aan de hand is, de nuances onderzoeken van wat bekend staat als basisklassen en subklassen, evenals enkele van de gereserveerde sleutelwoorden in de taal die moet worden aangepast om overerving te ondersteunen via out-klassen.
Dus laten we met die wegleggen als onze routekaart voor het artikel beginnen en beginnen.
In tegenstelling tot een aantal andere programmeertermen, is overerving eigenlijk een woord dat zijn concept redelijk goed beschrijft. Rechtstreeks uit Wikipedia:
Bij objectgeoriënteerd programmeren (OOP) is overerving het geval wanneer een object of klasse is gebaseerd op een ander object of een andere klasse, waarbij dezelfde implementatie wordt gebruikt. Het is een mechanisme voor hergebruik van code. De relaties van objecten of klassen door overerving geven aanleiding tot een hiërarchie.
Relatief duidelijk, toch? Maar ik denk dat we het beter kunnen doen.
Eerder in deze serie hebben we gesproken over hoeveel van de meer gebruikelijke programmeertalen voorbeelden gebruiken zoals Dieren
en voertuigen
als een manier om het concept van objectgeoriënteerd programmeren te demonstreren.
Het idee achter objectgeoriënteerd programmeren is immers dat we echte objecten moeten modelleren? Ja soort van. Maar hoe vaak heb je een fysiek gezien? Blogpost
?
Precies.
Als zodanig probeer ik altijd dingen in het perspectief te plaatsen van iets dat veel tastbaarder en praktischer is, en dat is meer verwant met de inhoud die we feitelijk zullen creëren.
Met dat gezegd, wat is een adequate manier om inheritance te beschrijven binnen de context van object-georiënteerd programmeren dat het concept niet verprutst door het gebruik van triviale voorbeelden?
Laten we dit proberen:
Overname is wanneer een klasse fungeert als de bovenliggende klasse voor een onderliggende klasse die een aantal attributen en methoden biedt die zowel de ouder als het kind gemeenschappelijk hebben; echter, het kind als het vermogen om zijn eigen attributen te introduceren.
In het bovenstaande citaat gebruiken we een aantal termen zoals "ouderklasse" en "kinderklasse", die we in een klein beetje zullen verduidelijken, maar het punt is dat we letterlijk een hiërarchie van klassen kunnen maken die allemaal welke erven informatie uit hun bovenliggende klassen.
Misschien nog netter, wanneer je met een kinderklasse werkt en je wilt profiteren van kenmerken en functies die zijn gedefinieerd in de bovenliggende klasse of de basisklasse, kun je dit eenvoudig doen zonder extra code.
Maar we lopen voorop. Voordat we dat doen, laten we ervoor zorgen dat we een conceptueel model kunnen krijgen van hoe de overerving eruitziet. Ondanks dat we code schrijven, proberen we toch een model te leveren dat niet alleen een echt object vertegenwoordigt, maar ook een relatie tussen de objecten creëert.
Voordat we verder gaan, laten we eens kijken naar een heel eenvoudig klassendiagram over hoe overerving werkt.
Merk op dat we drie klassen gebruiken:Inhoud
die als de basisklasse zal dienen en die een generiek type informatie vertegenwoordigt dat gegevens bevat voor andere, specifiekere soorten inhoud.Commentaar
wat een reactie op een blogpost vertegenwoordigt. Deze klasse bevat informatie waarvan het overerft Inhoud
en dat het zichzelf definieert.Post
erft ook van Inhoud
wat staat voor één blogbericht. Het bevat algemeen Inhoud
informatie, maar bevat ook zijn eigen informatie die specifiek is voor die klasse.Dit is duidelijk een vereenvoudigd voorbeeld van overerving, maar in wezen is hoe overerving werkt. In een volgend artikel zullen we bekijken hoe instantiatie, gegevenstoegang en andere functies ook werken.
Maar eerst moeten we nog enkele termen verduidelijken en ervoor zorgen dat we over alle juiste informatie beschikken.
Zoals we eerder in deze serie hebben besproken, zijn er een aantal termen die we hebben gebruikt en die allemaal essentieel zijn om te begrijpen hoe de verschillende stukken overerving samenwerken..
Daarom is het belangrijk om enkele algemene definities te definiëren voor de woorden die we gebruiken, niet alleen vanwege de manier waarop we ze gebruiken in dit artikel, omdat je ze hier niet alleen zult gebruiken, maar je gaat ook om ze elders te gebruiken te zien en je zult ze door elkaar gebruikt zien worden in andere artikelen op internet:
Deze moeten ruim een deel van de terminologie hieromtrent op; Maar als dat niet het geval is, bedenk het dan in termen van, zeg, een stamboom waar je ouders en kinderen hebt. Kinderen erven eigenschappen van hun ouders, maar ouders nemen geen eigenschappen van hun kinderen over.
Merk ook op dat sommige ontwikkelaars tijdens het programmeren een zogenaamde "multiple inheritance" willen introduceren, wat in feite betekent dat een enkele klasse eigenschappen en methoden van meerdere klassen kan erven..
Dit is niet alleen beperkt in PHP, maar het valt ook buiten het bereik van deze specifieke serie.
Voor degenen die wat meer bekend zijn met het concept van overerving, ben je waarschijnlijk ook bekend met het concept van abstracte klassen.
Aan de andere kant, als u bekend bent met het concept van abstracte klassen, zou ik zeggen dat u geen beginner bent en dat u niet echt de doelgroep bent voor de inhoud die we met dit artikel bereiken.
Dus afhankelijk van de feedback op dit artikel, deze serie en als anderen geïnteresseerd zijn, kunnen we misschien een vervolgartikel of een paar artikelen doen die dit exacte onderwerp behandelen.
In het volgende artikel gaan we door met onze discussie over overerving terwijl we kijken hoe we dit binnen PHP kunnen implementeren. We gaan ook bekijken hoe subklassen toegang hebben tot gegevens van hun ouders en hoe ouderklassen informatie in zichzelf kunnen beveiligen
Zorg er in de tussentijd voor dat je feedback, vragen en / of opmerkingen over overerving achterlaat in de reactiefeed en ik zal ze hier of in het volgende bericht bekijken..
Tot dan!