Тема 4. Объектно-ориентированное программирование. Классы
Объектно-ориентированное программирование
Объектно-ориентированное программирование и C++
Отличительные особенности С и C++
Эквивалентные понятия С и C++
Инкапсуляция
Понятие класса в С++
Ограничение доступа к элементам класса
Определение методов класса
Доступ к элементам класса
Пример ограничения доступа к элементам класса
Специальный метод класса - конструктор
Свойства конструктора
Перегрузка конструктора
Конструктор копирования
Создание объектов класса
Специальный метод класса - деструктор
Свойства деструктора
Разрушение объектов класса
Работа с памятью в конструкторах и деструкторах
Статические элементы класса
Использование статических элементов в методах класса
Использование статических элементов класса
Указатель на текущий объект класса
Указатель на текущий объект класса
367.00K
Category: programmingprogramming

Объектно-ориентированное программирование. Классы. Тема 04

1. Тема 4. Объектно-ориентированное программирование. Классы

Программирование и основы алгоритмизации
Тема 4. Объектно-ориентированное
программирование. Классы
Шевченко А. В.
Тема 4. Объектно-ориентированное программирование. Классы
1

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

Программирование и основы алгоритмизации
Объектно-ориентированное программирование
Инкапсуляция
Наследование
Полиморфизм
Классы объединяют данные
и методы их обработки,
ограничивая доступ для
различных категорий
пользователей
Создание новых классов на
основе существующих с
дополнением или изменением
их функциональности
Выполнение разных действий
одноименными методами
различных классов
Цель - повышение скорости разработки и качества программ
за счет лучшей структуризации и повторного использования
кода
Шевченко А. В.
Тема 4. Объектно-ориентированное программирование. Классы
2

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

Программирование и основы алгоритмизации
Объектно-ориентированное программирование и C++
Язык
С++
был
разработан
Бьерном
Страуструпом в 1985 как расширение языка С.
Бьерн Страуструп
Одним из основных принципов, лежащих в основе
С++, является его практически полная
совместимость с С, которая существенно
облегчила переход программистов, работавших
на языке С, к объектно-ориентированному
программированию
и
гарантировала
применимость разработанных на С программ.
Языки объектно-ориентированного программирования
C#, C++, Java, Delphi, Eiffel, Simula, D, Io, Objective-C, Object Pascal,
VB.NET, Visual DataFlex, Perl, Php, PowerBuilder, Python, Scala,
ActionScript, JavaScript, JScript.NET, Ruby, Smalltalk, Ada, Xbase++, X++,
Vala
Шевченко А. В.
Тема 4. Объектно-ориентированное программирование. Классы
3

4. Отличительные особенности С и C++

Программирование и основы алгоритмизации
Отличительные особенности С и C++
С
• Небольшое число элементов языка
• Высокая скорость выполнения
программ
С++
• Простота и надежность
использования
• Возможность повторного
• Поддержка модульного
использования программного кода
программирования
• Хорошая скорость
• Хорошая мобильность наряду с
• Ясность и читабельность
работой на "нижнем уровне"
Шевченко А. В.
Тема 4. Объектно-ориентированное программирование. Классы
4

5. Эквивалентные понятия С и C++

Программирование и основы алгоритмизации
Эквивалентные понятия С и C++
Шевченко А. В.
С
С++
Тип данных
Класс
Функция
Метод
Переменная
Объект
Тема 4. Объектно-ориентированное программирование. Классы
5

6. Инкапсуляция

Программирование и основы алгоритмизации
Инкапсуляция
Класс
Закрытая часть
if(type == INPPAR)
{
if(itype == IIAPI_DTE_TYPE)
{
if(data->dtype() == _TTime)
DateUnixToIng(inp->date[inp->cnt], (unsigned long)*(DTTime*)data);
if(parm->parm.getqinfoparm.gq_mask&IIAPI_GQ_ROW_COUNT)
putrowcount = parm->parm.getqinfoparm.gq_rowCount;
if(repeat and !query_hdl)
{
query_hdl = (unsigned int)parm->parm.getqinfoparm.gq_repeatQueryHandle;
if(data->dtype() == _TDate)
DTDateToIng(inp->date[inp->cnt], *(DTDate*)data);
if(RepeatQuery* r = FIND(repeatquery, query_id, query_id))
r->query_hdl = query_hdl;
else
{
repeatquery.New();
repeatquery.tmp.query_id = query_id;
repeatquery.tmp.query_hdl = query_hdl;
repeatquery.Modify();
}
}
StmtClose();
Query(NULL);
return(true);
}
if(itype == IIAPI_MNY_TYPE)
{
double d = *(DTMoney*)data;
long i = (long)d;
if(d-(double)i > 0.5) i++;
*(DTMoney*)data = (double)i;
if(itype == IIAPI_CHA_TYPE and repeat) itype = IIAPI_VCH_TYPE;
}
DefPar(INPPAR, inp, inp->cnt++, itype, *data);
}
4
Интерфейс
Программа
Шевченко А. В.
Тема 4. Объектно-ориентированное программирование. Классы
6

