Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Объектно-ориентированное программирование.PDF
Скачиваний:
208
Добавлен:
01.05.2014
Размер:
3.64 Mб
Скачать

converted to PDF by BoJIoc

new SuitPile(15 + 60 * i, 5); for (int i = 0; i < 7; i++)

allPiles[6+i] = tableau[i] =

new TablePile(5 + 55 * i, 80, i+1);

}

public void paint(Graphics g)

{

for (int i = 0; i < 13; i++) allPiles[i].display(g);

}

public boolean mouseDown(Event evt, int x, int y)

{

for (int i = 0; i < 13; i++)

if (allPiles[i].includes(x, y))

{

allPiles[i].select(x, y); repaint();

return true;

}

return true;

}

}

Глоссарий

Объектно-ориентированное программирование вводит множество новых идей и терминов, которые, вероятно, незнакомы новичку, даже если он достаточно опытен в традиционных языках программирования. Проблема также состоит в том, что в различных объектно-

ориентированных языках для одного и того же понятия часто используются различные термины. Они в нашем глоссарии перечислены как синонимы. Указаны ситуации, когда значение термина в одном языке противоречит его смыслу в других языках.

ad hoc полиморфизм (ad hoc polymorphism).

Идентификатор процедуры (метода) обозначает более одной процедуры (метода). Синоним: перегрузка.

Class [Smalltalk, Java].

Класс, который отвечает за поведение экземпляров класса и создание подклассов. См. метакласс.

CRC-карточка (CRC card).

Карточка для заметок, на которой документируется имя класса, обязанности класса и сотрудничающие с ним классы. Используется в процессе создания спецификации, разработки и анализа системы.

ECOOP (European Conference on Object-Oriented Programming) —

Европейская конференция по объектно-ориентированному программированию. Основная конференция в Европе, в рамках которой обсуждаются объектно- ориентированные подходы, техники и инструментальные средства.

extends [Java].

Ключевое слово, которое используется для того, чтобы сформировать подкласс существующего класса или чтобы объявить новый интерфейс, расширяющий определенный ранее интерфейс.

inherited [Object Pascal].

Ключевое слово. Используется для вызова переопределенной процедуры. initialize [Objective-C, Smalltalk].

converted to PDF by BoJIoc

Специальное сообщение, посылаемое объекту-классу до всех остальных сообщений. Оно может быть переопределено как «фабричный» метод, чтобы в

процессе выполнения программы установить нужную среду до использования экземпляров класса.

isa — указатель связи (isa link) [Objective-C].

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

Member [Object Pascal].

Встроенная системная функция. Возвращает значение типа boolean, которое

используется для определения принадлежности величины к указанному объектному типу.

object [Object Pascal].

Определяет объектный тип данных.

OOPSLA

Ежегодная конференция по объектно-ориентированным программным системам,

языкам и приложениям (Object-Oriented Programming Systems, Languages and Applications). Спонсируется Ассоциацией вычислительной техники (ACM — Association for Computing Machinery).

override [Object Pascal].

Ключевое слово, которое указывает, что метод переопределяет одноименный метод класса-родителя.

RTTI

идентификация типа во время выполнения (Run-Time Type Information). Система RTTI предоставляет набор данных, функций и т. д., которые позволяют определить динамический тип переменных во время выполнения программы.

self [Objective-C, Object Pascal, Smalltalk].

Ключевое слово. Используется внутри метода, где обозначает получателя сообщения, вызвавшего активизацию метода. См. также this.

static [C++, Java].

Ключевое слово-модификатор, которое применительно к глобальным переменным и функциям, означает, что переменные не доступны извне файла, в котором они определены. По отношению к локальным переменным static означает, что они продолжают существовать даже после выхода из процедуры. Поля класса, к которым применен этот модификатор, становятся общими для всех экземпляров класса.

static [Object Pascal].

Переменная, объявленная с этим ключевым словом, получает память автоматически при входе в процедуру. Противопоставляется динамическим переменным, для выделения памяти которым пользователь предпринимает специальные действия.

super [Objective-C, Smalltalk, Java].

Ключевое слово в этих языках. Если оно используется внутри метода, то является синонимом ключевого слова self. Однако если оно используется как получатель сообщения, то поиск нужного метода начинается с родительского класса (по отношению к классу, метод которого мы определяем).

this [C++].

Ключевое слово. Внутри метода указывает на получателя сообщения, вызвавшего активацию метода. Обратите внимание, что указатель должен быть «разыменован» для получения собственно получателя например, для того, чтобы передать ему дополнительные сообщения. См. также ключевое слово self.

void [C++, Java].

Ключевое слово. Обозначает функцию, которая не возвращает никакого значения (то есть процедуру).

