
- •1. Основные понятия объектно-ориентированного программирования как современной технологии создания программ.
- •Абстракция
- •Наследование
- •Полиморфизм
- •3. Достоинства ооп. Соотношение понятий объекта и класса при объектно-ориентированной разработке программ. Соотношение понятий объекта и класса
- •Достоинства ооп
- •Синтаксис и пример для c#:
- •Элементы класса:
- •6. Производные классы. Наследование свойств как принцип ооп.
- •8. Виртуальные методы. Поддержка полиморфизма.
- •9. Событийная модель как неотъемлемая часть современного программирования. Создание события. Рекомендации по использованию событий.
- •Сфера применения
- •Создание события
- •Механизм работы событий
- •10. Применение объектно-ориентированной технологии программирования в различных языках и средах программирования.
6. Производные классы. Наследование свойств как принцип ооп.
Наследование — это свойство системы, позволяющее описать новый класс на основе уже существующего. Класс, от которого производится наследование, называется базовым, родительским или суперклассом. Новый класс — потомком, наследником или производным классом.
Свойства наследования:
исключение из программы повторяющихся фрагментов кода;
упрощение модификации программы;
упрощение создания новых программ на основе существующих;
использование библиотек классов, когда программист может взять за основу классы, разработанные кем-то другим и создать наследников с требуемыми свойствами.
Производные классы обладают всеми возможностями родительских классов, могут иметь собственные данные и методы, а также могут переопределять методы родительских классов. Если родительский класс – абстрактный, то производный класс обязан переопределять все методы абстрактного класса. В C# нельзя наследовать дочерний класс от нескольких родительских (в C++ - можно). В C# поддерживается наследование от нескольких интерфейсов (при котором необходимо реализовать все методы интерфейса).
7. Объявление производного класса (в одном из известных вам языков, например, C++, C#). Объект производного класса. Доступ к членам базового класса из производного класса.
Синтаксис объявления производного класса:
[спецификатор доступа] [модификатор класса]
class имя_производного_класса : базовый класс
{ тело_класса }
Пример на C#:
// Имеется базовый класс.
public class Parent
{
private int priv;
protected int prot;
// Конструктор базового класса
// Параметр - значение для инициализации
// закрытого поля базового класса.
public Parent(int privValue)
{
priv = privValue;
}
}
// Определяем производный класс
public class Child : Parent
{
/// Конструктор производного класса.
/// privValue -Значение для инициал-ции закрытого поля базового класса
/// protValue -Значение для инициа-ции защищенного поля базового класса
public Child(int privValue, int protValue)
: base(privValue) // Вызов конструктора базового класса
{
// Инициализация защищенного поля базового класса.
base.prot = protValue;
}
}
Доступ из производного класса к членам родительского осуществляется через ключевое слово base. Из производного класса разрешен доступ к public- и protected-членам базового класса. В C# нельзя наследовать дочерний класс от нескольких родительских (в C++ - можно). В C# поддерживается наследование от нескольких интерфейсов.
8. Виртуальные методы. Поддержка полиморфизма.
Виртуальный метод — в ООП метод класса, который может быть переопределён в классах-наследниках так, что конкретная реализация метода для вызова будет определяться во время исполнения. Программисту необязательно знать точный тип объекта для работы с ним через виртуальные методы: достаточно лишь знать, что объект принадлежит классу или наследнику класса, в котором метод объявлен.
Виртуальные методы — один из важнейших приёмов реализации полиморфизма. Они позволяют создавать общий код, который может работать как с объектами базового класса, так и с объектами любого его класса-наследника. Базовый класс может вовсе не предоставлять реализации виртуального метода, а только декларировать его существование. Такие методы называются «чистыми виртуальными» или абстрактными (не имеют тела метода). Класс, содержащий хотя бы один такой метод, тоже будет абстрактным.
Для каждого класса, имеющего хотя бы один виртуальный метод, создаётся таблица виртуальных методов. Каждый объект хранит указатель на таблицу своего класса. Для вызова виртуального метода используется такой механизм:
Синтаксис для C#:
[спецификатор доступа][модификатор метода]
тип_возвращаемого_значения имя_метода (список_параметров)
{
тело_метода;
}
Пример объявления для C# (в базовом классе):
public virtual void SomeMethod(int a, string str) { }
Пример переопределения для C# (в производном классе):
public override void SomeMethod(int a, string str) { }
Виртуальные методы должны иметь тело, но оно может быть пустым (как в примерах – { }). При переопределении виртуального метода необходимо указать тот же модификатор доступа (в примере – public), тип возвращаемого значения (в примере – void), тот же набор параметров (int a, string str).