Файл: Основные понятия объектно-ориентированного программирования.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 28.03.2023

Просмотров: 131

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

В иерархии наследования класс-потомок порождается путём добавления одного или нескольких атрибутов и/или методов к атрибутам и/или методам одного или нескольких классов-родителей. Напр., от класса «точка» с атрибутами «абсцисса», «ордината» и методами создания, чтения и изменения координат может быть порождён класс «цветная точка», объекты которого будут иметь дополнительный атрибут «цвет» и некоторые методы управления этим атрибутом. На языке ООП си++ (C++) объявления классов «точка» (class Point) и «цветная точка» (class ColorPoint) могут быть записаны следующим образом (реализация методов не приводится).

// Ключевое слово public (публичный) означает, что метод или атрибут доступен извне класса;

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

// класса и его «потомков»

class Point

{
public:
// Метод создания («конструктор»), имеющий параметры абсцисса и ордината
Point(double rX, double rY);

// Метод чтения абсциссы

double Get_X();

// Метод чтения ординаты

double Get_Y();

// Метод изменения абсциссы

void Set_X(double rX);

// Метод изменения ординаты

void Set_Y(double rY);

protected:
// Вещественная переменная, представляющая атрибут абсцисса

double m_rX;

// Вещественная переменная, представляющая атрибут ордината

double m_rY;

};
// Префикс m_ принято употреблять для именования атрибутов, иначе называемых
// «членами» (англ. member) класса, чтобы было проще отличать их от других переменных в

// коде реализации методов

class ColorPoint : public Point

{
public:
// Конструктор, имеющий параметры абсцисса, ордината, цвет

ColorPoint(double rX, double rY, long rgbColour);

// Метод чтения цвета

long GetColor();

// Метод изменения цвета

void SetColor(long rgbColor);

protected:
// Целая переменная, представляющая цвет точки – дополнительный атрибут

long m_rgbColor;

};
Объявление класса задаёт тип данных, который может быть использован при определении других классов. Напр., класс “круг” (class Circle) может иметь атрибут “центр” типа “точка” (Point m_center):

class Circle

{
public:
// Метод создания, имеющий параметры центр и радиус

Circle(Point ptCenter, double rRadius); // Далее объявления некоторых методов для работы с кругом// …protected:

Point m_center; // Вещественная переменная, представляющая радиус

double m_rRadius; };

Члены класса

Членами класса могут быть функции. • Функции-члены - это, функции которые манипулируют данными-членами класса.

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


• Функции-члены могут быть определены внутри или вне (С++) объявления класса. Функции-члены, определенные вне класса, могут быть сделаны inline. Функция, описанная внутри класса, является по определению встраиваемой. Синтаксис для реализации метода вне объявления класса: тип_возвращаемого_значения ИмяКласса::ИмяМетода(Список Аргументов) { Реализация_Метода };

• Функции-члены могут обращаться к полям или функциям-членам, объявленным после них.

• Функции-члены имеют неявно объявленную переменную this.

• Функции-члены могут быть static. Такие функции могут непосредственно обращаться и изменять статические поля класса. Статические Функции-члены класса не могут быть объявлены const или virtual. К таким функциям можно обращаться через имя класса, а не через имя конкретного экземпляра объекта.

• Функции-члены могут быть объявлены как const, что не позволяет им изменять значение и возвращать неконстантную ссылку или указатель на любое поле класса. Такие Функции-члены не могут быть статическими. Данные члены и управление доступом к элементам классов

• Данные-члены - это набор взаимосвязанной информации, возможно различных типов, объединенной в один объект.

• Данные-члены могут находиться в закрытой (private), защищенной (protected) или открытой (public) части класса.

• Данные-члены могут иметь статический класс памяти (static). Поля, имеющие статический класс памяти, совместно используются всеми объектами класса. К ним возможен доступ через имя класса ( с использованием операции разрешения доступа), а не через контекстный объект класса.

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

Данные-члены могут быть объявлены как const. Константные данные должны быть инициализированы в каждом определении конструктора. Имена полей и начальные значения заключаются в скобки, отделяются от списка аргументов конструктора двоеточием.

Описание класса

Описание класса начинается с ключевого слова class. Список членов класса определяет собственные элементы класса. При описании членов классов возможно указание атрибутов управления доступом (модификаторов доступа) к элементам классов. Такими атрибутами являются:

• public: члены класса видны извне класса • protected: члены класса видны в производном классе