World Wide Web всемирная паутина»).

Совокупность компьютеров, подключенных к Интернет, которые обмениваются

информацией в соответствии со специальным единым стандартизированным

converted to PDF by BoJIoc

протоколом обмена. Доступ к этой информации обычно осуществляется с помощью программ-броузеров.

Абстрагирование (abstraction).

Метод решения задач, при котором объекты разного рода объединяются общим понятием (концепцией). Затем сгруппированные сущности рассматриваются как элементы единой категории. Несущественная информация игнорируется.

Абстрактный класс (abstract class).

Класс, который не используется для создания экземпляров. Он служит исключительно для порождения других классов. В языке C++ этот термин относится к классам, которые содержат хотя бы один чисто виртуальный метод. В языке Java абстрактным считается класс, явно объявленный с ключевым словом abstract. См. также отложенный класс.

Абстрактный метод (abstract method) [Java].

Метод, который явно объявлен с ключевым словом abstract. Такие методы должны быть переопределены до их вызова.

Автоматическая переменная (automatic variable).

Переменная, для которой память выделяется автоматически при входе в процедуру. Противопоставляется динамической переменной, для которой память выделяется пользователем.

Автоматическое управление памятью (automatic storage management).

Алгоритм распределения памяти, при котором исполнительная система нижнего уровня отвечает за нахождение и повторное использование недоступных (а следовательно, ненужных) блоков памяти. Из рассматриваемых в этой книге языков только Smalltalk и Java обеспечивают автоматическое управление памятью. См. также: сборка мусора.

Агент (agent).

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

Базовый класс (base class) [C++].

Класс, из которого порождается другой класс. Синонимы: класс-предок, надкласс, родительский класс.

Блок (block) [Smalltalk].

Последовательность операторов. Аналогичен безымянной функции. Блоки являются значениями и могут передаваться в качестве аргументов или (что используется реже) присваиваться переменным. Блок выполняет содержащиеся в нем команды в ответ на сообщение value.

Броузер (browser).

Программное средство, используемое для просмотра иерархии классов и методов, связанных с различными классами. Исходно разработан как часть программной среды Smalltalk. Теперь броузеры встречаются во многих интегрированных средах. Броузеры иного типа используются для доступа к информации в World Wide Web. Современные Web-броузеры включают в себя интерпретаторы Java, позволяя эффективно выполнять Java-приложения во время обращения к Web- страницам.

Быстрое макетирование (rapid prototyping).

Стиль разработки программного обеспечения, при котором меньше внимания уделяется полному формальному описанию, а вместо этого быстро создается прототип системы. Предполагается, что пользователи будут экспериментировать с ним и предложат исправления или изменения. Не исключается, что в результате система подвергнется полной переработке.

Виртуальный метод (virtual method) [C++].

Метод, который может быть вызван с поздним связыванием. Тело такого метода не может быть определено на этапе компиляции. Поэтому во время выполнения программы ищется метод, который должен быть вызван в ответ на сообщение. См. также чисто виртуальный метод.

Время связывания (binding time).

Момент, когда происходит связывание. Раннее (или статическое) связывание соответствует связыванию на этапе компиляции. Позднее (или динамическое)

converted to PDF by BoJIoc

связывание соответствует связыванию во время выполнения программы. Языки с динамическими типами данных (Smalltalk и Objective-C) не связывают переменную и ее тип на этапе компиляции. Пересылка сообщений является формой вызова процедур с поздним связыванием.

Встраиваемая функция (inline function).

Функция, которая может быть развернута в код непосредственно в точке вызова.

Тем самым исключается необходимость конструирования служебной структуры или передачи сообщения, связанного с вызовом функции. Встраиваемые функции определяются директивой inline в C++ или директивой final в Java.

«Встроенный» метод (native method) [Java].

Метод, реализованный на другом языке программирования (например, на C или ассемблере). См. также примитивная операция.

Выделение памяти из «кучи» (heap-based memory allocation).

Выделение памяти производится во время выполнения программы и не привязано к входу/ выходу из процедуры. Противопоставляется выделению памяти из стека.

Выделение памяти из стека (stack-based memory allocation).

Техника выделения памяти. При входе в процедуру в стеке выделяется фиксированный участок памяти под локальные переменные. При выходе из процедуры вся эта память освобождается. Выделение памяти из стека очень эффективно, но оно не работает, если время существования переменной не связано с процедурой или размер переменных не известен на этапе компиляции. Противопоставляется выделению памяти из «кучи».

Вызов процедуры (procedure call).

Передача управления из текущей точки к коду, соответствующему процедуре. Вызов процедур отличается от пересылки сообщений тем, что в первом случае выбор кода, которому передается управление, определяется во время компиляции (или сборки) программы, а не во время выполнения.

