
- •Часть 1. Основы создания программ в Си Лекция.1.Язык Си
- •Технология разработки программ
- •Базовые элементы языка Си
- •Представление данных в Си
- •Встроенные типы данных
- •Переменные
- •Операции и выражения
- •Функции
- •Лекция.2.Язык Си Обзор элементов языка Си Типизированные константы
- •Область действия переменных
- •Управляющие конструкции с
- •Массивы и указатели
- •Типы, определяемые пользователем
- •Лекция.3.Препроцессор и отладка программ
- •Макроопределения
- •Условная компиляция
- •1. Предотвращение включения файлов
- •Отладка программ
- •Элементы отладки
- •Лекция.1.Объектно-ориентированное программирование
- •Что такое объектно-ориентированное программирование
- •Пример определений классов
- •Конструктор и деструктор
- •Элементы класса
- •Элементы-функции
- •Элементы данных
- •Класс как область действия
- •Указатель this
- •Лекция.3.Элементы класса Статические элементы класса
- •Статические элементы-функции
- •Специальные элементы-функции класса
- •Конструктор
- •Список инициализации элементов
- •Конструктор копии
- •Операция присваивания
- •Деструктор
- •Операции класса new и delete
- •Функции преобразования
- •Ключевое слово explicit
- •Операции приведения
- •Доступ к базовым классам
- •Простое наследование
- •Конструкторы, деструкторы и наследование
- •Сложное наследование
- •Неоднозначности при сложном наследовании
- •Виртуальные базовые классы
- •Виртуальные функции
- •Чисто виртуальные функции и абстрактные классы
- •Реализация виртуального механизма
- •Лекция.5.Семинар 1-2: Обработка исключений
- •Объекты-исключения
- •Повторное возбуждение исключения
- •Перехват всех исключений
Лекция.1.Объектно-ориентированное программирование
Язык C++ является надстройкой над языком С. И если язык С удобен для написания малых и средних по размерам программ, то все преимущества языка C++ проявляются на больших программах и проектах.
Что такое объектно-ориентированное программирование
Объектно-ориентированное программирование - это способ, подход к программированию, с более широким кругом возможностей, которые предоставляют качественно новый подход в создание программ.
Известный теоретик Грейди Буч так определяет этот подход:
«Объектно-ориентированное программирование — это методология программирования, основанная на организации программы в виде совокупности объектов, каждый из которых является представителем определенного класса, а классы образуют иерархию наследования.»
Наиболее важное понятие языков объектно-ориентированного программирования - это понятие объекта (object). Объект - это логическая единица, которая содержит данные и правила (методы) обработки этих данных. В языке C++ в качестве таких правил обработки выступают функции, т. е. объект C++ объединяет в себе данные и функции, обрабатывающие эти данные. Внутри объекта данные и функции могут быть частными (приватными, private), защищенными (protected) и общими (public). Можно сказать, что объект - это переменная определенного пользователем типа.
Объект, прежде всего, характеризуется своим состоянием. Состояние программного объекта полностью определяется некоторым набором (структурой) характеристик и их текущими значениями. Эти характеристики называют полями или (в C++) элементами данных объекта. Состояние, как таковое, может быть вообще скрыто от внешнего взгляда. Оно, как говорят, инкапсулировано в объекте. Однако в зависимости от своего состояния объект по-разному взаимодействует со своим окружением, что приводит нас к следующему понятию поведения.
Поведение — это то, как объект взаимодействует с окружением (другими объектами). Объект может рассматриваться как аналог предмета, а поведение — как реакция на манипуляции с ним или действия, инициированные самим объектом. Для каждого объекта существует определенный набор возможных действий над ним.
Программа, как цельная система, реализуется только во взаимодействии всех ее объектов. Здесь можно выделить в основном два типа отношений: связь и агрегацию.
Связь является довольно очевидной разновидностью взаимодействий — один объект может воздействовать на другой, не зависимый от него объект. При этом существует отношение подчинения — «А использует В». Один объект является активным, другой — пассивным.
Другой тип отношений — агрегация, когда один объект является составной частью, т.е. элементом другого — «А содержит В». В C++ это соответствует описанию первого объекта в качестве элемента данных другого объекта.
Класс — это множество объектов, имеющих одинаковую структуру. В то время как объект представляет собой конкретную сущность, класс является абстракцией сущности объекта. Конкретный объект является представителем, или (не совсем грамотно) экземпляром класса. структура характеристик объекта и все потенциальные отношения между объектами заложены в классе, который его порождает. Поэтому понятия отношений связи и агрегации применимы и к классам. Однако классы могут находиться еще и в специфических отношениях между собой.
Объектно-ориентированные языки обладают четырьмя важнейшими характеристиками реализуемых посредством классов: инкапсуляцией (encapsulation), наследованием (inharitance), полиморфизмом (polymorphism) и абстракцией типов (abstraction).
Рис. 6 Обобщенное представление понятий ООП
Абстракция типов или абстрагирование предполагает выделение существенных для программы свойств у объекта реального мира. Программный объект является моделью реального, который мы можем воспринимать чувствами или мышлением. Например, объект четырех угольник и задача оптимального размещения парт в аудитории.
Инкапсуляция означает, что в качестве единицы целого рассматривается объединение некоторой группы данных и некоторой группы функций. Свойства объектов хранятся в структурах данных, напоминающих структуры языка С, а поведение объектов реализуется в виде функций, называемых функциями-членами (member function) объектов. В объекте реализована защита данных: если данные или функции-члены объявлены приватными или защищенными, то к ним нет доступа извне. Зато данные и функции, объявленные общими, доступны любому внешнему объекту.
Полиморфизм, означает, что одно и то же имя может использоваться для логически связанных, но разных целей, т. е. имя класса определяет набор действий, которые в зависимости от того или иного типа данных могут существенно отличаться. Например, можно определить три типа переменных: натуральный дроби, комплексные числа и векторы. Для каждого из них можно определить функцию sum(x, у) - сумму двух переменных, а можно сделать так, что для этих трех типов будет определена операция сложения х + у. В зависимости от того, какого типа будут переменные х и у, работать эта функция и операция сложения будут по-разному. Причем полиморфизм поддерживается в C++ и во время компиляции, и во время выполнения программы.
Наследование позволяет одним объектам приобретать атрибуты, свойства и методы других родительских по отношению к ним объектов. Наследование позволяет строить иерархию объектов, переходя от более общего к частному, уточняя и конкретизируя объект.
Лекция.2.Классы С++