- •Концепция класса
- •Переменные класса
- •Методы класса
- •Наследование
- •Конструктор и деструктор
- •Виды памяти и создание объектов
- •Управление доступом к переменным и методам класса
- •Интерфейс
- •Исключения
- •Шаблоны
- •Введение в наследование
- •Множественное наследование классов
- •Преобразование типов
- •Виртуальные функции
Концепция класса
Ключевым понятием объектно-ориентированного проектирования и программирования является понятие класса.
Класс представляет собой обобщение однородных объектов реального мира. Другими словами, класс описывает общие свойства и поведение некоторой совокупности объектов. Свойства класса представлены в виде переменных класса, а его поведение – в виде методов (функций). Например, в виде класса может быть представлена концепция человека (персоны). Переменными такого класса будут: ФИО, текущие паспортные данные, номер свидетельства о рождении и т.п. В основу методов может быть положено следующее поведение: поступление на работу, получение заработной платы и т.д.
Класс описывает свойства и поведение объектов статическим способом. Это значит, что содержание класса не может быть изменено без изменения и повторной сборки программного обеспечения. Экземпляры классов (объекты) в ходе работы программы создаются и удаляются в вычислительной среде динамически, в соответствии с кодом программы. Если класс – это описание свойств объектов, то экземпляр класса отражает конкретный объект реального мира. Например, класс «человек» описывает свойства всех людей, а отдельный экземпляр этого класса – соответствует конкретному человеку.
Переменные класса
Класс содержит описание двух аспектов – структурного аспекта и аспекта поведения. Остановимся на первом. Структура данных класса представляет собой последовательность переменных. Порядок следования переменных важен и определяет их расположение в памяти при создании объектов.
Как и другие переменные, переменная класса относится к некоторому типу и имеет имя (уникальное в рамках класса). Тип переменной характеризуется размером, то есть количеством байт, занимаемых каждым значением. В качестве типа переменной могут быть использованы другие классы объектов. В этом случае нижестоящий объект (являющийся переменной класса) входит как часть в вышестоящий объект. Приведем пример класса на языке C++:
class Person { int number; -- Индивидуальный номер человека char name[10]; -- Имя int age; -- Возраст float height; -- Рост }; |
В соответствии с размером переменных на стадии компиляции для каждого класса формируется описание расположения переменных в памяти относительно начала объектов, например, следующего вида:
Имя класса |
№ переменной в классе |
Тип переменной |
Название переменной |
Смещение от начала объекта |
Размер переменной |
Person |
1 |
int |
Number |
0 |
4 |
Person |
2 |
char[] |
Name |
4 |
10 |
Person |
3 |
int |
Age |
14 |
4 |
Person |
4 |
float |
Height |
18 |
4 |
Иллюстративно структуру объектов класса в памяти можно представить следующим образом:
Все объекты, принадлежащие одному классу, имеют одинаковый размер, равный сумме размеров всех входящих переменных. Этот размер определяется на стадии компиляции и остается постоянным до тех пор, пока в структуру данных класса не будут внесены изменения.
Описанный аспект класса очень близок к понятию «структура» структурного программирования. Но есть и отличия, которые будут изложены при обсуждении управления доступом к переменным класса.