Вычисления на стороне клиента (client-side computing).

Программа в сети, которая выполняется на компьютере-клиенте, а не на сервере. Язык программирования Java предполагает проведение вычислений на стороне клиента, что приводит к повышению эффективности по сравнению с программами, которые должны дожидаться освобождения сервера (как правило, весьма загруженного).

Гибридный язык (hybrid language).

Язык, который содержит многие стили программирования. Например, C++ и Object Pascal являются гибридными, поскольку они поддерживают одновременно императивный (традиционный) и объектно-ориентированный подходы. Smalltalk является чистым объектно-ориентированным языком.

Глобальная переменная (global variable).

Переменная, к которой потенциально разрешен доступ из любого места программы.

Граф наследования (inheritance graph).

Абстрактная структура, которая иллюстрирует отношение наследования в совокупности классов.

Делегирование (delegation).

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

Деструктор (destructor) [C++].

Метод, который вызывается непосредственно перед тем, как освобождается память, занимаемая объектом. Деструктор может выполнять любые необходимые действия. Имя деструктора конструируется из символа «тильда» (~), за которым следует имя класса1.

Диаграмма взаимодействия (interaction diagram).

Документирует поток сообщений между объектами в сценарии.

converted to PDF by BoJIoc

Динамическая переменная (dynamic variable).

Переменная, для которой память выделяется явной командой пользователя. Противопоставляется автоматической переменной, память для которой отводится автоматически при входе в процедуру.

Динамический класс (dynamic class).

См. статический класс.

Динамический тип данных (dynamic type).

Тип данных, связанный со значением, которое содержится в переменной в текущий момент. Он не обязательно совпадает со статическим типом данных, присвоенном переменной при ее объявленни. В объектно-ориентированных языках программирования динамический тип, как правило, является потомком статического типа.

Динамическое связывание (dynamic binding).

Связывание имени и атрибута, которое производится во время выполнения программы, а не во время компиляции. См. время связывания.

Дочерний класс (child class) [C++].

Класс, определяемый как расширение другого класса, называемого родительским. Синонимы: подкласс, производный класс.

Дружественная функция (friend function) [C++].

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

Закрытое наследование (private inheritance) [C++].

Наследование, которое используется для создания класса, не сохраняющего условие «быть элементом». Тем самым создаются подклассы, которые не являются подтипами. Дочернему классу разрешается пользоваться сервисом родителя, но

экземпляры дочернего класса не могут присваиваться переменным родительского класса.

Закрытый метод (private method).

Метод, который не предназначен для вызова извне объекта. Более конкретно: получатель сообщения, которое приводит к вызову такого метода, должен быть обязательно объектом того же класса, которому принадлежит отправитель сообщения (см. ключевое слово self). Противопоставляется открытым методам. В языке Smalltalk закрытые методы основываются на «доброй воле» пользователя, в то время как C++, Java и Delphi Pascal могут гарантировать закрытость методов.

Замещение (replacement).

Стиль переопределения метода, при котором наследуемый код полностью замещается новым кодом в дочернем классе.

Зацепление (coupling).

Степень, с которой различные программные компоненты связаны между собой. Обычно носит негативный оттенок. Противопоставляется связности (зацепление описывает отношения между модулями, а связность внутри модуля).

Зацепление через подклассы (subclass coupling).

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

Идентификатор метода (method designator).

Идентификатор имени метода. Используется как имя процедуры или функции в выражении типа пересылки сообщения. Идентификатор метода применяется при поиске подходящего метода при пересылке сообщения. В общем случае, зная только идентификатор метода, невозможно определить из текста программы, какой именно метод будет активизирован во время выполнения. Синоним: селектор сообщения.

Идентификатор поля объекта (object field designator) [Object Pascal].

Идентификатор (возможно, составной), который определяет поле внутри объекта.

converted to PDF by BoJIoc

Иерархия (hierarchy).

Структура, упорядоченная по подчиненности в соответствии с некоторым набором правил. В объектно-ориентированном программировании иерархия обычно образуется связями «класс-подкласс».

Иерархия классов (class hierarchy).

Иерархия, образуемая классами в соответствии с их взаимосвязью «класс- подкласс». См. также иерархия.

Иерархия объектов (object hierarchy).

В языке Object Pascal — последовательность объектных типов, связанных через наследование. Синоним: иерархия классов.

Инкапсуляция (encapsulation).

Техника, при которой информация прячется внутри структуры подобно тому, как данные, связанные с экземпляром класса, прячутся внутри класса.

Интернет (Internet).

Всемирная совокупность компьютеров, обменивающихся информацией по единому стандартизированному протоколу.

