- •Основные понятия и принципы ооп
- •Абстракция:
- •Инкапсуляция:
- •Аспекты платформы .Net Framework
- •Эволюция и основные возможности c#
- •Структура программы и синтаксис конструкций c#
- •Понятие семантики в математике и программировании
- •Теория вычислений д.Скотта. Семантика c#
- •Понятие класса и объекта. Концептуальная модель
- •Классы, поля, методы в c#
- •Определение типов. Классификация систем типизации
- •Система типов cts. Базисные типы
- •Пространство имен. Преобразование типов
- •Наследование в ооп
- •Базовые и производные классы в c#
- •Понятие инкапсуляции в математике и программировании. Описание и применение инкапсуляции в c#
- •Виды области видимости. Рекомендации
- •Понятие полиморфизма
- •Интерфейсы, их связь с абстрактными классами. Реализация
- •Понятие события в математике и программировании. Моделирование событий
- •Делегаты. События как особый вид делегатов
- •Исключения и их обработка в c#
- •Графический интерфейс Windows Forms. Программные компоненты и модель
- •Основные классы. Иерархия классов. Основные контролы
- •Создание пользовательских компонентов
Виды области видимости. Рекомендации
Понятие полиморфизма
Работы:
1934 – Черч – изобрёл лямбда- счисление
1936 – Стратегия вызова по имени или значению
1960 – Лендин– SECD машина
1969 – Хиндли- Полиморфные системы типов
1978 – Милнер- предл. расширить систему полиморфной типизации для ЯП ML
1989-90- Кук, Кэннинг, Хилл и др. исследовали полиморфизм в ООП
Полиморфизм позволяет переопределять реакцию объекта производного класса на метод, определенный в базовом классе.
Преимущества полиморфизма:
унификация обработки объектов различной природы
снижение стоимости ПО
повторное использование кода
интуитивная прозрачность исходного текста
строгое математическое основание
концепция является универсальной и в равной степени применимо в ООП
Методы вызова процедур. Абстрактные типы данных
Методы вызова процедур:
Вызов по значению:
Формальный параметр является копией фактического параметра
Фактический параметр является выполняемым
Вызов по имени (ссылке)
Формальный параметр является подстановкой фактического параметра
Фактический параметр должен быть переменной, формальный параметр является копией фактического параметра
Вызов по необходимости
Значение не передается вызывающей функции
Не следует использовать в методах до того, как значение будет получено
Передача параметров
По умолчанию параметры передаются по значению
Out и ref позволяют передавать параметры по ссылке
Out – можно не инициализировать
Ref – необходимо инициализировать в вызываемом методе, а в вызываемом можно как читать так и записывать
Перезагрузка методов
Исполнение методов, используемых одинаковые имена
Изменение числа, типов и последовательности параметров
можно использование Sqr(int) и Sqr(long)…
Список параметров
В с# можно описывать методы со списком параметров
Для задания параметра, который представляет собой список, используют массив
Компилятор передаёт параметр как массив заданного типа
Абстрактные структуры данных. «Запечатанные» классы
Динамическое и статическое связывание. Виртуальные классы и методы
Динамическое связывание означает то, что выбор вызываемого метода определяется не на этапе компиляции, а на этапе выполнения программы.
Сокрытие методов – используется ключевое слово new в дочерних классах.
Сложное динамическое связывание:
virtual – может быть изменён в наследниках
override – перепис-т
Требования к методам с приоритетами:
Свойства и индексаторы также могут иметь приоритет (virtual, override)
Статические методы не могут иметь приоритета
Только методы, описанные как виртуальные могут иметь приоритет в производных классах
Методы с приоритетами необходимо описывать как override
«Запечатанные» классы:
Такой класс, который не может иметь наследников
Описывается ключевым словом Sealed
Sealed может быть применено к классам и методам
Преимущества:
Безопасность
Эффективность
Преимущества полиморфизма:
унификация обработки объектов различной природы
снижение стоимости ПО
повторное использование кода
интуитивная прозрачность исходного текста
строгое математическое основание
концепция является универсальной и в равной степени применимо в ООП