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