Итератор (iterator).

Класс, который используется в основном для того, чтобы обеспечить доступ к данным другого класса (как правило, контейнерного класса). Итератор

предоставляет однородную среду доступа к данным без необходимости инкапсулировать контейнер.

Каскад сообщений (cascaded message) [Smalltalk].

Сокращенный способ переслать несколько сообщений одному получателю.

Класс (class).

Абстрактное описание данных и поведения для совокупности похожих объектов, представители которой называются экземплярами класса. Синоним: объектный тип данных.

Класс-метод (class method) [C++].

Метод, объявленный с помощью ключевого слова static. Класс-методам не разрешен доступ к переменным экземпляра они могут обращаться только к переменным класса. Класс-методы могут вызываться без привязки к конкретному получателю путем явного указания имени класса. В терминологии языка C++ называются «статическими функциями членами класса».

Класс-переменная (class variable).

См. переменная класса.

Класс-предок (ancestor class) [Object Pascal].

Тип данных, из которого производится наследование. Класс, указанный при определении объектного типа, называется непосредственным предком. Синонимы: базовый класс, надкласс.

Класс-спецификатор (specification class).

Абстрактный надкласс, который используется только для того, чтобы определить интерфейс. Действительное воплощение интерфейса оставляется на долю подклассов.

Клиент-подкласс (subclass client).

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

Клиент-пользователь (user client). Класс, который использует средства, обеспечиваемые другим независимым классом, для чего требуется только та информация, которая представлена в интерфейсной, открытой части описания класса. См. клиент- подкласс.

Ковариация (covariance).

Форма переопределения, при которой аргумент метода дочернего класса

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

converted to PDF by BoJIoc

Композиция (composition).

Техника, при которой новый объект получается композицией, объединением старых и новых частей. Противопоставляется наследованию.

Конструктор (constructor).

Метод, используемый для создания нового объекта. Обеспечивает решение двух задач: он выделяет память под новую переменную и гарантирует, что переменная инициализируется надлежащим образом. Описывая конструктор, программист влияет на процесс инициализации. В языках C++ и Java конструктор является просто одним из методов, который имеет то же имя, что и класс, к которому он относится. В Delphi Pascal конструктор описывается с помощью специального ключевого слова.

Конструктор, принимаемый по умолчанию (default constructor) [C++].

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

Контейнерные классы (container classes).

Классы, которые используются как структуры данных, содержащие набор элементов. Примеры контейнерных классов: списки, множества, таблицы. Стандартная библиотека шаблонов языка C++ (STL — Standard Template Library) содержит набор готовых контейнерных классов.

Контрвариация (contrvariance).

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

Копирующий конструктор (copy constructor) [C++].

Конструктор, который использует в качестве аргумента экземпляр класса, для которого этот конструктор определен. Копирующий конструктор используется для создания копий аргумента.

Маскировка данных (data hiding).

Техника инкапсуляции, которая стремится абстрагироваться от деталей реализации, делая упор исключительно на сервисе, предоставляемом объектом.

Маскировка информации (information hiding).

Принцип, в соответствии с которым пользователям программных компонентов (классов) нужно знать только то, как инициализировать и получить доступ к компонентам. Знание программной реализации не нужно и даже вредно. Уменьшая переплетение между отдельными элементами системы, принцип скрытия информации помогает разрабатывать надежное программное обеспечение.

Метакласс (metaclass) [Smalltalk].

Класс объекта-класса. Для каждого класса имеется ассоциированный с ним метакласс. Объект-класс является, как правило, единственным экземпляром метакласса. Метаклассы позволяют специфировать поведение классов. Без них все классы (но не экземпляры классов!) стали бы вести себя идентично.

Метапрограммирование (metaprogramming).

Стиль программирования, который интенсивно использует метаклассы. При этом

семантика языка и смысл различных конструкций видоизменяются средствами самого же языка программирования. Smalltalk является одним из языков, использующих метапрограммирование.

Метод (method).

Процедура или функция, связанная с классом (или объектным типом), вызываемая в стиле пересылки сообщений.

«Метод-фабрика» (factory method). [Objective-C].

Метод, который распознается только класс-объектом (объектом-фабрикой) данного класса. Противопоставляется «экземплярным» методам, которые распознаются экземплярами данного класса. См. также: класс-метод, метакласс.

Метод экземпляра (instance method) [Objective-C].

Метод, распознаваемый экземплярами класса. Синоним: метод. См. также: «методы-фабрики».

converted to PDF by BoJIoc

Множественное наследование (multiple inheritance).

Свойство языка, которое позволяет подклассу наследовать сразу от нескольких надклассов. Не все объектно-ориентированные языки поддерживают множественное наследование.

