En av de svåraste delarna av att skriva en serie för nybörjare om objektorienterad programmering är att veta var man ska sluta.
Det finns så många ämnen att täcka att vi långsamt kan börja flytta in i riktning mot avancerade programmeringstekniker, och i slutändan försvårar exakt vad vårt avsedda uppdrag var: att få nybörjare i en uppsättning verktyg, strategier och förståelse för början begrepp.
Först noterar du att i det sista inlägget i serien avslutade vi vårt första, fullständiga plugin med objektorienterade tekniker. För det mesta inkapslade det allt som vi har täckt upp genom denna punkt i serien (förutom självklart, arv).
Var noga med att komma ihåg följande artiklar:
Det är mycket, jag vet, men kom ihåg: Seriens mål är att förbereda den absoluta nybörjaren med allt som behövs för att arbeta med PHP och skriva WordPress-plugins med hjälp av objektorienterade tekniker.
För det ändamålet har jag bestämt mig för att börja omsluta denna serie med en tvådelad artikel (med en tredje slutdel som tjänar som en sammanfattning) som ger en segue till nästa utvecklingsämne för aspirerade PHP-programmerare: Arv.
Återigen, för de som är mer erfarna programmerare, är arv inte ett mål ämne för dig. Om du är nybörjare är arvet emellertid ett av de begrepp som är lätta att förstå, lite mer utmanande att implementera (tro det eller ej) och det kan orsaka ännu mer förvirring när det gäller ämnen som polymorfism ( som vi ska prata om senare)
Under de två följande artiklarna strävar jag efter att täcka alla ovanstående tillsammans med provkod för att säkerhetskopiera det. Men innan vi tittar på kod, tycker jag att det är viktigt att förstå begrepp som är viktiga, att titta på några av de steg som är nödvändiga för att förbereda objektorienterad kod för arv.
I den här artikeln ska vi definiera arv, försöka bilda en begreppsmodell av vad som faktiskt pågår, undersöka nyanser av vad som kallas basklasser och underklasser, samt några av de reserverade nyckelorden på språket som måste anpassas för att stödja arv genom outklasser.
Så med det uppsatta som vår färdplan för artikeln, låt oss gå vidare och komma igång.
Till skillnad från ett antal andra programvillkor är arv faktiskt ett ord som beskriver konceptet ganska bra. Direkt från Wikipedia:
I objektorienterad programmering (OOP) är arv när ett objekt eller en klass är baserad på ett annat objekt eller en klass, med samma implementering. Det är en mekanism för kodåteranvändning. Relationerna mellan föremål eller klasser genom arv ger upphov till en hierarki.
Relativt tydligt, eller hur? Men jag tror att vi kan göra bättre.
Tidigare i denna serie pratade vi om hur många av de vanligaste programmeringsspråken använder exempel som djur
och fordon
som ett sätt att demonstrera begreppet objektorienterad programmering.
Tanken bakom objektorienterad programmering är trots allt att vi ska modellera verkliga objekt? Typ. Men hur många gånger har du sett en fysisk Blog_Post
?
Exakt.
Som sådan tycker jag alltid att försöka sätta saker i perspektiv på något som är mycket mer konkret, mer praktiskt och det är närmare relaterat till det innehåll som vi faktiskt kommer att skapa.
Med det sagt, vad är ett lämpligt sätt vi kan beskriva ärft inom ramen för objektorienterad programmering som inte försvinner konceptet genom att använda triviala exempel?
Låt oss försöka detta:
Arv är när en klass tjänar som förälderklass för en barnklass som ger ett antal attribut och metoder som är gemensamma för både föräldern och barnet. dock barnet som förmågan att presentera sina egna attribut.
I citatet ovan använder vi ett par termer som "föräldraklass" och "barnklass", varav vi kommer att klargöra lite, men poängen är att vi bokstavligen kan skapa en hierarki av klasser som ärva information från sina föräldrakurser.
Kanske ännu snyggare, när du arbetar med en barnklass och du vill utnyttja attribut och funktioner definierade i förälderklassen eller basklassen, kan du enkelt göra det utan extra kod.
Men vi går före oss själva. Innan vi gör det, låt oss se till att vi kan få en konceptuell modell av vilket arv som ser ut. Trots att vi skriver kod försöker vi att tillhandahålla en modell som inte bara representerar ett verkligt objekt, men skapar också en relation mellan föremålen också.
Innan vi går längre, låt oss ta en titt på ett mycket enkelt klassdiagram om hur arvet fungerar.
Observera att vi använder tre klasser:Innehåll
som kommer att fungera som basklassen och som representerar en generisk typ av information som innehåller data för andra mer specifika innehållstyper.Kommentar
vilket representerar en kommentar på ett blogginlägg. Denna klass innehåller information som den ärver från Innehåll
och att den definierar i sig själv.Posta
ärver också från Innehåll
vilket representerar ett enda blogginlägg. Den innehåller generell Innehåll
information, men innehåller också sin egen information som är specifik för den klassen.Nu är det tydligt ett förenklat exempel på arv, men i centrum här är hur ärvet fungerar. I en framtida artikel kommer vi att titta på hur instantiering, dataåtkomst och andra funktioner fungerar också.
Men först måste vi förtydliga några villkor och se till att vi har all den rätta informationen.
Som vi har berört tidigare i denna serie finns det ett antal termer som vi har använt som alla är viktiga för att förstå hur de olika arvstyven fungerar tillsammans.
För det ändamålet är det viktigt att definiera några vanliga definitioner för de ord som vi använder inte bara på grund av hur vi använder dem genom hela den här artikeln eftersom du inte bara kommer att se dem använda här, men du går för att se dem använda någon annanstans och du kommer att se dem använda utbytbart i andra artiklar över hela webben:
Detta skall rensa mycket av terminologin kring detta; men om inte, tänk på det i form av ett släktträd där du har föräldrar och barn. Barn ärva egenskaper från sina föräldrar, men föräldrarna arvs inte egenskaper hos sina barn.
Observera också att i programmeringen vill vissa utvecklare introducera det som kallas "multipelt arv" vilket i grunden betyder att en enda klass kan ärva egenskaper och metoder från flera klasser.
Inte bara är detta begränsat i PHP, men det ligger också utanför ramen för den här serien.
För dem som är lite mer bekanta med begreppet arv, så är du troligen också bekant med begreppet abstrakta klasser.
Sedan igen, om du är bekant med begreppet abstrakta klasser, skulle jag argumentera för att du inte är nybörjare och du är inte riktigt målgruppen för innehållet som vi når med den här artikeln.
Så beroende på feedbacken på den här artikeln, den här serien och om andra är intresserade kanske vi kan göra en uppföljningsartikel eller ett par artiklar som täcker detta exakta ämne.
I nästa artikel kommer vi att fortsätta vår diskussion om arv när vi tittar på hur vi implementerar det inom PHP. Vi ska också titta på hur underklasser kan få tillgång till data från sina föräldrar och hur föräldraklasser kan säkra information inom sig själva
Under tiden, var noga med att lämna några synpunkter, frågor och / eller kommentarer om arv i kommentarflödet och jag ser till att adressera dem här eller i nästa post.
Tills dess!