• private: соответствующие элементы могут использоваться только внутри класса По умолчанию элементы класса имеют тип private.

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


1.3 Параметризованные функции

Исключения и их обработка.

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

Язык C++ определяет стандарт обслуживания исключений в рамках ООП. C++Builder предусматривает специальные механизмы для обработки исключений (ошибок), которые могут возникнуть при использовании Библиотеки Визуальных Компонент.

C++Builder также поддерживает обработку исключений самой операционной системы и модель завершения работы приложения. Когда программа встречает ненормальную ситуацию, на которую она не была рассчитана, можно передать управление другой части программы, способной справиться с этой проблемой, и либо продолжить выполнение программы, либо завершить работу.

Переброс исключений (exception throwing) позволяет собрать в точке переброса информацию, которая может оказаться полезной для диагностики причин, приведших к нарушению нормального хода выполнения программы. Обслуживаются только так называемые синхронные исключения, которые возникают внутри программы. Такие внешние события, как нажатие клавиш Ctrl+C, не считаются исключениями.

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

1. Программа ищет подходящий обработчик исключения.

2. Если обработчик найден, стек очищается и управление передается обработчику исключения.

3. Если обработчик не найден, вызывается функция terminate для завершения приложения. Блок кода, который обрабатывает возникшее исключение, начинается ключевым словом catch и заключается в фигурные скобки. По меньшей мере один кодовый блок обработчика исключения должен следовать непосредственно за блоком try.

Для каждого исключения, которое может сгенерировать программа, должен быть предусмотрен свой обработчик. Обработчики исключений просматриваются по порядку и выбирается обработчик исключения, тип которого соответствует типу аргумента в операторе catch.


При отсутствии в теле обработчика операторов goto, выполнение программы будет возобновлено, начиная с точки, следующей за последним обработчиком исключений данного блока try.

Если необходимо обработать возможное исключение фрагмент программы заключается в блок try. Блок try имеет вид try { // текст программы } В случае возникновения исключения управления передается обработчикам исключений catch или __finally. Операторы внутри catch выполняются только в случае возникновения исключения, т.е., если исключения не случилось – его операторы не выполняются вообще.

В C++Builder обработчик исключений catch лучше применять в виде catch(const Exception *E) { ShowMessage(AnsiString(E->ClassName())+ E->Message); } или catch(…) { ShowMessage(“Что-то случилось”); } Операторы внутри __finally выполняются всегда, в т.ч. и при возникновении исключения. __finally { // выполнится всегда }

2. Принципы ООП

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

Объектно-ориентированный анализ выполняется на основе определенного набора принципов:

2.1 Абстракция

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

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

Например, программа может сделать вызов функции sort (), не зная, какой алгоритм фактически использует функция для сортировки данных значений. Фактически, базовая реализация функции сортировки может меняться между версиями библиотеки, и пока интерфейс остается прежним, ваш вызов функции будет работать.

В C ++ используем классы для определения наших собственных абстрактных типов данных (ADT). Вы можете использовать объект cout класса ostream для потоковой передачи данных на стандартный вывод следующим образом:

#include <iostream>


using namespace std;

int main() {

cout << "Hello C++" <<endl;

return 0;

}

Здесь не нужно понимать, как cout отображает текст на экране пользователя. Вам нужно знать только открытый интерфейс, а базовая реализация «cout» может быть изменена.

Доступ к ярлыкам для выполнения абстракции

В C ++ используем метки доступа для определения абстрактного интерфейса для класса. Класс может содержать ноль или более ярлыков доступа -

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

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

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

Преимущества абстракции данных

Абстракция данных обеспечивает два важных преимущества -

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

Реализация класса может развиваться со временем в ответ на изменение требований или отчетов об ошибках без изменения кода пользователя.

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

2.2 Инкапсуляция

Инкапсуляция - сокрытие внутреннего устройства, реализации объекта. В итоге объект как "черный ящик". Дополняет абстрагирование направленностью внутрь объекта. Инкапсуляция - главное средство для борьбы со сложностью системы. Для уменьшения количества абстракций и упрощения работы с ними убирает из поля зрения внутреннее содержание абстракции.

Предположим, нужно, чтобы вне класса координаты точки могли изменяться не произвольно, а только по определённому правилу (напр., поворотом точки на заданный угол вокруг начала координат). В таком случае в др. частях программы изменение координат делается доступным только посредством интерфейсного метода, которому передаётся значение параметра «угол поворота». При этом алгоритм поворота скрывается внутри реализации метода изменения координат.