Примеры из практики
Примеры из практики
Было бы ошибочно полагать, что проблема неоправданного переопределения возникает лишь там, где структура ориентирована на реализацию, как в LINKED_LIST. В любой схеме вида
some_attribute: SOME_TYPE
set_attribute (a: SOME_TYPE) is do ... end
переопределение some_attribute подразумевает соответствующее переопределение set_attribute. В случае с put_right из BI_LINKABLE (не путайте с подпрограммой из LINKED_LIST) повторное определение необходимо, поскольку фактически меняется алгоритм. Но во многих широко распространенных случаях (к примеру, в set_alternate) новый алгоритм идентичен исходному.
Вот еще один пример, показывающий глубину проблемы (не ограниченной лишь процедурами set_xxx, которые сами появились в силу принципа Скрытия информации). Добавим в класс POINT функцию, которая возвращает точку, сопряженную с данной, - ее зеркальное отражение относительно горизонтальной оси:
Рис. 16.11. Исходная и сопряженная точка
conjugate: POINT is
-- Точка, сопряженная с текущей
do
Result := clone (Current) -- Получить копию текущей точки
Result.move (0, -2*y) -- Перенести результат по вертикали
end
Рассмотрим теперь некий класс, порожденный от POINT, например PARTICLE. К атрибутам частиц, помимо координат, относятся, вероятно, масса и скорость. По идее, функция conjugate применима и к PARTICLE и выдает в результате ту же частицу с противоположным значением координаты y. Но если оставить все как есть, функция работать не будет из-за несоблюдения правила совместимости типов:
p1, p2: PARTICLE; create p1.make (...); ...
p2 := p1.conjugate
Правая часть подчеркнутого оператора имеет тип POINT, левая часть - тип PARTICLE. Правило совместимости типов этого не допускает. Поэтому мы должны переписать conjugate для PARTICLE с единственной целью - обеспечить соблюдение правила.
Предприняв попытку присваивания, мы не решим проблему, а лишь запишем в p2 пустой указатель.Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Глава 2 ЛУЧШИЕ ПРАКТИКИ СОЗДАНИЯ ПОЛИТИК БЕЗОПАСНОСТИ
Глава 2 ЛУЧШИЕ ПРАКТИКИ СОЗДАНИЯ ПОЛИТИК БЕЗОПАСНОСТИ В настоящее время сформировалась так называемая лучшая практика (best practices) политик информационной безопасности. Это прежде всего практика разработки политик, процедур, стандартов и руководств безопасности таких
5.12.5 Примеры
5.12.5 Примеры Программа на Рисунке 5.18 иллюстрирует искусственное использование каналов. Процесс создает канал и входит в бесконечный цикл, записывая в канал строку символов «hello» и считывая ее из канала. Ядру не нужно ни знать о том, что процесс, ведущий запись в канал,
Пример из практики. MAXEFFECT. До и после
Пример из практики. MAXEFFECT. До и после Джон Морана умеет составлять потрясающие рекламные объявления для справочника «Желтые страницы». Он способен творить чудеса. Проблема лишь в том, что Джон не может убедить в этом потенциальных клиентов.После того как в сайт были
3.5. Ключевые практики
3.5. Ключевые практики Каждая группа ключевых процессов выражается ключевыми практиками, выполнение которых способствует достижению целей группы. Ключевые практики описывают инфраструктуру и операции, которые дают наибольший вклад в эффективное внедрение и
Ключевые практики (как таковые)
Ключевые практики (как таковые) Ключевые практики, известные так же как ключевые практики верхнего уровня, устанавливают основные политики, процедуры и операции для каждой группы ключевых процессов. В тексте они выделены жирным шрифтом и пронумерованы в пределах
* ПРИМЕРЫ *
* ПРИМЕРЫ * b1_1_1.cxx #include ‹stream.hxx›main(){ cout ‹‹ "Hello, world ";}
5 Текстовое представление данных: ясные протоколы лежат в основе хорошей практики
5 Текстовое представление данных: ясные протоколы лежат в основе хорошей практики В данной главе рассматриваются традиции Unix в аспекте двух различных, но тесно связанных друг с другом видов проектирования: проектирования форматов файлов для сохранения данных
19.2.4.3. Придерживайтесь стандартной практики именования файлов
19.2.4.3. Придерживайтесь стандартной практики именования файлов Еще до просмотра README-файла бесстрашный исследователь внимательно изучит имена файлов в корневом каталоге распакованного дистрибутива. Имена файлов в нем сами по себе способны нести полезную информацию.
5 Текстовое представление данных: ясные протоколы лежат в основе хорошей практики
5 Текстовое представление данных: ясные протоколы лежат в основе хорошей практики В данной главе рассматриваются традиции Unix в аспекте двух различных, но тесно связанных друг с другом видов проектирования: проектирования форматов файлов для сохранения данных
19.2.4.3. Придерживайтесь стандартной практики именования файлов
19.2.4.3. Придерживайтесь стандартной практики именования файлов Еще до просмотра README-файла бесстрашный исследователь внимательно изучит имена файлов в корневом каталоге распакованного дистрибутива. Имена файлов в нем сами по себе способны нести полезную информацию.
Глава 2. Эпизод из программистской практики
Глава 2. Эпизод из программистской практики День за днем программист выполняет одну и ту же последовательность действий, которую можно назвать программным проектом в миниатюре: он изучает задачу, четко связанную с возможностью продукта, в которой нуждается заказчик,