
Основные принципы ооп: инкапсуляция, наследование, полиморфизм.
ООП – технология разработки ПО, которая ориентирована на предметную область, выделяя в ней иерархию объекта с их свойствами и поведенческими функциями. Именно такой подход соответствует природе реального мира. Пользователь может задавать свои типы данных, называемые классами. Переменные таких типов называются объектами. В основе ООП лежит три понятия: инкапсуляция, наследование, полиморфизм.
Инкапсуляция.
Означает соединение в единое целое (капсулу) данных и функций, которые обрабатывают эти данные. Результатом такого соединения становятся абстрактные типы данных, или классы. Класс состоит из элементов-данных (свойств), специфицирующих состояние объектов класса, и элементов-функций (методов), специфицирующих поведение объектов класса.
Общий вид описания класса:
ключ_класса имя_класса <: список_родителей>
{список_элементов}
Параметр список_родителей – не обязателен, применяется только в случае построения иерархии классов (наследование). Ключ класса означает одно из ключевых слов class, struct, union.
Понятие инкапсуляция подразумевает также управление доступом к элементам класса из различных функций, являющихся или не являющихся элементами класса. Для управления доступом используются следующие спецификаторы:
● public – элементы класса доступны всем функциям.
● private – элементы класса доступны только функциям-элементам и функциям-друзьям данного класса.
● protected – аналог private, но также могут быть доступны из порождаемых классов (если разрешено при наследовании).
Дружественная функция – сама не является элементом класса, но имеет права на доступ к элементам класса, описанным как private или protected.
Наследование.
Наследование означает возможность порождать иерархию классов, в которой класс-потомок (порожденный класс) получает данные и функции классов-предков (родителей, базовых классов). Порожденный класс содержит в себе все характеристики базового класса, а также может иметь дополнительные свойства и методы. Список базового класса указывается при описании порожденного класса после его имени через двоеточие. Если имеет место наследование от нескольких классов, то говорят о множественном наследовании.
В производном классе доступ у унаследованным элементам базового класса может быть оставлен прежнем, либо еще более ограничен. Поэтому при перечислении родителей класса необходимо указать спецификаторы доступа к их элементам.
Полиморфизм.
Свойство полиморфизма («множественность форм») означает, что функциональность базовых классов может быть изменена в классах-наследниках.
Полиморфизм в языке СИ++ реализуется с помощью виртуальных функций. Виртуальные функции позволяют классам-наследникам определять различные версии функций базового класса. Ключевое слово virtual. Механизм виртуальных функций работает в случаях, когда тип и аргументы переопределяемой функции одинаковы в базовом и порожденном классе. Если функция была определена как virtual в базовом классе, то все функции порожденных классов, имеющие тоже имя, тип и список аргументов автоматически считаются виртуальными. Конструкторы класса не могут быть описаны как виртуальные, деструкторы могут.
«Чистые» виртуальные функции – виртуальные функции, не имеющие реализации, их код не существует. Абстрактный класс –класс, имеющий по крайней мере одну «чистую» виртуальную функцию. Он используется только как базовый для других классов, создавать объекты такого класса нельзя. Он имеет конструкторы и деструкторы.
В Pascal используются виртуальные методы
2. Классы и объекты в С++ и Pascal.
Объект – логическая единица, которая содержит данные и правила (методы) обработки этих данных. В языке С++ в качестве таких правил обработки выступают функции, т.е. объект Borland C++ объединяет в себе данные и функции, обрабатывающие эти данные. Внутри объекта данные и функции могут быть:
● общими (public) – элементы класса доступны всем функциям.
● частными (private) – элементы класса доступны только функциям-элементам и функциям-друзьям данного класса.
● защищенными (protected) – аналог private, но также могут быть доступны из порождаемых классов (если разрешено при наследовании).
Можно сказать, что объект – это переменная определенного пользователем типа.
ОО языки обладаю: инкапсуляцией, наследованием, полиморфизмом, абстракцией типов.
Инкапсуляция. Означает соединение в единое целое (капсулу) данных и функций, которые обрабатывают эти данные. Результатом такого соединения становятся абстрактные типы данных, или классы. Класс состоит из элементов-данных (свойств), специфицирующих состояние объектов класса, и элементов-функций (методов), специфицирующих поведение объектов класса.
Общий вид описания класса:
ключ_класса имя_класса <: список_родителей>
{список_элементов}
Параметр список_родителей – не обязателен, применяется только в случае построения иерархии классов (наследование). Ключ класса означает одно из ключевых слов class, struct, union.
Конструктор – функция, которая определяет набор действий, выполняемых при создании объекта класса. Имя конструктора совпадает с именем класса, элементом которого он является. Как правило, конструктор содержит вызов оператора new, либо дей1ствия, связанные с начальной инициализацией объекта. Деструктор – содержит набор операторов, которые выполняются перед уничтожением объекта. В набор таких операторов может входить вызов оператора delete. Имя деструктора совпадает с именем класса, которому предшествует символ ~.
Наследование. Наследование означает возможность порождать иерархию классов, в которой класс-потомок (порожденный класс) получает данные и функции классов-предков (родителей, базовых классов). Порожденный класс содержит в себе все характеристики базового класса, а также может иметь дополнительные свойства и методы. Если имеет место наследование от нескольких классов, то говорят о множественном наследовании.
Полиморфизм. Свойство полиморфизма («множественность форм») означает, что функциональность базовых классов может быть изменена в классах-наследниках. Например, в иерархии графических объектов (точка, линия, и т.д.) каждый объект имеет собственный метод вывода изображения на экран Draw. Т.о. каждый объект будет обрабатывать запрос на вывод изображения согласно своему типу. Полиморфизм в языке СИ++ реализуется с помощью виртуальных функций. Виртуальные функции позволяют классам-наследникам определять различные версии функций базового класса. Ключевое слово virtual. Механизм виртуальных функций работает в случаях, когда тип и аргументы переопределяемой функции одинаковы в базовом и порожденном классе. Если функция была определена как virtual в базовом классе, то все функции порожденных классов, имеющие тоже имя, тип и список аргументов автоматически считаются виртуальными. Конструкторы класса не могут быть описаны как виртуальные, деструкторы могут. «Чистые» виртуальные функции – виртуальные функции, не имеющие реализации, их код не существует.
В терминах Паскаля объект очень напоминает запись, которая служит оболочкой для соединения нескольких связанных между собой элементов под одним именем. В Pascal полиморфизм реализуется с помощью виртуальных методов. Метод становится виртуальным, если за его объявлением в типе объекта следует зарезервированное слово virtual.Если метод в родительском типе объявлен как виртуальный, то все методы с таким же именем в любом порожденном типе должны быть так же объявлены виртуальными. Есть конструктор и деструктор. ТР разрешает указывать личные (private) поля и методы внутри объекта.