Глава 38. Объектно-ориентированное программирование

Идеология ООП
Примеры
Животные
Простые числа: фильтрация
Готовая программа
Животные
Простые числа: фильтрация

Во многих языках программирования есть средства для того, чтобы составлять из данных сложные агрегаты и при желании давать им имена. В Perl кроме встроенных сложных конструкций (простых и ассоциативных массивов) при помощи ссылок можно организовать структуру любой сложности. К примеру, окружность на координатной плоскости вполне задана координатами своего центра и радиусом. На Perl объект «окружность» можно сконструировать так:

$circle=
{
	center=>{x=>210, y=>297},
	radius=>53,
};

Если предполагается рисовать окружности на экране разными цветами, то к перечню свойств фигуры можно добавить и цвет:

$circle->{color}='Orange';

Таким образом, окружность выступает как самостоятельная единица, а не как груда переменных, хранящих все её свойства. Доступ ко всем свойствам такой окружности осуществляется через единственную скалярную переменную $circle. Если же в программе участвуют многие окружности, было бы весьма затруднительно придумывать имена для координат их центров, для радиусов и цветов, если бы не такой подход.

Для треугольников набор данных, определяющий положение и вид на экране, выглядел бы так:

$triangle=
{
	a=>{x=>17, y=>11},
	b=>{x=>8, y=>56},
	c=>{x=>23, y=>4},
	color=>'Green',
};

Допустим, что мы пишем программу, которая должна рисовать на экране различные фигуры, в том числе окружности и треугольники, и двигать их.

Конечно, эти действия должны производиться процедурами. Одна функция для рисования окружности, другая — для рисования треугольника. Для каждого вида фигур своя процедура, хотя назначение у них одно и то же — рисовать. Придётся выдумывать для каждой рисующей процедуры своё название, которое говорило бы, во-первых, о её предназначении, и во-вторых, о виде фигуры, с которой она умеет работать, скажем, drawCircle, drawTriangle. Разумеется, эти процедуры должны получать объект «фигура» в виде ссылок как параметр.

Такой подход долгое время был единственно возможным, да и сейчас он достаточно широко распространён. С другой стороны, алгоритмические языки совершенствовались, и сейчас в нашем распоряжении есть другая возможность — объединять свойства объекта с его умениями.

Для этого нужно расширить понятие объекта, взглянуть на него с более общей точки зрения как на агрегат, включающий в себя как свойства, так и методы, использующие эти свойства. Например, окружность — это нечто, имеющее центр, заданный двумя координатами, радиус и цвет, а также умеющее показаться на экране. А треугольник, хоть и описывается несколько другим набором данных, также имеет цвет и тоже способен нарисоваться. Это позволяет включить класс окружностей и класс треугольников в более общий класс фигур — и у тех, и у других есть общее.

Такой взгляд на программирование называется объектно-ориентированным, в противоположность традиционному процедурному. На переднем плане — объекты; программа — поле деятельности объектов. При процедурном программировании главные действующие лица в программе — процедуры.

Информатика-54© А. Н. Швец