Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Лекция 3. Объектно-ориентированные средства

 

3.1 Классы

Для представления объектов в языках С #, Java, C + +, Delphi и т. п. используется понятие класс, аналогичное обыденному смыслу этого слова в контексте «класс членистоногих», «класс млекопитающих», «класс задаче и т. п. Класс является обобщенным понятием, определяющим характеристики и поведение некоторого множества конкретных объектов этого класса, называемых экземплярами класса.

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

Все классы библиотеки.NET, а также все классы, которые создает программист в среде.NET, имеют одного общего предка — класс object и организованы в единую иерархическую структуру. Внутри нее классы логически сгруппированы в так называемые пространства имен, которые служат для упорядочивания имен классов и предотвращения конфликтов имен: в разных пространствах имена мо­гут совпадать. Пространства имен могут быть вложенными, их идея аналогична знакомой вам иерархической структуре каталогов на компьютере.

Любая программа, создаваемая в.NET, использует пространство имен System. В нем определены классы, которые обеспечивают базовую функциональность, напри­мер, поддерживают выполнение математических операций, управление памятью и ввод-вывод.

Обычно в одно пространство имен объединяют взаимосвязанные классы. Напри­мер, пространство System. Net содержит классы, относящиеся к передаче данных по сети, System.Windows.Forms — элементы графического интерфейса пользовате­ля, такие как формы, кнопки и т. д. Имя каждого пространства имен представля­ет собой неделимую сущность, однозначно его определяющую.

3.1.1Классы: основные понятия

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

Описание класса

содержит ключевое слово class, за которым следует его имя,а да­лее в фигурных скобках - тело класса, то есть список его элементов. Кроме того, для класса можно задать его базовые классы (предки) и ряд необязательных ат­рибутов и спецификаторов, определяющих различные характеристики класса:

[ атрибуты ] [ спецификаторы ] classимя-класса [: предки ] тело-класса

Как видите, обязательными являются только ключевое слово class, а также имя и тело класса. Имя класса задается программистом по общим правилам С#. Тело класса— это список описаний его элементов, заключенный в фигурные скобки. Список может быть пустым, если класс не содержит ни одного элемента. Таким образом, простейшее описание класса может выглядеть так:

classDemo {}

Необязательные атрибуты задают дополнительную информацию о классе.

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

Таблица 1.1. Спецификаторы класса
  Спецификатор Описание
  new Используется для вложенных классов. Задает новое описание класса взамен унаследованного от предка. Применяется в иерархиях объектов, рассматривается в главе 8 (см. с. 175)
•') public Доступ не ограничен
  protected Используется для вложенных классов. Доступ только из элементов данного и производных классов
L internal Доступ только из данной программы (сборки)'
  protected internal Доступ только из данного и производных классов или из данной программы (сборки)
  private Используется для вложенных классов. Доступ только из элементов класса, внутри которого описан данный класс
' abstract Абстрактный класс. Применяется в иерархиях объектов, рассматривается в главе 8 (см. с. 181)
s sealed Бесплодный класс. Применяется в иерархиях объектов, рассматривается в главе 8 (см. с. 182)
  static Статический класс. Введен в версию языка 2.0. Рассматривается в разделе «Конструкторы» (см. с. 114)

Объекты создаются явным или неявным образом, то есть либо программистом, либо системой. Программист создаст экземпляр класса с помощью операции new.

Если достаточный для хранения объекта объем памяти выделить не уда­лось, операция new генерирует исключение OutOfMemoryException. Рекомендуется предусматривать обработку этого исключения в программах, работающих с объек­тами большого объема

Для каждого объекта при его создании в памяти выделяется отдельная область, в которой хранятся сто данные. Кроме того, в классе могут присутствовать ста­тические элементы,которые существуют в единственном экземпляре для всех объектов класса. Часто статические данные называют данными класса,а осталь­ные - данными экземпляра.

Функциональные элементы класса не тиражируются, то есть всегда хранятся в единственном экземпляре. Для работы с данными класса используются мето­ды класса (статические методы),для работы с данными экземпляра — методы экземпляра,или просто методы.

Поля и методы являются основными элементами класса. Кроме того, в классе можно задавать целую гамму других элементов: свойства, события, индексаторы, операции, конструкторы, деструкторы, а также типы (рис. 1.1).

