Глава 10. Объектно-ориентированное программирование
лена задача автоматизировать работу университетской библиотеки, то объекты
класса «студент» определённо должны содержать информацию о книгах, взятых
на абонемент конкретным студентом. Если автоматизируется учёт успеваемости,
то в списке книг нет необходимости, но зато в состояние объекта обязательно
должны быть включены оценки по изучаемым дисциплинам.
Более того, когда мы рассматриваем сущности реального мира, с которыми
должна иметь дело создаваемая программа, мы можем назначить некую сущ-
ность на роль объекта или на роль класса объектов, также в зависимости от кон-
кретной задачи. Представим себе, что одна из подзадач программы — система-
тизировать социальные роли, такие как «домохозяйка», «пенсионер», «студент»
(например, для учёта доходов и льгот). Вполне вероятно, что в такой программе
«социальная роль» будет объявлена классом, а сущность «студент» будет всего
лишь одним из объектов.
Иными словами, нет одинакового для всех ситуаций правила, по которому
сущность делают объектом или классом объектов. Всегда необходимо исходить
из большей целесообразности.
В реальном мире из родственных по смыслу сущностей часто можно со-
ставить иерархию «от общего к частному». Такие отношения в объектно-
ориентированном подходе называются наследованием. Из двух классов, находя-
щихся в отношении наследования, более общий класс называется базовым или
родительским
классом, а класс, представляющий собой более частный случай,
называется дочерним или производным классом. Производный класс может за-
имствовать атрибуты (свойства и методы) базового класса. Это означает, что
если в программе используются родственные по смыслу классы, обладающие
некоторыми одинаковыми свойствами и методами — лучше определить один ба-
зовый класс, находящийся в вершине иерархии, и разместить дублирующиеся
свойства и методы в нём. В этом случае производные классы смогут автомати-
чески унаследовать эти атрибуты от базового класса, и поэтому их не придётся
описывать снова и снова. Например, если программа оперирует классами «сту-
дент», «преподаватель» и «инженер», логично ввести дополнительный базовый
класс «человек», переместив в него атрибуты, содержащие имя, адрес, другие
личные данные, а также методы, манипулирующие этими данными.
Помимо двух уже рассмотренных качеств — инкапсуляции и наследования
— у объектов есть ещё третье основополагающее качество: полиморфизм. Это
означает, что объекты могут вести себя по-разному в зависимости от ситуации.
Одно из основных проявлений полиморфного поведения — перегрузка функций.
Объект может содержать в себе несколько методов с одинаковыми именами, при-
нимающих разные наборы параметров. В результате, передавая объекту данные,
можно обращаться к одному и тому же имени метода, не заботясь о типе, в ко-
тором представлены данные. Правильно сконструированный объект автомати-
чески выполнит наиболее подходящий метод из группы.
Инкапсуляция, наследование и полиморфизм являются тремя основополага-
ющими принципами объектно-ориентированного программирования и в том или
Программирование на языке С++ в среде Qt Creator
10.2. Классы и объекты в C++
271
ином виде реализуются во всех объектно-ориентированных языках. В следующих
Do'stlaringiz bilan baham: |