В програмирането кодът за многократна употреба е използването на съществуващ софтуер за изграждане на нов софтуер, като се използват принципите на повторната употреба. Използването на кодове се счита за основна продуктивна функционалност в бизнеса с интензивни информационни технологии. Популяризира се в обектно-ориентираните системи чрез установяване на връзки между класовете. Има два основни начина за установяване на тези взаимоотношения в обектно-ориентираното програмиране - Наследяване и Композиция. Внедряването на наследяването е един от начините за свързване на класовете, но OOP предоставя нов вид връзка между класовете, наречен състав. Чрез установяване на връзка между нови и съществуващи класове, нов клас може да наследи или вгради кода от един или повече съществуващи класове.

В OOP наследяването е методологията, чрез която даден обект придобива характеристиките на един или повече други обекти. Той е един от най-мощните инструменти за прилагане на повторно използване на код в OOP. При използване на наследяване може да се създаде нов клас чрез установяване на връзки родител-дете със съществуващите класове. Съставът на обекта е алтернатива на наследяването на класа. Използването на обект в друг обект е известно като композиция. В много случаи бихте искали да използвате обект като поле в друг клас, защото е лесно да създавате сложни класове, като предварително сте написали добре проектирани класове като компоненти. Това се нарича композиция. Е, и наследяването, и композицията осигуряват еквивалентна функционалност в много случаи, обектната композиция е по-добър модел за повторно използване от класическото наследяване. Тази статия сравнява двата подхода.

Какво е наследяване?

Наследяването е един от най-мощните инструменти за прилагане на повторно използване на кода в обектно-ориентираното програмиране. Той се отнася до функционалността, чрез която един обект придобива характеристиките на един или повече други обекти. Наследяването в C ++ означава, че можете да създавате класове, които извличат техните атрибути от съществуващи класове. Това означава, че сте специализирали клас, за да създадете взаимоотношение между класовете, което води до силно свързване между базовите и производни класове. Внедряването на наследяване насърчава повторното използване на кода, защото от съществуващите класове се създават нови класове. Наследяването на класове също улеснява модифицирането на повторната употреба. Но наследяването на класове има и някои недостатъци. Първо, тъй като наследяването е дефинирано по време на компилиране, не можете да промените реализациите, наследени от родителските класове по време на изпълнение.

Какво е състав?

OOP осигурява още една връзка между класовете, наречена композиция, която е известна също като има отношение. Ако характеристиките на един обект трябва да бъдат част от друг обект, връзката изисква композиция. За да състави клас от съществуващите класове, обект от всеки клас трябва да бъде деклариран като член на новия клас. С прости думи, използването на обект в друг обект е известно като композиция. Много пъти може да искате да използвате обект като поле в друг клас. Използвате обект вътре в клас по състав. За разлика от наследяването на класове, композицията на обекта се определя динамично по време на изпълнение чрез обекти, придобиващи препратки към други обекти. Освен това, композицията осигурява по-добър начин за използване на обект, без да се компрометират вътрешните детайли на обекта, именно там композицията е полезна.

Разлика между състава и наследяването

Приближаване

Докато както наследяването, така и съставът насърчават повторното използване на кода в обектно-ориентираната система чрез установяване на връзки между класове и те осигуряват еквивалентна функционалност по много начини, те използват различни подходи. С наследяването можете да създавате класове, които извличат техните атрибути от съществуващите класове, така че докато използвате наследяване за създаване на клас, можете да разширите съществуващ клас. Напротив, използването на обект в друг обект е известно като композиция. Съставът на обекта е алтернатива на наследяването на класа. Ако характеристиките на един обект трябва да бъдат част от друг обект, връзката изисква композиция.

връзка

По наследство вие специализирате клас, за да създадете връзка „е-а” между класовете, което води до силно свързване между базовите и производни класове. Тя дава възможност да се проектира йерархия на класовете, а йерархията започва с най-общия клас и се преминава към по-специфични класове. При осъществяването на наследяване функциите на членове от един клас стават свойства на друг клас, без да ги кодират изрично в рамките на класа. По състав използвате обект вътре в клас и всички заявки към обекта се препращат към обекта. Вътрешните детайли не са изложени един на друг в композиция, така че това е взаимоотношение "има-има".

изпълнение

Наследяването на класове се определя по време на компилиране, така че не можете да промените реализациите, наследени от родителските класове по време на изпълнение. Тъй като наследяването излага подклас към подробности за прилагането на родителя му, то често нарушава капсулирането. Всички промени в родителския клас ще се отразят в подкласа, което може да създаде проблеми при опит за повторно използване на подклас. Обратната композиция на обекта се определя динамично по време на изпълнение чрез обекти, придобиващи препратки към други обекти. И тъй като до обектите се осъществява достъп единствено чрез техните интерфейси, той няма да прекъсне капсулирането. Всеки обект може да бъде заменен по време на изпълнение от друг обект, стига да има същия тип.

Състав срещу Наследяване: Сравнителна диаграма

Обобщение на състава срещу наследството

В много случаи бихте искали да използвате обект като поле в друг клас, тъй като сложните класове са по-лесни за създаване, като се използват предварително написани, добре проектирани класове. Това е мястото, където използвате композиция. Наследяването предоставя начин за повторно използване на код чрез разширяване на клас с минимални усилия, затова наследяването е ценен инструмент за установяване на връзки между класовете. Като цяло е за предпочитане да се използва композиция, тъй като предоставя начин за използване на обект, без да се компрометират вътрешните детайли на обекта, където композицията е полезна. Наследяването не протича без проблеми, но подобно на наследяването, обектната композиция поражда подобни притеснения относно производителността по отношение на създаването и унищожаването на обекти.

Препратки

  • Кредит за изображение: https://bg.wikipedia.org/wiki/Inheritance_(object-oriented_programming)#/media/File:Multilevel_Inheritance.jpg
  • Кредит за изображение: https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/AggregationAndComposition.svg/500px-AggregationAndComposition.svg.png
  • Булка, Дов и Дейвид Мейу. Ефективен C ++: Техники за програмиране на ефективността. Бостън, Масачузетс: Адисън-Уесли, 2000. Печат
  • Гама, Ерих. Модели на проектиране: елементи на многократно използван обектно-ориентиран софтуер. Лондон: Pearson Education, 1995. Печат
  • Ганеш, С. Г. 60 съвета за обектно ориентирано програмиране. NYC: Tata McGraw-Hill Education, 2007. Печат
  • Фарел, Джойс. Обектно-ориентирано програмиране с използване на C ++. Бостън, Масачузетс: Cengage, 2008. Печат