Мутатор (mutator).

Метод, который используется для изменения значения переменной экземпляра.

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

Надкласс (superclass).

Синонимы: класс-предок, базовый класс. В языке Smalltalk этот термин обозначает также класс, из которого производится наследование атрибутов.

Наследование (inheritance).

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

Неизменяемое значение (immutable value).

Значение, которое устанавливается только один раз, после чего изменять его запрещается. Переменные, которые содержат такие значения, иногда называют «однократно присваиваемыми». В языке C++ они идентифицируются ключевым словом const.

Непосредственный надкласс (immediate superclass).

Ближайший родительский класс, из которого порожден данный класс. Отношение «быть надклассом» является транзитивным замыканием отношения «быть непосредственным надклассом».

Область видимости, контекст(scope).

Когда этот термин применяется к имени переменной, он означает часть исходного текста программы, в которой идентификатор переменной обозначает именно ее, а не что-нибудь другое.

Область допустимых типов (domain) [Object Pascal].

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

Обобщенный метод (generic method).

Синоним: виртуальный метод.

Обращение полиморфизма (reverse polymorphism).

Попытка отменить результат присваивания полиморфной переменной. То есть взять значение, содержащееся в полиморфной переменной, и присвоить его другой переменной, тип которой соответствует динамическому типу значения, а не статистическому типу полиморфной переменной.

Объект (object).

См. экземпляр.

Объект-класс (class object) [Smalltalk].

Особый единственный объект, экземпляр класса Class, ассоциированный с каждым классом. Новые экземпляры класса создаются путем передачи сообщения new этому объекту. Синоним: «объект-фабрика».

Объект-фабрика (factory object) [Objective-C].

Уникальный объект, ассоциированный с каждым классом, который используется для создания новых экземпляров класса. Каждый объект-фабрика является экземпляром класса Class. Новые экземпляры конкретного класса создаются путем пересылки сообщения new объекту-фабрике. Синоним: объект-класс.

Объект со статическим типом данных (statically typed object) [Objective-C].

Переменная, которая объявлена как относящаяся к конкретному классу, а не просто как id. Это позволяет отловить некоторые ошибки на этапе компиляции, а не при выполнении программы. При использовании таких объектов происходит также определенная оптимизация кода.

Объектно-ориентированное программирование, ООП (object-oriented programming).

Стиль разработки программ, который состоит в делегировании обязанностей независимым взаимодействующим агентам. Характеризуется использованием пересылки сообщений и классов, организованных в иерархию (иерархии)

наследования.

converted to PDF by BoJIoc

Объектный тип данных (object type).

В языке Object Pascal — структура, аналогичная записи (record), которая наряду с полями данных содержит поля процедур и функций (то есть методы). Синоним: класс.

Объявление метода (method declaration).

Часть объявления класса, которая относится к конкретному методу.

Открытый класс (public class) [Java].

Глобальный класс, к которому можно обратиться из любого пакета. В одном компилируемом модуле может быть определен один открытый класс.

Открытый метод (public method).

Метод, который может без ограничения вызываться вне объекта.

Отложенный класс (deferred class).

См. абстрактный класс.

Отложенный метод (deferred method).

Метод, для которого определен интерфейс, но не реализация. Последняя обеспечивается подклассами, которые переопределят отложенный метод, сохраняя его интерфейс. См. также чисто виртуальный метод.

Отношение «быть экземпляром» (is-a relation).

Условие, которое утверждает, что экземпляры подкласса должны быть просто специализированными формами надкласса. Тем самым экземпляры подкласса могут быть использованы везде, где требуются величины типа надкласса. См. также: отношение «включать как часть».

Отношение «включать как часть» (has-a relation).

Условие, которое утверждает, что экземпляры класса содержат поля данных определенного типа. См. также отношение «быть экземпляром».

Парадигма (paradigm).

Базовая модель конкретного способа организации информации. Объектно- ориентированная парадигма делает упор на поведении и обязанностях.

Параметризованные классы (parametrized classes).

Классы, в определении которых некоторые типы данных оставлены неопределенными. До создания экземпляров класса происходит доопределение неизвестных типов.

Параметрическая перегрузка (parametric overloading).

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

Перегрузка (overload).

Этот термин используется для идентификаторов, которые обозначают более одного объекта. Перегружаются функции, процедуры, методы и операторы. Виртуальный метод (метод, переопределяемый программистом) также может называться перегруженным. См. параметрическая перегрузка.

Переименование (renaming).

Меняется имя наследуемого кода, но не его поведение. Противопоставляется переопределению.

Переменная класса (class variable).

