Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
tekhn_progr3.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
951.81 Кб
Скачать

3. Объектно-ориентированное программирование

3.1 Объект

Наиболее важное понятие ООП – это объект. Объект – это логическая единица, которая содержит данные и правила (методы) обработки этих данных.

В С++ в качестве правил выступают функции, обрабатывающие эти данные.

Внутри объекта данные и функции могут быть частными или приватными (private), защищенным (protected) и общими (public) [4-10]. Объектно-ориенти­рованные языки характеризуютя абстракцией типов и обладают следующими важнейшими характеристиками:

1) инкапсуляцией;

2) наследованием;

3) полиморфизмом.

Инкапсуляция – это слияние данных и функций, работающих с этими данными, порождающее абстрактные типы данных, определяемые пользователем.

В терминологии С++ эти абстрактные типы данных называются классами. Концепция классов отражает принцип пакетирования: данные и функции, которые манипулируют этими данными, объединяются в единый пакет; устанавливаются специальные правила доступа к элементам пакета (функциям и данным). Максимально изолируются друг от друга интерфейс и реализация, отражающая всю совокупность действий, необходимых для поддержки интерфейса.

Наследование позволяет одним объектам приобретать свойства и атрибуты других объектов, строить иерархию объектов, переходя от более общего к частному, уточняя и конкретизируя объект. Наследование обеспечивает общность интерфейса между базовыми и производными классами. Базовый класс является родителем, а производный – ребенком. Родитель передает все лучшее, что он имеет, а ребенок наследует это лучшее и дополняет его чем-то своим, индивидуальным. Производный класс является более мощным, чем его базовый класс. Использование данного принципа позволяет развивать и совершенствовать программные продукты, используя в них идеи предшествующих программ (например, развитие библиотек классов) без изменения их исходного кода и без повторной компиляции.

Полиморфизм – это метод использования одного и того же имени для выполнения различных действий. Например, + – это сложение для базовых типов языка, а для строк – это переопределение операций.

 Другое применение полиморфизма связано с применением так называемых виртуальных функций. При этом использовуется одно и то же имя для выражения разных действий в базовом и производных классах. Полиморфизм в С++ поддерживается как во время компиляции, так и во время выполнения программы.

Одним из главных понятий языка является понятие класса. Класс – это расширенное понятие структуры в языке С. Он позволяет создавать типы и определять функции, которые задают поведение типа. Каждый представитель класса называется объектом.

Определение класса напоминает определение структуры за исключением следующего:

– класс обычно содержит одну или несколько спецификаций доступа:

private, protected, public;

­– вместо ключевого слова struct может применяться ключевое слово

class или union;

­– класс обычно включает в себя функции (функции – элементы или методы)

наряду с элементами-данными.

­– обычно в классе имеются некоторые специальные функции, такие, как конструктор и деструктор. Конструктор имеет то же имя, что и класс. Деструктор имеет то же имя, но ему предшествует префикс-тильда «~».

Примеры объявления классов

1) Определение класса Rect совпадает с определением структуры

struct Rect //прямоугольник

{

int x1; // Элементы-данные Rect

int y1;

int x2;

int y2;

}

2) Класс Point содержит как элементы-данные, так и элементы-функции, а также использует спецификаторы доступа.

struct Point // точка

{

private: // Спецификатор частного доступа

int x; // Элементы данных класса типа «Point»

int y; // Члены-данные

public: // Спецификатор общего доступа

int GetX(); // Элементы-функции класса

int GetY();

void SetX(int);

void SetY(int);

}

3) Класс Line

class Line

{

Point pt1; // точка 1 // Элементы-данные

Point pt2; // точка 2

int width; // толщина

public: // Спецификатор общего доступа

Line(int _x, int _y); // Функция-элемент: конструктор!

~Line(); // Функция-элемент: деструктор!

}