Популярные услуги

Главная » Лекции » Автоматизация » Автоматизированные системы управления » Объектно-ориентированные методы анализа

Объектно-ориентированные методы анализа

2021-03-09СтудИзба

ЛЕКЦИЯ 11

Объектно-ориентированные методы анализа

Важное место в разработках АСУП занимают объектно-ориенти­рованные методологии, основанные на объектной декомпозиции предметной области, представляемой в виде совокупности объек­тов, взаимодействующих между собой посредством передачи сооб­щений. Данный подход не является противопоставлением структур­ному подходу, более того, фрагменты методологий структурного анализа (а именно его базовые модели: DFD, ERD и STD) исполь­зуются при объектно-ориентированном анализе для моделирования структуры и поведения самих объектов.

В качестве объектов предметной области могут рассматриваться конкретные предметы, а также абстрактные или реальные сущнос­ти (например, клиент, заказ, предприятие и т. п.). Каждый объект характеризуется своим состоянием (точнее, набором атрибутов, зна­чения которых определяют состояние), а также набором операций для проверки и изменения этого состояния. Каждый объект являет­ся представителем некоторого класса однотипных объектов, опре­деляющего их общие свойства. Все представители (экземпляры) од­ного и того же класса имеют один и тот же набор операций и могут реагировать на одни и те же сообщения.

Объекты и классы организуются с использованием следующих принципов:

1. Принцип инкапсуляции (упрятывания информации) деклари­рует запрещение любого доступа к атрибутам объекта, кроме как через его операции. В соответствии с этим внутренняя структура объек­та скрыта от пользователя, а любое его действие инициируется вне­шним сообщением, вызывающим выполнение соответствующей операции.

2. Принцип наследования декларирует создание новых классов от общего к частному. Такие новые классы сохраняют все свойства клас­сов-родителей и при этом содержат дополнительные атрибуты и операции, характеризующие их специфику.

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

Рекомендуемые материалы

Таким образом, объектно-ориентированный подход заключает­ся в представлении моделируемой системы в виде совокупности классов и объектов предметной области. При этом иерархический характер сложной системы отражается с использованием иерархии классов, а ее функционирование рассматривается как взаимодействие объектов. Жизненный цикл такого подхода содержит этапы анализа требований, проектирования, эволюции (объединяющей программирование, тестирование и отладку, а также комплекса-цию системы) и модификации. При этом в отличие от каскадной модели отсутствует строгая последовательность выполнения пере­численных этапов.

Известные объектно-ориентированные методологии базируются на интегрированных моделях трех типов:

• объектной модели, отражающей иерархию классов, связан­ных общностью структуры и поведения и отражающих специ­фику атрибутов и операций каждого из них (при этом одной из базовых нотаций объектной модели является диалект ERD);

•динамической модели, отражающей временные аспекты и пос­ледовательность операций (при этом достаточно часто исполь­зуется STD);

•функциональной модели, описывающей потоки данных (с ис­пользованием DFD).

В табл. 5 приведены оценки объемов продаж объектно-ориентиро­ванных методологий поданным International Data Corp. на 1995 г.

Главными недостатками перечисленных объектно-ориентирован­ных методологий являются следующие:

• отсутствие стандартизации в рассматриваемой области про­граммотехники (конкретно, для представления объектов и взаимосвязей между ними);

• отсутствие метода, одинаково хорошо реализующего этапы анализа требований и проектирования (большинство методов предназначено для объектно-ориентированного анализа, не­которые содержат слабо развитые средства проектирования, метод Booch ориентирован на проектирование). Для преодоления этих недостатков авторы известных методоло­гий Буч (Booch), Рамбо (Rumbaugh) и Якобсон (Jacobson) объеди-

Таблица 5

Название методологии

Объем продаж, %

Rumbaugh (OMT)

40

ShIaer—Mellor

16

Booch

11

Martin— Odell

11

другие

22

нились с целью выработки унифицированной методологии, полу­чившей название UML (Unified Modeling Language). При создании UML его авторы руководствовались целями ускорения эволюции наиболее популярных методологий в направлении сближения их друг с другом, обобщения накопленного опыта их использования, обес­печения стабильности проектов на основе единого целостного ме­тода.

