Основы объектно-ориентированного программирования


              

Этот пакет содержит объявление типа


do ... end has (t: INTBINTREE; x: INTEGER): BOOLEAN is -- Содержится ли x в t? do ... Реализация операции поиска ... end put (t: INTBINTREE; x: INTEGER) is -- Включить x в t. do ... end remove (t: INTBINTREE; x: INTEGER) is -- Удалить x из t. do ... end end -- пакета INTEGER_TABLE_HANDLING

Этот пакет содержит объявление типа (INTBINTREE), и ряда подпрограмм, представляющих операции над объектами этого типа. В данном примере не потребовалось описания переменных пакета (хотя в подпрограммах могут иметься локальные переменные).

Пакеты-клиенты теперь могут работать с таблицами, используя различные методы из INTEGER_TABLE_HANDLING. Введем синтаксическое соглашение, позволяющее клиенту пользоваться методом f из пакета, для чего позаимствуем нотацию из языка CLU: P$f. В нашем примере типичные фрагменты программного текста клиента могут иметь вид:

-- Вспомогательные описания: x: INTEGER; b: BOOLEAN -- Описание t типа, определенного в INTEGER_TABLE_HANDLING: t: INTEGER_TABLE_HANDLING$INTBINTREE -- Инициализация t новой таблицей, создаваемой функцией new пакета: t := INTEGER_TABLE_HANDLING$new -- Включение x в таблицу, используя процедуру put пакета: INTEGER_TABLE_HANDLING$put (t, x) -- Присваивание True или False переменной b, -- для поиска используется функция has пакета: b := INTEGER_TABLE_HANDLING$has (t, x)

Отметим необходимость введения двух связанных между собой имен: одного для модуля, здесь это INTEGER_TABLE_HANDLING, и одного для его основного типа данных, здесь это INTBINTREE. Одним из ключевых шагов к ОО-программированию явится объединение этих двух понятий. Но не будем опережать события.

Менее важной проблемой является утомительная необходимость неоднократно писать имя пакета (здесь это INTEGER_TABLE_HANDLING). В языках, поддерживающих работу с пакетами, эта проблема решается с помощью различных сокращенных синтаксических конструкций (shortcuts), таких как, например, в языке Ada:


with INTEGER_TABLE_HANDLING then ... Здесь has означает INTEGER_TABLE_HANDLING$has, и т.д. ...

Содержание  Назад  Вперед