Продолжая использовать наш сайт, вы даете согласие на обработку файлов cookie, которые обеспечивают правильную работу сайта. Благодаря им мы улучшаем сайт!
Принять и закрыть

Читать, слущать книги онлайн бесплатно!

Электронная Литература.

Бесплатная онлайн библиотека.

Читать: Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С - Стивен Ф. Барретт на бесплатной онлайн библиотеке Э-Лит


Помоги проекту - поделись книгой:

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

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

Несколько следующих параграфов мы посвятим изложению основных идей метода структурного проектирования. Для создания этого раздела мы использовали материалы, изложенные в [1, 7], а также опыт собственных разработок. Метод структурного проектирования не гарантирует обязательного успешного завершения проекта. Однако этот метод значительно увеличивает вероятность создания за ограниченное время качественной системы, полностью совместимой с управляемым объектом.

2.5.1. Основные положения метода структурного проектирования

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

Первым шагом этой последовательности действия является как можно более полное описание технических требований к будущей системе. В подавляющем большинстве случаев технические требования формулирует не тот, кто потом реализует систему. Поэтому технические требования должны быть как можно более точно доведены до исполнителя. Исполнитель обязан подробно исследовать предложенные ему технические требования, понять их обоснованность и согласованность. Представьте себе трагедию разработчика, который выполнил систему, работающую правильно, но по неправильному техническому заданию! Разработчик потратил время и деньги на проект, но он не нужен заказчику! Кто виноват? Вывод: структурное проектирование использует определение проблемы как путь к определению решения этой проблемы.

Применение. На протяжении всего этого параграфа мы будем иллюстрировать применение выдвинутых концепций на примере разработки системы управления стереоусилителем. Прототип нашего примера контроллер стереоусилителя, был разработан доктором Паррисом Нилом (Parris Neal) из Аэрокосмической Академии в Колорадо. Парис — превосходный инженер, разрабатывает стереоусилители мирового уровня. Любой из его проектов — это произведение искусства. Паррис разработал стереоусилитель, который может принимать звуковые сигналы от шести различных источников. Пользователь должен выбрать сигнал либо с помощью переключателей на передней панели корпуса усилителя (рис. 2.1), либо с дистанционного пульта управления, связанного со стереоусилителем по инфракрасному каналу. Паррис попросил первого автора этой книги разработать микропроцессорный контроллер для этого усилителя, используя 8 разрядный RISC МК компании Atmel. Ему было интересно на практике исследовать возможности МК Atmel в качестве низкостоимостного МК для следующих проектов.


а) Вид спереди


б) Плата с микроконтроллером


в) Вид сзади 

Рис. 2.1. Внешний вид стереоусилителя с дистанционным управлением

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

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

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

• При разработке устройства управления необходимо использовать МК компании Atmel.

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

• Что конкретно должен делать контроллер в ответ на выбор номера канала воспроизведения?

• Кто несет ответственность за интерфейс сопряжения между контроллером и стереоусилителем?

• Каковы электрические характеристики сигналов с передней панели усилителя и с удаленного пульта управления?

• Какие сигналы должен формировать контроллер для управления переключением каналов усилителя?

В ответ на эти вопросы заказчик (доктор Паррис Нил) выдал детальное словесное описание желаемых режимов работы своего устройства на четырех страницах. Он также нарисовал обобщенную блок схему алгоритма процесса управления. На основе этого описания нами совместно в процессе непрерывного обсуждения были созданы структурная схема контроллера и более подробная блок схема алгоритма. Далее мы два месяца переписывались по электронной почте, чтобы уточнить все детали устройства. Заметьте, в течение этих двух месяцев ни одной строки кодов программы не было написано!

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

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

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

Третий шаг структурного проектирования — это создание графического образа работы системы, который способствует более полному пониманию внутренних связей между блоками в процессе функционирования устройства. Для создания графического образа системы применяются структурные схемы и диаграммы работы. Применение. Как было ранее упомянуто, мы использовали детальные структурные схемы и блок схемы алгоритмов для обсуждения с заказчиком технических характеристик проектируемой системы. Было бы чрезвычайно трудно превратить 4 страницы текста с описанием требований к устройству во взаимосвязанную картину без использования этих графических образов.

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

Применение. Структура программного обеспечения контроллера управления стереоусилителем показана на рис. 2.2. Блок схема алгоритма — на рис. 2.3. Проанализировав эти рисунки, можно увидеть, что структура программы управления показывает взаимосвязь отдельных модулей программы, в то время, как блок схема алгоритма является графическим описанием порядка функционирования этой программы. В этот момент, Вы можете подумать: «Наконец-то! Теперь можно кодировать программу!». Но нет, существует еще несколько обязательных этапов структурного проектирования, которые должны предшествовать написанию текста программы.


