Пакеты
Пакеты
В семидесятые годы двадцатого века, в связи с развитием идей скрытия информации и абстракции данных, возникла необходимость в форме модуля, более совершенном, чем подпрограмма. Появилось несколько языков проектирования и программирования, наиболее известные из них: CLU, Modula-2 и Ada. В них предлагается сходная форма модуля, называемого в языке Ada пакетом, CLU - кластером, Modula - модулем. В нашем обсуждении будет использоваться термин пакет.4.4)
Пакеты - это единицы программной декомпозиции, обладающие следующими свойствами:
[x]. P1 В соответствии с принципом Лингвистических Модульных Единиц, "пакет" это конструкция языка, так что каждый пакет имеет имя и синтаксически четко определенную область.
[x]. P2 Описание каждого пакета содержит ряд объявлений связанных с ним элементов, таких как подпрограммы и переменные, которые в дальнейшем будут называться компонентами (features) пакета.
[x]. P3 Каждый пакет может точно определять права доступа, ограничивающие использование его компонентов другими пакетами. Другими словами, механизм пакетов поддерживает скрытие информации.
[x]. P4 В компилируемом языке (таком, который может быть использован для реализации, а не только для спецификации и проектирования) поддерживается независимая компиляция пакетов.
Благодаря свойству P3, пакеты можно рассматривать как абстрактные модули. Их главным вкладом в программирование является свойство P2, удовлетворяющее требованию Группирования Подпрограмм. Пакет может содержать любое количество связанных с ним операций, таких как создание таблицы, включение, поиск и удаление элементов. И нетрудно увидеть, как решение, основанное на использовании пакета, будет работать в рассматриваемом здесь примере табличного поиска. Ниже - в системе обозначений, заимствованной из нотации, используемой в последующих лекциях этого курса для ОО-ПО - приводится набросок пакета INTEGER_TABLE_HANDLING, описывающий частную реализацию таблиц целых чисел, основанную на использовании двоичных деревьев:
package INTEGER_TABLE_HANDLING feature
type INTBINTREE is
record
-- Описание представления двоичного дерева, например:
info: INTEGER
left, right: INTBINTREE
end
new: INTBINTREE is
-- Возвращение нового инициализированного INTBINTREE.
do ... end
has (t: INTBINTREE; x: INTEGER): BOOLEAN is
-- Содержится ли x в t?
do ... Реализация операции поиска ... end
put (t: INTBINTREE; x: INTEGER) is
-- Включить x в t.
do ... end
remove (t: INTBINTREE; x: INTEGER) is
-- Удалить x из t.
do ... end
end -- пакета INTEGER_TABLE_HANDLING
Этот пакет содержит объявление типа (INTBINTREE), и ряда подпрограмм, представляющих операции над объектами этого типа. В данном примере не потребовалось описания переменных пакета (хотя в подпрограммах могут иметься локальные переменные).
Пакеты-клиенты теперь могут работать с таблицами, используя различные методы из INTEGER_TABLE_HANDLING. Введем синтаксическое соглашение, позволяющее клиенту пользоваться методом f из пакета, для чего позаимствуем нотацию из языка CLU: P$f. В нашем примере типичные фрагменты программного текста клиента могут иметь вид:
-- Вспомогательные описания:
x: INTEGER; b: BOOLEAN
-- Описание t типа, определенного в INTEGER_TABLE_HANDLING:
t: INTEGER_TABLE_HANDLING$INTBINTREE
-- Инициализация t новой таблицей, создаваемой функцией new пакета:
t := INTEGER_TABLE_HANDLING$new
-- Включение x в таблицу, используя процедуру put пакета:
INTEGER_TABLE_HANDLING$put (t, x)
-- Присваивание True или False переменной b,
-- для поиска используется функция has пакета:
b := INTEGER_TABLE_HANDLING$has (t, x)
Отметим необходимость введения двух связанных между собой имен: одного для модуля, здесь это INTEGER_TABLE_HANDLING, и одного для его основного типа данных, здесь это INTBINTREE. Одним из ключевых шагов к ОО-программированию явится объединение этих двух понятий. Но не будем опережать события.
Менее важной проблемой является утомительная необходимость неоднократно писать имя пакета (здесь это INTEGER_TABLE_HANDLING). В языках, поддерживающих работу с пакетами, эта проблема решается с помощью различных сокращенных синтаксических конструкций (shortcuts), таких как, например, в языке Ada:with INTEGER_TABLE_HANDLING then
... Здесь has означает INTEGER_TABLE_HANDLING$has, и т.д. ... end
Другим очевидным недостатком пакетов рассмотренного вида является их неспособность удовлетворять требованию Изменчивости Типов: приведенный выше модуль пригоден лишь для таблиц целых чисел. Однако, вскоре мы увидим, как устранить этот недостаток, делая пакеты универсальными (generic).
Механизм пакетов обеспечивает скрытие информации, ограничивая права клиентов на доступ к компонентам. Показанный выше клиент был в состоянии объявить одну из своих собственных переменных, используя тип INTBINTREE, взятый от своего поставщика, и вызывать подпрограммы, описанные этим поставщиком. Но он не имеет доступа ни к внутреннему описанию этого типа (к структуре record, определяющей реализацию таблиц), ни к телу подпрограмм (здесь это операторы do). Кроме того, можно скрыть от клиентов некоторые компоненты пакета (переменные, типы, подпрограммы), делая их используемыми только в тексте пакета.
Языки, поддерживающие работу с пакетами, несколько различаются своими механизмами скрытия информации. Например, в языке Ada, внутренние свойства типа, такого как INTBINTREE, будут доступны клиентам, если не объявить тип как private (закрытый).Часто для усиления скрытия информации в языках с инкапсуляцией предлагается объявлять пакет, состоящий из двух частей, интерфейса (interface) и реализации (implementation)(См. лекция 11 и лекция 5 курса "Основы объектно-ориентированного проектирования"). Закрытые элементы, такие как объявление типа или тело подпрограммы, включаются в раздел реализации. Однако такой подход приводит к добавочной работе для разработчиков модулей, заставляя их дублировать заголовки объявлений компонентов. При глубоком осмыслении правила Скрытия Информации все это не требуется. Подробнее эта проблема обсуждается в последующих лекциях.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
3.3. Пакеты в языке UML
3.3. Пакеты в языке UML Пакет – основной способ организации элементов модели в языке UML. Каждый пакет владеет всеми своими элементами, т. е. теми элементами, которые включены в него. Про соответствующие элементы пакета говорят, что они принадлежат пакету или входят в него. При
Пакеты и репозитории
Пакеты и репозитории Все дистрибутивы Linux, и Mint тут не исключение, организованы по пакетному принципу. Точно также, в виде пакетов, распространяются и любые дополнительные программы для них, создаваемые независимыми разработчиками. И потому одна из важных задач
Необходимые пакеты
Необходимые пакеты Сервер FTP: ftp://ftp.linuxfromscratch.org/ Сервер HTTP: http://ftp.linuxfromscratch.org/ Загрузите все необходимые пакеты для компиляции системы LFS в одном tar-архиве: Все пакеты LFS – 105,560 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/lfs-packages-4.0.tar http://ftp.linuxfromscratch.org/lfs-packages/4.0/lfs-packages-4.0.tar Или все пакеты по
14.3.1. Пакеты SYN
14.3.1. Пакеты SYN Пакеты SYN используются для запроса на установку соединения. Вы можете отвергать эти пакеты для того, чтобы прервать попытки установить соединение.Иногда это необходимо, если вы хотите получать пакеты только в одном направлении, например, рабочая станция
4.20.7 Пакеты или PDU?
4.20.7 Пакеты или PDU? Существует незначительная сложность в способе пересылки информации по Х.25. Некоторые сети X.25 передают пакеты очень маленького размера. Однако передать весь высокоуровневый PDU (например, датаграмму IP) можно через непрерывную последовательность пакетов
4.4. Офисные пакеты
4.4. Офисные пакеты Open Office и К OfficeВ среде Linux наибольшее распространение получили два офисных пакета: K Office и Open Office, оба — свободно распространяемые. В большинство дистрибутивов включены они оба, так что вы можете выбирать инструмент, исходя из конкретной задачи.Пакет Open
19.2.4.5. В Linux создавайте RPM-пакеты
19.2.4.5. В Linux создавайте RPM-пакеты Де-факто стандартным форматом для устанавливаемых бинарных пакетов в Linux является формат, используемый диспетчером пакетов Red Hat Linux, RPM (Red Hat Package manager). Он имеется в большинстве популярных дистрибутивов Linux и поддерживается фактически всеми
5. Лекция: Имена. Пакеты
5. Лекция: Имена. Пакеты В этой лекции рассматриваются две темы – система именования элементов языка в Java и пакеты (packages), которые являются аналогами библиотек из других языков. Почти все конструкции в Java имеют имя для обращения к ним из других частей программы. По ходу
9.1.1. Пакеты и зависимости
9.1.1. Пакеты и зависимости Пакет, как правило, содержит программу и вспомогательные файлы. Но не всегда в пакете находится все необходимое для запуска программы. Пакет может не содержать библиотеку, которую использует программа, а также другие программы, которые нужны для
Собираем пакеты
Собираем пакеты Ну что ж, от теории плавно перейдем к практике. Ведь чтобы научится что-то хорошо защищать, необходимо взломать это. Нижеследующий текст никоим образом нельзя расценивать как руководство к действию. Материал приведен исключительно в ознакомительных
Пакеты
Пакеты В семидесятые годы двадцатого века, в связи с развитием идей скрытия информации и абстракции данных, возникла необходимость в форме модуля, более совершенном, чем подпрограмма. Появилось несколько языков проектирования и программирования, наиболее известные из
Пакеты: оценка
Пакеты: оценка По сравнению с подпрограммами, механизм пакетов приводит к существенному совершенствованию разбиения системы ПО на абстрактные модули. Собрать нужные компоненты "под одной крышей" крайне полезно как для поставщиков, так и для клиентов:[x]. Автор