В UML используются следующие ключевые диаграммы:

•диаграмма классов, демонстрирующая статическую структуру системы, ее содержимое — классы, объекты и отношения между ними;

• диаграмма прецедентов, моделирующая набор действующих субъектов (акторов) и прецедентов использования, с помо­щью которых они взаимодействуют;

• диаграмма взаимодействий, обеспечивающая возможность моделирования условий в диаграммах последовательности и коллективного взаимодействия, которые представляют объекты и межобъектные взаимодействия в измерениях времени и от­ношений, соответственно;

•диаграмма состояний, моделирующая изменения (переходы) состояний вследствие взаимодействия конкретного объекта с другими объектами (т. е. в отличие от диаграммы взаимо­действий описывает состояния только одного класса или объекта);

•диаграмма компонентов, описывающая модули системы, в ко­торых определены классы;

•диаграмма применения (развертывания), моделирующая схе­му расположения процессоров и устройств, задействованных в реализации системы, а также маршрутов передачи инфор­мации между ними.

При этом первые четыре диаграммы являются логическими пред­ставлениями разрабатываемой системы, а последние две — отража­ют ее физическое представление.

Разработка технического задания

После построения модели, содержащей требования к будущей системе, на ее основе осуществляется разработка Технического за­дания на создание системы, включающего в себя:

•требования к автоматизированным рабочим местам, их соста­ву и структуре, а также способам и схе              мам информационного взаимодействия между ними;

• разработку требований к техническим средствам;

• разработку требований к программным средствам;

• разработку топологии, состава и структуры локальной вычис­лительной сети;

•требования к этапам и срокам выполнения работ.

Рассмотрим основные виды работ, которые необходимо выпол­нить, прежде чем приступить к проектированию (созданию проекта на разработку или адаптацию).

1) Обозначение границ реализации. Практически любая система может быть разбита на части, отражающие четыре основных типа реализации систем: ручную, пакетную, диалоговую, реального вре­мени. Из этих четырех типов первый реализуется людьми, осталь­ные три являются автоматическими реализациями системы. Рас­смотрим критерии, с помощью которых устанавливаются наибо­лее приемлемые типы реализации требований для частей модели.

Ручная реализация имеет три основных преимущества перед ав­томатической. Во-первых, не требуется заранее точно определять процессы. По крайней мере, они могут определяться не так тща­тельно, как при автоматической реализации: люди хорошо знают как заполнить пробелы в спецификации. Во-вторых, ручная систе­ма может откликаться на неожидаемые запросы, а не только на заранее планируемые. Например, ручная система бронирования авиабилетов может ответить на запрос о возможности парковки автомобиля около аэропорта. В-третьих, система может быть реа­лизована в окружении, где автоматизация невозможна по ряду причин, например психологических: хотя процесс предоставления ссуды и возможно полностью автоматизировать, люди не могут примириться с тем, что их прошения беспристрастно отклонены машиной. Безусловно, ручные системы имеют и массу недостатков. В отличие от машин люди болеют, увольняются, требуют повыше­ния зарплаты. Однако наиболее важно, что размер и сложность ручной системы будут возрастать с увеличением числа запросов, поскольку человек может обрабатывать меньше данных, чем ма­шина.

После определения границ ручной реализации необходимо ре­шить, какая часть системы должна быть пакетной, а какая диалого­вой. Для большинства современных предприятий вся АСУП должна быть диалоговой, если только не доказано противное. Соответству­ющее заключение может быть сделано на основе собранных статис­тических данных, например скорости поступления запросов и час­тоты изменения данных. В качестве примеров причин для пакетной реализации можно привести следующие:

• некоторые запросы требуют длительной работы со срезом базы данных за определенный период (годовой отчет, пересылка накопленной информации и т. п.);

• некоторые отклики (например, отчеты о продажах) содержат большое количество статичных данных, актуальность кото­рых не изменяется в течение дней или даже недель.

