
- •Основные понятия объектно-ориентированного программирования. Понятие: объектов. Классов, инкапсуляция, наследования, полиморфизм. Пример.
- •Основные принципы построения классов:
- •5. Сокрытие информации
- •Функции-конструкторы
- •Множественное наследование
- •8. Виртуальные функции и полиморфизм
- •9.Абстрактные и конкретные классы
- •14.Оператор this.
Основные понятия объектно-ориентированного программирования. Понятие: объектов. Классов, инкапсуляция, наследования, полиморфизм. Пример.
Объектно-ориентированное программирование – это методология разработки программ, основанная на представлении программы, в виде совокупности объектов, каждый из которых является реализацией определенного класса.
Объект - программное представление физических или логических сущностей реального мира (Например, конкретный телевизор). Ренальные объекты имеют 2 характеристики: состояние, которое определяется набором свойств объекта и поведение, т.е. те действия, которые может совершать объект.
Класс – это некие проект, из которого создается объект.
Класс- абстрактный тип данных, определяемый пользователем. И представляет собой модель реального объекта в виде данных и функций для работы с ним.
Поля-данные класса.
Методы- функции класса.
Экземпляр- объявление объекта типа класс.
Конструктор- метод формирующий экземпляр класса.
Программа-деструктор- метод уничтожает экземпляр класса в памяти.
Основные принципы построения классов:
Инкапсуляция- это объединение в единой конструкции и данных и функций, обрабатывающих их. Сокрытие данных
Наследование. Классы составляют иерархию. Считается, что при наследовании все характеристики класса-родителя присваиваются классу-потомку.
Полиморфизм. При полиморфизме родственные объекты могут вести себя по-разному в зависимости от ситуации, возникшей при выполнении программы. Полиморфизм достигается за счет того, что методам из класса-родителя позволено выполняться и классе-потомке, а там оставляют только имя, но при этом дают определенную функциональность. Такие методы должны объявляться в обоих классах с атрибутами virtual пред атрибутом “возвращаемый тип”. Так же есть методы с атрибутами Friend (дружественный).
5. Сокрытие информации
Сокрытие информации (инкапсуляция) - маскирование деталей реализации функции ,класса или программы. Передавая функции некоторое значение как входной параметр, будет известен лишь результат, который будет получен лишь на выходе этой функции. Существует возможность разделять определение класса на privat и public части. Чем меньше программе известно о классе, тем лучше. Для доступа к приватным данным объекта в программе необходимо применять публичные методы.
Функции-конструкторы
После создания объекта – экземпляра класса обычно следует присвоение некоторых начальных значений членам этого объекта. Для упрощения этого процесса предусмотрена специальная функция, называемая конструктором. Её имя совпадает с именем класса. Она выполняется автоматически при создании экземпляра класса., т.е. если при описании класса конструктор не был задан, то компилятор сгенерирует для класса стандартный конструктор. Реализацию функции-конструктора можно определить в самом классе и вне его.В дальнейшем, при объявлении в программе объектной переменной. Входные параметры можно передать через конструктор.
Функции-деструкторы
Функция-деструктор выполняется при уничтожении экземпляра класса. Вызывается если:1) объект выходит из области видимости, например, при завершении программы или выхода из функции, 2)применяется оператор delete для освобождения памяти, выделяемой для объекта. Имя деструктора совпадает с именем класса. В котором эта функция определена. Именам предшествует тильда (~). Деструктор не принимает никаких аргументов и не может быть перегружен. Если деструктор не задан явно, то компилятор предоставляет классу стандартный деструктор.
Область видимости классов.
Область видимости классов распространяется от места их определения. до конца блока. Для расширения области видимости класса его можно определить вне всех программных блоков. Кроме того, если класс определен как внешний (extern). То он доступен для всей программы в целом. Если класс определен как static, то его область видимости такая же как и для переменной класса памяти, но её содержимое при этом сохранится на протяжении всей программы.
Ссылка на глобальную переменную с -::с;
Ссылка на переменную с внешнего класс Х - Х::с;
Ссылка на переменную с вложенного класса Y в классе Х-Х::Y::с;
Перегрузка конструкторов.
Известно, что функции можно перегружать, решение о том, какую именно функцию выполнять, компилятор принимает в зависимости от типов передаваемых при вызове параметров. Функции- конструкторы не являются исключением. В следующем примере конструктор присваивает передаваемые параметры переменным объекта, а второй конструктор выводит сообщение, говорящее о необходимости задания значений для параметров конструктора. Второй конструктор запускается при попытке создания объекта классов без параметров
Наследование.
Классы составляют иерархию, в который производные классы получают элементы родительских или базовых классов дополнять их или изменять их свойства. Существует простое и множественное наследование. Множественное наследование позволяет одному классу обладать свойствами двух или более родительских классов.
Простое наследование
Это процесс создания одного производного класса, наследующего элементы базового класса. производный класс не может иметь доступ к закрытым элементам своего базового класса. Производный класс может, однако, иметь доступ к открытым и защищенным (protected) элементам своего базового класса. Элементы базового класса, которые не должны быть доступны производному классу через наследование, объявляются в базовом классе закрытыми . Производный класс может иметь доступ к закрытым элементам своего базового класса только посредством функции доступа, предусмотренных в открытом интерфейсе базового класса. Базовый и производный конструкторы. При порождении производного класса из базового, имеющего конструктор, конструктор базового класса необходимо вызвать из конструктора производного класса.
Конструкторы не наследуются, поэтому производный класс должен иметь собственные конструкторы. Если в конструкторе производного класса явный вызов конструктора базового класса отсутствует, то автоматически вызывается конструктор базового класса по умолчанию, т.е. без параметров. Конструкторы базовых классов вызываются, начиная с верхнего уровня. Если их несколько их конструкторы вызываются в порядке объявления. Деструкторы не наследуются
Множественное наследование
Это процесс создания производного класса из нескольких ранее созданных базовых классов и производных классов других базовых классов. Конструкторы производного вызываются последовательно конструкторы наследуемых классов.
Дружественные классы.
Обращаться к частным элементам одного класса из другого можно только через интерфейсные функции, но и напрямую , путем объявления дружественных классов (friend). В отличие от производных классов, которые позволяют обращаться к частным элементам базового класса, объявляя эти элементы защищенными (protected), классы-друзья не связаны друг с другом через аппарат наследования. Для объявления класса-друга нужно в определении класса указать ключевое слово friend и имя дружественного класса.