Писатели
Используя указанные выше типы, определим класс
class WRITER feature
name, real_name: STRING
birth_year, death_year: INTEGER
end
Рис. 8.3. Объект «писатель»
Ссылки
Чаще всего нам необходимы объекты с полями, представляющими другие объекты. Например, книга имеет автора, который представлен экземпляром класса
Можно ввести понятие подобъекта. В новой версии класса
Рис. 8.4. Два объекта «книга» с подобъектами «писатель»
Такое понятие подобъекта, несомненно, полезно, и далее в этой лекции будет показано, как создавать соответствующие классы.
Но это не совсем то, что необходимо. В каждом экземпляре
[x]. Расходуется дополнительная память. Можно привести в качестве более характерного примера совокупность объектов, представляющих людей. Каждый объект в качестве подобъекта содержит информацию о стране гражданства. Очевидно, что численность населения намного превышает число стран.
[x]. Более важно, что такая техника не обеспечивает разделения информации. Вполне естественно желание, чтобы внесение изменений в объект
Лучшим является решение, представленное на рис.8.5 . Оно основано на новой версии класса,
Каждый экземпляр
Определение: ссылка
Ссылка это значение времени выполнения. Она может быть пустой (void) или присоединенной (attached).
Присоединенная ссылка однозначно идентифицирует объект (присоединена к конкретному объекту).
Рис. 8.5. Два объекта «книга» со ссылками на один и тот же объект «писатель»
На рис.8.5 оба поля
Рис. 8.6. Объект, содержащий пустую ссылку (Роман «Кандид» (Candide) опубликован анонимно)
Определение ссылки не подразумевает конкретной аппаратно-программной реализации. Если ссылка не пуста, то она идентифицирует объект и может рассматриваться как абстрактное имя объекта.
Концепция ссылки должна, безусловно, иметь аналог при реализации. Программирование на уровне машинного кода использует адресацию, многие языки программирования содержат понятие указателя. Понятие ссылки является более абстрактным. Хотя ссылка, в конечном итоге, может быть представлена адресом, не следует из этого исходить. Ссылка может содержать адрес наряду с другой информацией.
Отличие ссылок от указателей выражается в том, что они типизированы. Они напоминают типизированные указатели в Pascal и Ada (но не в C). Это означает, что данная ссылка может быть связана только с объектами определенных типов. По аналогии с обычной жизнью - код города имеет смысл только при наборе телефонных номеров. Он может выглядеть как обычное целое, но никому не придет в голову суммировать коды.
Идентичность объектов
Понятие ссылки приводит к концепции идентичности объектов. Каждый объект, созданный в процессе выполнения ОО-системы, уникален и идентифицируется независимо от значений его полей. Возможны две ситуации:
[x]. (I1) Два различных объекта могут иметь абсолютно одинаковые поля.
[x]. (I2) Напротив, поля данного объекта могут изменяться в процессе выполнения системы, но это не влияет на идентификацию объекта.
Эти наблюдения свидетельствуют о неоднозначности высказывания '