Ниже приведено краткое описание всех элементов класса

- Константы класса хранят неизменяемые значения, связанные с классом.

- Полясодержат данные класса.

- Методы реализуют вычисления или другие действия, выполняемые классом или экземпляром.

- Свойстваопределяют характеристики класса в совокупности со способами их задания и получения, то есть методами записи и чтения.

- Конструкторыреализуют действия по инициализации экземпляров или клас­са в целом.

- Деструкторыопределяют действия, которые необходимо выполнить до того, как объект будет уничтожен.

- Индексаторыобеспечивают возможность доступа к элементам класса по их порядковому номеру

- Операции задают действия с объектами с помощью знаков операций.

- События определяют уведомления, которые может генерировать класс.

- Типы — это типы данных, внутренние по отношению к классу.

Рис. 1.1. Состав класса

3.1.2 Присваивание и сравнение объектов

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

Рисунок иллюстрирует ситуацию, когда было создано три объекта, а, b и с, а за­тем выполнено присваивание b = с. Старое значение b становится недоступным и очищается сборщиком мусора. Из этого следует, что если изменить значениеодной величины ссылочного типа, это может отразиться на другой (в данном слу­чае, если изменить объект через ссылку с, объект b также изменит свое значение).

Рис. 1.2. Присваивание объектов

 

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

3.1.3 Данные: поля и константы

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

При описании элементов класса можно также указывать атрибуты и специфика­торы, задающие различные характеристики элементов. Синтаксис описания эле­мента данных приведен ниже:

[ атрибуты ] [ спецификаторы ] [ const ] тип имя [ = начальное_значение ]

Возможные специфика­торы полей и констант перечислены в табл. 1.2. Для констант можно использо­вать только спецификаторы 1-6.

  Спецификатор Описание
  new Новое описание поля, скрывающее унаследованный элемент класса
  public Доступ к элементу не ограничен
  protected Доступ только из данного и производных классов
  internal Доступ только из данной сборки
  protected internal Доступ только из данного и производных классов и из производных классовданной сборки
  private Доступ только из данного класса
  static Одно поле для всех экземпляров класса
  readonly Поле доступно только для чтения
  volatile Поле может изменяться другим процессом или системой

По умолчанию элементы класса считаются закрытыми ( private). Для полей клас­са этот вид доступа является предпочтительным, поскольку ноля определяют внутреннее строение класса, которое должно быть скрыто от пользователя. Все методы класса имеют непосредственный доступ к его закрытым полям.

Поля, описанные со спецификатором static, а также константы существуют в един­ственном экземпляре для всех объектов класса, поэтому к ним обращаются не через имя экземпляра, а через имя класса. Если класс содержит только статические эле­менты, экземпляр класса создавать не требуется.

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

Листинг 1.1. Класс Demo, содержащий поля и константу

using System;

namespace ConsoleApplication1

{

class Demo

{

publicint a = 1; // полеДанных

public const double с= 1.66; // константа

publicstaticstring s = "Demo"; //статическоеполекласса

doubley; // закрытое поле данных

}

class Class1

{

static void Main()

{

Demox = newDemo();//создание экземпляра класса Demo

Console.WriteLine(x.a);// x.a - обращение к полю класса

Console.WriteLine(Demo.c);//Demo.c - обращение к константе

Console.WriteLine(Demo.s); //обращение к статическому полю

}

}

}

Поле у вывести на экран аналогичным образом не удастся: оно является закры­тым, то есть недоступно извне (из класса Classl). Поскольку значение этому полю явным образом не присвоено, среда присваивает ему значение ноль.

Все поля сначала автоматически инициализируются нулем соответствующего типа (например, полям типа int присваивается 0, а ссылкам на объекты — значение null).После этого полю присваивается значение, заданное при его явной инициа­лизации. Задание начальных значений для статических полей выполняется при инициализации класса, а обычных — при создании экземпляра.

Поля со спецификатором readonly предназначены только для чтения. Установить значение такого поля можно либо при его описании, либо в конструкторе.

<== предыдущая лекция | следующая лекция ==>
Лекция 2. Объектно-ориентированное программирование | Ключевое слово this
Поделиться с друзьями:


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


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



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




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