Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Лекция 8. Виртуальные члены могут быть приватными

Виртуальные члены могут быть приватными. Очевидно, что если бы виртуальный член был бы приватным, его нельзя было бы переопределить в производном классе, так как из производного класса приватный член базового класса не виден. Базовые члены могут определяться как абстрактные (abstract). Абстрактный класс не имеет никаких объектов – экземпляров. У абстрактных классов могут быть абстрактные члены, которые не могут иметь реализацию в этом абстрактном базовом классе. Реализация должна быть представлена в производных классах. В диаграмме UML имена абстрактных классов записываются курсивом.

Запечатанные классы (scaled). Такие классы не могут выступать в роли базового класса и не могут иметь производных классов.

Одним из результатов наследования является наличие в производных классах методов и свойств, совпадающих с базовым классом, поэтому для экземпляров классов с общим базовым классом часто возможно применять идентичный синтаксис.

Cow MyCow = new Cow();

Chicken myChicken = new Chicken();

MyCow.EatFood();

mychicken.EatFood();

Animal myAnimal = myCow(); //полиморфизм
myAnimal.Moo(); //не работает

Cow myNewCow = (Cow)myAnimal;

myNewCow.Moo();

 

Полиморфизм дает существенный выигрыш в количестве кода при выполнении действий с различными объектами, происходящими из одного класса. Полиморфизм может применяться не только в отношении классов, имеющих одинаковый родительский класс, но и в отношении дочерних, внучатых, правнучатых… классов. В c# все классы порождаются от базового класса object, который является корневым в иерархии классов. Наиболее часто используется метод класса object – ToString().

Полиморфизм интерфейсов. Создавать экземпляры интерфейсов таким же образом как экземпляры объектов нельзя, но можно создать переменную типа интерфейса, и затем использовать ее для обращения к методам и свойствам, предоставляемым этим интерфейсом. Предположим, что вместо базового класса Animal, метод EatFood помещен в интерфейс IConsume. Этот интерфейс могут поддерживать и класс Cow и класс Chicken, только каждый из них должен иметь собственную реализацию метода EatFood (так как интерфейсы не содержат реализацию.). после этого к методу можно обращаться следующим образом.

Cow myCow = new Cow();

Chicken myChiken = new Chiken();

IConsume consume Interface;

consume Interface = myCow;

consume Interface.Eat.Food();

consume Interface = myChicken;

consume Interface.Eat.Food();

 

Это пример простого способа для однотипного вызова различных методов, которые не зависят от общего базового класса. Производные классы наследуют интерфейсы, поддерживаемые их базовым классом. В примере интерфейс IConsume может поддерживаться как классом Animal, так и классами Cow и Chicken. Однако, классы с общим базовым классом необязательно имеют общие интерфейсом, и классы имеющие одинаковые интерфейсы необязательно имеют один общий класс. Наследование является простым отношением между объектами (базовый класс полностью отражен в производном классе, производный класс имеет доступ к protected членам базового класса). Однако возможны более сложные ситуации:

1. Включение: один класс содержит другой, отношения похожи на наследование, но дозволено содержащему классу управлять доступом к членам содержащегося класса, и даже выполнять дополнительную обработку перед использованием этих членов.

2. Коллекции: один класс выступает в роли контейнера для нескольких экземпляров другого класса. Это похоже на массивы объектов, но у коллекций имеются специфические возможности: индексация, поиск, сравнение, поиск по паре «ключ - назначение», сортировка и т.д.

 

А)Включение легко достигается использованием поля члена для хранения экземпляра объекта. Это поле может быть общедоступным, и тогда пользователи содержащегося объекта будут иметь доступ к предоставляемым им методам и свойствам, но доступа к внутренним деталям класса через производный класс (как в обычном наследовании не будет)

Б) содержащийся внутри объекта член можно сделать приватным, в этом случае ни один из его членов не будет доступен пользователям непосредственно, даже если они являются общедоступными. В этом случае обращаться к этим членам можно с помощью членов класса – контейнера. Этот способ позволяет полностью управлять тем, какие члены содержащегося внутри класса должны предоставляться, а также выполнять дополнительную обработку в членах класса – контейнера при обращении к членам содержащегося класса.

Пример:

Представление включения в UML.

Класс Cow содержит класс Adder, с общедоступным методом Milk. Объект Cow может вызвать этот метод в составе своего метода SupplyMilk? Но пользователям объекта Cow такие детали не видны. Содержащиеся внутри других классов классы в UML отображаются связующими линиями. В случае простого включения, обозначается мощность включения один к одному: один экземпляр Cow содержит один экземпляр Adder. Для большей наглядности объект Udder может быть изображен в виде приватного поля класса Cow.


<== предыдущая лекция | следующая лекция ==>
Лекция 7. Статические члены класса | Лекция 9. Коллекции – массив, с некоторыми дополнительными возможностями
Поделиться с друзьями:


Дата добавления: 2014-01-20; Просмотров: 331; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.