Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Непейвода Н.Н. -> "Основания программирования " -> 182

Основания программирования - Непейвода Н.Н.

Непейвода Н.Н., Скопин И.Н. Основания программирования — Институт компьютерных исследований , 2002. — 919 c.
Скачать (прямая ссылка): osnovanprogramm2002.pdf
Предыдущая << 1 .. 176 177 178 179 180 181 < 182 > 183 184 185 186 187 188 .. 316 >> Следующая

c) динамическое имя компоненты в наборе, если имена компонент могут изменяться при использовании объектов, построеннх с помоь конструктора набора;
9.3.
511
d) тип компоненты, если по крайней мере некоторые из компонент различаются своими типами;
e) значения теговых компонент, которые могут давать идентификационные сведения о других компонентах;
f) специальные атрибуты компонент, смысл и назначение которых для се-лектирования на абстрактном уровне набора компонент не определя тся.
Теперь можно дать абстрактное определение селектора.
Определение 9.3.2. Универсальный селектор — пара частичных функций Sv и Sa с одной и той же областью определения. Sv отображает некоторое подмно ество значений идентифицируих атрибутов компонент в значения компонент набора, Sa отображает то же подмножество в переменные, содержащие значения Sa. Конец определения 9.3.2.
При желании можно считать результат Sa адресом, что соответствует трактовке структурных конструкторов в языке С/С++. Чаще всего обе эти функции рассматрива тся совместно, и выбор одной из них определяется синтаксической позицией: что требуется в данный момент вычисления программ — адрес или значение. ными словами, мо но говорить о вычислении компоненты Sa, об извлечении значения компоненты Sv и о приведении компоненты, определенной функцией Sa, к значению Sv. В тех случаях, когда язк позволяет связвать с указанными вариантами доступа к компонентам различне алгоритм , явно определя тся две функции доступа: для чтения и для записи атрибута-значения. Это называется программируемым доступом к данным. Примитивнейший вид программируемого доступа демонстрируют компоненты со спецификатором property в объектно-ориентированных языках, где задаются функции Sa и Sv.
рограммируемый доступ является одним из средств повения уровня абстрактности. В самом деле, когда пишутся программы для Sa и Sv, опре-деля тся два алгоритма, работу которх допустимо трактовать и конкретно синтаксически оформлять как активизацию селекторов. При этом можно далеко уйти от понятия фактического доступа к реальнм даннм.
Разумное язковое реение программируемго доступа — специальная конструкция, в которой мо но описать свой локальный контекст и два алгоритма селектирования, работаие в этом контексте. добно параметри-зировать эту конструкцию в соответствии с абстракцией программируемого
512
9.
доступа. апример, мо но определять скалярный, векторный, матричный и другие виды доступа, которые на уровне использования будут оформляться подобно обращению к соответствующим структурам данных. Это было в значительной степени реализовано в таких языках программирования, как Bliss, Ярмо, Эль 76.
К со алени , в современнх объектно-ориентированных язках средства программируемого доступа даются в самом примитивном виде. Причина тому — банальная неосведомленность разработчиков сегодняних объектно-ориентированных языков8.
Какое оперирование с компонентами мо но предусмотреть на уровне универсального конструктора наборов? Прежде всего, приходят на ум средства циклической обработки: совместный цикл for all для всех компонентов набора. Но такой цикл целесообразен, лишь если все компоненты имеют одина-кове типы и подобну прагматику. Ведь цикл предполагает однородность выполняемх действий, а компонент набора могут иметь и разные тип , и соверенно разну прагматику, что уничто ает все достоинства цикла.
Безусловно, полезна функция, вычисляющая размер и характеристики набора. Часто ее суррогат предоставляется системами программирования как зависимая от реализации функция размера sizeof, вчисляая размер памяти, необходимой для размеения набора.
Конструктор набора компонент является полность абстрактным, и в ре-альнх программистских построениях он почти никогда не появляется явно. Он может быть приспособлен для выражения любых употребляемых в практике программирования структурнх конструкторов. ля этого надо лиь конкретизировать то, что представлено в конструкторе набора в обобенном виде. екоторые трудности возника т только при представлении рекурсивных структур даннх, поскольку их определение требует привлечения дополнительных понятий, связанных с семантикой выполнения (в частности, памяти, адресации и др.).
Поэтому вместо конструктора набора используются конкретные конструктор , которые могут рассматриваться как конкретизации абстрактного конструктора набора компонент для частнх вариантов построения структурных типов. При конкретизации уточняются функции Sv и Sa и вводятся необ-ходиме ограничения. Кроме того, определяется конкретно-синтаксическая форма конструктора и его селекторов.
8 Ignorance is power. (G. Orwell, '1984')
9.3. СТРУКТУРНЫЕ ТИПЫ
513
бстрактно-синтаксическая форма лбого такого конкретного конструктора является ограничением абстрактно-синтаксического представления конструктора набора компонент, а поведение абстрактного вычислителя для всех конкретнх конструкторов наследуется (с ограничениями) от конструктора набора компонент. оэтому имеет смсл описать это поведение один раз в обем виде. Это построение является типичнм примером применения призраков (в данном случае — конструктора набора компонент, рассматриваемого в качестве призрака) для формулировки общих свойств различных конкре-тизаций абстрактного понятия.
Предыдущая << 1 .. 176 177 178 179 180 181 < 182 > 183 184 185 186 187 188 .. 316 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100