C#

Рекламный модуль
Коньяк courvoisier эксклюзив. Купаж коньяк курвуазье. Courvoisier xo. | Моноблок imac 21 i5.

Понятие наследования

Наследование (inheritance) подобно генеалогическому дереву, которое начинается с прародителей на верхнем уровне и распространяется до их потомков на более низки?-: уровнях. Подобно генеалогическому дереву, наследование может иметь несколько уровней. Однако наследование не абсолютно подобно генеалогии, поскольку для создания генеалогического дерева требуется пара людей. Чтобы объяснять наследование, а также некоторые другие основы объектно-ориентированного программирования, мы должны отталкиваться от нашего примера преобразования валют. Я обещаю, что мы вернемся к нашему основному приложению и соберем это все вместе. Класс использует наследование для получения функциональных возможностей ба¬зового класса и становится подклассом (производным классом) этого базового класса. Наследование, в частности у .NET, имеет древовидную структуру, где прародитель толь¬ко один. Когда вы используете наследование, вы получаете функциональные возмож¬ности по наследству, но вы можете также переопределить (override) функциональные возможности, как показано на рис. 6.1. BMW 530i — привод на задние колеса BMW 530xi — привод на все колеса BMW 530xi Рис. 6.1. Простой пример наследования с двумя уровнями — BMW530J и 530xi Создается впечатление, что на рис. 6.1 приведены фотографии того же самого ззтомобиля, но это две разные модели с существенным различием в приводе. С точки зрения наследования, BMW 530i можно считать прародителем BMW 530xi. На заметку. Порядок следования, родитель-потомок — это моя логика, с которой некоторые мог¬ли бы с этим не согласиться. Это несогласие вполне нормально и является частью процесса объектно-ориентированного проектирования. Первой разработанной вами моделью, вероятно, будет модель с "приводом на задние вшгеса", поскольку она проще, дешевле, а следовательно, популярнее. Впоследствии вы могли бы разработать полноприводную модель. Однако модель с "приводом на все коле-:а~ — это не абсолютно новый автомобиль. Для 530i и 530x1 используются те же шины, двигатель, узлы управления, кресла и т.д. Вообразите, что вы ведете свой BMW ночью в Канаде по заснеженной дороге. Byz; то модель 530i или 530x1, вы использовали бы то же рулевое колесо, указатели повор: та, педаль газа, тормоза и т.д. Но поведение моделей 530i и 530x1 было бы существен но разным — автомобиль с приводом на задние колеса заносит существенно больше чем полноприводной автомобиль. Различие в приводе определило поведение, это зна чит, что пользователь иерархии видит тот же интерфейс (например, методы и свойства), но получает существенно иное поведение. Кроме замены функциональных возможностей, насле¬дование можно использовать и для расширения функцио¬нальных возможностей, как иллюстрируется на рис. 6.2. Это азывается перегрузкой (overloading). Все автомобили на рис. 6.2 связаны, они принадлежат серии 530. Новая модель, BMW 530x1 Sports Wagon, с точ¬ки зрения наследования, основана на функциональных воз¬можностях BMW 530x1. Но вот в чем дело: функциональные возможности модели 530x1 Sports Wagon требуют некоторой корректировки. Например, несмотря на то, что вы нажимае¬те ту же кнопку, чтобы открыть багажник, багажник моде¬ли Sports Wagon немного отличается от багажника моделей 530x1 и 5301, а следовательно, предоставляет водителю не¬много другой пользовательский интерфейс и поведение. Когда вы используете наследование для перегрузки функ¬ций, вы добавляете новые функциональные возможности, обращение к которым происходит так же, но они ведут себя и используются по-другому. При этой форме наследования вы не только изменяете поведение, но и взаимодействие с пользователем. В нашем примере перевода валют мы используем насле¬дование для расширения функциональных возможностей.