
- •Программирование и алгоритмические языки. Курс за третий семестр.
- •Введение в объектно-ориентированное программирование (ооп)
- •Идеологический обзор
- •Базовые принципы ооп
- •Наследование имён. Наследование значений.
- •Коллизия
- •Что такое имя процедуры?
- •Ооп как оперирование типами
- •Именование типов в c# Тип данных «класс»
- •Конструкторы и деструкторы
- •И нкапсуляция данных
- •Наследование (краткое введение)
- •Наследование реализации как уточнение семантики типа
- •Пополнение и переопределение методов Отношение пополнения интерфейса
- •Открытие реализации для проектирования классов - опция protected
- •Полиморфизм Полиморфизм как уточнение семантики типа переменной
- •Динамические методы как поддержка полиморфизма- опции static, virtual, override
- •Событийное программирование Обработка событий
- •Идея: Когда что-то вставляется, срабатывает некоторый предикат. Например, после вызывается команда проверки, каскадного удаления или какая-нибудь другая команда. Генераторы и приёмники сообщений
- •Событийное программирование нужно:
- •Событийный стиль в процедурном программировании - управление данными (на примере)
- •Событийное программирование в c# (delegate, event)
- •Введение в компонентное программирование
- •Объекты, реализующие интерфейсы
- •Частный случай общей проблемы взаимодействия программного обеспечения разных производителей на уровне исполняемого кода
- •Базовый интерфейс компонент
- •Проблема множественности иерархий
- •Коллизия имён
- •Коллизия реализации
- •«Симметричное» решение – агрегаты (декартовы произведения классов)
- •Множественное наследование
- •«Асимметричное» решение - именованные интерфейсы
- •Основные отличия интерфейса и абстрактного класса
- •Наследование интерфейса (компонентный подход)
- •Обработка исключений в ооп
- •Определение и генерация исключений в c#
- •Выбрасывание исключений
- •Захват исключения
- •Блок finally
- •Коды программ
Именование типов в c# Тип данных «класс»
Основным элементом программы, созданной в объектно-ориентированном стиле, является класс.
Переменные типа «класс» называются объектами. В реальности определяется не сам объект, а ссылка на него – факт, который в синтаксисе явным образом нигде не указывается.
Семантика: класс - именованный тип данных. Класс определяет тип данных для описания множества объектов с одинаковым набором свойств и поведением.
Синтаксис определения классов:
[атрибуты];
[модификаторы доступа];
class (имя_класса) [: базовый класс [, интерфейсы] ]
{
//поля класса
(список полей Field1,…,Fieldk)
…….
//методы класса
(список объявлений методов с реализацией: Method1,…,Methodn)
…….
// свойства класса
…….
// события класса
…….
// подклассы, делегаты
}, где:
Fieldii – в точности как при описании типа «запись», только с некоторыми дополнительными опциями.
Methodi – заголовок функции с реализацией
Замечание:
Объявление (определение) класса помещается в логически связанное определение имён, т.е. в namespace с определением методов (реализацией, телом функции) и полей.
Для использования представления в C#, сохранённого в другом модуле необходимо осуществить операцию СБОРКИ.
Сборки могут содержать один или несколько модулей. Например, крупные проекты могут быть спланированы таким образом, чтобы несколько разработчиков работали каждый над своим модулем, а вместе эти модули образовывали одну сборку.
Конструкторы и деструкторы
Как переменные динамического типа, сами объекты создаются и уничтожаются в ходе выполнения.
Среди методов класса явно выделяют конструкторы и деструкторы, что явным образом отражается в синтаксисе:
-Constructor (конструктор - процедура создания объекта по ссылке):
Class name_of_the_class
{
…
name_of_the_class (FP); //, где FP – список формальных параметров
…
}
Если класс или структура создаются, то вызывается его конструктор. Конструкторы имеют то же имя, что и класс или структура. Они обычно инициализируют элементы данных нового объекта.
-Destructor (деструктор - метод, который будет вызываться непосредственно перед окончательным уничтожением объекта системой "сборки мусора".):
Class name_of_the_class
{
…
~ name_of_the_class (FP); // , где FP – список формальных параметров
{
// код деструктора
}
…
}
Замечание: система "сборки мусора" в С# освобождает память от лишних объектов автоматически, действуя незаметно и без всякого вмешательства со стороны программиста.
"Сборка мусора" происходит следующим образом:
Если ссылки на объект отсутствуют, то такой объект считается ненужным, и занимаемая им память в итоге освобождается и накапливается. Эта утилизированная память может быть затем распределена для других объектов.
"Сборка мусора" происходит лишь время от времени по ходу выполнения программы. Она не состоится, если существует один или более объектов, которые больше не используются. Следовательно, нельзя заранее знать или предположить, когда именно произойдет "сборка мусора".
Тем не менее инициализация "сборки мусора" вручную в большинстве случаев не рекомендуется, поскольку это может привести к снижению эффективности программы. Кроме того, у системы "сборки мусора" имеются свои особенности — даже если запросить "сборку мусора" явным образом, все равно нельзя заранее знать, когда именно будет утилизирован конкретный объект.
Помимо базовой семантики класса как именованного типа, понятие класса связывается с дополнительными способами описания и использования абстрактных типов, которые обычно формулируются в терминах трёх основных понятий: инкапсуляция, наследование и полиморфизм.