Поле данных, являющееся общим для всех экземпляров данного класса. В C++ это член класса, объявленный с ключевым словом static. В Smalltalk это переменная, объявленная как переменная класса (class variable) в сообщении, указывающем на создание класса.

Переменная с однократным присваиванием (single-assignment variable).

Переменная, которой значение присваивается лишь однажды. Затем оно не может быть изменено. В языке C++ переменные с однократным присваиванием либо описаны с модификатором const, либо существуют ввиде ссылочной переменной (в последнем случае ссылке присваивается значение лишь однажды, тогда как переменная, на которую указывает ссылка, может меняться неоднократно).

Переменная с однократным присваиванием создается также путем инициализации поля данных внутри конструктора и запрещения остальным методам модифицировать его.

converted to PDF by BoJIoc

Переменная экземпляра (instance variable).

Внутренняя переменная экземпляра класса. Переменные экземпляра определяют состояние объекта.

Переопределение (redefinition).

Процесс модификации унаследованных операций с целью изменить или расширить поведение объекта.

Переопределение метода (override).

Действие, которое происходит, когда метод подкласса имеет то же самое имя, что и метод надкласса. Метод подкласса имеет приоритет по сравнению с методом надкласса. Обычно во время связывания сообщений и методов (см. передача сообщений) выбирается переопределенный метод.

Пересылка сообщений (message passing).

Процесс идентификации и выполнения метода в ответ на сообщение. См. поиск метода.

Пересылка сообщения (синтаксис) (message expression) [Objective-C]. Smalltalk-подобное выражение, заключенное в квадратные скобки [...]. Они указывают на пересылку сообщений, чтобы отличить код сообщения от стандартных операторов языка C.

Подкласс (subclass).

Синонимы: потомок, производный класс, дочерний класс. В языке Smalltalk этот термин обозначает класс, наследующий от другого класса.

Подстановка (substitutability).

См. принцип подстановки.

Подтип (subtype).

Говорят, что тип A является подтипом типа B, если экземпляр типа A может быть подставлен вместо экземпляра типа B без каких-либо видимых последствий. Например, разреженный массив может быть определен как подтип типа «массив». Подклассы не обязательно являются подтипами, равно как и подтипы не всегда суть подклассы.

Позднее связывание (late binding).

См. время связывания.

Поиск метода (method lookup).

Процесс локализации метода, соответствующего определенному сообщению. Обычно происходит при пересылке сообщения. Как правило, исполнительная

система во время выполнения программы находит нужный метод путем просмотра иерархии классов для получателя сообщения. Поиск производится снизу вверх пока не будет найден метод с тем же именем, что и само сообщение.

Полиморфная переменная (polymorphic variable).

Переменная, которая может принимать значения различных типов. Объектно-

ориентированные языки программирования часто ограничивают возможные типы данных подклассами объявленного типа.

Полиморфный (polymorphic).

Буквально — «многоформенный». Полиморфная переменная способна принимать значения различных типов. Понятие используется также для функций, имеющих хотя бы один полиморфный аргумент, и для имен функций, которым соответствует несколько разных функций. См. чистый полиморфизм, ad hoc полиморфизм.

Полное имя (qualified name) [C++].

Имя метода или переменной экземпляра, в котором в явном виде указано, к какому классу относится метод или переменная. В C++ имя класса отделяется от метода двумя двоеточиями (класс::метод). В языках Java и Object Pascal используется точка. Поскольку в этом случае класс метода указан явно, вызов с

использованием полного имени может осуществляться как вызов процедуры вместо обычной пересылки сообщений.

Получатель (receiver). Объект, которому посылается сообщение.

В языках Smalltalk и Objective-C получатель идентифицируется как объект, стоящий слева от спецификатора сообщения. Внутри метода, соответствующего сообщению, сам получатель этого сообщения может идентифицироваться различными способами: в языке C++ для этой цели служит псевдопеременная-

converted to PDF by BoJIoc

указатель this, а в языках Objective-C, Object Pascal и Smalltalk объект-получатель доступен через псевдопеременную-объект self.

Потерянный объект (persistent object).

Объект, который продолжает существовать даже тогда, когда фрагменты кода программы, имеющие к нему доступ, уже закончили свою работу.

Приведение типа (cast).

Одноместное (унарное) выражение, которое преобразует значение из одного типа в другой.

Примитивная операция (primitive) [Smalltalk].

Операция, которая не может быть выполнена языком программирования, и требует использования средств исполнительной системы более низкого уровня.

Принцип подстановки (substitutability, principle of).

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

Принципы Парнаса (Parnas’s principles).

Принципы, которые регламентируют правильное использование модулей и модульного подхода при разработке программ. Первоначально сформулированы специалистом по информатике Дэвидом Парнасом.

