КАТЕГОРИИ: Архитектура-(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. Класс можно описывать непосредственно внутри пространства имен или внутри другого класса. В последнем случае класс называется вложенным. В зависимости от места описания класса некоторые из этих спецификаторов могут быть запрещены.
Объекты создаются явным или неявным образом, то есть либо программистом, либо системой. Программист создаст экземпляр класса с помощью операции new. Если достаточный для хранения объекта объем памяти выделить не удалось, операция new генерирует исключение OutOfMemoryException. Рекомендуется предусматривать обработку этого исключения в программах, работающих с объектами большого объема Для каждого объекта при его создании в памяти выделяется отдельная область, в которой хранятся сто данные. Кроме того, в классе могут присутствовать статические элементы,которые существуют в единственном экземпляре для всех объектов класса. Часто статические данные называют данными класса,а остальные - данными экземпляра. Функциональные элементы класса не тиражируются, то есть всегда хранятся в единственном экземпляре. Для работы с данными класса используются методы класса (статические методы),для работы с данными экземпляра — методы экземпляра,или просто методы. Поля и методы являются основными элементами класса. Кроме того, в классе можно задавать целую гамму других элементов: свойства, события, индексаторы, операции, конструкторы, деструкторы, а также типы (рис. 1.1). Ниже приведено краткое описание всех элементов класса - Константы класса хранят неизменяемые значения, связанные с классом. - Полясодержат данные класса. - Методы реализуют вычисления или другие действия, выполняемые классом или экземпляром. - Свойстваопределяют характеристики класса в совокупности со способами их задания и получения, то есть методами записи и чтения. - Конструкторыреализуют действия по инициализации экземпляров или класса в целом. - Деструкторыопределяют действия, которые необходимо выполнить до того, как объект будет уничтожен. - Индексаторыобеспечивают возможность доступа к элементам класса по их порядковому номеру - Операции задают действия с объектами с помощью знаков операций. - События определяют уведомления, которые может генерировать класс. - Типы — это типы данных, внутренние по отношению к классу.
3.1.2 Присваивание и сравнение объектов Механизм выполнения присваивания один и тот же для величин любого типа, как ссылочного, так и значимого, однако результаты различаются. При присваивании значения копируется значение, а при присваивании ссылки — ссылка, поэтому после присваивания одного объекта другому мы получим две ссылки, указывающие на одну и ту же область памяти (рис. 1.2). Рисунок иллюстрирует ситуацию, когда было создано три объекта, а, b и с, а затем выполнено присваивание b = с. Старое значение b становится недоступным и очищается сборщиком мусора. Из этого следует, что если изменить значениеодной величины ссылочного типа, это может отразиться на другой (в данном случае, если изменить объект через ссылку с, объект b также изменит свое значение). Рис. 1.2. Присваивание объектов
Аналогичная ситуация с операцией проверки на равенство. Величины значимого типа равны, если равны их значения. Величины ссылочного типа равны, если они ссылаются на одни и те же данные (на рисунке объекты b и с равны, но а не равно b даже при равенстве их значений или если они обе равны null). 3.1.3 Данные: поля и константы Данные, содержащиеся в классе, могут быть переменными или константами. Переменные, описанные в классе, называются полями класса. При описании элементов класса можно также указывать атрибуты и спецификаторы, задающие различные характеристики элементов. Синтаксис описания элемента данных приведен ниже: [ атрибуты ] [ спецификаторы ] [ const ] тип имя [ = начальное_значение ] Возможные спецификаторы полей и констант перечислены в табл. 1.2. Для констант можно использовать только спецификаторы 1-6.
По умолчанию элементы класса считаются закрытыми ( 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 предназначены только для чтения. Установить значение такого поля можно либо при его описании, либо в конструкторе.
Дата добавления: 2014-01-06; Просмотров: 429; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |