Текущий экземпляр
Текущий экземпляр
Обратимся опять к тексту одной из подпрограмм, процедуре translate:
translate (a, b: REAL) is
-- Перемещение на a по горизонтали, b по вертикали
do
x:= x + a
y:= y + b
end
На первый взгляд этот текст совершенно понятен - для перемещения точки на расстояние a по горизонтали и b по вертикали значение a прибавляется к x, а b к y. При более внимательном рассмотрении все становится не столь очевидным. Из приведенного текста непонятно, о какой точке идет речь. Какому объекту принадлежат x и y, к которым прибавляются a и b? Этот вопрос связан с одним из наиболее характерных аспектов ОО-стиля разработки. Прежде чем получить ответ, следует разобраться в некоторых промежуточных деталях.
Текст класса описывает свойства и поведение объектов определенного типа, в данном случае точек. Это достигается путем описания свойств и поведения типичного экземпляра такого типа. Можно было бы назвать этот экземпляр "точкой на улице" по примеру того, как газеты представляют мнение "человека с улицы". Мы будем использовать более формальное имя - текущий экземпляр класса.
Иногда возникает необходимость явного обращения к текущему экземпляру. Зарезервированное слово
Current
обеспечивает эту возможность. В тексте класса Current обозначает текущий экземпляр этого класса. Потребность в использовании Current может возникнуть, если попытаться переписать функцию distance таким образом, чтобы осуществлялась проверка, не совпадает ли аргумент p с текущей точкой; в этом случае результат равнялся бы нулю без последующих вычислений. Эта версия distance будет выглядеть следующим образом:
distance (p: POINT): REAL is
-- Расстояние до точки p
do
if p /= Current then
Result := sqrt ((x - p.x)^2 + (y- p.y)^2)
end
end
Здесь /= операция неравенства. В соответствии с сформулированным ранее правилом инициализации условная инструкция не нуждается в части else, поскольку результат равен нулю при p = Current.
Тем не менее, в большинстве случаев текущий экземпляр подразумевается, и нет необходимости обращаться к Current по имени. Так ссылка на x в теле translate и других подпрограмм обозначает "значение x текущего экземпляра" без дополнительного уточнения.
Конечно, по-прежнему остается загадкой, кто же он - "Current"? Ответ придет позже при изучении вызовов подпрограмм, пока же при рассмотрении текста достаточно полагать, что все операции можно рассматривать только относительно некоторого неявно определенного объекта - текущего экземпляра.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
continue - Заново начинает текущий цикл
continue - Заново начинает текущий цикл continue(Предложение)Фигурирует внутри некоторых типах операторов циклаСинтаксис:continueОписание:Предложение continue аналогично предложению break, поскольку прерывает текущую итерацию цикла, но в отличии от break возобновляет выполнение цикла с
5.6.5 Текущий и домашний каталоги
5.6.5 Текущий и домашний каталоги Имя текущего каталога сохраняется в переменной окружения (с именем PWD), и значение этой переменной изменяется при каждом запуске программы cd (а также при смене текущего каталога любым другим способом, например, через Midnight Commander).Аналогичным
Как можно записать текущий разговор
Как можно записать текущий разговор Не каждая программа голосового общения может записывать разговоры, а вот TeamSpeak может! Иногда это вам очень пригодится. Например, чтобы собрать чудо-компромат, а потом использовать его по назначению, или записать голос далекого
Шаг 29 - Единственный экземпляр класса - Одиночка или Singleton.
Шаг 29 - Единственный экземпляр класса - Одиночка или Singleton. Как гарантировать единичность экземпляра некоего класса?Предположим, что Вы проектируете программную систему, в которой некое устройство должно быть исключительно в одном экземпляре. Какие у нас варианты?1.
Текущий шрифт Font
Текущий шрифт Font Объект текущего шрифта возвращается функцией Font и имеет тип GraphABCFont: function Font: GraphABCFont; Класс GraphABCFont имеет следующий интерфейс: Кроме этого, можно изменять свойства текущего пера через объект Font. type GraphABCFont = class property NETFont: System.Drawing.Font; property Color: GraphABC.Color;
Текущий объект
Текущий объект Зарезервированное слово Current означает текущий экземпляр класса и может использоваться в выражении. Само Current - тоже выражение, а не сущность, допускающая запись. Значит присваивание Current, например, Current := some_value будет синтаксически неверным.При ссылке на