
- •Общие сведения
- •Средства разработки
- •Структура программы
- •Алфавит
- •Лексемы
- •1.2. Переменные. Типы данных
- •Простые типы данных
- •Структурированные типы данных
- •1.3. Константы
- •1.4. Операции Арифметические
- •Присваивание
- •1.5. Операторы ветвления и цикла
- •1.6. Функции Описание и вызов
- •Неявно заданные параметры функции
- •Рекурсия
- •Механизм вызова функций, подставляемые функции
- •Перегрузка функций. Параметры по умолчанию
- •1.7. Указатели. Массивы. Строки Обзор
- •Приведение типов
- •Типизированные и нетипизированные указатели
- •Операции над указателями
- •Массивы
- •Многомерные массивы
- •Указатели в качестве параметров функций
- •Указатель на функцию
- •Функции работы с указателями и памятью
- •Строки.
- •1.8. Организация ввода-вывода
- •Форматированный ввод-вывод
- •1.9. Директивы препроцессора
- •1.10. Метки. Безусловный переход
- •1.11. Время жизни и область видимости переменных
- •1. 12. Многофайловые проекты
- •1.13. Введение в объектно-ориентированное программирование
- •2.3. Проблемы разработки сложных программных систем
- •2.4. Жизненный цикл программного продукта
- •Модели жц.
- •Экстремальное программирование
- •2.5. Оценка качества процессов создания программного обеспечения
- •2.6. Проектирование надёжного программного средства
- •2.7. Процессы проектирования
- •2.8. Требования, цели
- •2.9. Внешнее проектирование
- •Диаграммы потоков данных (Data Flow Diagrams).
- •Диаграммы переходов состояний (State Transition Diagrams). Функциональные диаграммы.
- •Описание структур данных
- •2.10. Проектирование архитектуры
- •2.11. Проектирование модульной структуры. Модуль
- •Внешнее проектирование модулей
- •Модульная декомпозиция
- •2.12. Кодирование.
- •2.13. Тестирование
- •2.14. Документирование
- •2.15. Проектирование пользовательского интерфейса
- •Реализация многомерных массивов
- •Очередь и стек
- •Ассоциативные массивы
- •3.3. Упорядоченные структуры данных.
- •Сортировка методом пузырька
- •Быстрая сортировка
- •3.4. Деревья
- •Бинарное дерево
- •Обход дерева
- •3.5. Множества, графы Множества
- •3.6. Строки Константные строки
- •Списковое представление строк
- •Представление массива строк
- •3.7. Библиотека stl
- •3.8. Реализация некоторых структур данных Реализация двусвязанного списка.
- •Реализация массива переменного размера:
- •Примеры программ
- •Список литературы
Внешнее проектирование модулей
Внешняя спецификация модуля включает:
– имя модуля;
– назначение (решаемые задачи);
– список параметров;
– вход;
– выход (зависимость от входных, в т.ч. при неверных входных данных);
– внешние действия (печать, чтение файла и т.д.)
Проектирование модуля:
– выбор языка программирования;
– проектирование внешних спецификаций;
– проверка внешних спецификаций (в основном интерфейсов разработчиками соседних модулей);
– выбор алгоритма и структуры данных (желательно на первых этапах использовать стандартные и простые алгоритмы);
– запись начальных и конечных операторов в соответствии с синтаксисом языка;
– объявление данных интерфейса;
– объявление прочих локальных данных;
– усовершенствование кода;
– улучшение читаемости кода;
– проверка кода;
– компиляция.
Модульная декомпозиция
Для описания состава модулей и их взаимодействия используются структурная и/или функциональная схема.
Структурная схема – отображает состав и взаимодействие по управлению. Состоит из условных обозначений модулей с указанием связей (по данным и управлению) между ними.
Функциональная схема (схема данных ГОСТ 19.701-90) – схема взаимодействия компонент программного обеспечения с описанием информационных потоков, состава данных в потоках и указанием используемых файлов и устройств.
Функциональная схема кроме модулей может включать обозначения:
Рис 2.5 - Элементы функциональной схемы
При структурном подходе особенно тщательно требуется прорабатывать спецификации межмодульных интерфейсов.
Метод пошаговой детализации – построение иерархической модульной структуры.
Структурные карты Констайтайна.
Рис 2.6 - Элементы структурных карт Константайна
Рис 2.7 - виды связей в структурных картах Константайна (последовательный вызов, параллельный вызов, циклический вызов, условный вызов, однократный вызов, ???)
2.12. Кодирование.
На этапе кодирования должны выполняться следующие рекомендации.
Обеспечить читаемость текста программы:
– использовать значащие имена переменных;
– не использовать в качестве идентификаторов ключевые слова языка или идентификаторы используемых библиотек;
– избегать промежуточных переменных там, где без них можно обойтись;
– применение круглых скобок там, где порядок операций не очевиден;
– не изменять счётчик цикла в теле цикла;
– не использовать переход по меткам.
Не приносить читаемость в жертву эффективности там, где, возможно, будет требоваться доработка кода.
Использовать особенности языка программирования:
– изучайте и используйте прямые возможности языка программирования, библиотечные и встроенные функции;
– не игнорируйте предупреждения транслятора.
Не улучшать модуль, пока он не будет проверен.
Увеличивать эффективность за счёт правильного выбора алгоритма и структур данных.
Желательно, чтобы модуль компелировался без ошибок с первого раза потому что:
– если причиной синтаксических ошибок является недопонимание синтаксиса языка, возможно, и семантика усвоена не полностью;
– если ошибка вызвана недостаточной аккуратностью, это плохо;
– компилятор может не обнаружить некоторые ошибки (двойное толкование, отключение предупреждений и т.д.);
– при неудачной компиляции программист пытается как можно быстрее привести модуль в рабочее состояние, что может нарушить логику работы модуля.