Существует пять компонент ООП: объект, сообщение, класс, наследование и метод, которые очень сильно зависят друг от друга.
Объект – это инкапсулированная абстракция, которая включает информацию об элементах объекта и четко определенное число функций, описывающих его поведение. Объект ООП можно сравнивать с объектами физического мира, например, с модулями компьютера, агрегатами автомобиля, электронными платами, из которых создаются изделия. Объекты – это строительные блоки разрабатываемой программы. В языке С++ объект – это переменная типа classname, где classname – это созданный класс.
Сообщение – это специальный символ, идентификатор или ключевое слово (с параметрами или без них), которое описывает выполняемое объектом действие. Объект имеет четко определенное описание сообщений, которые он принимает и обрабатывает. В языке С++ сообщения вводятся с помощью функций в описании класса.
При создании объектов используются определенные типы данных, создаваемые пользователем и называемые классами. Для программистов классы являются расширениями структур языка С, дополненные «механизмами» скрытия данных, функциями-элементами и наследованием.
Между старыми структурами языка С, новыми структурами языка С++ и классами существует взаимосвязь (табл. 12.1).
Таблица 12.1 Ввзаимосвязь между структурами языка С/С++ и классами
Структура С |
Структура С++ |
Класс С++ |
typedef struct |
struct rect |
class rect |
{ |
{ |
{ |
nt wd,ht; |
int wd,ht ; |
public: |
} rect; |
}; |
int wd,ht; |
}; |
В отличии от структур языка С, структуры языка C++ фактически являются типами определяемыми пользователем, без использования ключевого слова typedef. В языке С++ добавлено новое ключевое слово – class. Естественно, что класс, имеющий все элементы типа public без каких-либо функций, является обычной структурой С++. Типичный пример класса:
class circle
{ // Объявление класса circle
private: // Следующий элемент закрытый:
double radius; // Закрытый элемент
public: // Следующие элементы общедоступные:
void init(double r); // Функция-элемент
double area(void); // Функция-элемент
};
Экземпляры объекта принадлежат к какому-либо классу. Свойства экземпляра объекта определяются описанием класса. Объекты содержат и данные, и функции, которые по терминологии ООП называются методами. В языке С++ функции класса называют функциями-элементами (или функциями-членами). Метод определяет реакцию объекта на сообщение. Объекты обрабатывают сообщения в соответствии с методами, заданными в описании класса.
Объектно-ориентированный язык обладает такими свойствами как абстракция, инкапсуляция, полиморфизм и наследование. Рассмотрим их подробней.