Объектно-ориентированная декомпозиция

Алгоритмическая декомпозиция

· Основана на разделении алгоритмов по модулям системы.

· Каждый модуль выполняет один из этапов общего процесса.

· Реализуется средствами структурного программирования

Операторы, как и функции, можно перегружать.

Перегружать можно все существующие в С++ операторы, кроме:

· . (точка, оператор доступа к члену класса),

· .*(оператор доступа к члену класса через указатель),

· :: (оператор разрешения области видимости,

· :? (условный оператор),

· #,## (препроцессорные операторы),

· sizeof и typeof,

· операторы преобразования типов данных: static_cast, const_cast, reinterpret_cast, dynamic_cast.

Перегруженные операторы можно определять и как члены класса, для которого выполняется перегрузка и как функции не члены класса (часто – дружественные функции).

Только методами класса допускается перегружать 4 оператора:

· = присваивание

· () вызов функции

· [] индексирование

· -> доступ по указателю

Операция присваивания (=) единственная создается системой автоматически.

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

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

Алгоритмическая декомпозиция

· Основана на разделении алгоритмов по модулям системы.

· Каждый модуль выполняет один из этапов общего процесса.

· Реализуется средствами структурного программирования

Объектно-ориентированная декомпозиция

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

· Каждый объект обладает своим собственным поведением.

· Послав объекту сообщение, можно попросить его выполнить присущее ему действие.

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

· Реализуется средствами объектно-ориентированного программирования.

ООП

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

Объект характеризуется:

· совокупностью своих элементов и их текущих значений

· совокупностью допустимых для объекта действий

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

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

Данные и функции внутри класса называются членами класса.

Данные, входящие в класс, называются данными-членами или полями.

Функции, принадлежащие классу, называют функциями-членами или методами.

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

Использование объекта одного класса в качестве поля другого класса называется композицией.

Каждый объект некоторого класса занимает определенное количество байтов памяти, где хранятся значения полей данных для этого объекта. Методы не занимают места в памяти объекта и хранятся в единственном экземпляре.

Концепции ООП

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

2. Полиморфизм – это свойство различных объектов выполнять одно и то же действие (с одним и тем же названием) по-своему.


3.

Наследование – это такое отношение между объектами, когда дочерний объект повторяет элементы структуры и поведения родительского.

Классы верхних уровней обычно не имеют конкретных экземпляров объектов. Такие классы называют абстрактными. Конкретные экземпляры объектов относятся, как правило, к классам самых нижних уровней объектной иерархии.

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

Синтаксис объявления класса, который не является наследником никакого другого класса:

class Имя_Класса

{

спецификатор доступа:

данные и функции

спецификатор доступа:

данные и функции

спецификатор доступа:

данные и функции

};

Спецификатор доступа определяет, где в программе будут доступны описанные за ним члены класса.

Имеются 3 спецификатора доступа:

· Public (общий) – члены класса будут доступны как в классе, так и в любой точке программы внутри области видимости класса, к которому они относятся.

· Private (личный - спецификатор по умолчанию) – члены класса будут доступны только внутри класса (членам класса) или друзьям класса

· Protected (защищенный) – члены класса будут доступны только внутри класса и внутри потомков класса

Действие спецификатора доступа распространяется до следующего спецификатора или до конца описания класса.

По умолчанию, все члены класса, объявленные после ключевого слова class до первого спецификатора доступа имеют спецификацию доступа private

.

Методы класса

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

{

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

double m_length; // поля - данные-члены класса

double m_width;

double m_height;

double Volume( ); // методы - функции-члены класса

};

Определение методов

Определение методов либо внутри класса, либо вне класса.

При внешнем определении в классе помещается только прототип метода:

тип имя_функции (спецификация_и_инициализация_параметров);

Определение метода вне класса:

тип имя_класса::имя_функции (спецификация_формальных_параметров)

{тело_функции_члена_класса}

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

Методы можно перегружать. Перегрузка методов – одно из проявлений принципа полиморфизма.

Объявление объектов

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

Объявление экземпляров класса (объектов )

CBox mybox1, mybox2;

Каждый объект класса имеет собственную копию переменных, объявленных внутри класса.

Объявление указателей на класс

CBox *pbox;

pbox = &mybox1;

Динамическое выделение памяти для экземпляра класса (объекта)

CBox *pmybox = new CBox;

Доступ к членам – аналогично структурам

mybox1.m_length = 2.5;

mybox2.m_width = mybox1.m_length;

pmybox->m_height = mybox1.m_length;

pmybox->m_length = pmybox->m_height ;

Конструктор

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

Конструкторы всегда называются по имени класса и не имеют типа возврата.

Наши рекомендации