Проблема «вверх-вниз» (yo-yo problem).

Проблема, связанная с объектно-ориентированными языками: при трассировке

вызова конкретного метода может потребоваться многократное перемещение вверх и вниз по иерархии классов.

Программа просмотра (browser).

См. броузер.

Производный класс (derived class) [C++].

Расширение или надкласс другого класса, называемого базовым. Синонимы: тип- потомок, подкласс, дочерний класс.

Пространство имен (name space) [C++].

Механизм, ограничивающий доступ к глобальным именам. Глобальные

идентификаторы могут быть объявлены как относящиеся к определенному пространству имен, и в таком случае они доступны только для той части программы, которая в явном виде подгружает это пространство. См. также: область видимости.

Протокол (protocol).

См. протокол класса.

Протокол класса (class description protocol).

Полное определение всех признаков, свойств и методов, которые присущи любому экземпляру данного класса.

Прототип (prototype) [C++].

Описание функции, которое содержит имя функции, список параметров и тип возвращаемого значения. В прототипе отсутствует собственно тело функции.

Псевдопеременная (pseudo-variable).

Переменная, которая никак не описана и не может быть изменена непосредственно, но тем не менее используется внутри метода (тем самым псевдопеременные по определению доступны только для чтения). Как правило, псевдопеременные применяются для обозначения получателя метода. См. также: self, this, super.

Разработка на основе обязанностей (responsibility-driven design).

Техника разработки программ, которая основана на вычленении элементарных действий и поручении их независимым агентам.

Раннее связывание (early binding).

См. время связывания.

Родительский класс (parent class).

Непосредственный надкласс данного класса. Синонимы: надкласс, класс-предок.

Сборка мусора (garbage collection).

Техника распределения памяти, при которой исполнительная система во время выполнения программы определяет, какие блоки памяти больше не нужны, и

converted to PDF by BoJIoc

автоматически помечает их как свободные. Сборка мусора реализована в языках

Smalltalk и Java. Связность (cohesion).

Степень связности компонентов единой программной системы (таких, как элементы одного класса). Противопоставляется зацеплению (зацепление описывает отношения между модулями, а связность внутри модуля).

Связывание (binding).

Процесс, в результате которого имя или выражение ассоциируется с неким атрибутом (таким, как переменная и тип значения переменной).

Селектор (selector).

См. селектор сообщения.

Селектор метода (method selector).

См. селектор сообщения.

Селектор сообщения (message selector).

Текстовая строка, которая идентифицирует сообщение при пересылке сообщений. Она используется для того, чтобы найти соответствующий метод (что является частью процесса поиска требуемого метода). Синонимы: селектор, селектор метода, идентификатор метода.

Сигнатура аргументов (argument signature) [C++].

Внутреннее представление списка типов данных аргументов функции.

Используется для ликвидации двусмысленности при вызове перегруженных функций. Из числа претендентов выбирается та функция, которая наиболее близко соответствует сигнатуре вызываемой функции. См. параметрическая перегрузка.

Сигнатура типа (type signature).

См. сигнатура аргументов.

Символ (symbol) [Smalltalk].

Величина, которая однозначно характеризуется своим значением. Аналогичен значениям перечисиляемых типов в C или Pascal с тем отличием, что во время выполнения символ может напечатать себя в текстовом виде.

Скрываемое имя (shadowed name).

Имя, которое совпадает с другим именем в пределах данного контекста. Новый объект с тем же именем, по существу делает предыдущий объект недоступным в пределах текущего контекста, то есть происходит скрытие. Примером служит локальная переменная с именем, совпадающим с именем глобальной переменной.

Внутри процедуры всем ссылкам на соответствующий идентификатор соответствует локальная переменная тем самым затрудняется доступ к переменной более высокого уровня. В языках C++ и Java доступ к таким переменным возможен с использованием полного составного имени.

Скрытие данных (data hiding).

См. маскировка данных.

Скрытие информации (information hiding).

См. маскировка информации.

Совокупности классов (collection classes).

См. контейнерные классы.

Сообщение (message).

Текстовая строка, которая определяет требуемое действие при пересылке сообщений. Эта строка используется для того, чтобы найти соответствующий ей метод (что является частью процесса поиска требуемого метода). Синонимы: селектор, селектор сообщения, селектор метода, идентификатор метода.

Сотрудник (collaborator).

Два класса, которые зависят друг от друга при выполнении своих функций, называются сотрудниками.

Спецификатор доступа (access specifier) [C++, Delphi Pascal].

Одно из ключевых слов: private, protected, public. Управляет доступом к полям данных и методам в определяемых пользователем классах.

converted to PDF by BoJIoc

