Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Итог_Пособие C++.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.03 Mб
Скачать

3. Основы объектно-ориентированного программирования

3.1 Основные понятия ооп

Мы уже затрагивали некоторые понятия ООП в предыдущих разделах. Теперь пришло время систематизировать эти знания и освоить современный способ разработки программного обеспечения.

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

Класс можно рассматривать с двух позиций:

1) с точки зрения предметной области класс соответствует определённому характерному объекту этой области.

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

Данные класса называются полями (по аналогии с типом struct), а функции – методами. Поля и методы являются элементами (членами) класса.

Рисунок 3.1 Поля и методы класса

Выделение классов в заданной предметной области выполняется на этапе объектно-ориентированного анализа – это, пожалуй, самый сложный и ответственный этап объектно-ориентированной разработки. Принципы выделения классов, как и принципы выделения функций при процедурно-ориентированном подходе, базируются на обеспечении возможности многократного использования классов. Исходя из этого, основным принципом при выделении классов является абстрагирование. Например, в процессе разработки компьютерной игры можно выделить классы Игровое поле, Главный персонаж, Враг и т.д. Если в этом процессе нам удастся абстрагироваться от несущественных деталей, скорее всего, мы сможем использовать реализованные классы в нескольких различных игровых приложениях.

Класс в ООП обладает тремя важными свойствами:

1) Инкапсуляция

2) Наследование

3) Полиморфизм

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

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

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

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

Далее все эти свойства классов, которые иногда называют основными принципами ООП, будут рассмотрены достаточно подробно.

Теперь рассмотрим понятие объекта:

1) с точки зрения предметной области – каждая отдельная сущность этой предметной области.

2) с точки зрения программиста – переменная, имеющая тип определённого класса. Или, по-другому, объект – экземпляр класса.

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

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

3.2 Классы в С++

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]