1.1. Методы программирования.
В основе того или иного языка программирования лежит некоторая руководящая идея, оказывающая существенное влияние на стиль соответствующих программ.
Структурное программирование
Структурное программирование — методология программирования, базирующаяся на системном подходе к анализу, проектированию и реализации программного обеспечения. Эта методология родилась в начале 70-х годов и оказалась настолько жизнеспособной, что и до сих пор является основной в большом количестве проектов.
Основу этой технологии составляют следующие положения:
Сложная задача разбивается на более мелкие, функционально лучше управляемые задачи. Каждая задача имеет один вход и один выход. управляющий поток программы состоит из совокупности элементарных подзадач с ясным функциональным назначением.
Простота управляющих структур, используемых в задаче. логически задача должна состоять из минимальной, функционально полной совокупности достаточно простых управляющих структур.
Разработка программы должна вестись поэтапно. На каждом этапе должно решаться ограниченное число четко поставленных задач с ясным пониманием их значения и роли в контексте всей задачи. Если такое понимание не достигается, это говорит о том, что данный этап слишком велик, и его нужно разделить на более элементарные шаги. Согласно требованиям структурного программирования, наиболее часто детально проработанные алгоритмы изображаются в виде блок-схемы. При их разработке используются условные обозначения согласно ГОСТу («следование», «ветвление», «цикл») (рис. 1).
Нисходящее проектирование
Метод предполагает последовательное разложение функции обработки данных на простые функциональные элементы («сверху вниз»). В результате строится иерархическая схема, которая отражает состав и взаимоподчиненность отдельных функций.
Она носит название функциональная структура алгоритма (ФСА) приложения, в которой отражаются:
цели предметной области (цель-подцель);
состав приложений (задач обработки), обеспечивающих реализацию поставленных целей;
характер взаимосвязи приложений с их основными характеристиками;
Рассмотрим функциональную структуру приложения (рис. 2).
Подобная структура отражает состав и взаимосвязь функций обработки информации для реализации приложений, не раскрывая логику выполнения каждой отдельной функции. Разложение должно носить строго функциональный характер, т.е. отдельный элемент ФСА описывает законченную содержательную функцию обработки информации, которая предполагает определенный способ реализации на программном уровне. Функции ввода/вывода информации отделяют от функций вычислительной или логической обработки данных. Для всех функций-компонентов осуществляется самостоятельная программная реализация, составные функции типа Ф1, ФМ реализуются как программные модули, управляющие функциями — компонентами, например, в виде программ-меню. По частоте использования функции делятся на однократно выполняемые и повторяющиеся.
Концепция модульного программирования
Так же как и для структурной технологии программирования, концепцию модульного программирования можно сформулировать в виде нескольких понятий и положений:
Функциональная декомпозиция задачи — разбиение большой задачи на ряд более мелких, функционально самостоятельных подзадач — модулей. Модули связаны между собой только по входным и выходным данным.
Модуль — основа концепции модульного программирования. Каждый модуль представляет собой «черный ящик» с одним входом и одним выходом. Модульный подход позволяет безболезненно производить модернизацию программы в процессе ее эксплуатации и облегчает ее сопровождение. Дополнительно модульный подход позволяет разрабатывать части программ одного проекта на разных языках программирования, после чего с помощью компоновочных средств объединять их в единый загрузочный модуль.
Реализуемые решения должны быть простыми и ясными. Если назначение модуля непонятно, то это говорит о том, что декомпозиция начальной или промежуточной задачи была проведена недостаточно качественно. В этом случае необходимо еще раз проанализировать задачу и, возможно, провести дополнительное разбиение на подзадачи. При наличии сложных мест в проекте их нужно подробнее документировать с помощью продуманной системы комментариев. Этот процесс нужно продолжать до тех пор, пока действительно не удастся добиться ясного понимания назначения всех модулей задачи и их оптимального сочетания.
Назначение всех переменных модуля должно быть описано с помощью комментариев по мере их определения.
Объектно-ориентированное программирование (ООП)
Идея ООП заключается в стремлении связать данные с обрабатывающими эти данные процедурами в единое целое — объект. ООП основано на трех важнейших принципах, придающих объектам новые свойства.
Этими принципами являются инкапсуляция, наследование и полиморфизм.
Инкапсуляция — объединение в единое целое данных и алгоритмов обработки этих данных. В рамках ООП данные называются полями объекта, а алгоритмы — объектными методами.
Наследование — свойство объектов порождать своих «потомков». Объект — «потомок» автоматически наследует от «родителей» все поля и методы, может дополнять объекты новыми полями и заменять (перекрывать) методы «родителя» или дополнять их.
Полиморфизм — свойство родственных объектов (т.е. объектов, имеющих одного общего «родителя») решать схожие по смыслу проблемы разными способами.
Представление о CASE — комплексах связано в нашем сознании с чем-то, не имеющим отношения к обычному программированию. Мощный толчок CASE-средства получили в пору внедрения объектно-ориентированной технологии разработки ПО, когда старого, проверенного временем метода проектирования «сверху вниз» стало явно недостаточно. Сегодня лидирующей в мире CASE-системой считается Rational Rose корпорации Rational Software. Система Rational Rose нацелена на создание модулей с использованием языка Unified Modeling Language (UML). Кстати, UML стал стандартным языком объектно-ориентированной разработки не без подачи Rational Software.
В компании Rational работают три создателя и евангелиста объектно-ориентированной разработки и языка UML. Это Гради Буч, Айвар Джекобсон и Джим Рамбаух. Последняя версия CASE-системы компании Rational Software Rational Rose 98 успешно применяется для создания коммерческого ПО и поддерживает популярные языки программирования Java, Си++, Смолток, Ада, Visual Basic, Power Builder и Forte. Разумеется, поддержка того или иного языка программирования зависит от того, о какой редакции пакета Rational Rose 98 идет речь.
Нельзя не отметить, что система Rose — признанный лидер среди средств визуального моделирования, и, используя ее, можно интерактивно разрабатывать архитектуру создаваемого приложения, генерировать его исходные тексты и параллельно работать над документированием разрабатываемой системы.
Преимущества от применения Rational Rose 98 значительны:
Сокращение цикла разработки приложения.
Увеличение продуктивности работы программистов.
Улучшение потребительских качеств создаваемых программ за счет ориентации на пользователей и бизнес.
Способность вести большие проекты и группы проектов.
Возможность повторного использования уже созданного ПО за счет упора на разбор их архитектуры и компонентов. Язык UML служит универсальным «мостиком» между разработчиками из разных отделов.
Тема 1. Технология программирования (основные понятия и подходы)
Данная дисциплина является одной из важнейших составляющих частей учебного процесса, играющей важную роль в подготовке высококвалифицированных специалистов по информационным системам. Она является инженерной дисциплиной, входящей в обязательный набор знаний и умений всякого инженера, причастного к созданию и эксплуатации программного обеспечения компьютеров и относится к блоку специальных дисциплин. Технология программирования имеет четко выделенный объект изучения – процессы разработки и сопровождения программного обеспечения. Цель дисциплины — формирование у студентов представления о программировании как о процессе формализации требований заказчика (пользователя) в виде внешнего проекта, создания необходимых структур данных, кодирования программ, их тестирования и отладке, а также формализованного документирования результатов проектирования. Основными задачами данной дисциплины являются: изучение основных принципов постановки и решения задач на ЭВМ; формирование у студентов способности формализации конкретной экономической ситуации, умения выбрать адекватные методы решения; использование усвоенных технологий при компьютерном моделировании экономических ситуаций, разработке различных сценарных подходов при выборе экономически обоснованных решений; получение знаний о способах записи и программировании рекурсивных алгоритмов; изучение основных видов и способов реализации списков; знакомство с возможность реализации программ на языке высокого уровня; получение представления об основных структурах программирования: итерации, ветвлении, повторения; практическое изучение базовых технологий разработки программных средств; приобретение навыков критического анализа и сравнения различных технологий, моделей, методов и парадигм программирования; приобретение навыков коллективного обсуждения сложных методологических вопросов. В результате изучения дисциплины специалист должен: иметь целостное представление об информационных системах и технологиях, способах и средствах обмена информацией; знать: теоретические основы и современные информационные технологии анализа, проектирования и разработки программного обеспечения; о проблемах и направлениях развития технологии программирования; об основных методах и средствах автоматизации проектирования и основных характеристиках современных CASE-средств и других программных средств коллективной разработки программного обеспечения; знать о стандартах, поддерживающих создание мобильных прикладных программ в информационных системах. уметь: использовать современные принципы моделирования процессов и структур данных для построения моделей в предметной области; проектировать и разрабатывать различные виды программного обеспечения на основе стандартных подходов (процедурного, объектно-ориентированного, компонентного); приобрести навыки: применения технологических подходов для анализа, проектирования, разработки и применения программных и программно-аппаратных систем; владеть, иметь опыт: выбора, проектирования, реализации, оценки качества и анализа эффективности программного обеспечения для решения задач в различных предметных областях;