Рис. 2.2. Структура программы управления стереоусилителем


Рис. 2.3. Блок-схема алгоритма управления стереоусилителем

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

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

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


Рис. 2.4. Псевдокод программы управления стереоусилителем

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

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

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

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

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

Применение. В проекте контроллера стереоусилителя мы специально разработали аппаратный симулятор, который использовался на этапе отладки программного обеспечения. Этот симулятор состоял из некоторого количества переключателей для имитации органов управления на передней панели стереоусилителя, и светодиодов, которые отображали состояние сгенерированных контроллером сигналов управления. Функциональная схема симулятора приведена на рис. 2.5. С помощью этого симулятора мы провели отладку, а затем поэтапно проверили функционирование разработанной программы. Доктор Парис Нил настоятельно попросил нас проверить программное обеспечение в автоматическом режиме, т.е. без применения программных средств отладки, по каждому из возможных сценариев работы. И только затем мы разместили контроллер в корпусе стереоусилителя и приступили к комплексным испытаниям законченного изделия.


Рис. 2.5. Функциональная схема имитатора для тестирования программы стереоусилителя

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

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

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

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

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

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

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

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

Итак, мы закончили свое первое знакомство с методом структурного проектирования. В следующем разделе мы остановимся на вопросах документирования процесса разработки.

2.5.2. Документирование программ

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

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

Комментарии помогают читателю определить, что программист хотел сделать в любой точке программы. В нашем контроллере стереоусилителя мы имели 4 страницы комментариев, предшествующих программе, которые со всей полнотой описывали работу системы. Мы также написали дополнительные комментарии по алгоритму работы программы, а также описание каждой отдельной функции. Более того, мы комментировали каждую строку исходного текста программы. Это может показаться избыточным. Но чем больше времени затрачено на составление комментариев, тем меньше времени понадобится для поддержания этого кода.

Самодокументирующий код означает, что имена переменных констант и функций выбираются такими, чтобы было интуитивно понятно ее назначение. Например, если функция называется «delay_3ms», то сразу понятно, что функция формирует задержку 3 мс.

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

Применение. Несколько месяцев спустя после завершения разработки, заказчик (доктор Парис Нил) попросил меня внести изменения в алгоритм управления стереоусилителем. Благодаря хорошим комментариям автор быстро восстановил в памяти ход вычислительного процесса и внес изменения в исходный текст программы за 20 мин. Важно, что после этого определенное количество времени было затрачено на внесение дополнительных комментариев. Если бы мы не документировали программу качественно сразу, мы не смогли бы произвести необходимые доработки быстро.

2.5.3. Как язык Си соотносится со структурным проектированием

Язык Си как нельзя лучше сочетается со структурным проектированием. Программа на языке Си состоит из основной программы (main.c), которая описывает всю задачу. Основная программа вызывает программы функции, которые выполняют определенные действия. Программы функции можно рассматривать как реализацию модулей, которые мы обсуждали на этапе структурной декомпозиции проекта. Программы функции могут, в свою очередь, вызывать другие функции, в соответствие с иерархической структурой проекта.

Метод проектирования сверху вниз может быть легко реализован на Си. Основная программа показывает общий ход реализации алгоритма управления. Чем дальше Вы погружаетесь в функции все более низкого уровня, тем более детально Вы знакомитесь с особенностями алгоритма управления.

2.6. Рабочие тетради

С темой составления качественной документации проекта тесно связаны вопросы ведения рабочих тетрадей. В этом параграфе мы рассмотрим, зачем и почему нужны рабочие тетради. Представленный Вам материал в сокращенном виде является изложением статьи наших коллег, которая была написана в 1990 г. [5].

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

2.6.1. Порядок ведения записей

Поскольку во многих организациях рабочая тетрадь является официальным документом, то ее ведение регламентируется жесткими правилами:

1. Листы тетради должны быть хорошо скреплены, так, чтобы страницы не могли быть из нее удалены свободным образом. Если же какие то страницы вырываются, то для этого должны быть веские причины.

2. Все записи должны делаться последовательно несмываемыми чернилами.

3. Страницы тетради должны быть последовательно пронумерованы.

4. Каждая запись должна сопровождаться датой. При этом дата не должна быть двояко трактуемой. Запись «09 мая 2004 г.» лучше, чем «9/5/2004».

5. Если в предшествующие записи вносятся изменения, то эти изменения должны сопровождаться простановкой даты.

6. Нельзя стирать кажущиеся Вам ошибочными сведения. Их необходимо подчеркнуть или выделить маркером.

7. Законченный материал должен быть помечен символами «X» или «Z» для уверенности, что ничего не было добавлено позже.

2.6.2. Содержание записей

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

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