Следующий шаг — выделение частей, реализуемых как подсис­темы реального времени. Существует два принципиальных отличия системы реального времени от просто диалоговой системы. Первое из них связано с концептуальным уровнем: в системе реального вре­мени время поступления события в систему само по себе несет оп­ределенную информацию, которая не может быть закодирована. Вто­рое связано с уровнем реализации: время отклика системы реально­го времени является критичным и сопоставимым со скоростью вы­полнения технологических операций. В целом рекомендуется реали­зовать как подсистемы реального времени те части АСУП, из кото­рых должен быть исключен человек, т. е. те части, в которых приори­тетны следующие факторы: скорость (например, противоракетная оборона), опасность (контроль радиоактивности), утомляемость (ра­бота авиадиспетчера).

2) Выбор подходящих технических средств. Разработав модель тре­бований и определив границы реализации, можно начинать выбор аппаратной платформы, на которой будет функционировать систе­ма (или, по крайней мере, сужать область для такого выбора). Воп­росы такого выбора не являются предметом данной книги и поэто­му здесь не рассматриваются.

Проектирование

 Этап проектирования дает ответ на вопрос: «Как (каким образом) система будет удовлетворять предъявленным к ней требованиям?». Задачей этого этапа является исследование структуры системы и ло­гических взаимосвязей ее элементов, причем здесь не рассматрива­ются вопросы, связанные с реализацией на конкретной платформе. Проектирование определяется как «(итерационный) процесс получе­ния логической модели системы вместе со строго сформулированны­ми целями, поставленными перед нею, а также написания специфи­каций физической системы, удовлетворяющей этим требованиям». Обычно этот этап разделяют на два подэтапа:

• проектирование архитектуры системы, включающее разработку структуры и интерфейсов компонент, согласование функций и технических требований к компонентам, методам и стан­дартам проектирования;

•детальное проектирование, включающее разработку специфи­каций каждой компоненты, интерфейсов между компонента­ми, разработку требований к тестам и плана интеграции ком­понент.

Другими словами, проектирование является этапом ЖЦ, на ко­тором вырабатывается, как реализуются требования к АСУП, по­рожденные и зафиксированные на этапе анализа. В результате этапа должна быть построена модель реализации, демонстрирующая, как система будет удовлетворять предъявленным к ней требованиям (без технических подробностей). Фактически модель реализации являет­ся развитием и уточнением модели требований, а само проектиро­вание является мостом между анализом и реализацией.

Структурное проектирование

Базовыми строительными блоками АСУП при использовании структурного подхода являются модули. Все виды модулей в любом языке программирования имеют ряд общих свойств, из которых су­щественны при структурном проектировании перечисленные ниже:

1) Модуль состоит из множества операторов языка программи­рования, записанных последовательно.

2) Модуль имеет имя, по которому к нему можно ссылаться как к единому фрагменту.

3) Модуль может принимать и/или передавать данные как па­раметры в вызывающей последовательности или связывать данные через фиксированные ячейки или общие области. При структурном проектировании выполняется два вида работ:

проектирование архитектуры АСУП, включающее разработку структуры и интерфейсов ее компонент (автоматизированных рабочих мест), согласование функций и технических требова­ний к компонентам, определение информационных потоков между основными компонентами, связей между ними и вне­шними объектами;

• детальное проектирование, включающее разработку специфи­каций каждой компоненты, разработку требований к тестам и плана интеграции компонент, а также построение моделей иерархии программных модулей и межмодульных взаимодей­ствий и проектирование внутренней структуры модулей.

При этом происходит расширение модели требований:

•за счет уточнения содержащихся в ней функциональных, ин­формационных и, возможно, событийных моделей требова­ний, построенных с помощью соответствующих средств струк­турного анализа;

•за счет построения моделей автоматизированных рабочих мест, включающих подсхемы информационной модели и функцио­нальные модели, ориентированные на эти подсхемы вплоть до идентификации конкретных сущностей информационной модели;

• за счет построения моделей межмодульных и внутримодульных взаимодействий с использованием техники структурных карт.

В структурном подходе для целей проектирования модулей ис­пользуются техники структурных карт (схем), демонстрирующие, каким образом системные требования будут отражаться комбина­цией программных структур. При этом наиболее часто применяются две техники: структурные карты Константайна (Constantine), пред­назначенные для описания отношений между модулями, и струк­турные карты Джексона (Jackson), предназначенные для описания внутренней структуры модулей.

