Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Ватсон К. -> "С#" -> 87

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 81 82 83 84 85 86 < 87 > 88 89 90 91 92 93 .. 404 >> Следующая


173

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

К примеру, класс cow может содержать в себе класс udder (вымя) с общим методом Milk (молоко). Объект cow может обращаться к этому методу так, как ему это необходимо, наприуер, как к составной части своего метода SupplyMilkO, однако эти детали не будут видимы (важны) для пользователей объекта cow.

Содержащийся класс может быть изображен в UML с использованием ассоциативной линии,

В случае простого содержания мы помечаем концы этой линии единицами, которые свидетельствуют

о взаимоотношениях "один к одному” (один экземпляр объекта Cow содержит в себе один экземпляр объекта udder). Мы можем также показать, что содержащийся объект класса udder является частным полем класса cow (см. рис. справа).

Семейства

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

Animal[1 animals ¦ new Animal(5);

Семейства представляют собой массивы со всякими дополнениями. Семейства реализуются в виде классов во многом схоже с другими объектами, В качестве имени для них очень часто используется имя хранящихся в них объектов в форме множественного числа: например, класс с именем Animals, предназначенный для хранения семейства объектов Animal,

Основное отлнчне семейств от массивов заключается в том, что в семействах реализуются дополнительные функциональные возможности, такие как методы Add() (добавление) н Remove о (удаление), предназначенные для добавления н удаления элементов семейства. Обычно реализуется и свойство item (элемент), которое возвращает элемент по его индексу, В большинстве случаев это свойство воплощается таким способом, который предусматривает и более изощренные методы доступа, Например, существует возможность организовать Animals так, чтобы к объектам можно было обращаться по имени.

____ В UML все это изображается так, как показано на рисунке слева. Здесь не

представлены элементы, поскольку рисунок иллюстрирует взаимоотношения. Цифры на концах соединительной линии в данном случае означают, что в од-1 ном объекте Animals может содержаться ноль н более объектов Animal.

Более подробно семейства будут рассматриваться в главе 11.

Перегрузка операторов

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

Animals

0..* Anlmil




Udder

+MilKQ

_____________Cow________

¦KontalnadUddw: Udder +M00O

¦SuppjyMifcQ____________
174

Глава 8

для объектов, являющихся экземплярами наших собственных классов. Это вполне допустимо, поскольку в классах могут содержаться ннструкцнн, касающиеся интерпретации этих операторов.

Например, мы можем добавить в иаш класс Animal новое свойство с именем weight (вес), В этом случае мы получаем возможность сравнивать вес животных:

if (cowA.WeighL > cowB.Weight}

{

}

Применив перегрузку оператора, мы можем включить в него логику, которая позволит использовать свойство weight неявно, так что код можно будет записать следующим образом:

i? (cowA > cowB)

{

)

В этом случае оператор > является перегружаемым. Перегружаемый оператор — это такой оператор, для которого написан определяющий его работу код, являющийся составной частью определения одного из классов, в операциях над которыми он используется. В примере, приведенном выше, использованы два объекта класса cow, поэтому определение перегружаемого оператора содержится в классе Cow. Мы можем аналогичным образом описать перегружаемые операторы для работы с объектами разных классов; в этом случае один из классов (или сразу оба) будет содержать соответствующий код.

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

С тем, каким образом этого можно добиться, мы познакомимся в главе I 1.

События

Объекты могут создавать (и получать) события в процессе своей работы. События — это важные явления, с которыми мы можем работать в других местах кода и которые аналогичны исключительным ситуациям (но обладают более широкими возможностями), К примеру, нам может потребоваться, чтобы какой-либо специальный код выполнялся в тех случаях, когда объект Animal добавляется в семейство Animals, причем этот код не является ни составной частью класса Animals, ни кодом, в котором осуществляется вызов метода Add(), В этом случае нам придется воспользоваться обработчиком событий, который представляет собой специальный вид функции, вызывающейся в тот момент, когда происходит событие. При этом потребуется настроить этот обработчик таким образом, чтобы он ожидал наступления интересующих нас событий.
Предыдущая << 1 .. 81 82 83 84 85 86 < 87 > 88 89 90 91 92 93 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.