Кафедра 61
Военно-политическое информирование
Военно-политическое информирование
Классы
Контроль готовности обучающихся к учебному занятию
Контроль готовности обучающихся к учебному занятию
Контроль готовности обучающихся к учебному занятию
Контроль готовности обучающихся к учебному занятию
Контроль готовности обучающихся к учебному занятию
Контроль готовности обучающихся к учебному занятию
Контроль готовности обучающихся к учебному занятию
Контроль готовности обучающихся к учебному занятию
Введение
Введение
Введение
Учебный вопрос № 1
Рекомендации по созданию классов
Рекомендации по созданию классов
Рекомендации по созданию классов
Рекомендации по созданию классов
Рекомендации по созданию классов
Рекомендации по созданию классов
Рекомендации по созданию классов
Рекомендации по созданию классов
Рекомендации по конструкторам и деструкторам
Рекомендации по конструкторам и деструкторам
Рекомендации по конструкторам и деструкторам
Рекомендации по конструкторам и деструкторам
Учебный вопрос № 2
Рекомендации по наследованию
Рекомендации по наследованию
Рекомендации по наследованию
Рекомендации по вложению
Рекомендации по вложению
Рекомендации по шаблонам
Рекомендации по шаблонам
Задание на самостоятельную работу
6.30M

ЯП тема 4 лекция 07

1. Кафедра 61

ВОЕННО-КОСМИЧЕСКАЯ АКАДЕМИЯ ИМЕНИ А.Ф. МОЖАЙСКОГО
Кафедра 61
Языки программирования
Лекция
Тема 4. Объектно-ориентированное программирование на языке
С++
преподаватель 61 кафедры
подполковник Домбровский А.Ф.

2. Военно-политическое информирование

2

3. Военно-политическое информирование

3

4. Классы

Лекция № 4.7 Рекомендации по
программированию.
Цель занятия: изучить рекомендации по разработке классов на С++.
Учебные вопросы:
1. Рекомендации по созданию классов.
2. Рекомендации по наследованию, вложению, шаблонам.
4

5. Контроль готовности обучающихся к учебному занятию

Контрольный вопрос № 1:
Что такое класс?
5

6. Контроль готовности обучающихся к учебному занятию

Контрольный вопрос № 1:
Что такое класс?
Класс является
пользователем.
типом
данных,
определяемым
В классе задаются свойства и поведение какого-либо
предмета или процесса в виде полей данных
(аналогично структуре) и функций для работы с ними.
6

7. Контроль готовности обучающихся к учебному занятию

Контрольный вопрос № 2:
Что такое инкапсуляция?
7

8. Контроль готовности обучающихся к учебному занятию

Контрольный вопрос № 2:
Что такое инкапсуляция?
Объединение данных с функциями их
обработки в сочетании со скрытием ненужной
для использования этих данных информации
называется инкапсуляцией (encapsulation)
8

9. Контроль готовности обучающихся к учебному занятию

Контрольный вопрос № 3:
Что такое полиморфизм?
9

10. Контроль готовности обучающихся к учебному занятию

Контрольный вопрос № 3:
Что такое полиморфизм?
Полиморфизм – возможность использовать в
различных классах иерархии одно имя для
обозначения сходных по смыслу действий и
гибко выбирать требуемое действие во время
выполнения программы
10

11. Контроль готовности обучающихся к учебному занятию

Контрольный вопрос № 4:
Что такое наследование?
11

12. Контроль готовности обучающихся к учебному занятию

Контрольный вопрос № 4:
Что такое наследование?
Наследование – это возможность создания иерархии
классов, когда потомки наследуют все свойства своих
предков, могут их изменять и добавлять новые.
12

13. Введение

13
Создание любого программного продукта начинается с процесса
проектирования, и одна из первых задач, возникающих при этом, —
определить, должна программа быть объектно-ориентированной
или нет.

14. Введение

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

15. Введение

15
Смешивать два подхода в одном проекте не рекомендуется,
поскольку может оказаться, что готовый продукт обладает
недостатками и структурного, и объектно-ориентированного
принципов построения.

16. Учебный вопрос № 1

