
- •Программирование и алгоритмические языки. Курс за третий семестр.
- •Введение в объектно-ориентированное программирование (ооп)
- •Идеологический обзор
- •Базовые принципы ооп
- •Наследование имён. Наследование значений.
- •Коллизия
- •Что такое имя процедуры?
- •Ооп как оперирование типами
- •Именование типов в c# Тип данных «класс»
- •Конструкторы и деструкторы
- •И нкапсуляция данных
- •Наследование (краткое введение)
- •Наследование реализации как уточнение семантики типа
- •Пополнение и переопределение методов Отношение пополнения интерфейса
- •Открытие реализации для проектирования классов - опция protected
- •Полиморфизм Полиморфизм как уточнение семантики типа переменной
- •Динамические методы как поддержка полиморфизма- опции static, virtual, override
- •Событийное программирование Обработка событий
- •Идея: Когда что-то вставляется, срабатывает некоторый предикат. Например, после вызывается команда проверки, каскадного удаления или какая-нибудь другая команда. Генераторы и приёмники сообщений
- •Событийное программирование нужно:
- •Событийный стиль в процедурном программировании - управление данными (на примере)
- •Событийное программирование в c# (delegate, event)
- •Введение в компонентное программирование
- •Объекты, реализующие интерфейсы
- •Частный случай общей проблемы взаимодействия программного обеспечения разных производителей на уровне исполняемого кода
- •Базовый интерфейс компонент
- •Проблема множественности иерархий
- •Коллизия имён
- •Коллизия реализации
- •«Симметричное» решение – агрегаты (декартовы произведения классов)
- •Множественное наследование
- •«Асимметричное» решение - именованные интерфейсы
- •Основные отличия интерфейса и абстрактного класса
- •Наследование интерфейса (компонентный подход)
- •Обработка исключений в ооп
- •Определение и генерация исключений в c#
- •Выбрасывание исключений
- •Захват исключения
- •Блок finally
- •Коды программ
Наследование интерфейса (компонентный подход)
-Могут ли разные интерфейсы обязывать реализовывать методы с одинаковыми именами?
Возникающая коллизия имён разрешается обычным образом с помощью точной нотации, явной ссылки на нужный интерфейс.
-Что является значением метода?
-С точки зрения логики - реализация (определение).
-С точки зрения реализации – ссылка на определение
Например, можно реализовать метод присваиванием ему имени, уже определённого к этому времени.
New_Method=Old_ Method- такое присваивание называется отображением или maping.
Наряду с агрегированием в качестве множественного наследования этот способ может трактоваться как определение наследования по умолчанию.
Обработка исключений в ооп
Исключения являются полезным инструментом, который находит код, работающий неожиданным для нас образом.
Пользователю даётся механизм порождения и обработки исключительных ситуаций.
Ошибка - это исключение из правил, выдача желаемого за действительное (вещь в программировании неизбежная по определению).
С формальной стороны, ошибку всегда можно трактовать как вычисление функции вне области определения.
Устойчивость - способность адекватно реагировать на исключительные ситуации (выход за границы области).
Любая процедура имеет два результата: желаемый и error.
P P
X P(X)
error
Рассмотрим контекст операционной среды, в которой работает программа – машина-обработчик. Эта машина не делает ошибок (в идеале), все её функции всюду определены.
С точки зрения этой машины, наличие ошибочной ситуации – фиксация типа ошибки, выдача соответствующего сообщения и передача управления машине в качестве обработчика ошибок.
P P
X P(X)
Машина-обработчик (функции обработки
исключений)
С другой стороны, сама программа есть входной аргумент для машины-обработчика (инструкция для неё).
Таким образом, можно расширить эти инструкции собственными операторами перехвата и обработки исключений.
Прагматика:
Когда этим пользоваться?
Использование обработчиков исключений, как и любых других событий, предполагает явно или неявно деление «клиент-сервер».
Идея: каждый старается не делать собственных и обработать чужие ошибки. Другими словами, сервер обрабатывает ошибки пользователя, а если не может, то возвращает их ему.
Определение и генерация исключений в c#
Синтаксис конструкции try- catch-finally:
try {... }
catch (T1 e1) {...}
...
catch(Tk ek)
{
...
}
finally
{...}
Ключевое слово try определяет охраняемый блок.
Вслед за try-блоком могут следовать catch-блоки.
Catch-блоки называются блоками-обработчиками исключительных ситуаций. Их может быть несколько (могут и отсутствовать).
finally-блок - блок завершения (финализации), который также может отсутствовать.
Вся эта конструкция может быть вложенной, т.е. в состав try-блока может входить конструкция try-catch-finally.