Наследяване срещу Състав
Наследяването и Съставът са две важни концепции, открити в OOP (Обектно-ориентирано програмиране). Казано по-просто: Композицията и Наследяването се занимават с предоставяне на допълнителни свойства или поведение на клас. Наследяването е способността на клас да наследява свойства и поведение от родителски клас, като го разширява. От друга страна, Composition е способността на клас да съдържа обекти от различни класове като данни за членове.
Какво е наследяване?
Както бе споменато по-горе, Наследяването е способността на клас да наследява свойства и поведение от родителски клас, като го разширява. Наследяването по същество осигурява повторно използване на код, като позволява разширяване на свойствата и поведението на съществуващ клас от новоопределен клас. Ако клас A разширява B, тогава клас B се нарича родителски клас (или суперклас), а клас A се нарича дъщерния клас (или производен клас / подклас). В този примерен сценарий клас A ще наследи всички публични и защитени атрибути и методи на суперкласа (B). Подкласът може по избор да отмени (предоставя нова или разширена функционалност на методите) поведението, наследено от родителския клас.
Наследяването представлява връзка „е-а“ в OOP. Това по същество означава, че A също е B. С други думи, B може да бъде класът с общо описание на определена цялост в реалния свят, но А посочва определена специализация. При проблем в реалния свят, класа Person може да бъде разширен, за да създаде класа Служител. Това се нарича специализация. Но бихте могли също така първо да създадете класа Employee и след това да го генерализирате до клас Person (т.е. генерализация). В този пример, Служителят ще има всички свойства и поведение на Лицето (т.е. Служителят също е лице) и може да съдържа някаква допълнителна функционалност (така че Лицето не е служител) също.
Какво е състав?
Композицията е способността на клас да съдържа обекти от различни класове като данни за членове. Например клас A може да съдържа обект от клас В като член. Тук всички публични методи (или функции), дефинирани в B, могат да бъдат изпълнени в клас А. Клас A се превръща в контейнер, докато клас B се превръща в съдържащ клас. Съставът се нарича също Контейнерство. В този пример може да се каже, че клас А е съставен от клас Б. В OOP, Съставът представлява връзка „има-а“. Важно е да се отбележи, че въпреки че контейнерът има достъп за изпълнение на всички публични методи от съдържащия се клас, той не е в състояние да променя или предоставя допълнителна функционалност. Когато става въпрос за проблем с програмирането в реалния свят, обект от клас TextBox може да се съдържа във класовата форма и по този начин може да се каже, че формуляр съдържа TextBox (или алтернативно, формулярът е съставен от TextBox).
Каква е разликата между Наследяване и Състав?
Въпреки че Наследяването и Съставът са две концепции за OOP, те са доста различни в това, което позволяват на програмиста да постигне. Наследяването е способността на клас да наследява свойства и поведение от родителски клас, като го разширява, докато Composition е способността на клас да съдържа обекти от различни класове като данни за членове. Ако клас е разширен, той наследява всички обществени и защитени свойства / поведение и тези поведения могат да бъдат отменени от подклас. Но ако клас се съдържа в друг, контейнерът не получава способността да променя или добавя поведение към съдържащия се. Наследяването представлява връзка „е-а“ в OOP, докато Съставът представлява връзка „има-а“.