Объектно - ориентированное
программирование (ООП) представляет собой новый этап развития
современных концепций построения языков программирования. Здесь
получили дальнейшее развитие принципы структурного программирования -
структуризация программ и данных, модульность и т.д.
В основе ООП лежит понятие объекта, сочетающего в себе данные и
действия над ними. Объект в некотором роде похож на стандартный тип -
запись, но включает в себя не только поля данных, но также и
подпрограммы для обработки этих данных, называемые методами. Таким
образом, в объекте сосредоточены его свойства и поведение. Идея
создания нового типа - объект - была уже заложена при введении
процедурного типа, отождествляющего между собой данные и действия над
ними. Фактически тип-объект включает в себя помимо данных элементы
процедурных типов, правда, несколько иначе оформленные с расширенным
набором особенностей.
Инкапсуляция означает
упоминавшееся выше объединение в одном объекте данных и действий над
ними. Примером может служить перемещаемый по экрану отрезок,
определяемый координатами своих концов (данных), и процедурой,
обеспечивающей это перемещение (метод).
Наследование позволяет
создавать иерархию объектов, начиная с некоторого простого
первоначального (предка) и кончая более сложными, но включающими
(наследующими) свойства предшествующих элементов (потомки). Эта
иерархия в общем случае может иметь довольно сложную древовидную
структуру. Каждый потомок несет в себе характеристики своего предка
(содержит те же данные и методы), а также обладает собственными
характеристиками. При этом наследуемые данные и методы описывать у
потомка нет необходимости. В качестве такой иерархии можно рассмотреть
точку на экране дисплея, задаваемую своими координатами (предок),
отрезок, задаваемый координатами двух точек - его концов (потомок
точки), перемещаемый отрезок, задаваемый координатами своих концов и
процедурой, обеспечивающей его перемещение (потомок неперемещаемого
отрезка) и т.д.
Полиморфизм означает, что для
различных родственных объектов можно задать единый класс действий
(перемещение по экрану любой геометрической фигуры). Затем для каждого
конкретного объекта составляется своя подпрограмма, выполняющая это
действие непосредственно для данного объекта (естественно, что
перемещение по экрану точки отличается от перемещения отрезка, а
перемещение отрезка, в свою очередь, отличается от перемещения
многоугольника и т.д.), причем все эти подпрограммы могут иметь одно и
то же имя. Когда потребуется перемещать конкретную фигуру, будет
выбрана из всего класса соответствующая подпрограмма.
ООП обладает рядом преимуществ при создании больших программ. К ним
можно отнести:
1. Использование более естественных с точки зрения повседневной
практике понятий, простота введения новых понятий.
2. Некоторое сокращение размера программ за счет того, что
повторяющиеся (последующие) свойства и действия можно не описывать
многократно, как это делается при использовании подпрограмм; кроме
того, использование динамических объектов позволяет более эффективно
использовать оперативную память.
3. Возможность создания библиотеки объектов.
4. Сравнительно простая возможность внесения изменений в программу без
изменения уже написанных частей, а в ряде случаев и без перекомпиляции
этих написанных и уже скомпилированных частей, используя свойства
наследования и полиморфизма.
5. Возможность написания программ с различными наборами формальных
параметров, но имеющих одно и то же имя, используя свойство
полиморфизма.
6. Более четкая локализация свойств и поведения объекта в одном месте
(используются свойство инкапсуляции), позволяющее проще разбираться со
структурой программы, отлаживать ее, находить ошибки.
7. Возможность разделения доступа к различным объектам программы и т.д.
ООП обладает рядом недостатков и эффективно не во всех случаях.
использование ООП приводит к уменьшению быстродействия программы ,
особенно в тех случаях, когда используются виртуальные методы.
Неэффективно ООП применительно к небольшим программам, поэтому его
можно рекомендовать при создании больших программ. ООП скорее не
упрощает саму программу, а упрощает технологию ее создания.
Понятие объекта. Основным
понятием ООП и элементом программы является объект, сочетающий в себе
как совокупность данных, так и действия над ними. Тип - объект
напоминает тип-запись, однако вместо зарезервированного слова record не
используется слово object, а кроме полей, представляющих данные, в нем
перечислены и заголовки подпрограмм, называемых методами. После
зарезервированного слова object перечисляются все поля объекта и
заголовки методов, после чего пишется слово end.
Некоторые объекты программы, особенно находящиеся в начале
иерархического дерева, могут и не соответствовать каким-либо реальным
объектам. Так, например, объекты типов tConnection (связь) tstructure
(структура) и tOperation (операция) не имеют какого-либо физического
воплощения - они указывают лишь на некоторые свойства других, реальных
объектов, таких, как строки, элементы строк. Однако, выделение этих
общих свойств в отдельные объекты бывает удобно, т.к. позволяет затем
не повторять их многократно при описании уже реальных объектов. Такие
объекты называются абстрактными, и переменных таких типов в программе,
как правило, не бывает.