Рекомендации по созданию классов
16

17. Рекомендации по созданию классов

1. При создании класса, то есть нового типа данных,
следует хорошо продумать его интерфейс – средства работы
с классом, доступные использующим его программистам.
Хороший интерфейс:
• Ясен
• Непротиворечив
• Обозрим
Как правило, он должен включать
только методы, но не поля данных.
Поля данных должны быть
скрытыми (private).
17

18. Рекомендации по созданию классов

18
2. Не следует определять методы типа get/set для всех
скрытых полей класса – это все равно, что открыть к ним
доступ, только более сложным способом.

19. Рекомендации по созданию классов

19
3. Не нужно расширять интерфейс класса без
необходимости, поскольку увеличение количества
методов ведет к трудности понимания класса. В идеале
интерфейс должен быть полным, то есть предоставлять
возможность выполнить любые разумные действия с
классом, и минимальным – без дублирования и
пересечения возможностей методов.

20. Рекомендации по созданию классов

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

21. Рекомендации по созданию классов

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

22. Рекомендации по созданию классов

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

23. Рекомендации по созданию классов

23
7. Для увеличения производительности программы
наиболее часто вызываемые методы можно объявить,
как встроенные (inline). В основном это касается
коротких методов, тело которых оказывается меньше
размера кода, генерируемого для их вызова. Кроме
ускорения программы за счет исключения вызовов, это
дает возможность компилятору производить более
полную оптимизацию.

24. Рекомендации по созданию классов

24
8. Перегруженные операции класса должны иметь
интуитивно
понятный
общепринятый
смысл
(например, не следует заставлять операцию +
выполнять что-либо, кроме сложения или добавления).

25. Рекомендации по конструкторам и деструкторам

25
1.
Конструкторы
и
деструкторы
делать
встраиваемыми не рекомендуется, поскольку в них
фактически
присутствует
код,
помещаемый
компилятором, и размер этого кода может быть
весьма значительным (например, в конструкторе
производного
класса
должны
быть
вызваны
конструкторы всех базовых и вложенных классов).

26. Рекомендации по конструкторам и деструкторам

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

27. Рекомендации по конструкторам и деструкторам

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

28. Рекомендации по конструкторам и деструкторам

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

29. Учебный вопрос № 2

Рекомендации по наследованию,
вложению и шаблонам
29

30. Рекомендации по наследованию

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

31. Рекомендации по наследованию

31
2. При переопределении виртуальных методов нельзя
изменять наследуемое значение аргумента по
умолчанию, поскольку по правилам С++ оно
определяется типом указателя, а не фактическим
типом объекта, вызвавшего метод:

32. Рекомендации по наследованию

32
3.
Невиртуальные
методы
переопределять
в
производных классах не рекомендуется, поскольку
производные классы должны наследовать свойства
базовых. Иными словами, невиртуальный метод
инвариантен относительно специализации, то есть
сохраняет
те
свойства,
которые
должны
наследоваться из базового класса независимо от того,
как конкретизируется (специализируется) производный
класс.

33. Рекомендации по вложению

33
Альтернативным наследованию методом использования
одним классом другого является вложение, когда один
класс является полем другого:
Вложение представляет отношения классов «Y содержит
X» или «Y реализуется посредством Х». Необходимость
использовать вложение вместо наследования можно
определить, задав себе вопрос, может ли у Y быть
несколько объектов класса X.

34. Рекомендации по вложению

34
Отношение «реализуется посредством» используется
вместо наследования тогда, когда про классы X и Y нельзя
сказать, что Y является разновидностью X, но при этом Y
использует часть функциональности X.
Следует
предпочитать вложение наследованию.

35. Рекомендации по шаблонам

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

36. Рекомендации по шаблонам

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

37. Задание на самостоятельную работу

Задание:
1.Внести коррективы в учебный проект «Анализатор протоколов» с
учетом изученных рекомендаций.
Рекомендуемая литература:
1. С/С++. Программирование на языке высокого уровня / Т. А. Павловская.
2. Павловская Т. А., Щупак Ю. А. C/C++. Структурное и объектноориентированное программирование: Практикум.
37
English     Русский Правила