12.1. ОБЪЕКТЫ
713
указать на некоторые ориентиры, способные облегчить понимание подобных
вопросов.
В
C++
и
Java
конструкторы носят просто имя класса, но, поскольку в
С++
и
Java
может быть несколько процедур с одним и тем же именем, но разны-
ми параметрами (полиморфизм процедур), конструкторов тоже может быть
несколько.
Деструкторы в
С++
носят имя класса с отрицанием (например,
Tbits
). В
языке
Java
их просто нет, поскольку действия по уничтожению возлагаются
на систему сборки мусора.
Система объектно-ориентированного программирования по умолчанию
предлагает простейшие конструкторы и деструкторы. В частности, а параме-
трами их являются все открытые поля данного класса в порядке их появления
в описании. В
Object Pascal
конструктор, создаваемый по умолчанию, носит
имя
Create
, а деструктор —
Destroy
, и параметров они не имеют.
При вызове метода класса необходимо указать конкретный объект данно-
го класса, которому принадлежит метод. Это связано, в частности, с тем, что
объект может являться не чистым объектом данного класса, а его наследни-
ком, а наследник может заменить некоторые методы (как у нас сделано для
конструктора
Create
). При описании нового метода на старый метод можно
сослаться как на
inherited
, (
super
в языке
Java
) и явно выписать лишь новые
действия.Но это уже переход к принципиально новым возможностям объект-
ного программирования: динамической подстановке методов в момент вы-
полнения, которые рассматриваются в следующем пункте. Именно эта воз-
можность делает объектно-ориентированное программирование следующим
шагом по сравнению с модульностью (в первую очередь для традиционных
языков; для, скажем, сентенциальных и функциональных языков такое рас-
ширение является непринципиальным).
В языках
С++
и
Java
некоторые поля класса могут быть объявлены как
static
. Статические поля создаются при входе в программу один раз для всех
будущих экземпляров объектов данного класса. Поэтому, в частности, в та-
ком поле удобно хранить глобальные характеристики системы объектов дан-
ного класса, например, число активных в данный момент объектов. В
Object
Pascal
этого описателя нет, так как он, во-первых, грубо противоречит духу
языка
Pascal
, а во-вторых, просто избыточен. Поскольку модульность и объ-
ектность не слиты в этом языке воедино, в модуле, где описывается класс,
можно объявить переменную, которая будет глобальной для всех экземпля-
ров класса. Эта переменная будет невидима извне, если ее поместить в сек-
цию
implementation
и может быть проинициализирована в секции
initialization