Проблема
Проблема
Рассмотрим пример стека, но уже не как АТД, а как класс. Мы знаем, как написать класс INTEGER_STACK, задающий стек объектов типа INTEGER. Компоненты будут включать count (число элементов), put (вталкивание элемента), item (элемент в вершине), remove (выталкивание элемента), empty (пустой ли стек?).
Тип INTEGER будет часто использоваться в объявлениях этого класса. Например, это тип аргумента для put и результата для item:
put (element: INTEGER) is
-- Втолкнуть элемент (в вершину стека).
do ... end
item: INTEGER is
-- Элемент в вершине стека
do ... end
Эти появления типа INTEGER следуют из правила явного объявления, используемого при разработке нотации: всякий раз при введении сущности, обозначающей возможные объекты времени выполнения, необходимо явное указание ее типа, такое как element: INTEGER. Здесь это означает, что необходимо указать тип для запроса item, для аргумента element процедуры put и для других сущностей, обозначающих возможные элементы стека.
Как следствие, придется писать различные классы для каждого сорта стека: INTEGER_STACK, REAL_STACK, POINT_STACK, BOOK_STACK... Все эти стековые классы будут одинаковыми за исключением объявления типов item, element и некоторых других сущностей. Основные операции над стеком не зависят от типа элементов стека и реализуются одинаково. Для всех, заинтересованных в повторном использовании, такое дублирование классов представляется мало привлекательным.
Проблема возникает из-за противоречия двух основных требований, предъявляемых к классам и сформулированных в начале этой книги.
[x]. Надежность: сохранение преимуществ безопасности типов с помощью явного объявления типа.
[x]. Повторное использование: возможность написать один программный элемент, покрывающий многие варианты одного понятия.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Итак, у вас проблема...
Итак, у вас проблема... Мы обсудим первые две проблемы вместе, потому что подчас бывает трудно определить, с которой из них имеешь дело.Предположим, что что-то вдруг перестало работать или работает не так, как ожидается. Что
Проблема наследования
Проблема наследования Если существует необходимость наследовать от класса Singleton, то следует придерживаться определенных правил.Во-первых, класс-наследник должен переопределить метод Instance(), так, чтобы создавать экземпляр производного класса. Если не предполагается, что
Но в чем тогда проблема?
Но в чем тогда проблема? Обобщенный указатель всего лишь «прикидывается» указателем и не может быть использован везде, где используются обычные указатели. Например, возьмем адаптер указателя на функцию-член класса из STL:template<class R, class T> mem_fun_t<R, T> mem_fun(R (T::*pm)());
Проблема состояния
Проблема состояния В начале предыдущей главы было указано, что HTTP является сетевым протоколом, не обеспечивающим сохранение состояний. Именно этот факт делает процесс разработки Web-приложений столь отличающимся от процесса построения выполняемого компоновочного
ПРОБЛЕМА ВВОДА
ПРОБЛЕМА ВВОДА Существует несколько способов последовательного ввода набора данных, скажем чисел. Мы обсудим здесь некоторые из них, переходя от менее удобных к более удобным. Вообще говоря, наименее удобный способ - это тот, который мы только что использовали;
5.1.8. Проблема выбора
5.1.8. Проблема выбора Благодаря совместному использованию памяти можно организовать быстрое двустороннее взаимодействие произвольного числа процессов. Любой пользователь сможет получать доступ к сегментам памяти для чтения/записи, но для этого программа должна
В чём ваша проблема?
В чём ваша проблема? Разрабатывайте ПО для себяПри создании программ большую часть времени будет занимать решение ваших собственных проблем. Вы и будете тем самым потенциальным клиентом, соответственно и знание о необходимом у вас уже есть. Это даёт вам отличное начало
Проблема выбора
Проблема выбора Автор: Олег ВолошинПохоже, что развитие цифровых камер достигло некоторого промежуточного потолка. Нет, разумеется, в техническом плане есть масса перспективных направлений.Тем не менее отличие новой камеры, выпущенной "на днях", от аналогичной, но
Техническая проблема
Техническая проблема Как же должен выглядеть повторно используемый модуль?
Проблема
Проблема Рассмотрим пример стека, но уже не как АТД, а как класс. Мы знаем, как написать класс INTEGER_STACK, задающий стек объектов типа INTEGER. Компоненты будут включать count (число элементов), put (вталкивание элемента), item (элемент в вершине), remove (выталкивание элемента), empty (пустой ли
Проблема
Проблема Из этих примеров ясно: нам может понадобиться механизм удостоверения типа объекта.Решение этой проблемы, возникающей в специфических, но критически важных случаях, должно быть найдено без потери преимуществ ОО-стиля разработки. В частности, мы не хотим
Проблема типизации
Проблема типизации Эффективное применение объектной технологии требует четкого описания в тексте системы типов всех объектов, с которыми она работает на этапе выполнения. Это правило, известное как статическая типизация (static typing), делает наше ПО:[x]. более надежным,
2. Проблема оправдания
2. Проблема оправдания При заполнении памяти интеллектуальных систем знаниями, полученными от экспертов, хорошо знающих данную предметную область и способы решения возникающих в ней задач, инженеры по знаниям столкнулись с одной весьма любопытной особенностью. При