- •Лабораторная работа №2
- •Основы объектно-ориентированного программирования
- •Инкапсуляция
- •Полиморфизм
- •Абстракция данных
- •Виды классов
- •Структура класса
- •Отношения между классами
- •Области доступа
- •Советы по использованию уровня доступа
- •«Паблик Морозов»
- •Абстрактный метод
- •Абстрактный класс
- •Виртуальный метод
- •Интерфейс
- •Диаграммы классов
- •Задание
Советы по использованию уровня доступа
Обычно область доступа полей класса делают закрытой (private), т.е. доступ к ним разрешается только методам того же класса. Чтобы предоставить пользователям класса значения его полей, используются свойства: они позволяют классу контролировать изменение его полей, например проверять принадлежность заданного значения диапазону допустимых значений.
Когда доступ к полю инкапсулируется процедурами свойства, возможно обновлять код, обрабатывающий изменения значения этого свойства, не нарушая совместимость с существующими пользователями класса. Поэтому принято создавать свойства для доступа к полям класса даже тогда, когда на начальном этапе разработки не требуется никакой дополнительной обработки присваиваемых полю значений.
Примеры использования:
/// <summary>
/// Класс комплексного числа
/// </summary>
class Complex
{
/// <summary>
/// Целая часть числа
/// </summary>
private double re;
/// <summary>
/// Мнимая часть числа
/// </summary>
private double im;
/// <summary>
/// Конструктор с инициализацией
/// </summary>
public Complex(double i_re, double i_im)
{
re = i_re;
im = i_im;
}
/// <summary>
/// Целая часть числа
/// </summary>
public double RE
{
get
{
return re;
}
set
{
re = value;
}
}
/// <summary>
/// Мнимая часть числа
/// </summary>
public double IM
{
get
{
return im;
}
set
{
im = value;
}
}
}
Пример работы с классом:
Complex complex1 = new Complex(1, 1);
Complex complex2 = new Complex();
complex2.IM = 2;
complex2.RE = 2;
complex1.RE = complex2.RE;
«Паблик Морозов»
Паблик Морозов — в объектно-ориентированном программировании шуточное название класса-потомка, который обеспечивает открытый доступ к закрытым полям класса-предка. Наличие объектов типа «Паблик Морозов» говорит об избыточно закрытой конструкции библиотеки — или даже об инверсии абстракции в ней.
Это название — каламбур, основанный на созвучии ключевого слова public (паблик), часто означающего открытый доступ к методам и полям класса, и имени пионера-героя Павлика Морозова, известного тем, что он выдал своего отца-кулака.
Абстрактный метод
Если в процессе проектирования необходимо для родительского класса указать метод, который будет реализован в классах – потомках, но его реализация в родительском классе не нужна, то он объявляется как абстрактный. Другими словами: абстрактный метод не имеет реализации при объявлении.
Пример объявления абстрактного метода:
public class Parent
{
public abstract float Calculate(float parValue);
}
Абстрактный класс
Абстрактным называют класс, содержащий хотя бы один абстрактный метод. Абстрактный метод не реализуется для класса, в котором описан, однако должен быть реализован для его неабстрактных потомков. Особенностью абстрактного класса является то, что нельзя создавать его экземпляры (объекты данного класса). В некоторых языках программирования можно объявлять абстрактные классы без абстрактных методов.
Пример объявления абстрактного класса:
public abstract class Parent
{
}