Структурные карты Константайна являются моделью отношений иерархии между программными модулями. Узлы структурных карт соответствуют модулям и областям данных, потоки изображают межмодульные вызовы (в том числе циклические, условные и па­раллельные). Межмодульные связи поданным и управлению также моделируются специальными узлами, привязанными к потокам, стрелками указываются направления потоков и связей. Фундамен­тальные элементы структурных карт Константайна стандартизова­ны IBM, ISO и ANSI.

Техника структурных карт Джексона восходит к методологии структурного программирования Джексона и заключается в продуцировании диаграмм и схем для графического иллюстрирования внутримодульных (а иногда и межмодульных) связей и документи­рования проекта архитектуры АСУП. При этом структурные карты Джексона позволяют осуществлять проектирование нижнего уровня АСУП и на этом этапе близки к традиционным блок-схемам, моде­лирующим последовательное, параллельное, условное и итераци­онное исполнение их узлов.

Структурные карты сами по себе ничего не говорят о качестве модели реализации, так как являются всего лишь инструментом моделирования структуры системы и взаимосвязей ее компонент, однако существуют критерии, позволяющие оценить это качество.

Один из фундаментальных принципов структурного проектиро­вания заключается в том, что большая система должна быть расчле­нена на обозримые модули. Это расчленение должно быть выполне­но таким образом, чтобы модули были как можно более независи­мы (критерий сцепления — coupling), и чтобы каждый модуль вы­полнял единственную (связанную с общей задачей) функцию (кри­терий связности — cohesion).

Таким образом, одним из способов оценки качества модели ре­ализации является анализ сцепления модулей. Сцепление — это мера взаимозависимости модулей. В хорошем проекте сцепления должны быть минимизированы, т. е. модули должны быть слабозависимыми (независимыми) настолько, насколько это возможно. Слабое сцеп­ление между модулями служит признаком хорошо спроектирован­ной системы по следующим причинам:

•уменьшается количество соединений между двумя модулями, что приводит к уменьшению вероятности появления «волно­вого эффекта» (ошибка в одном модуле влияет на работу дру­гих модулей);

• минимизируется риск появления «эффекта ряби» (внесение изменений, например при исправлении ошибки, приводит к появлению новых ошибок), так как изменение влияет на ми­нимальное количество модулей;

• при сопровождении модуля отпадает необходимость беспоко­иться о внутренних деталях других модулей;

•система упрощается для понимания настолько, насколько это возможно.

На практике существуют три основных типа сцепления, исполь­зуемых системными проектировщиками для связи модулей: нормаль­ное сцепление, сцепление по общей области и сцепление по содер­жимому. С позиций структурного проектирования эти типы являют­ся соответственно приемлемым, неприемлемым и запрещенным.

Два модуля А и В нормально сцеплены, если: А вызывает В;

В возвращает управление А; вся информация, передаваемая между А и В, представляется значениями параметров при вызове.

Нормальное сцепление в свою очередь делится на три типа: сцеп­ление поданным, сцепление по образцу, сцепление по управлению. На практике наиболее часто используется сцепление по данным.

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

Два модуля сцеплены по образцу, если один посылает другому составной информационный объект, т. е. объект, имеющий внут­реннюю структуру. Примером составного объекта может быть объект Данные о клиенте, включающий в себя поля: Название организации, Почтовый адрес, Номер счета и т. п.

Два модуля сцеплены по управлению, если один посылает дру­гому информационный объект — флаг, предназначенный для уп­равления его внутренней логикой. Существует два типа флагов — описательный и управляющий. Описательный флаг обычно описы­вает ситуацию, которая произошла, и именуется с использованием существительных и прилагательных: Конец файла, Введенная кредит­ная карта. Управляющий флаг используется для декларирования определенных действий в вызываемом модуле и именуется с ис­пользованием глаголов: Читать следующую запись, Установить в на­чало. В общем случае управляющие флаги усиливают сцепление и, следовательно, ухудшают качество проекта.