2.7. Блок схемы алгоритмов

Теория. Универсальный язык моделирования (Unified Modeling Language — UML) — это язык для определения, представления, проектирования и документирования программных систем. Основными составляющими языка UML являются элементы, связи, механизмы расширения и диаграммы. Универсальный язык моделирования предоставляет разработчику метод графической иллюстрации и имитационного моделирования системы, которая основана на программном принципе управления. Этот язык позволяет стандартизировать графическое изображение операций в системе с целью моделирования ее алгоритма работы в общем виде, без составления исходного текста управляющей программы. Универсальному языку моделирования посвящены более 100 научных монографий. Мы рассмотрим лишь малую часть сведений об этом языке, которые будут использованы нами для проектирования встраиваемых систем на протяжении всей этой книги. Если Вас будет интересовать получение более широких сведений по этой теме, обратитесь к литературе, рекомендованной в конце главы.

Свою историю универсальный язык моделирования ведет с начала 90х годов. В 1994 году Грэйди Буч (Grady Booch), Джеймс Рэмбо (James Rambaugh) и Ивар Якобсон (Ivar Jacobson) начали объединять несколько методов объектно ориентированного моделирования в фирме Rational Software. Их целью была разработка методов сокращения времени реализации программных продуктов для промышленности. И уже в 1995 году была представлена спецификация метода, названного «Unified Method». Первая версия универсального языка моделирования была принята консорциумом OMG (Object Management Group) в январе 1997 года. Утвержденная же в сентябре того же года версия UML 1.1 была принята на вооружение основными компаниями — производителями программного обеспечения, такими, как Microsoft, IBM, Hewlett Packard.

Визуальные модели универсального языка моделирования широко используются в существующих технологиях управления проектированием систем, сложность, масштабы и функциональность которых постоянно возрастают. В практике эксплуатации программных информационных систем постоянно приходится решать такие задачи как перераспределение вычислений и данных, обеспечение проведения параллельных вычислений, обеспечение безопасности доступа к информационным системам, оптимизация балансировки нагрузки систем, устойчивость к сбоям и многое другое. Основные виды визуальных моделей UML (универсального языка моделирования): диаграммы сценариев, диаграммы взаимодействия объектов, диаграммы классов, диаграммы состояний, диаграммы модулей и компонентов, диаграммы действий [2,3]. Графические средства представления алгоритмов позволяют переводить модели UML в исходный код объектно-ориентированных языков программирования, что значительно ускоряет процесс разработки. Поэтому универсальный язык моделирования прекрасно зарекомендовал себя на множестве успешных программных проектов. Мы не будем касаться объектно ориентированного программирования в нашей книге. Поэтому мы используем лишь малую часть возможностей универсального языка моделирования для иллюстрации последовательности действий в проектируемых нами программ для встраиваемых систем.

Синтаксис языка универсального моделирования — условные графические обозначения различных типов операторов, которые позволяют составить блок схему алгоритма. Блок схема алгоритма — графическое изображение логической структуры алгоритма. Каждое действие алгоритма представляется в виде геометрической фигуры — условного графического обозначения оператора UML.

Основные типы операторов представлены на рис. 2.6. Программа начинается с оператора начального запуска и заканчивается оператором останова. Множество различных действий совершается под управлением программы в процессе ее выполнения. Каждое действие отображается оператором процесса, который производит изменение значения, формы представления или расположения данных. Оператор процесса может иметь любое количество входов, но только один выход. Переход от одного оператора к другому обозначается стрелкой. Если в процессе выполнения очередного действия производится анализ некоторого внешнего сигнала или внутреннего состояния программы с последующим выбором, по какому пути продолжить исполнения программы, то такое действие отображается условным оператором (другое название — оператор решения). Условный оператор имеет один вход и несколько выходов. После выполнения действий условного оператора программа может «избрать» только один путь. Поэтому условия, по которым определяется направление выхода из оператора решения, должны быть взаимоисключающими. Оператор слияния (поглощения), в соответствие со своим названием, позволяет соединить несколько отдельных ветвей алгоритма в одну. В завершение мы включили два оператора, которые характерны для структурного программирования. Это операторы ветвления и объединения, которые предназначены для отображения работы систем с параллельными вычислителями [2,3]. В качестве первого примера использования условных графических обозначений UML мы представили средствами универсального языка моделирования процесс структурного проектирования, блок схема алгоритма которого приведена на рис. 2.7. На рис. 2.8 тот же процесс представлен с большей степенью подробности, что немедленно привело к усложнению блок схемы алгоритма.


Рис. 2.6. Условные графические обозначения операторов универсального языка моделирования UML


Рис. 2.7. Блок схема алгоритма структурного проектирования




Поделиться книгой:

На главную
Назад