«Срезка» (slicing) [C++].

Процесс, при котором значение производного типа передается в качестве аргумента, объявленного с базовым типом. В результате поля и методы производного класса отрезаются от базовых полей.

Ссылочная переменная (reference variable) [C++].

Переменная, объявленная с помощью модификатора «адрес» (&). Указывает на другое значение и является его синонимом. Изменения ссылочной переменной приводят к изменениям в объекте, на который она ссылается.

Статический класс (static class).

В языках программирования со статическими типами данных (таких, как C++ и Object Pascal) — объявленный тип данных (класс) переменной. Она может содержать или значения этого (статического) класса, или любого его потомка. Истинный тип значения переменной называется динамическим классом.

Статический метод (static method).

Метод, для которого применимо раннее связывание. Тело метода идентифицируется однозначно на этапе компиляции, и тем самым для обработки сообщения, посланного статическому методу, фактически не требуется техника пересылки сообщений.

Статический тип данных (static type).

См. статический класс.

Таблица виртуальных методов (virtual method table) [C++].

Таблица указателей на методы, которая конструируется для каждого класса. Все экземпляры класса содержат указатель на эту таблицу.

Таблица диспетчеризации (dispatch table) [Objective-C].

Таблица «селектор/метод». Содержит также указатель на таблицу диспетчеризации надкласса. Создается во время компиляции класса. Поиск в таблице диспетчеризации является частью процесса пересылки сообщений.

«Терминальный» класс (final class) [Java].

Класс, объявленный с ключевым словом final. Оно показывает, что класс не может

использоваться в качестве базового при определении новых подклассов и наследовании.

«Терминальный» метод (final metod) [Java].

Метод, объявленный с ключевым словом final. Оно показывает, что метод не может переопределяться в подклассах.

«Терминатор» (finalizer) [Java].

Метод с именем finalize без аргументов и без возвращаемого значения. Он

автоматически вызывается исполнительной системой во время выполнения программы перед тем, как объект, для которого этот метод определен, будет утилизирован системой сборки мусора.

Тип-потомок (descendant type).

Синонимы: подкласс, дочерний класс. См. производный класс.

Тип-предок (ancestor type).

См. класс-предок.

Указатель на виртуальный метод (virtual method pointer) [C++].

Указатель, содержащийся внутри любого объекта, использующего виртуальные методы. Указывает на таблицу виртуальных методов динамического типа данных.

Уточнение (refinement).

Стиль переопределения метода, при котором унаследованный код соединяется с кодом, определенным в дочернем классе.

Функция доступа (accessor function).

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

Функция-член класса (function member) [C++].

См. метод.

converted to PDF by BoJIoc

Чисто виртуальный метод (pure virtual method) [C++].

Виртуальный метод, не содержащий тела. Создается путем присваивания полю функции значения 0 в определении класса. Чисто виртуальные методы обязаны специфицироваться в подклассах. См. также: отложенный метод.

Чистый полиморфизм (pure polymorphism).

Свойство функции, которое позволяет вызывать ее с аргументами различных типов. См. ad hoc полиморфизм.

Член данных (data member) [C++].

См. переменная экземпляра.

Член класса (member) [C++].

Термин, обозначающий атрибуты экземпляров класса. Переменные экземпляра называются в C++ членами данных, а методы функциями-членами класса.

Экземпляр (instance).

В языке C++ — переменная типа class. В языке Object Pascal — объектная переменная. В языке Smalltalk — конкретный пример структуры общего вида, определяемой классом. Синоним: объект.

Экспортируемое имя (exported name).

Идентификатор (имя переменной, типа данных, функции или метода), доступный вне контекста, в котором он определен. В языке Objective-Cпеременная, тип данных, функция или метод, которые определены глобально или описаны в файле интерфейса (*.h). В языке Object Pascal — переменная, тип данных, функция или метод, которые описаны в разделе interface модуля. В языке Java — класс, который объявлен как public в том пакете, где он определен.

Язык с динамическими типами данных (dynamically typed language).

Язык программирования, в котором типы данных связываются с текущими значениями, а не с переменными. Переменные могут принимать значения любого типа. Язык программирования Smalltalk является примером динамически типизированного языка.

Язык с контролем типов данных (strongly typed language).

Язык программирования, в котором тип любого выражения может быть определен на этапе компиляции.

Язык со статическими типами данных (statically typed language).

Язык программирования, в котором переменные могут принимать значения только объявленного типа. Такие языки, как правило, подразумевают строгий контроль типов данных. Объектно-ориентированные языки зачастую ослабляют правила работы со статическими типами данных за счет того, что разрешают переменным иметь значения, относящиеся к подтипу объявленного типа данных.