Как уже отмечалось, перечисленные три типа нормального сцеп­ления в разной степени поддерживают суть модульности и являются приемлемыми в структурном проектировании. Ниже определяются два вида сцепления, которые выходят за пределы хорошей модуль­ности.

Два модуля сцеплены по общей области, если они ссылаются к одной и той же области глобальных данных. Сцепление по общей области является плохим по следующим причинам. Во-первых, ошиб­ка в одном модуле, использующем глобальную область, может не­ожиданно проявить себя в любом другом модуле, также использую­щем эту глобальную область, поскольку эти глобальные данные не находятся «под защитой» модуля. Во-вторых, модули, ссылающиеся к глобальным данным, обычно используют точные имена (в отли­чие от модулей, которые вызываются с использованием парамет­ров). Следовательно, гибкость модулей, сцепленных глобально, на­много хуже, чем гибкость нормально сцепленных модулей. В-треть­их, программы с большим количеством глобальных данных чрезвы­чайно трудны для понимания сопровождающим программистом, поскольку сложно определить, какие данные используются отдель­ным модулем.

Два модуля сцеплены по содержимому, если один ссылается внутрь другого любым способом, например, если один модуль пере­дает управление или выполняет переход в другой модуль, если один модуль ссылается или изменяет значения информационных объек­тов в другом модуле или если один модуль изменяет код другого модуля. Такое сцепление делает абсурдной концепцию модулей как черных ящиков, поскольку оно вынуждает один модуль знать о точ­ном содержании и реализации другого модуля. Вообще говоря, только ассемблер позволяет проектировщикам применять данный вид сцеп­ления.

В табл. 6 приведены сравнительные характеристики по каждому типу сцепления.

Другим критерием оценки качества разбиения системы на части является критерий связности, который контролирует, как действия в одном модуле связаны друг с другом. Фактически сцепление и связность являются двумя взаимозависимыми способами измерения расчленения системы на части: связность модуля часто определяет качество его сцепления с другими модулями.

Связность — это мера прочности соединения функциональных и информационных объектов внутри одного модуля. Размещение силь­носвязанных объектов в одном и том же модуле уменьшает межмо-

Таблица б

Тип сцепления

Устойчивость к волновому эффекту

Модифици­руемость

Понятность

Используемость в других системах

По данным

*

хорошая

хорошая

хорошая

По образцу

*

средняя

средняя

средняя

По управлению

средняя

плохая

плохая

плохая

По общей области

плохая

средняя

плохая

плохая

По содержимому

плохая

плохая

плохая

плохая

* — зависит от количества параметров интерфейса

дульные взаимосвязи и взаимовлияния. Выделяются следующие связ­ности: функциональная, последовательная, информационная, про­цедурная, временная, логическая и случайная.

Функционально связный модуль содержит объекты, предназначен­ные для выполнения одной и только одной задачи, например: Рас­чет заработной платы. Считывание данных кредитной карты. Каж­дый из таких модулей имеет одну четко определенную цель, при его вызове выполняется только одна задача (при этом она выполняется полностью без исполнения любого другого дополнительного дей­ствия).

Последовательно связный модуль содержит объекты, охватываю­щие подзадачи, для которых выходные данные предыдущей подза­дачи служат входными данными для последующей, например: От­крыть файл— Прочитать запись— Закрыть файл.

Информационно связный модуль содержит объекты, использую­щие одни и те же входные или выходные данные. Предположим, что мы хотим выяснить некоторые сведения о книге, зная ее ISBN:

название книги, автора и цену. Эти три подзадачи являются связан­ными потому, что все они работают с одним и тем же входным информационным объектом — ISBN, который и делает этот модуль информационно связным.

Процедурно связный модуль содержит объекты, которые включе­ны в различные (возможно, несвязные) подзадачи, в которых уп­равление переходит от каждой подзадачи к последующей (отметим, что в последовательно связном модуле данные, а не управление, переходили от одной подзадачи к последующей).

Временно связный модуль содержит объекты, которые включены в подзадачи, связанные временем исполнения.

Логически связный модуль содержит объекты, содействующие ре­шению одной общей подзадачи, для которой эти объекты отобраны во внешнем по отношению к модулю мире.

