Практикум по применению IDEF0 для функционального описания программного обеспечения
Практикум по применению IDEF0 для функционального описания программного обеспечения Часть 3.
Пример создания IDEF0-диаграммы - описания функции ПО. В качестве примера рассмотрим программу (ПО), состоящую из одной формы. На форме расположено 5 элементов интерфейса: две надписи (Label), один список (Мемо), одна строка редактирования (EditBox) и одна кнопка (Button). Надписи являются статическими элементами интерфейса и не участвуют в управлении программой ("существуют для красоты"). Для упрощения описания принципов функционирования каждому управляющему элементу интерфейса (компоненте) дается имя. Пусть список будет иметь имя memData, строка редактирования - edtResult, кнопка btnStart. Имена элементов интерфейса выбирались в соответствии с их назначением. В начале имени содержится стандартное сокращение типа компоненты. В дальнейшем для обозначения того или инного элемента интерфейса будем использовать только эти имена. Внешний вид формы изображен на рис.4.
Программа позволяет по нажатию на btnStart отсортировать числа, находящиеся в memData, вычислить сумму наименьшего и наибольшего элементов из memData и занести результат суммы в edtResult. Пример программы выбран так, чтобы продемонстрировать возможность создания описания на основе IDEF0 для визуальных программ (для Windows, OS/2). Пример содержит всего одну функцию, вызываемую обработчиком событий (обработчиком команд операционной системы) btnStart при нажатии на нее.
Начнем проектирование IDEF0-диаграммы с создания ДК. Исходные данные (не сортированный список чисел) извлекаются из memData. Выходные данные - отсортированный список чисел и сумма наименьшего и наибольшего элементов заносятся соответственно в memData и edtResult. Управление - команда запуска функции - факт нажатия на btnStart. По ходу выполнения функции не требуются управляющие воздействия, в том числе и от пользователя. Механизм - сортировка методом пузырька и при помощи программы (ПО) "Demo", т.к. при помощи их (на их основании) осуществляется сортировка и вычисление суммы. Внешний вид ДК изображен на рис.5.
ДК может быть декомпозирована на две более простых функции (действия): отсортировать список чисел и вычислить сумму наименьшего и наибольшего чисел. Обратите внимание на название блока: вместо существительных сортировка и вычисление, там стоят ключевые ГЛАГОЛЫ отсортировать и вычислить.
Определим приоритет выполнения действий. Наиболее целесообразно в начале осуществить сортировку, с целью упрощения извлечения минимального и максимального значений чисел при суммировании. Если сортировка была "по минимальному", то из первой позиции можно извлечь минимальное число, а из последней - максимальное. Не используя эту возможность, вычисление суммы можно осуществлять раньше, чем сортировку. Это целиком зависит от алгоритма разработчика программы (ПО) "Demo". Предложенный вариант декомпозиции ДК изображен на рис.6.
Нажатие на кнопку btnStart является командой запуска как блока А1-"сортировать...", так и блока А2-"вычислить сумму...". На диаграмме к первому блоку подходит обычная стрелка, а ко второму блоку - пунктирная. На практике пунктирные стрелки не используются. Я стремился показать, что эта стрелка может существовать, а может нет. Это объясняется тем, что для запуска блока А1 однозначно требуется команда нажатия на кнопку btnStart. Блок А2 может быть запущен только после выполнения действия заключенного в блоке А1. При выполнении программ происходит автоматический запуск последовательных частей программы, т.е. при выполнении первой части программы запускается следующая и т.д.
Входными данными блока А1 является список чисел из memData. Допустимо указать только источник информации, если очевидно, что именно поступает из этого источника. В данном случае источником списка чисел является memData и нет необходимости указывать свойство компоненты, из которой извлекаются значения чисел. Остальные поля компоненты (исключая список строк, откуда извлекается список чисел) не используются для выполнения действия заключенного в блоке. Выходными данными блока А1 является отсортированный список чисел, который заносится обратно в memData.
Механизмами выполнения действия, описываемого блоком А1, являются программа "Demo" и алгоритм сортировки.
При завершении выполнения действия, заключенного в блоке А1, осуществляется автоматический запуск действия, заключенного в блоке А2. Командой на запуск может выступать факт прихода данных от блока А1 (стрелка управления блока А2). Входные данные блока А2 являются выходными данными для блока А1. На физическом уровне данные сначала записываются в компоненту memData, а затем извлекаются блоком А2 из memData. Выходными данными блока А2 является сумма наибольшего и наименьшего элементов, которая заносится в edtResult.
В качестве механизма выполнения действия, описываемого блоком А2, является сама программа "Demo".
Блок А2 может быть декомпозирован на три более простых действия (блока): извлечь минимальное число из списка, извлечь максимальное число из списка и вычислить сумму наибольшего и наименьшего элементов. Определим приоритет выполнения действий. Два первых действия по извлечению наименьшего и наибольшего элементов имеют одинаковый приоритет. Эти действия выполняют подготовительную операцию для суммирования и выполняются раньше суммирования. Вариант, демонстрирующий декомпозицию блока А2, изображен на рис.7.
Обратите внимание: блоки А21 и А22, имеющие одинаковый приоритет, расположены вертикально один над одним. Введение блоков А21 и А22 позволяет описать любую реализацию блока А2. При наличии этих блоков возможно поменять последовательность выполнения блоков (А1 и А2). При этом диаграмма сохранит правильность. Поменяются только коды блоков.
Входными данными для блоков А21 и А22 является список чисел из memData. Соответственно выходными данными являются значения наименьшего и наибольшего элемента, которые являются входными данными для блока А23. Выходными данными блока А23 является сумма наибольшего и наименьшего элементов, которая заносится в edtResult. Командой на запуск (управление) для любого блока (А21, А22, А23) является факт прихода данных от предыдущего блока. В качестве механизма всех блоков (А21, А22, А23) выступает программа "Demo".
Обратите внимание, что названия блоков А2 и А23 не совпадают, и они не должны совпадать. Сергей Соколов (Минск, БГУИР)
E-Mail: sokol@belcaf.minsk.by (c) компьютерная газета
Пример создания IDEF0-диаграммы - описания функции ПО. В качестве примера рассмотрим программу (ПО), состоящую из одной формы. На форме расположено 5 элементов интерфейса: две надписи (Label), один список (Мемо), одна строка редактирования (EditBox) и одна кнопка (Button). Надписи являются статическими элементами интерфейса и не участвуют в управлении программой ("существуют для красоты"). Для упрощения описания принципов функционирования каждому управляющему элементу интерфейса (компоненте) дается имя. Пусть список будет иметь имя memData, строка редактирования - edtResult, кнопка btnStart. Имена элементов интерфейса выбирались в соответствии с их назначением. В начале имени содержится стандартное сокращение типа компоненты. В дальнейшем для обозначения того или инного элемента интерфейса будем использовать только эти имена. Внешний вид формы изображен на рис.4.
Программа позволяет по нажатию на btnStart отсортировать числа, находящиеся в memData, вычислить сумму наименьшего и наибольшего элементов из memData и занести результат суммы в edtResult. Пример программы выбран так, чтобы продемонстрировать возможность создания описания на основе IDEF0 для визуальных программ (для Windows, OS/2). Пример содержит всего одну функцию, вызываемую обработчиком событий (обработчиком команд операционной системы) btnStart при нажатии на нее.
Начнем проектирование IDEF0-диаграммы с создания ДК. Исходные данные (не сортированный список чисел) извлекаются из memData. Выходные данные - отсортированный список чисел и сумма наименьшего и наибольшего элементов заносятся соответственно в memData и edtResult. Управление - команда запуска функции - факт нажатия на btnStart. По ходу выполнения функции не требуются управляющие воздействия, в том числе и от пользователя. Механизм - сортировка методом пузырька и при помощи программы (ПО) "Demo", т.к. при помощи их (на их основании) осуществляется сортировка и вычисление суммы. Внешний вид ДК изображен на рис.5.
ДК может быть декомпозирована на две более простых функции (действия): отсортировать список чисел и вычислить сумму наименьшего и наибольшего чисел. Обратите внимание на название блока: вместо существительных сортировка и вычисление, там стоят ключевые ГЛАГОЛЫ отсортировать и вычислить.
Определим приоритет выполнения действий. Наиболее целесообразно в начале осуществить сортировку, с целью упрощения извлечения минимального и максимального значений чисел при суммировании. Если сортировка была "по минимальному", то из первой позиции можно извлечь минимальное число, а из последней - максимальное. Не используя эту возможность, вычисление суммы можно осуществлять раньше, чем сортировку. Это целиком зависит от алгоритма разработчика программы (ПО) "Demo". Предложенный вариант декомпозиции ДК изображен на рис.6.
Нажатие на кнопку btnStart является командой запуска как блока А1-"сортировать...", так и блока А2-"вычислить сумму...". На диаграмме к первому блоку подходит обычная стрелка, а ко второму блоку - пунктирная. На практике пунктирные стрелки не используются. Я стремился показать, что эта стрелка может существовать, а может нет. Это объясняется тем, что для запуска блока А1 однозначно требуется команда нажатия на кнопку btnStart. Блок А2 может быть запущен только после выполнения действия заключенного в блоке А1. При выполнении программ происходит автоматический запуск последовательных частей программы, т.е. при выполнении первой части программы запускается следующая и т.д.
Входными данными блока А1 является список чисел из memData. Допустимо указать только источник информации, если очевидно, что именно поступает из этого источника. В данном случае источником списка чисел является memData и нет необходимости указывать свойство компоненты, из которой извлекаются значения чисел. Остальные поля компоненты (исключая список строк, откуда извлекается список чисел) не используются для выполнения действия заключенного в блоке. Выходными данными блока А1 является отсортированный список чисел, который заносится обратно в memData.
Механизмами выполнения действия, описываемого блоком А1, являются программа "Demo" и алгоритм сортировки.
При завершении выполнения действия, заключенного в блоке А1, осуществляется автоматический запуск действия, заключенного в блоке А2. Командой на запуск может выступать факт прихода данных от блока А1 (стрелка управления блока А2). Входные данные блока А2 являются выходными данными для блока А1. На физическом уровне данные сначала записываются в компоненту memData, а затем извлекаются блоком А2 из memData. Выходными данными блока А2 является сумма наибольшего и наименьшего элементов, которая заносится в edtResult.
В качестве механизма выполнения действия, описываемого блоком А2, является сама программа "Demo".
Блок А2 может быть декомпозирован на три более простых действия (блока): извлечь минимальное число из списка, извлечь максимальное число из списка и вычислить сумму наибольшего и наименьшего элементов. Определим приоритет выполнения действий. Два первых действия по извлечению наименьшего и наибольшего элементов имеют одинаковый приоритет. Эти действия выполняют подготовительную операцию для суммирования и выполняются раньше суммирования. Вариант, демонстрирующий декомпозицию блока А2, изображен на рис.7.
Обратите внимание: блоки А21 и А22, имеющие одинаковый приоритет, расположены вертикально один над одним. Введение блоков А21 и А22 позволяет описать любую реализацию блока А2. При наличии этих блоков возможно поменять последовательность выполнения блоков (А1 и А2). При этом диаграмма сохранит правильность. Поменяются только коды блоков.
Входными данными для блоков А21 и А22 является список чисел из memData. Соответственно выходными данными являются значения наименьшего и наибольшего элемента, которые являются входными данными для блока А23. Выходными данными блока А23 является сумма наибольшего и наименьшего элементов, которая заносится в edtResult. Командой на запуск (управление) для любого блока (А21, А22, А23) является факт прихода данных от предыдущего блока. В качестве механизма всех блоков (А21, А22, А23) выступает программа "Demo".
Обратите внимание, что названия блоков А2 и А23 не совпадают, и они не должны совпадать. Сергей Соколов (Минск, БГУИР)
E-Mail: sokol@belcaf.minsk.by (c) компьютерная газета
Компьютерная газета. Статья была опубликована в номере 42 за 2000 год в рубрике разное :: мелочи жизни