Открытый интерфейс - Большая Энциклопедия Нефти и Газа, статья, страница 3
Никогда не называй человека дураком. Лучше займи у него в долг. Законы Мерфи (еще...)

Открытый интерфейс

Cтраница 3


Заметим, что функции, которыми класс снабжает внешний мир, предваряются меткой public. Открытые функции реализуют все возможности класса, необходимые для его клиентов. Открытые функции класса называют интерфейсом класса или открытым интерфейсом.  [31]

Любой модуль начинается с ключевого слова unit, после которого пишется имя модуля. Все замечания об этом заголовке модуля, сделанные в разд. Текст модуля, как и в модулях VCL, состоит из двух основных разделов: interface - открытый интерфейс модуля, и implementation - реализация модуля. Все, что помещается непосредственно в раздел interface ( типы, переменные, константы, функции, процедуры), может быть использовано другими модулями программы. Все, что помещается в раздел implementation - внутреннее дело модуля. Внешние модули не могут видеть типы, переменные, константы, функции и процедуры, размещенные в разделе реализации.  [32]

Программа на рис. 15.9 ( вывод данных этой программы показан на рис. 15.10) создает шаблон класса стеков главным образом посредством скрытого наследования шаблона класса списков. Заметим, что они, по существу, являются соответственно функциями шаблона класса списков insertAtFront, removeFromFront, isEmpty и print. Конечно, шаблон класса списков включает и другие функции-элементы ( например, insertAtBack и removeFromBack), которые нам не хотелось бы делать доступными через открытый интерфейс класса стеков. Так что когда мы указываем, что шаблон класса стеков должен наследовать шаблон класса списков, то задаем скрытое наследование. Это приводит к тому, что все функции-элементы шаблона класса списков в шаблоне класса стеков становятся скрытыми.  [33]

34 Определение класса Circle ( часть 1 из 3. [34]

Следующий наш пример показан на рис. 19.8. Определения класса Point и его функций-элементов из рис. 19.7 здесь используются повторно. Обратите внимание на то, что класс Circle выводится из Point по типу открытого наследования. Это означает, что открытый интерфейс класса Circle включает в себя функции-элементы класса Point, а также функции-элементы класса Circle - setRadius, getRadius и area. Заметьте, что перегруженная функция передачи в поток для Circle может непосредственно ссылаться на элементы х и у, потому что они являются защищенными элементами базового класса. Заметьте также, что необходимо ссылаться на элементы х и у через объект, используя нотацию с.  [35]

Абстрактный тип данных очереди гарантирует целостность своей внутренней структуры данных. Клиенты не могут непосредственно манипулировать этой структурой. Только сам абстрактный тип очереди имеет доступ к своим внутренним данным. Клиенты могут инициировать выполнение только допустимых операций над представлением данных: операции, не предусмотренные открытым интерфейсом абстрактного типа данных, отвергаются некоторым адекватным образом. Это может означать выдачу сообщения об ошибке, завершение выполнения программы или просто игнорирование запроса этой операции.  [36]

АТД очередь гарантирует целостность своей внутренней структуры данных. Клиенты могут не манипулировать непосредственно этой структурой данных. Только АТД очередь имеет доступ к своим внутренним данным. Клиенты могут вызывать лишь разрешенные операции для их выполнения над представлением данных; операции, которыми открытый интерфейс АТД не обеспечен, соответствующим образом скрыты в АТД. К ним могли бы относиться выдача сообщений об ошибках, прекращение выполнения или просто игнорирование требований операций.  [37]

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

Производный класс не может иметь доступ к закрытым элементам своего базового класса; разрешение такого доступа явилось бы нарушением инкапсуляции базового класса. Производный класс может, однако, иметь доступ к открытым и защищенным элементам своего базового класса. Элементы базового класса, которые не должны быть доступны производному классу через наследование, объявляются в базовом классе закрытыми. Производный класс может иметь доступ к закрытым элементам своего базового класса только посредством функций доступа, предусмотренных в открытом интерфейсе базового класса.  [39]

В описании ряда методов и типов в данной книге вы можете встретить комментарий: не CLS. Это значит, что данный элемент несовместим с CLS, так как в его реализации использованы конструкции языка, не имеющие аналога в CLS. Но если ваш код должен будет в дальнейшем сочетаться с частями приложения, разработанными на других языках, надо принять меры к тому, чтобы элементы, несовместимые с CLS, не появлялись в открытом интерфейсе.  [40]

Разные языки имеют свои уникальные возможности, которые не поддерживаются в других языках программирования. По большей части в CLS определяются минимальные требования к языкам программирования, которые должны взаимодействовать между собой, в части того, что они могут экспонировать. Библиотеки, которые вы намерены сделать совместимыми с CLS, могут использовать несовместимые с CLS функции только для внутреннего употребления, но не в открытом интерфейсе.  [41]

Программист может создать класс стек и скрыть от его клиентов реализацию стека. Клиенту класса стек не нужно знать, как реализован стек. Хотя может оказаться, что пользователь знает детали реализации класса, но он может писать программу, не обращая внимания на эти детали. Это означает, что какой-то класс, например, тот, который реализует стек и его операции push ( поместить) и pop ( вытолкнуть), можно заменить другой его версией, не затрагивая остальной части системы, пока не изменен открытый интерфейс этого класса.  [42]

Это называется сокрытием информации. Программист может, например, создать класс стека и скрыть от пользователей его реализацию. Стеки могут быть легко реализованы с помощью массивов или связанных списков. Клиент класса стека не должен знать о его внутреннем устройстве. Хотя пользователи и могут знать детали реализации класса, они не будут писать код, зависящий от этих деталей. Это означает, что данный класс ( например, тот, который реализует стек и операции втолкнуть и вытолкнуть) можно заменить его новой версией, не затрагивая при этом остальной системы, до тех пор, пока не изменяется открытый интерфейс класса.  [43]

Полиморфизм особенно эффективен при реализации многоуровневых систем программного обеспечения. В операционных системах, например, каждый тип физического устройства может работать совершенно отлично от других. Несмотря на это, команды чтения данных с таких физических устройств read и команды записи данных на физические устройства write могут иметь определенное единообразие. Сообщение write, посланное объекту драйверу устройства, интерпретируется специальным образом в зависимости от используемого драйвера и от того, каким образом этот драйвер управляет устройствами конкретного типа. Тем не менее, этот вызов write сам по себе действительно не отличается от вызовов write любого другого устройства в системе; вызов просто перемещает некоторое число байтов из памяти в конкретное устройство. Объектно-ориентированные операционные системы могут использовать абстрактные базовые классы для того, чтобы реализовать интерфейс, пригодный для драйверов всех устройств. Затем с помощью наследования этих абстрактных базовых классов образуются производные классы, которые работают одинаковым образом. Указанные возможности ( т.е. открытый интерфейс), предоставленные драйверам устройств, обеспечиваются чистыми виртуальными функциями абстрактных базовых классов. Реализации этих виртуальных функций обеспечиваются в производных классах и соответствуют конкретным типам драйверов устройств.  [44]



Страницы:      1    2    3