Таким образом, логически связный модуль содержит некоторое количество подзадач (действий) одного и того же общего вида. Что­бы его использовать, необходимо выбрать именно ту часть (части), которая требуется. Эти различные подзадачи должны обладать од­ним и только одним интерфейсом с внешним миром. При этом се­мантика каждого параметра зависит от используемой подзадачи.

Случайно связный модуль содержит объекты, соответствующие подзадачам, незначительно связанным друг с другом.

Случайно связный модуль подобен логически связному модулю, его объекты не связаны ни потоками данных, ни потоками управле­ния. Однако подзадачи в логически связном модуле являются по крайней мере одной категории; для случайно связного модуля даже это неверно.

В табл. 7 приведены сравнительные характеристики для каждого уровня связности.

Следовательно, связность является мерой функциональной за­висимости объектов (исполняемых операторов, областей данных и т.д.) внутри одного модуля. В хорошей модели связность каждого модуля является высокой (последовательность введенных выше оп­ределений уровней связности соответствует направлению от луч-

Таблица 7

СВЯЗНОСТИ

Сцепление

Модифици­руемость

Понятность

Сопровож-даемость

функцио­нальная

хорошее

хорошая

хорошая

хорошая

последова­тельная

хорошее

хорошая

близкая к хорошей

хорошая

информа­ционная

среднее

средняя

средняя

средняя

процедурная

переменное

переменная

переменная

плохая

временная

плохое

средняя

средняя

плохая

логическая

плохое

плохая

плохая

плохая

случайная

плохое

плохая

плохая

плохая

шей связности к худшей). Как и сцепление, связность является од­ним из лучших критериев оценки качества про­екта.

Очевидно, что для оценки качества проектируемой АСУП кри­териев сцепления и связности недостаточно. На­пример, если бы мы осуществляли оценку только по критерию сцепления, мы бы всегда получали системы, со­стоящие из одного модуля. Связность этого единственного модуля также была бы вполне приемлемой.

Поэтому кроме этих двух взаимно дополняющих друг друга кри­териев в структурном проектировании сущест­вует ряд других прин­ципов, которые могут применяться для оценки и улучшения каче­ства модели на основании структурных карт.

Рассмотрим основные принципы, позволяющие получать каче­ственные системы.

1) Принцип факторизации. Под факторизацией понимается вы­деление подзадачи, реализуемой некоторым модулем, в новый са­мостоятельный модуль. Это может быть сделано с целью:

   •  уменьшения размеров модуля;

• обеспечения возможности и преимущества классического про­ектирования сверху вниз, позволяющего строить систему бо­лее легкую для понимания и облегчающего модификацию системы;

• устранения дублирования подзадачи, выполняемой более чем одним модулем;

• отделения собственно вычислений от управления (вызовы и принятия решения);

• обеспечения более широкой пригодности модулей для исполь­зования их в различных частях системы;

  • упрощения реализации.

2) Принцип единства решения. Процесс любого решения состоит из двух частей: распознавания, какое действие выбрать, и исполне­ния этого действия. Поскольку эти две составляющие решения раз­личны, информационные объекты, используемые при распознава­нии и исполнении, также могут существенно различаться и, следо­ва­тельно, могут быть недоступны в одном модуле. Такая ситуация получила название расщепления решения. Сильное расщепление решения (хотя иногда расщепления не удается избежать) обычно является симптомом плохой организации модулей. Исполнительная часть решения должна располагаться как можно ближе к распозна­вательной части, чтобы распознанной информации не пришлось долго «блуждать» для того, чтобы быть обра­ботанной.

3) Обработка ошибок. Сообщения об ошибках целесообразно формировать и визуализировать в модуле, ко­торый ошибку обнару­живает (и, следовательно, «знает», что это за ошибка). Тексты сооб­щений рекомендуется хранить вместе, так как при таком походе:

• легче сохранять согласованность формулировок и форматов сообщений. Представьте себе состояние пользователя, когда он получает различные сообщения для одной и той же ошиб­ки, когда она встречается в разных частях системы;

• появляется возможность хранить тексты сообщений в отдель­ном файле, а не внутри кода модуля;

  • легче избежать дублирования сообщений;

