Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Козак Н.В. Лекции Основы создания программ в Си...doc
Скачиваний:
24
Добавлен:
23.09.2019
Размер:
2.24 Mб
Скачать

Лекция.1.Объектно-ориентированное программирование

Язык C++ является надстройкой над языком С. И если язык С удобен для написания малых и средних по размерам программ, то все преимущества языка C++ проявляются на больших программах и проектах.

Что такое объектно-ориентированное программирование

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

Известный теоретик Грейди Буч так определяет этот подход:

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

Наиболее важное понятие языков объектно-ориентированного программирования - это понятие объекта (object). Объект - это логическая единица, которая содержит данные и правила (методы) обработки этих данных. В языке C++ в качестве таких правил обработки выступают функции, т. е. объект C++ объединяет в себе данные и функции, обрабатывающие эти данные. Внутри объекта данные и функции могут быть частными (приватными, private), защищенными (protected) и общими (public). Можно сказать, что объект - это переменная определенного пользователем типа.

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

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

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

Связь является довольно очевидной разновидностью взаимодействий — один объект может воздействовать на другой, не зависимый от него объект. При этом существует отношение подчинения — «А использует В». Один объект является активным, другой — пассивным.

Другой тип отношений — агрегация, когда один объект является составной частью, т.е. элементом другого — «А содержит В». В C++ это соответствует описанию первого объекта в качестве элемента данных другого объекта.

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

Объектно-ориентированные языки обладают четырьмя важнейшими характеристиками реализуемых посредством классов: инкапсуляцией (encapsulation), наследованием (inharitance), полиморфизмом (polymorphism) и абстракцией типов (abstraction).

Рис. 6 Обобщенное представление понятий ООП

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

Инкапсуляция означает, что в качестве единицы целого рассматривается объединение некоторой группы данных и некоторой группы функций. Свойства объектов хранятся в структурах данных, напоминающих структуры языка С, а поведение объектов реализуется в виде функций, называемых функциями-членами (member function) объектов. В объекте реализована защита данных: если данные или функции-члены объявлены приватными или защищенными, то к ним нет доступа извне. Зато данные и функции, объявленные общими, доступны любому внешнему объекту.

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

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

Лекция.2.Классы С++