Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






  • Теперь вернемся к понятию «модуль» и уточним семантику этого понятия.






    ¨ Как демонстрирует программа InfixToPostfix - инструментарий, предоставляемый модулем UStack, позволяет программировать работу со стеком, не зная способа его реализации. Достаточно знать лишь семантику средств, объявленных в интерфейсной секции модуля (которая описана там, к сожалению, не на языке спецификаций, а просто в комментариях). Однако этого эффекта в определенной мере можно было бы достичь и ограничившись средствами аппарата процедур-функций.

    ¨ Модуль вводит в употребление новые средства программирования - механизм инкапсуляции. Инкапсуляция (encapsulation) – «скрытие», защита от внешнего воздействия: извне модуля доступны данные и операции, определенные в модуле (локальные???!!!), но только те, которые объявлены в интерфейсной секции (как видимые). Понятие инкапсуляция вносит существенно новое в дилемму локальные - глобальные.

    ¨ Интерфейсные инструменты - описанные в интерфейсной секции:

    · интерфейсный тип данных – TVal (в модуле UVal);

    · интерфейсная переменная – ErrStack;

    · интерфейсные процедуры и функции – Empty, Push, Pop, Top, WriteAll.

    Интерфейсные инструменты используются для организации информационной и операционной связи с модулем.

    ¨ Инкапсулированные инструменты - описанные в секции реализации:

    · инкапсулированные типы данных – TStack;

    · инкапсулированные переменные - Stack;

    · реализация тел интерфейсных процедур и функций – тоже инкапсулирована.

    Инкапсулированные инструменты «скрыты в капсуле», вне модуля на них невозможно ссылаться по их именам. Однако, не являясь глобальными, они не являются и локальными инструментами модуля. Из смысла программы InfixToPostfix ясно, что инкапсулированная в модуле UStack переменная Stack «живет» в течение всего периода выполнения программы InfixToPostfix. Она «непрерывно хранит» элементы стека и положение «его вершины», ее значение изменяется в процессе работы программы со стеком. Манипулировать стеком (переменнной Stack) программа InfixToPostfix может только косвенно с помощью («рук-манипуляторов») Push, Pop.

    Кстати, традиционной локальной переменной является i: INTEGER (в процедуре WriteAll). А глобальных для всей многомодульной программы переменных не может быть. Переменные Vh, Vih, x, y можно было бы использовать как глобальные, но только процедурами и функциями в пределах головного модуля InfixToPostfix, вне него они не видны.

    ¨ Возможно, используя отмеченные выше инкапсулированные инструменты, некоторые действия в программе InfixToPostfix можно было бы реализовать и эффективнее, чем это сделано в примере, однако

    § Инкапсуляция защищает модуль от некорректного внешнего вмешательства в функционирование его инструментов.

    • Оборотная сторона защищённости инструментов модуля - независимость программы решения задачи от способа реализации использованных инструментов.

    Можно изменить всё в секции реализации – реализацию процедур и функций и даже представление данных для стека, но в пределах сохраняющих синтаксис и семантику того, что уже объявлено в интерфейсной секции, от этого не пострадает правильность работы программы InfixToPostfix.

    Оформление модуля в C/C++.

    Для понятия «модуль» в С/С++ нет специальной синтаксической конструкции языка. Но это ни в коей мере не означает, что это понятие не играет важнейшей роли в методологии, методике и практике программирования на С/С++ (*):

    • Многомодульная программа (проект) оформляется в С/С++ как набор программных файлов.
    • В программный файл (модуль) группируются данные и функции по принципу общего их назначения для решения некоторого семейства задач. Программный файл, содержащий функцию main(), является головным модулем многомодульной программы.
    • Для оформления межмодульных связей и защиты инструментов используются средства управления областью видимости и периодом жизни инструментов.





    © 2023 :: MyLektsii.ru :: Мои Лекции
    Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
    Копирование текстов разрешено только с указанием индексируемой ссылки на источник.