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

С++ - язык объектно-ориентированного программирования

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

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

  • частными – (приватными) – private;

  • защищенными – protected;

  • общими – public.

Можно сказать, что объект – это переменная определенного пользователем типа.

Объектно-ориентированные языки обладают четырьмя важнейшими характеристиками:

  • инкапсуляцией – encapsulation;

  • наследованием – inheritance;

  • полиморфизмом – polymorphism;

  • абстракцией типов – abstraction.

Понятие инкапсуляции означает, что в качестве единицы целого рассматривается объединение некоторой группы данных и некоторой группы функций. Свойства объектов хранятся в структурах данных, напоминающих структуры языка С, а поведение объектов реализуется в виде функций, называемых функциями-членами (member function) объектов. В объекте реализована защита данных: если данные или функции-члены объявлены приватными или защищенными, то к ним нет доступа извне.

ООП поддерживает полиморфизм, означающий, что одно и то же имя можно использовать для логически связанных, но разных целей, т. е. имя определяет класс действий, которые в зависимости от типа данных могут существенно отличаться.

Например, можно определить три типа переменных:

  • целые;

  • комплексные числа;

  • векторы.

Для каждого из них можно определить функцию sum(x,y) – сумму двух переменных, а можно сделать так, что для всех этих трех типов будет определена операция сложения x+y. В зависимости от того, какого типа будут переменные x и y, работать эта функция и операция сложения будут по-разному.

Полиморфизм поддерживается и во время компиляции и во время выполнения программы.

Наследование позволяет одним объектам приобретать атрибуты и свойства других объектов. Наследование позволяет строить иерархию объектов, переходя от более общего к частному, уточняя и конкретизируя объект.

Введение в понятие класса

Одним из самых главных понятий С++ является понятие класса (class). В С++ для того, чтобы определить объект, надо сначала определить его форму, с помощью ключевого слова class. Понятие класса напоминает понятие структуры.

Рассмотрим пример, в котором определяется класс queue (очередь), который будет затем использоваться для определения объектов.

Очередь – это структура данных, для которой введены действия “поставить в очередь”, “обслужить”. Постановка в конец очереди, обслуживание с начала очереди. Эта структура называется FIFO (First Input First Output).

Имеем следующую модель:

Очередь состоит из целочисленного массива и двух целочисленных переменных – маркера начала очереди и маркера конца очереди.

Поставить в очередь – заполнить заданным значением очередной элемент массива с конца очереди.

Обслужить – выдать значение очередного элемента с начала очереди.

Очередь полная, если заполнен последний элемент массива.

Очередь пустая – маркер начала и маркер конца очереди указывают на один и тот же элемент массива.

// объявление класса

class queue {

private: // режим доступа к элементам класса

int q[100];

int sloc, rloc; // маркер начала и конца очереди

public: // режим доступа к функциям класса

void init(void);

void qput(int m);

int qget(void);

};

Таким образом, объявлен новый тип переменных класс – class queue. Класс содержит приватную часть – это массив q и маркеры – переменные sloc, rloc.

Приватные элементы не могут использоваться никакими функциями, не являющими членами класса (работает принцип инкапсуляции – контроль доступа к переменным). По умолчанию все члены класса private. Функции init(), qget(), qput() – общедоступные (следуют в объявлении после public).

Как правило, большинство данных объявляются приватными, а доступ к ним осуществляется через общие функции.

Режим доступа protected играет существенную роль при использовании механизма наследования. Private, protected, public могут встречаться в объявлении классов в любом порядке и любое количество раз. Хорошим стилем считается использование каждого из ключевых слов один раз.

Функции init(), qget(), qput() – члены-функции (member function) класса queue.

После создания класса можно определить объект (переменную) этого класса. Например

queue obj1, obj2;

Это означает создание двух объектов одного типа.

Отметим, что классы – это не объекты (переменные), а шаблоны (типы) для создания объектов. Отношение между классом и объектом такое же, как между типом данных и переменной.

Можно создать объект и во время объявления класса, поместив имя объекта после закрывающейся фигурной скобки.

Объявление класса в общем виде следующее:

class имя-класса{

private:

Приватные данные и функции;

protected:

Защищенные данные и функции;

public:

Общие данные и функции;

} [список-объектов];

При объявлении класса, как правило, используются прототипы функций-членов класса. Все функции в С++ должны иметь прототипы.

Когда требуется описать функцию-член класса, необходимо указать к какому классу относится эта функция. Например.