7. Понятие класса в С++

Программирование и основы алгоритмизации
Понятие класса в С++
Класс
Данные
Методы
struct
Классы служат для объединения данных и
методов работы с ними в новые типы данных.
Классы могут предоставлять различные права
доступа к данным и методам.
Возможно
создание
иерархии
посредством наследования.
Шевченко А. В.
классов
union
class Rectangle
{
int width;
int height;
int Square();
};
Тема 4. Объектно-ориентированное программирование. Классы
7

8. Ограничение доступа к элементам класса

Программирование и основы алгоритмизации
Ограничение доступа к элементам класса
Класс
Данные + методы
Private
Данные + методы
Protected
Данные + методы
Public
Private - могут использоваться только
методами данного класса или дружественными
функциями.
class Example
{
int a;
int b;
protected:
int c;
public:
int d;
private:
int e;
public:
int f;
};
Protected - могут использоваться методами
данного и наследуемых классов.
Public - могут использоваться
функциями программы.
Шевченко А. В.
любыми
Тема 4. Объектно-ориентированное программирование. Классы
8

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

Программирование и основы алгоритмизации
Определение методов класса
В рамках класса (inline)
class Rectangle
{
private:
int
w;
int
h;
public:
int
Square()
{
return(w*h);
}
};
Шевченко А. В.
Вне класса
class Rectangle
{
private:
int
w;
int
h;
public:
int
Square();
};
int Rectangle::Square()
{
return(w*h);
}
Тема 4. Объектно-ориентированное программирование. Классы
9

10. Доступ к элементам класса

Программирование и основы алгоритмизации
Доступ к элементам класса
class Rectangle
{
public:
int
w;
int
h;
int
Square();
};
Через объект
Rectangle rect;
rect.w = 200;
rect.h = 100;
Через указатель на объект
Rectangle rect;
Rectangle *r = ▭
r->w = 200;
r->h = 100;
int s = rect.Square();
int s = r->Square();
Шевченко А. В.
Тема 4. Объектно-ориентированное программирование. Классы
10

11. Пример ограничения доступа к элементам класса

Программирование и основы алгоритмизации
Пример ограничения доступа к элементам класса
class Rectangle
{
private:
int
w;
int
h;
public:
int
Square();
};
void main()
{
Rectangle r;
r.w = 100;
r.h = 50;
}
[C++ Error] test.cpp(50): E2247 'Rectangle::w' is not accessible
[C++ Error] test.cpp(51): E2247 'Rectangle::h' is not accessible
Шевченко А. В.
Тема 4. Объектно-ориентированное программирование. Классы
11

12. Специальный метод класса - конструктор

Программирование и основы алгоритмизации
Специальный метод класса - конструктор
class Rectangle
{
Конструктор
private:
int
w;
int
h;
public:
Rectangle(int Width, int Height);
int
Square();
};
Rectangle::Rectangle(int Width, int Height)
{
w = Width;
h = Height;
}
Шевченко А. В.
Тема 4. Объектно-ориентированное программирование. Классы
12

13. Свойства конструктора

Программирование и основы алгоритмизации
Свойства конструктора
1. Имя конструктора совпадает с именем класса.
2. Конструктор не возвращает никакого значения.
3. Для класса без конструктора генерируется конструктор по умолчанию.
4. Конструкторы могут быть перегружены.
5. Конструкторы не наследуются.
6. Конструкторы не могут вызываться явно из программы.
Шевченко А. В.
Тема 4. Объектно-ориентированное программирование. Классы
13

14. Перегрузка конструктора

Программирование и основы алгоритмизации
Перегрузка конструктора
class Rectangle
{
private:
int
w;
int
h;
public:
Rectangle(int Width, int Height);
Rectangle(int Side);
int
Square();
};
Перегруженный
конструктор
Rectangle::Rectangle(int Side)
{
w = Side;
h = Side;
}
Шевченко А. В.
Rectangle::Rectangle(int Side)
{
Rectangle(Side, Side);
}
Тема 4. Объектно-ориентированное программирование. Классы
14

15. Конструктор копирования

Программирование и основы алгоритмизации
Конструктор копирования
class Rectangle
{
private:
int
w;
int
h;
public:
Rectangle(int Width, int Height);
Rectangle(int Side);
Rectangle(Rectangle &R);
int
Square();
};
Rectangle::Rectangle(Rectangle &R)
{
w = R.w;
h = R.h;
}
Шевченко А. В.
Тема 4. Объектно-ориентированное программирование. Классы
Конструктор
копирования
15

