Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
7 семестр / Учебники / Все лекции С# / Все лекции С# / Лекция 13_часть2. ООП.Члены класса. Основные свойства ООП.doc
Скачиваний:
171
Добавлен:
24.02.2016
Размер:
143 Кб
Скачать
☆

Члены класса

Разновидности членов класса описывались в предыдущей лекции, напомним это: константы, поля, свойства, методы, конструкторы, и др. Рассмотрим основные из них.

Свойства и поля

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

Представьте себе класс с именем CupOfCoffee (чашка кофе), описывающий чашку кофе. При создании экземпляра этого класса (т. е. при создании экземпляра данного класса) необходимо описать его состояние, для того чтобы экземпляр был осмысленным. В этом случае необходимо использовать такие свойства и поля, которые позволят программе, использующей этот экземпляр, задавать марку кофе, определять, добавлены ли в кофе сахар и молоко, является ли этот кофе растворимым и так далее. В таком случае экземпляр, представляющий чашку кофе, будет обладать определенным состоянием, например, "колумбийский фильтрованный кофе с молоком и двумя кусочками сахара".

Как поля, так и свойства являются типизированными, поэтому информацию, содержащуюся в них, можно хранить в переменных типа string, int и т. п. Однако свойства отличаются от полей тем, что они не обеспечивают непосредственного доступа к данным. Экземпляры классов обладают возможностью изолировать пользователей, которым не требуется точное представление о структуре существующих свойств, от реального устройства своих данных. В примере, если для описания числа кусочков сахара в экземпляре CupOfCoffee использовать поле, то пользователи смогут занести в это поле любое значение, какое им заблагорассудится; если же используется свойство, то можно ограничить это значение диапазоном от 0 до 2.

Для организации доступа к состоянию лучше использовать свойства, а не поля, поскольку в этом случае можно получить больший контроль за происходящим. Режим доступа к свойствам также может быть четко определен для данного объекта. Некоторые свойства могут использоваться в режиме "только чтение", что дает возможность просматривать их, но не изменять (по крайней мере, непосредственно).

Имеется возможность установить режим чтения/записи для свойств, а также задание тип доступа совместно для полей и свойств. Это позволяет определять, какие программы имеют доступ к этим членам: доступны ли они для всего кода (public — общие), только для кода в рамках данного класса (private — частные), или же доступ к ним определяется по более сложной схеме. Чрезвычайно распространенной является практика, когда поля описываются как частные, а доступ к ним организовывается посредством свойств, описанных как общие. Это означает, что код в рамках данного класса обладает непосредственным доступом к данным, хранящимся в поле, а общее свойство скрывает эти данные от внешних пользователей и не позволяет им записывать в эти данные недопустимые значения.

На рисунке 13.2 представлен класс CupOfCoffee, в котором описано пять членов (неважно, свойств или полей — в UML между ними не существует никаких отличий). Каждое вхождение содержит следующую информацию:

    • Тип доступа: символ “+” используется для общего члена, символ “-“ используется для частного члена.

  • Имя члена

  • Тип члена

В качестве разделителя между именем и типом члена используется двоеточие.

CupOfCoffee

+Marka: string

+Instant: bool

+Milk: bool

+Sugar: bool

-Description: string


Рисунок 13.2 - UML-представление данных класса

Методы

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

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

Так, в классе CupOfCoffee можно описать метод с именем AddSugar() (добавить сахар), который обеспечит использование более удобного синтаксиса для увеличения значения свойства сладости кофе, чем присвоение соответствующего значения свойству sugar (сахар).

В UML при описании объектов для изображения функций используется третья секция прямоугольника. Используемый в этом случае синтаксис аналогичен применяемому для полей и свойств, за исключением того, что в конце строки указывается тип возвращаемого значения, а также приводятся параметры. В UML каждый параметр изображается с одним из следующих идентификаторов: in, out или inout. Эти идентификаторы используются для обозначения направления потока данных, при этом out и inout соответствуют применяемым в С# ключевым словам out и ref. Идентификатор in о соответствует такому поведению С#, когда отсутствуют оба ключевых слова. На рисунке 13.3 приведено UML-изображение методов класса.

CupOfCoffee

+Marka: string

+Instant: bool

+Milk: bool

+Sugar: bool

-Description: string

+AddSugar(in amount: byte): byte


Рисунок 13.3 - UML-представление класса (данных и методов)