Подготовка к лабораторной работе 2
Объектно-ориентированное программирование
Основные элементы ООП в C++:
Объект
Класс
Нововведения и отличия C++ от C
Организация класса
Пример:
Управление доступом к членам класса
Пример в С++
Конструкторы и деструктор класса
Виды конструкторов
Конструкторы и деструктор класса
Особенности вызова деструктора
Класс New
Класс delete
Статические переменные и методы
Компилятор g++
Запуск компилятора g++
Практическое изучение первого принципа ООП – механизма инкапсуляции
Подготовка к лабораторной работе № 1 Программирование точечных конфигураций на плоскости
Задание
Что делает программа?
Метод Point 2 Polar( float R, float F)
Алгоритм программы на С++
550.34K
Category: programmingprogramming

Подготовка к лабораторной работе 2 «Организация класса»

1. Подготовка к лабораторной работе 2

«Организация класса»

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

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

3. Основные элементы ООП в C++:

Классы (class): Пользовательские типы данных,
служащие чертежами для создания объектов.
Объекты (object): Конкретные экземпляры классов.

4. Объект

Объект – это нечто, имеющее четко определенные
границы. Однако, этого недостаточно, чтобы
отделить один объект от другого или дать оценку
качества абстракции.
Объект обладает состоянием, поведением и
идентичностью; структура и поведение схожих
объектов определяет общий для них класс; термины
«экземпляр класса» и «объект» взаимозаменяемы.

5. Класс

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

6. Нововведения и отличия C++ от C

В C++ появились классы и объекты. Технически, класс C++ –
это тип структуры в C, а объект – переменная такого типа.
Разница только в том, что в C++ есть еще модификаторы
доступа и полями могут быть не только данные, но и функции
(функции-методы).
В C++ появились две новые операции: new и delete. В первую
очередь это – сокращения для распространенных вызовов
функций malloc (выделяет память длиной для определенного
количества байт) и free (освобождает ранее выделенную
динамическую память).
При вызове new автоматически вызывается конструктор, а
при вызове delete– деструктор. Так что нововведение можно
описать формулой: new= malloc+ конструктор, delete= free+
деструктор.
В
C++
появились
функции,
которые
вызываются
автоматически после создания переменной структуры
(конструкторы) и перед ее уничтожением (деструкторы).

7. Организация класса

Центральным понятием ООП на С++ является
класс. Класс используется для описания типа, на
основе которого создаются объекты этого
типа(переменные типа класс).
Синтаксис описания класса
сlass <имя класса> { определение_членов_класса}
Члены
класса
можно
разделить
на
информационные члены и функции-члены (методы)
класса. Информационные члены описывают
внутреннюю структуру информации, хранящейся в
объекте, который создается на основе класса.
Методы класса описывают алгоритмы обработки
этой информации.

8. Пример:

Торговый автомат имеет свойство: способность
принимать монеты; этому свойству соответствует
динамическое значение – количество принятых
монет.
• «Торговый автомат» — это абстракция, т.е. класс
(например, VendingMachine).
• «Способность принимать монеты» — это
поведение/свойство класса (в C++ это обычно метод
acceptCoin() или флаг canAcceptCoins).
• «Количество принятых монет» — это динамическое
значение (член данных, например int coinsAccepted),
которое хранится в каждом объекте и меняется в
процессе работы.

9. Управление доступом к членам класса

Принцип инкапсуляции обеспечивается вводом в
класс областей доступа:
private (закрытый, доступный только собственным
методам),
public (открытый, доступный любым функциям),
protected (защищенный, доступный только
собственным методам и методам производных
классов).

10.

Члены класса, находящиеся в закрытой области
(private), недоступны для использования со стороны
внешнего кода. Напротив, члены класса,
находящиеся в открытой секции (public), доступны
для использования со стороны внешнего кода. При
описании класса каждый член класса помещается в
одну из перечисленных выше областей доступа
следующим образом:
class имя_класса {
private: определение_закрытых_членов_класса
public: определение_открытых_членов_класса
protected:
определение_защищенных_членов_класса};

11. Пример в С++

12. Конструкторы и деструктор класса

Конструктор - особый метод класса:
- имя совпадает с именем класса;
- не имеет кода возврата;
- в классе может быть любое число
конструкторов, отличающихся числом или
типом аргументов.
<имя класса> (<аргументы>){ …. }
Результат работы конструктора - создание
объекта класса

13. Виды конструкторов

- по умолчанию (без параметров)
- конструктор инициализации
- конструктор копирования
- преобразования

14. Конструкторы и деструктор класса

Деструктор - особый метод класса:
- имя совпадает с именем класса (перед ним
стоит знак ~);
- не имеет кода возврата и аргументов;
- в классе может быть только один
деструктор.
<имя класса> ( ) { …. }
~
Результат работы деструктора - удаление
объекта класса

15. Особенности вызова деструктора

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

16. Класс New

сlass New
{
};
В состав любого «пустого»
класса входят:
-
конструктор по умолчанию;
конструктор копирования;
деструктор;
перегруженный оператор
присваивания