16. Создание объектов класса

Программирование и основы алгоритмизации
Создание объектов класса
Статическое
void func()
{
Rectangle r1(200, 100), r2(150), r3(r1);
...
}
Динамическое
void func()
{
Rectangle *r1 = new Rectangle(200, 100);
Rectangle *r2 = new Rectangle(150);
Rectangle *r3 = new Rectangle(*r1);
}
Шевченко А. В.
Тема 4. Объектно-ориентированное программирование. Классы
16

17. Специальный метод класса - деструктор

Программирование и основы алгоритмизации
Специальный метод класса - деструктор
class Rectangle
{
private:
int
w;
int
h;
public:
Rectangle(int Width, int Height);
~Rectangle();
int
};
Square();
Деструктор
Rectangle::~Rectangle()
{
ShowMessage("Прямоугольник удален.");
}
Шевченко А. В.
Тема 4. Объектно-ориентированное программирование. Классы
17

18. Свойства деструктора

Программирование и основы алгоритмизации
Свойства деструктора
1. Имя деструктора совпадает с именем класса и предваряется тильдой.
2. Деструктор не возвращает никакого значения.
3. Для класса без деструктора генерируется деструктор по умолчанию.
4. Деструкторы не наследуются.
5. Деструкторам не могут передаваться аргументы.
6. Деструкторы могут описываться как виртуальные (virtual)
7. Деструкторы могут вызываться явно.
Шевченко А. В.
Тема 4. Объектно-ориентированное программирование. Классы
18

19. Разрушение объектов класса

Программирование и основы алгоритмизации
Разрушение объектов класса
Статическое
void func()
{
Rectangle rect(200, 100);
...
}
Динамическое
void func()
{
Rectangle *rect = new Rectangle(200, 100);
...
delete rect;
}
Шевченко А. В.
Тема 4. Объектно-ориентированное программирование. Классы
19

20. Работа с памятью в конструкторах и деструкторах

Программирование и основы алгоритмизации
Работа с памятью в конструкторах и деструкторах
class Array
{
private:
int *data;
public:
Array(int Number);
~Array();
};
Array::Array(int Number)
{
data = new int[Number];
}
Array::~Array()
{
delete [] data;
}
Шевченко А. В.
Тема 4. Объектно-ориентированное программирование. Классы
20

21. Статические элементы класса

Программирование и основы алгоритмизации
Статические элементы класса
class Rectangle
{
private:
int
w;
int
h;
static int count;
public:
Rectangle(int Width, int Height);
Rectangle(int Side);
Rectangle(Rectangle &R);
~Rectangle();
Статические данные
int
Square();
static int Count() { return(count); }
};
Статический метод
Шевченко А. В.
Тема 4. Объектно-ориентированное программирование. Классы
21

22. Использование статических элементов в методах класса

Программирование и основы алгоритмизации
Использование статических элементов в методах класса
int Rectangle::count = 0;
Rectangle::Rectangle(int Width, int Height)
{
int w = Width;
int h = Height;
count++;
}
Rectangle::~Rectangle()
{
count--;
}
Шевченко А. В.
Тема 4. Объектно-ориентированное программирование. Классы
22

23. Использование статических элементов класса

Программирование и основы алгоритмизации
Использование статических элементов класса
void main()
{
Rectangle R1(200, 100);
Rectangle R2(150, 120);
Rectangle R3(160);
int c = Rectangle::Count();
ShowMessage(c);
}
R1
R2
R3
w
w
w
h
h
h
count
count
count
count
Шевченко А. В.
Тема 4. Объектно-ориентированное программирование. Классы
23

24. Указатель на текущий объект класса

Программирование и основы алгоритмизации
Указатель на текущий объект класса
Компилятор предоставляет каждому объекту
class Rectangle
указатель на него самого - this.
{
private:
Этот указатель может быть использован
int
w;
только внутри методов класса для получения
int
h;
адреса текущего объекта.
public:
Rectangle& Zoom(float Rate);
};
Rectangle& Rectangle::Zoom(float Rate)
{
w = (float)w*Rate;
h = (float)h*Rate;
return(*this);
}
Rectangle r(300, 200);
int s = r.Zoom(0.25).Square();
Шевченко А. В.
Тема 4. Объектно-ориентированное программирование. Классы
24

25. Указатель на текущий объект класса

Программирование и основы алгоритмизации
Указатель на текущий объект класса
void main()
{
Rectangle R1(200, 100);
Rectangle R2(150, 120);
Rectangle R3(160);
R1.Zoom(2);
R2.Zoom(5);
R3.Zoom(0.5);
}
this
Шевченко А. В.
R1
R2
R3
w
w
w
h
h
h
Тема 4. Объектно-ориентированное программирование. Классы
25
English     Русский Rules