• облегчается модификация сообщений (включая их перевод на другой язык).

4) Принцип отсутствия памяти состояния. Когда вызванный мо­дуль после выполнения своей функции возвра­щает управление выз­вавшему его модулю, он «умирает», оставляя после себя лишь ре­зультат. При повторном вы­зове он делает свою работу так, будто он только что «родился». Модуль «не помнит», что происходило в его пре­дыдущих жизнях. Однако существует тип модуля, который «зна­ет» о своем прошлом благодаря так называемой памяти состояния. Память состояния — это информационный объект внутри модуля, который продолжает суще­ствовать неизменным между двумя вызо­вами модуля. Работа модуля с памятью состояния в общем случае не­предсказуема, это означает, что хотя модуль вызывался с одина­ковыми фактическими параметрами, исполняться он может по-раз­ному, и результаты его работы при разных вызовах могут быть раз­личными. Сопровождение та­кого модуля резко усложняется.

5) Инициализация и завершение. Как правило, модули инициа­лизации и завершения трудны для сопровожде­ния из-за их плохой (временной) связности и сильного сцепления. Общая рекоменда­ция по решению этой про­блемы — инициализацию каждой функ­ции желательно выполнять как можно позже, а действия по завер­шению каждой функции должны производиться как можно раньше. И конечно, необходимо проводить инициализацию и завершение как можно ближе к тому, что инициализируется или завершается.

6) Компромисс между ограниченностью и обобщенностью. Огра­ниченный модуль обладает по крайней мере одной из следующих характеристик:

• выполняет излишне специфическую работу. Например, мо­дуль, вычисляющий среднюю ежемесячную температуру для месяца продолжительностью в 30 дней, является ограничен­ным; на самом деле необходим модуль, который генерировал бы среднюю температуру для месяца любой продолжительно­сти. Продолжи­тельность месяца могла бы передаваться ему как параметр, а не быть жестко установленной внутри;

• имеет дело с ограниченными значениями данных, их типами и структурами (например, модуль, предполагаю­щий, что человек может быть собственником только одного автомобиля);

• включает в себя условия о месте и способе его использова­ния.

Противоположная крайность ограниченному модулю — сверх­обобщенный модуль, обладающий по крайней мере одной из следу­ющих характеристик:

• выполняет слишком завышенный объем работы, результаты которой не используются в большинстве си­туаций. Примером является модуль, формирующий расписание игр чемпионата по футболу как по григо­рианскому, так и по юлианскому ка-лендарю;

21 - Физиология системы пищеварения - лекция, которая пользуется популярностью у тех, кто читал эту лекцию.

• имеет дело со слишком избыточными типами данных, их значениями и структурами. Например, ис­пользование числа типа REAL вместо INTEGER для того, чтобы следить за ко­личеством болтов на складе, было бы чрезмерным обобще­нием;

• принимает в качестве параметров данные, которые никогда не изменятся. Так, модуль, которому переда­ется количество дней в неделе, является определенно сверхобобщенным, а также до смешного нелепым.

7) Минимизация избыточности, то есть устранение дублирования. Если любой факт, условие или реализационное решение явно про­являются в более чем одном модуле, то усилия по сопровождению, состоящие из нахождения всех случаев этого факта и их изменения, увеличиваются. Также возникает риск, что человек, сопровождаю­щий такую систему, забудет изменить один из дублей.

8) Нагрузка по входу и выходу. Под нагрузкой модуля по входу понимается количество непосредственных вы­зывающих его моду­лей. Соответственно, нагрузка модуля по выходу — это количество непосредственно подчи­ненных ему модулей. По уже упоминавшим­ся выше причинам нагрузка по выходу не должна превышать 6—7 мо­дулей. Высокая нагрузка по входу требует от модуля хорошей связ­ности.

В заключение отметим, что при использовании структурного под­хода обеспечивается естественный переход от этапа анализа к этапу проектирования за счет комбинирования транзакционных и транс­формационных алгорит­мов преобразования модели функциональ­ных требований (а именно иерархии диаграмм потоков данных) в структурные карты.

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5137
Авторов
на СтудИзбе
440
Средний доход
с одного платного файла
Обучение Подробнее