6.1 абстракцииОбщие концепции языка Ада являются прекрасной основой для разработки больших программных систем. Примером применения языка для разработки таких систем является его успешное использование в целом ряде проектов: • системе управления скоростной магистралью TGV (Франция); • системах контроля метрополитеном ( Париж, Каир, Калькутта); • банковских системах ( Швейцария ); • управление атомномными электростанциями ( Чехия ) ; • авиастроении (Боинг-777, США) и др. Разработка больших программных систем представляет собой сложный процесс, включающий несколько этапов: анализ и описание требований, проектирование, реализация, модификация, сопровождение [ 5 ]. Одним из основных среди них является этап проектирования, на котором определяется структура будущей программы, как совокупность подзадач, из которых далее "собирается" программа. В основе этапа проектирования сложных программных систем лежит, как правило, декомпозиция. Декомпозиция программы заключатся в определении оптимального набора модулей, взаимодействующих по хорошо определённым и простым правилам, которые сообща выполняют заданную функцию. При эффективном проведении декомпозиции исходная задача разбивается на подзадачи таким образом, чтобы каждая подзадача имела один и тот же уровень рассмотрения, могла решаться одновременно с остальными (что особенно важно для параллельных вычислительных систем) и взаимодействовать с другими подзадачами. Объединение подзадач позволяет решить исходную задачу. Эффективность декомпозиции как основного механизма этапа проектирования в значительной мере зависит от способов её реализации. Существует множество методик проектирования программ. Наиболее современные из них основываются на абстракциях различного вида. В программировании уже давно используются различные виды абстракций (например, процедурные абстракции) и новейшие языки программирования с этой точки зрения характеризуются все более высоким уровнем реализуемых видов абстракций. Абстрагирование предполагает игнорирование на этапе проектирования ряда подробностей, что позволяет свести задачу к более простой. 52 Ада 95. Введение в программирование Глава 6. Модули 53
Декомпозиция, базирующаяся на абстракции, при разбиении программы на компоненты предполагает продуманный выбор компонент и осуществляется путем изменения списка детализации. В простейшем случае все модули могут представлять собой только процедурную абстракцию, то есть программа будет состоять из процедур и функций. Реализация абстракций основывается на двух подходах - абстракции на основе параметризации и абстракции на основе спецификации. Абстракция через параметризацию есть абстракция неограниченного набора различных вычислений, которые выполняются в программе. Такой вид абстракции повышает универсальность программ, позволяя относительно просто описывать вычисления, легко и эффективно реализуется в языках программирования. Более высокий уровень обобщения достигается в абстракциях через спецификацию. Абстракция в этом случае имеет спецификацию и тело. Назначение модуля, реализованного на основе такой абстракции, теперь становится ясным через его спецификацию, описывающую цель его работы, а не через тело. То есть происходит абстрагирование от процесса вычислений в теле до уровня знания того, что данный модуль в итоге должен реализовать. Преимущество абстракции заключается в том, что при использовании модуля нет необходимости знать тело, то есть можно абстрагироваться от него и не обращать внимание на несущественную информацию. При этом несущественность способа реализации тела позволяет легко переходить от одной реализации к другой без внесения изменений в структуру программы, а также выполнять эту реализацию на разных языках программирования. В общем случае абстракция на основе спецификации наделяет программу двумя свойствами: локальностью и модифицируемостью. Локальность означает, что реализация одной абстракции может быть выполнена без анализа реализации другой абстракции. Для написания программы, использующей абстракции, достаточно только понимать её поведение, а не подробности её реализации. Принцип локальности облегчает составление программы и анализ уже созданной абстракции. Он позволяет составлять программу из абстракций, создаваемых независимо друг от друга. Абстракция на основе спецификации позволяет упростить модификацию программы. Если реализация абстракции меняется (через изменение тела абстракции), но её спецификация при этом остаётся прежней, то эти изменения не повлияют на оставшуюся часть программы. Объём исправлений может быть значительно сокращён путем выделе- ния потенциальных модификаций уже на начальном этапе разработки программ и последующим ограничением их небольшим числом абстракций. Модифицируемость существенно повышает эффективность программы. Выделим следующие виды абстракций: • процедурная абстракция • абстракция данных • абстракция процесса. Процедурная абстракция позволяет расширить множество заданных языком программирования операций и является мощным и широко используемым средством повышения эффективности языка программирования. Абстракция данных позволяет расширить множество заданных языком типов данных и операций над ними, реализуя возможность добавлять к базовому уровню операции и новые типы данных. Абстракция достигается представлением операции как части типа: абстракция_данных : = < объекты, операции > Абстракции данных играют важную роль в проектировании программ, так как выбор правильных структур данных играет решающую роль в создании эффективной программы. Абстракции данных позволяют отложить окончательный выбор структуры данных до момента, когда эти структуры станут вполне ясными для проектировщиков. Вместо непосредственного определения структуры данных вводится абстрактный тип со своими объектами и операциями, в терминах которого осуществляется реализация модулей. Модификация программы теперь сводится к изменениям в реализации типа без изменения модулей. Абстракция процесса возникла в связи с развитием и усложнением операционных систем, где понятие процесса было введено для лучшего восприятия работы вычислительной системы и построение механизмов операционных систем на едином концептуальном базисе. Абстракция процесса в языках программирования для параллельных вычислительных систем связана с описанием параллельно выполняемых модулей. Для процесса определяется состав допустимых состояний и переходов из одного состояния в другое. Характерными состояниями процесса являются: • порождение; • выполнение (активное); 8 —— KnnnairnTf A R 54 Ада 95. Введение в программирование 55 Глава 6. Модули
• готовность; • блокирование; • окончание. Процесс рассматривается как динамический объект, в отношении которого требуется обеспечить реализацию каждого из допустимых состояний, а также допустимые переходы из состояния в состояние в ответ на события, которые могут явиться причиной таких переходов. Главной особенностью процессов в параллельных системах, определяющей организацию вычислительного процесса в ней, является их параллельность. То есть в системе одновременно существует и развивается множество процессов. Другое важное свойство процессов, реализующих параллельную программу, заключается в том, что эти процессы, как правило, взаимосвязаны, то есть между ними поддерживаются различного вида связи: функциональные, пространственно-временные, управляющие, информационные и т.д. Управляющие связи устанавливают между процессами отношения типа "порождающий-порождаемый", информационные связи приводят к взаимодействующим процессам. |
| Оглавление| |