logo
Проектирование инт-прил / лекции / Проектирование инет приложений

Классы и объекты

Объект - это "кирпичик" в ООП-приложении. Объект инкапсулирует (реализует, включает в себя) часть приложения: процесс, порцию данных или какой-либо более абстрактный объект. Объект объединяет в себе данные и функции для работы с этими данными. Для описания типа объекта в ООП имеется специальное понятие - класс. Определенные классы позволяют создавать в памяти компьютера объекты, то есть реальные именованные экземпляры этих классов.

Термины "класс" и "объект" - не одно и то же. Класс - это только описательная сторона жизни объектов. Чертежи, по которым объект может быть построен. Само по себе описание класса ничего не меняет, просто описывает определенные правила поведения. В противоположность этому, реально созданный в памяти класс является объектом. С объектом можно производить какие-то реальные действия - в соответствии с правилами, описанными в классе.

Объект включает в себя поля данных (свойства) и методы для работы с ними. "Поля" и "свойства" - в общем виде не одно и то же. Поле - это непосредственно данные, которые хранятся внутри объекта и имеют некоторый тип.

// Класс, описывающий чашку кофе.

class CupOfCoffe {

private :

// Поле. Сколько ложек сахара

// содержит данная чашка кофе.

int _sugar = 0;

// Сеттер свойства (процедура, которая

// отрабатывается при установке свойства

// извне. Логика не обязательно должна быть

// простой. Можно, например, проверить, не

// пытается ли программа записать в количество

// ложек сахара отрицательное значение.

void setSugar (int sugar) {

_sugar = sugar;

};

// Геттер свойства (процедура, которая отрабатывается

// при чтении свойства класса.

int getSugar() {

return( _sugar );

};

public:

// Публичное свойство содержания сахара.

property <int, CupOfCoffe> Sugar;

// Конструктор класса

CapOfCoffe() {

Sugar.init( this, getSugar, setSugar );

};

};

А свойство - это, вообще говоря, процедура для установки полей объекта. При этом по синтаксису в некоторых языках программирования "поле" и "свойство" выглядят одинаково, но при установке свойства отрабатывается еще и процедура "сеттера" (а при чтении - "геттера", англоязычные термины setterиgetterприжились в русском языке). В приведенном выше примере класса чашки кофе код программы может выглядеть следующим образом:

// Создание объекта, экземпляра класса "чашка кофе".

// При этом автоматически будет вызван конструктор класса.

CapOfCoffe cap = new CapOfCoffe();

// Это действие вызовет ошибку на этапе компиляции,

// потому что поле _sugar является приватным, обращение

// извне к нему - запрещено. Вызывающая программа просто

// "ничего не знает" о таком поле.

cap._sugar = 2;

// Это действие приведет к отработке приватного метода

// setSugar, в результате чего в поле _sugar окажется

// значение 2.

cap.Sugar = 2;

// Попытка чтения свойства приведет к "скрытой" работе

// геттера

int sugar = cap.Sugar;

Есть "три кита", три базовых принципа, составляющих основу ООП: