- •Ооп, как идеология программирования. Отличия от предшествующих подходов, применяемых в программировании ранее. Полный.
- •Основные понятия ооп: класс, объект, поле, свойство, метод, событие. Реализация событий с помощью модели делегатов. Полный.
- •Понятие класса в ооп. Синтаксис объявления класса. Члены класса. Полный.
- •Объекты в ооп. Принадлежность объекта типу (связь между типом и объектом). Жизненный цикл объектов: создание и разрушение объектов. Garbage Collector и разрушение объектов. Полный.
- •Конструкторы: понятие, назначение, примеры применения. Параметризованные конструкторы. Конструкторы «по-умолчанию». Скрытые (private) конструкторы. Полный.
- •Инкапсуляция: понятие, назначение, примеры применения. Ограничение области видимости членов класса (private, public, protected, internal). Полный.
- •Инкапсуляция. Реализация механизма инкапсуляции через свойства. Функции-аксессоры (set, get). Отсутствие или ограничение области видимости одного из аксессоров. Почти ничего.
- •Наследование: понятие, назначение, примеры применения. Поведение различных членов класса при наследовании. Совпадения сигнатур методов при наследовании. Неполный.
- •Агрегация: понятие, назначение, примеры применения. Отличия от наследования. Жизненный цикл агрегируемых объектов. Полный (?).
- •Методы класса. Сигнатура метода. Абстрактные (abstract), виртуальные (virtual) и перезаписанные (override) методы. Статические (static) методы классов и особенности их применения. Полный.
- •Функциональный тип – делегаты: понятие, назначение, примеры применения. Функция, как экземпляр делегата. Делегат, как свойство класса. Неполный.
- •Программный проект: консольный, оконный. Файлы, составляющие проект. Исполняемые файлы (*.Ехе). Понятие «сборки» в .Net. Ничего.
- •Переменные и выражения. Области видимости и жизни переменных. Глобальные и локальные переменные. Константы. Полный.
- •Структуры (struct) и перечисления (enum). Отличия структур от классов. Полный.
Инкапсуляция. Реализация механизма инкапсуляции через свойства. Функции-аксессоры (set, get). Отсутствие или ограничение области видимости одного из аксессоров. Почти ничего.
Инкапсуля́ция — свойство языка программирования, позволяющее пользователю не задумываться о сложности реализации используемого программного компонента (то, что у него внутри), а взаимодействовать с ним посредством предоставляемого интерфейса (публичных методов и членов), а также объединить и защитить жизненно важные для компонента данные. При этом пользователю предоставляется только спецификация (интерфейс) объекта.
Наследование: понятие, назначение, примеры применения. Поведение различных членов класса при наследовании. Совпадения сигнатур методов при наследовании. Неполный.
Классы могут наследоваться друг от друга. Класс-наследник (потомок) — класс, включающий поля и методы своих родителей (некоторые или все). Класс-родитель (базовый / суперкласс) — класс, на основе которого создаются другие классы.
Класс-потомок получает все поля и методы класса-родителя, но может дополнять их собственными, либо переопределять уже имеющиеся.
Большинство языков программирования поддерживает только единичное наследование (класс может иметь только один класс-родитель), лишь в некоторых допускается множественное наследование — порождение класса от двух или более классов-родителей.
Множественное наследование создаёт целый ряд проблем, как логических, так и чисто реализационных, поэтому в полном объёме его поддержка не распространена. Вместо этого в 1990-е годы появилось и стало активно вводиться в объектно-ориентированные языки понятие интерфейса.
Интерфейс — это класс без полей и без реализации, включающий только заголовки методов. Если некий класс наследует (или, как говорят, реализует) интерфейс, он должен реализовать все входящие в него методы. Использование интерфейсов предоставляет относительно дешёвую альтернативу множественному наследованию.
Взаимодействие объектов в большинстве случаев обеспечивается вызовом ими методов друг друга.
Если у класса нет родителей, он по умолчанию наследуется классом “Object”. Если у класса без родителей не определен конструктор, он автоматически наследует конструктор класса “Object”.
“Object” — исходный базовый класс всех классов.
Агрегация: понятие, назначение, примеры применения. Отличия от наследования. Жизненный цикл агрегируемых объектов. Полный (?).
Агрегация — технология, позволяющая использовать объект в качестве поля другого объекта.
Объектом-агрегатором (составным объектом) называется объект, объединяющий в себе несколько объектов. Агрегируемыми объектами называются объекты, которые объединяются в других объектах.
При этом, если удалить объект-агрегатор, удалятся и все включенные в него объекты.
Различия между агрегацией и наследованием:
При агрегации добавляются одно или больше полей для различия объектов. При наследовании это необязательно, т. к. наследник может включать все члены суперкласса и методы могут быть переопределены.
При наследовании создается отдельный класс, при агрегации нет.