Тема: Введение в классы
Некоторые замечания по объектно-ориентированному программированию
В идеале в языке С++ программирование должно быть объектно-ориентированное (ООП), единицей программирования является класс, на основе которого создаются объекты.
Основные понятия и принципы ООП: объект, класс, инкапсуляция, наследование и полиморфизм. Класс является обобщением понятия типа данных и задает свойства и поведение объектов класса, называемых так же экземплярами класса. Каждый объект принадлежит некоторому классу.
Грамотно реализованные принципы ООП, позволяют создавать программы, использующие методологию стандартных блоков (кусочков программ) – это называется повторным использованием программных кодов.
При программировании на С++ обычно используются стандартные блоки: классы из библиотек классов и функции из стандартной библиотеки AINI C, классы и функции, создаваемые вами самими, и классы и функции, созданные другими программистами, но доступные вам.
До сих пор рассматривалось использование готовых объектов из стандартной библиотеки (объекты cin, cout, объект endl и т.д.). С их помощью можно решить много задач. Но даже самый лучший набор готовых объектов нельзя применить ко всем задачам, для этого создаются собственные объекты. Гораздо проще справиться с большими и сложными проблемами, имея возможность описать объекты, о которых идет речь в задаче. Моделировать работу системы отопления проще, имея возможность манипулировать переменными, соответствующими датчикам температур, параметрам помещения и т.д.
Классы предоставляют возможность программисту моделировать объекты, которые имеют атрибуты или характеристики (представленные как данные-элементы) и способы поведения или операции (представленные как функции-элементы).
Класс – это механизм для создания объектов, представляет собой набор переменных, зачастую различных типов, скомбинированный с набором функций, предназначенных для работы с ним. Таким образом, класс можно представлять как объединение данных и процедур, предназначенных для их обработки.
Данные класса называются также переменными класса, а в языке С++ – данными-членами класса. Процедуры называются методами класса, в С++ – функциями-членами класса14.
Формально в языке С++ класс определяется как новый тип, а объекты класса декларируются как переменные этого типа. Главное отличие объекта от обычно переменной заключается в том, что с ним уже связаны не только определенные значения данных, но и методы, т.е. функции класса, определяющие поведение объектов класса. Фактически каждый объект может решать определенные задачи, манипулируя своими данными с помощью методов класса.
Переменные определяют свойства и состояния объекта. Методы определяют поведение класса в языке 15.
П. 5.2. Объявление класса
Прежде чем создать собственный объект (новый тип) необходимо объявить собственный класс. Класс объявляется при помощи ключевого слова class.
сlass имя_класса
{
private: // по умолчанию
// закрытые функции и переменные класса
public:
// открытые функции и переменные класса
}
список_объектов;
В объявлении класса список_объектов не обязателен, можyj объявить объекты класса позже, по мере необходимости.
Для объявления открытых или закрытых разделов класса используются ключевые слова public и private. Каждое ключевое слово изменяет режим доступа данных объявленных ниже его до конца объявления класса или до тех пор, пока не встретится следующее ключевое слово управления доступом.
По умолчанию все функции и переменные, объявленные внутри класса, становятся закрытыми (ключевое слово private), что означает их доступность только для других членов класса. В области private описывается «сердцевина» будущего объекта, самое важное, что есть и скрыто (инкапсулировано) в объекте и к чему доступ извне должен быть закрыт.
Для объявления открытых членов класса используется ключевое слово public, за которым следует двоеточие. Все функции и члены, объявленные после слова public, доступны как для других членов класса, так и для любой другой части программы, в которой находится этот класс. В области public описан как бы способ управления объектом, то есть собственные функции объекта, с помощью которых можно получить доступ к области private, задать состояние объекта, заставить выполнить его какие-то действия.
Пример. Объявим класс Car:
class Car
{
// данные-члены
// закрытый элемент класса
unsigned short Key; // переменная для хранения символического
// ключа
// открытые элементы класса
public:
unsigned int itsYear; // переменная для хранения значения
// возраст автомобиля
unsigned int numbDoors; // переменная для хранения значения
// числа дверей в автомобиле
// функция-член класса
void Start( );
};
Здесь класс имеет одну закрытую переменную, две открытые переменные и одну открытую функцию.
При объявлении класса память не резервируется, объявление просто сообщает компилятору о существовании класса Car, о том какие данные он содержит, а также о том, что он умеет делать. Кроме того, объявление сообщает компилятору о размере класса, т.е. сколько место он должен зарезервировать для каждого объекта класса Car. Выделение памяти требуют переменные, метод Start() не требует выделения памяти, поскольку для функций-членов объекта пространство в памяти не резервируется.
