Разлика између састава и наследства

У програмирању кода за вишекратну употребу је употреба постојећег софтвера за изградњу новог софтвера користећи принципе поновне употребе. Поновна употреба кода сматра се основном продуктивном функционалношћу у предузећима која интензивно користе информационе технологије. Промовише се у објектно оријентисаним системима успостављањем односа између класа. Постоје два основна начина за успостављање тих односа у објектно оријентисаном програмирању - Насљеђивање и Састав. Имплементација насљеђивања је један од начина повезивања класа, али ООП пружа нову врсту односа између класа који се назива састав. Успостављањем односа између нових и постојећих класа, нова класа може наследити или уградити код из једне или више постојећих класа.

У ООП-у је наслеђивање методологија којом објекат добија карактеристике једног или више других објеката. То је једно од најмоћнијих алата за спровођење поновне употребе кода у ООП-у. Када се користи наследство, може се створити нова класа успостављањем односа родитељ и дете са постојећим класама. Композиција објекта је алтернатива наслеђивању класа. Употреба објекта унутар другог објекта позната је као састав. У многим приликама желите да користите објект као поље унутар друге класе, јер је лако креирати сложене класе користећи претходно написане, добро дизајниране класе као компоненте. То се назива композиција. Па, и наслеђивање и композиција пружају једнаку функционалност у многим случајевима, композиција објекта је бољи модел поновне употребе од наслеђивања класа. Овај чланак упоређује два приступа.

Шта је наслеђивање?

Наслеђивање је један од најмоћнијих алата у примени поновне употребе кода у објектно оријентисано програмирање. Односи се на функционалност којом један објект стиче карактеристике једног или више других објеката. Насљеђивање у Ц ++ значи да можете креирати класе које добивају њихове атрибуте из постојећих класа. То значи да сте специјализовали класу да бисте створили однос између класа који резултира снажним повезивањем између основних и изведених класа. Имплементација насљеђивања промовира поновну употребу кода јер се из постојећих класа стварају нове класе. Насљеђивање класе такође олакшава модификацију имплементације која се поново користи. Али, наслеђивање класе такође има и слабе стране. Прво, с обзиром да је наслеђивање дефинисано у време превођења, не можете да промените имплементације наслеђене од родитељских класа у време извођења..

Шта је састав?

ООП пружа још један однос између класа који се назива састав, који је такође познат као однос "веза". Ако карактеристике једног објекта морају бити део другог објекта, однос захтева композицију. Да би се саставила класа из постојећих класа, објект сваке класе мора бити проглашен чланом нове класе. Једноставним речима, употреба објекта унутар другог објекта позната је као састав. Много пута бисте могли користити објект као поље унутар друге класе. Користите објект унутар класе у композицији. За разлику од насљеђивања класа, састав објекта се динамички дефинира у току извођења кроз објекте који стјечу референце на друге објекте. Поред тога, композиција пружа бољи начин за коришћење предмета без угрожавања унутрашњих детаља објекта, односно ту је композиција корисна.

Разлика између састава и наследства

Приступ

Иако насљеђивање и састав промовирају поновну употребу кода у објектно оријентисаном систему успостављањем односа између класа и пружају једнаку функционалност на више начина, они користе различите приступе. Помоћу наследства можете да креирате класе које изводе њихове атрибуте из постојећих класа, тако да док наследство користите за креирање класе, можете проширити на постојећу класу. Супротно томе, коришћење објекта унутар другог објекта познато је као композиција. Композиција објекта је алтернатива наслеђивању класа. Ако карактеристике једног објекта морају бити део другог објекта, однос захтева композицију.

Однос

У наслеђивању сте специјализовали класу да бисте створили однос „ис-а“ између класа што резултира снажним повезивањем између основних и изведених класа. Омогућује дизајнирање хијерархије класа и хијерархију започиње с најопћенитијом класом и прелази на специфичније класе. Имплементацијом насљеђивања функције члана из једне класе постају својства друге класе без да их експлицитно кодирају унутар класе. У композицији користите објект унутар класе и сви захтеви за објект се прослеђују објекту. Унутрашњи детаљи нису изложени једни другима у композицији, па је то однос „има-а“.

Имплементација

Насљеђивање класе дефинирано је у вријеме превођења, тако да не можете мијењати имплементације наслијеђене од родитељских класа у вријеме извођења. Будући да насљеђивање излаже поткласу детаљима имплементације родитеља, често прекида енкапсулацију. Све промене у родитељској класи одразиће се у поткласи што може створити проблеме када покушате поново да искористите подкласу. Састав објекта се, напротив, динамички дефинира у току извођења кроз објекте који стјечу референце на друге објекте. А будући да се објектима приступа искључиво преко њихових интерфејса, неће прекинути енкапсулацију. Било који објект може се током извођења заменити другим објектом све док има исти тип.

Састав против наследства: упоредни графикон

Резиме састава и наследства

У многим приликама желите да користите објект као поље унутар друге класе, јер је сложеније класе лакше креирати користећи претходно написане, добро дизајниране класе. Овде користите композицију. Наслеђивање пружа начин поновне употребе кода проширењем класе уз минималан напор, зато је наслеђивање драгоцено средство у успостављању односа између класа. Уопштено, пожељније је користити композицију јер пружа начин употребе објекта без угрожавања унутрашњих детаља објекта који је композиција корисна. Насљеђивање није без проблема, али као и насљеђивање, састав предмета изазива сличне проблеме у погледу стварања и уништавања предмета.