Arv mot komposition
Arv och Sammansättning är två viktiga begrepp som finns i OOP (Object Oriented Programming). I enkla termer handlar både Sammansättning och Arv om att ge ytterligare egenskaper eller beteende till en klass. Erfarenhet är förmågan för en klass att ärva egenskaper och beteende från en föräldraklass genom att utvidga den. Å andra sidan är komposition klassens förmåga att innehålla objekt av olika klasser som medlemsdata.
Vad är arv?
Som nämnts ovan är arv en förmåga för en klass att ärva egenskaper och beteende från en föräldraklass genom att utöka den. Erfarenhet tillhandahåller i grunden kodåteranvändning genom att tillåta förlängning av egenskaper och beteende hos en befintlig klass med en ny definierad klass. Om klass A sträcker sig B, kallas klass B förälderklassen (eller superklassen) och klass A kallas barnklassen (eller härledd klass / underklass). I detta exempelscenario kommer A-arvet att erva alla offentliga och skyddade attribut och metoder för superklassen (B). Underklassen kan eventuellt åsidosättas (ge ny eller utvidgad funktionalitet till metoder) beteendet som arvats från förälderklassen.
Arv representerar ett "is-a" -förhållande i OOP. Detta innebär i huvudsak att A är också en B. Med andra ord kan B vara klassen med en generell beskrivning av en viss verklig världsenhet men A anger en viss specialisering. I ett verkligt världsprogrammeringsproblem kan personklassen utökas för att skapa Medarbetarklassen. Detta kallas specialisering. Men du kan också först skapa Medarbetarklassen och sedan generalisera den till en personklass också (dvs generalisering). I det här exemplet kommer medarbetaren att ha alla egenskaper och beteende hos personen (dvs anställd är också en person) och kan innehålla ytterligare funktioner (så person är inte anställd).
Vad är komposition?
Sammansättning är en klasss förmåga att innehålla objekt av olika klasser som medlemsdata. Till exempel kunde klass A innehålla ett objekt av klass B som medlem. Här kan alla offentliga metoder (eller funktioner) som definieras i B exekveras inom klass A. Klass A blir behållaren, medan klass B blir den innehöll klassen. Sammansättning hänvisas också till som Containership. I det här exemplet kan det sägas att klass A består av klass B. I OOP representerar komposition ett "has-a" -förhållande. Det är viktigt att notera att även om behållaren har tillgång till exekvera alla offentliga metoder i den innehöll klassen, kan den inte ändra eller tillhandahålla ytterligare funktionalitet. När det gäller ett verkligt världsprogrammeringsproblem kan ett objekt av klasstextbox vara inrymt i klassformen och det kan således sägas att en blankett innehåller en textbox (eller alternativt är en blankett komponerad av en textbox).
Vad är skillnaden mellan arv och komposition?
Även om arv och sammansättning är två OOP-begrepp, är de helt annorlunda i vad de tillåter programmeraren att uppnå. Erfarenhet är förmågan för en klass att ärva egenskaper och beteende från en föräldraklass genom att utvidga den, medan kompositionen är en klassens förmåga att innehålla objekt av olika klasser som medlemsdata. Om en klass förlängs, ärver den alla offentliga och skyddade egenskaper / beteende och dessa beteenden kan överträffas av underklassen. Men om en klass finns i en annan, får behållaren inte förmågan att ändra eller addera beteendet till det innehåll som finns. Arv representerar ett "is-a" -förhållande i OOP, medan kompositionen representerar ett "has-a" -förhållande.