17. Класс delete

Операция delete освобождает распределенную
операцией new память. Ее синтаксис:
delete указатель_на_объект;
delete [ ] указатель_на_массив_объектов;
Первая форма используется, если операцией new
размещался единичный (скалярный) объект.
Векторная форма используется, если операцией
new создан массив объектов, при удалении которого
для каждого из объектов необходим вызов
деструктора (деструкторы описываются далее).
Такими объектами являются объекты
пользовательского типа.

18. Статические переменные и методы

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

19. Компилятор g++

G++ — традиционное обозначение компилятора
языка C++ — GNU C++. Это свободно
распространяемый компилятор, часть GCC —
коллекции компиляторов GNU.
G++ строит объектный код напрямую из исходного
C++-кода, без использования промежуточной Сверсии (в отличие от некоторых компиляторов,
которые создают объектный код Си из исходников,
написанных на C++). Это позволяет получать более
полную и точную информацию о работе программы
при отладке.
Основным отличием компилятора G++ от GCC это
подключаемые по умолчанию библиотеки языка
С++

20. Запуск компилятора g++

Чтобы скомпилировать исходный код, необходимо
компилятору gcc передать в качестве параметра файл
hello.cpp:
g++ hello.cpp -o hello
Дополнительный необязательный параметр -o
hello указывает, что скомпилированный файл будет
называться hello.exe. Если не указать этот параметр, то
файл будет называться по умолчанию - a.exe.
Стоит отметить, что мы можем совместить компиляцию и
выполнение следующей командой:
g++ hello.cpp -o hello.exe & hello.exe

21. Практическое изучение первого принципа ООП – механизма инкапсуляции

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

22. Подготовка к лабораторной работе № 1 Программирование точечных конфигураций на плоскости

Подготовка к лабораторной работе № 1
Программирование точечных
конфигураций на плоскости
В первой лабораторной работе используются
абстрактные типы данных (АТД). АТД являются
математическим понятием, пригодным на этапе
подготовки спецификации – в процессе анализа.
Понятие класса, предусматривая частичную или
полную реализацию, обеспечивает необходимую
связь с разработкой ПО на этапах проектирования
и
программирования.
Класс
называется
эффективным, если его реализация полна, и
отложенным
при
частичной
реализации.
Рассмотрим типовые задания.

23. Задание

Разработать ООП для вычисления декартовых
координат вершин правильного треугольника с заданной
длиной стороны, центр которого находится в точке (0;0), а
одна из вершин лежит на оси X. Длина стороны
треугольника должна передаваться программе через
аргумент командной строки, а полученные координаты
должны отображаться через поток стандартного вывода.
Программная реализация вычислений должна быть
основана на разработке класса точки с приватными
полями её декартовых координат и публичными методами
доступа к ним и конструктором инициализации их
значений. Кроме того нужно предусмотреть статический
метод конструирования точки по её полярным
координатам.

24. Что делает программа?

• Правильный треугольник вписан
в окружность радиуса R
(описанная окружность). На
рисунке центр окружности лежит
на оси X.
• При заданной длине стороны a
радиус описанной окружности
равен
Это следует из соотношений
для правильного треугольника.
• Если выбрать углы вершин
относительно центра как
то вершины расположатся
равномерно вокруг окружности, как
на рисунке: vertex[0] на
положительном направлении оси
X, две другие — через 120° и 240°.
y
edge - заданная
длина стороны
треугольника
vertex[1]
120
120
0
vertex[2]
radius
vertex[0]
х

25. Метод Point 2 Polar( float R, float F)

y
vertex[1]
R=radius,
F=угол ( 0, 2П/3, 4П/3 )
Для каждой вершины i вычисляем местную
полярную координату и переводим в
декартову.
radius
120
0
vertex[2]
X =R* cos F
х
Y =R* sin F
Point p(R*cos(F), R*sin(F));

26. Алгоритм программы на С++

• Класс Point инкапсулирует координаты точки в приватных полях
(например, x_ и y_).
• Публичный конструктор инициализирует координаты, а геттеры
(getX(), getY()) дают доступ к значениям (Геттеры (getters) в C++ — это
методы класса, которые возвращают значение (или ссылку/указатель)
на закрытое поле класса. Их основная цель — обеспечить
контролированный доступ к внутреннему состоянию объекта, сохраняя
инкапсуляцию).
• Статический метод fromPolar(r, theta) создаёт Point по полярным
координатам: реализует перевод \(x = r\cos\theta,\; y = r\sin\theta\). Это
отражает на рисунке стрелки от центра к вершинам по углам \(\theta_i\).
В основном разделе программы:
• принимаем аргумент командной строки a (и опционально c_x),
• проверяем корректность (a > 0),
• вычисляем \(R=\dfrac{a}{\sqrt{3}}\),
• создаём три локальные точки через fromPolar(R, theta_i),
• смещаем их по X на \(c_x\) (чтобы центр был в \((c_x,0)\)),
• печатаем координаты через std::cout.
English     Русский Rules