Интерфейсы и упаковка
Интерфейсы и упаковка
Herb Sutterr объяснил, что "интерфейс" класса (подразумевая, функциональные возможности, обеспечиваемые классом) включает также внешние функции, связанные с классом. Им также показано, что правила области видимости имен в C++ поддерживают эти изменения понятия "интерфейса" [7,8]. Это замечательные новости для моего тезиса "не друзья и не члены лучше, чем члены", потому что это означает, что решение сделать функцию, зависимую от класса, в виде не друга – не члена вместо члена даже не изменяет интерфейс этого класса! Кроме того, вывод функций интерфейса класса за границы определения класса ведет к некоторой замечательной гибкости упаковки, которая была бы иначе недоступна. В частности, это означает, что интерфейс класса может быть разбит на множество заголовочных файлов.
Предположим, что автор класса Wombat обнаружил, что клиенты Wombat часто нуждаются в ряде дополнительных функций, связанных, с едой, сном и размножением. Такие функции по определению не строго необходимы. Те же самые функциональные возможности могли бы быть получены через вызов других (хотя и более громоздких) методов. В результате, а также в соответствии с моим советом в этой статье, каждая дополнительная функция должна быть не другом и не методом. Но предположим, что клиенты дополнительных функций, используемых для еды, редко нуждаются в дополнительных функциях для сна или размножения. И предположим, что клиенту, использующему дополнительные функции для сна и размножения, также редко нужны дополнительные функции для еды. То же самое можно развить на функции размножения и сна.
Вместо размещения всех Wombat-зависимых функций в одном заголовочном файле, предпочтительнее было бы разместить элементы интерфейса Wombat в четырех отдельных заголовках: один для функций ядра Wombat (описания функций, связанных с определением класса), и по одному для каждой дополнительной функции, определяющей, еду, сон, и размножение. Клиенты включают в свои программы только те заголовки, в которых они нуждаются. Возникающее в результате программное обеспечение не только более ясное, оно также содержит меньшее количество зависимостей, пустых для трансляции [4,9]. Этот подход, использующий множество заголовков, был принят для стандартной библиотеки (STL). Содержание namespace std размещено в 50 различных заголовочных файлах. Клиенты включают заголовки, объявляющие только части библиотеки, необходимые им, и они игнорирует все остальное.
Кроме этого, такой подход расширяем. Когда объявления функций, составляющих интерфейс класса, распределены по многим заголовочным файлам, это становится естественным для клиентов, которые размещают свои наборы дополнительных функций, специфические для приложения, в новых заголовочных файлах, подключаемых дополнительно. Другими словами, чтобы обработать специфические для приложения дополнительные функции, они поступают точно так же, как и авторы класса. Это то, что и должно быть. В конце концов, это только дополнительные функции.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
4.3. Интерфейсы
4.3. Интерфейсы Интерфейс (interface) служит для спецификации параметров модели, которые видимы извне без указания их внутренней структуры. В языке UML интерфейс является классификатором и характеризует только ограниченную часть поведения моделируемой сущности. Применительно
5.3. Интерфейсы .
5.3. Интерфейсы . Интерфейсы являются элементами диаграммы вариантов использования и были рассмотрены в главе 4. Однако при построении диаграммы классов отдельные интерфейсы могут уточняться и в этом случае для их изображения используется специальный графический символ
10.2. Интерфейсы
10.2. Интерфейсы Следующим элементом диаграммы компонентов являются интерфейсы. Последние уже неоднократно рассматривались ранее, поэтому здесь будут отмечены те их, особенности, которые характерны для представления на диаграммах компонентов. Напомним, что в общем
23.4.2. Упаковка виджитов, поля ввода и кнопки
23.4.2. Упаковка виджитов, поля ввода и кнопки Для размещения (упаковки) виджита в окне используются контейнеры. Существуют два основных вида контейнеров. Первый вид в качестве прародителя использует объект класса GtkBin, а второй — объект класса GtkContainer. Контейнеры первого
Подарочная упаковка
Подарочная упаковка В России эта фишка практически нигде не используется, поэтому ваш интернет-магазин может стать первопроходцем. В чем суть? После успешного оформления заказа (когда человек его оплатил) вы просто предлагаете упаковать товары в красивую подарочную
Интерфейсы и IDL
Интерфейсы и IDL Определения методов в IDL являются просто аннотированными аналогами С-функций. Определения интерфейсов в IDL требуют расширения по сравнению с С, так как С не имеет встроенной поддержки этого понятия. Определение интерфейса в IDL начинается с ключевого слова
Целлофановая упаковка
Целлофановая упаковка Действие данного фильтра описать словами непросто, его лучше увидеть. Изображение как будто покрывается полупрозрачной целлофановой пленкой, причем эта «пленка» рельефная, местами как будто вздутая. Область применения данного фильтра зависит
Интерфейсы к ClamAV
Интерфейсы к ClamAV За относительно небольшое время своего развития ClamAV получил достаточное количество интерфейсов и многого другого, упрощающего работу и интеграцию в приложения. Список некоторых из них можно найти в файле README, а в файле clamdoc.pdf дано их краткое описание,
Интерфейсы и протоколы
Интерфейсы и протоколы С описанием интерфейсов и протоколов разработчики Google справляются легко, ведь для этого нужно писать их любимый код. В Google разработали специальный расширяемый язык Protocol Buffer[19] для сериализации структурированных данных. Protobuf — это механизм
Упаковка привилегий
Упаковка привилегий SQL Firebird реализует возможности упаковки множества привилегий для назначения индивидуальным получателям, спискам или специально сгруппированным пользователям. Это пакет ALL, разделенные запятыми списки и роли SQL.Ключевое слово ALLКлючевое слово ALL
Повседневный дизайн: удобная упаковка для фастфуда Николай Маслухин
Повседневный дизайн: удобная упаковка для фастфуда Николай Маслухин Опубликовано 30 мая 2013 Десятки компаний, производящих фастфуд, используют самую разнообразную упаковку для переноски, но если покупатель вместе с едой берет ещё и напиток, то обе
Игрушки из картонной коробки: многофункциональная упаковка для развивающихся стран Николай Маслухин
Игрушки из картонной коробки: многофункциональная упаковка для развивающихся стран Николай Маслухин Опубликовано 01 апреля 2013 Каждый день организация ЮНИСЕФ (детский фонд ООН) отправляет тысячи картонных коробок в страны Африки и Азии с
Упаковка
Упаковка Начнем с упаковки как самого популярного метода сокрытия вирусного кода. К слову будет сказано, именно упаковка является самым простым инструментом, чтобы скрыть вирус, который уже засветился в антивирусных базах.Упаковка заключается в сжатии исполняемого
Интерфейсы и проектирование ПО
Интерфейсы и проектирование ПО Архитектура системы должна основываться на содержании, а не на форме. Но проектирование сверху вниз стремится использовать в качестве основы для структуры самый поверхностный аспект системы - ее внешний интерфейс. Такой упор на внешний
Интерфейсы будущего
Интерфейсы будущего На выставке SIGGRAPH 2009 публике были представлены несколько устройств, за которыми, возможно, будущее. Наибольший интерес у посетителей выставки вызвала «ощутимая голография» (Touchable Holography) – интерфейс, разработанный коллективом профессора Хироюки