Автор работы: Пользователь скрыл имя, 10 Октября 2014 в 07:00, дипломная работа
Цель исследования состоит в изучении взаимосвязи структурного и объектно-ориентированного подходов к проектированию программного обеспечения распределенных информационных систем.
Для достижения цели определены следующие задачи исследования:
1. Проведение анализа научно-технической литературы в аспекте структуры и содержания курсов, ориентированных на изучение объектно-ориентированного и структурного программирования.
2. Изучение теоретических основ структурного и объектно-ориентированного подходов, технологии создания программного обеспечения.
Введение
1 Технологии создания программного обеспечения
1.1 Технология структурного программирования
1.2 Технология объектно-ориентированного программирования
1.3 Технология Rational Unified Process (IBM Rational Software)
1.4 Технология Oracle
1.5 Технология Borland
2 Методические основы технологий создания программного обеспечения
2.1 Визуальное моделирование
2.2 Методы структурного анализа и проектирования программного обеспечения
2.3 Методы объектно-ориентированного анализа и проектирования программного обеспечения
2.4 Методы моделирования бизнес-процессов и спецификации требований
2.5 Методы анализа и проектирования программного обеспечения
3 Структурное и объектно-ориентированное программирование в проектировании программного обеспечения распределенных информационных систем
3.1 Проектирование программного обеспечения распределенных информационных систем
3.2 Структурный подход к проектированию информационных систем
3.3 Проектирование информационных систем на основе объектно-ориентированного подхода
3.4 Сопоставление и взаимосвязь структурного и объектно-ориентированного подходов
3.5 Проблемы преподавания структурного и объектно-ориентированного программирования
Заключение
Глоссарий
Список использованных источников
Литература
- когда она выполняет задачи, невыполнимые вручную;
- когда она автоматизирует утомительные и подверженные ошибкам действия;
- когда она облегчает общение между людьми;
Технология не должна действовать против характера культурных ценностей и познавательной способности человека. При этом следует четко понимать: при всех достоинствах быстрой разработки программного обеспечения этот подход не является универсальным и применим только в проектах определенного класса. Для характеристики таких проектов Алистер Коберн ввел два параметра – критичность и масштаб. Критичность определяется последствиями, вызываемыми дефектами в программном обеспечении, ее уровень может иметь одно из четырех значений:
- C – дефекты вызывают потерю удобства;
- D – дефекты вызывают потерю возместимых средств (материальных или финансовых);
- E – дефекты вызывают потерю невозместимых средств;
- L – дефекты создают угрозу человеческой жизни.
Масштаб определяется количеством разработчиков, участвующих в проекте:
- от 1 до 6 человек – малый масштаб;
- от 6 до 20 человек – средний масштаб;
- свыше 20 человек – большой масштаб.
По оценке Коберна, быстрая разработка программного обеспечения применима только в проектах малого и среднего масштаба с низкой критичностью (C или D). Общие принципы оценки технологий в таких проектах заключаются в следующем:
- интерактивное общение лицом к лицу – это самый дешевый и быстрый способ обмена информацией;
- избыточная «тяжесть» технологии стоит дорого;
- более многочисленные команды требуют более «тяжелых» и формальных технологий;
- большая формальность подходит для проектов с большей критичностью;
- возрастание обратной связи и коммуникации сокращает потребность в промежуточных и конечных продуктах;
- дисциплина, умение и понимание противостоят процессу, формальности и документированию;
- потеря эффективности в некритических видах деятельности вполне допустима.
Одним из наиболее известных примеров практической реализации подхода быстрой разработки программного обеспечения является «Экстремальное программирование» (Extreme Programming - EP). Этот метод предназначен для небольших компактных команд, нацеленных на получение как можно более высокого качества и продуктивности, и достигает этого посредством насыщенной, неформальной коммуникации, придания на персональном уровне особого значения умению и навыкам, дисциплине и пониманию, сводя к минимуму все промежуточные рабочие продукты.
1.1 Технология структурного
Структурный подход к программированию представляет собой как методологию, так и технологию создания программ. В свое время его внедрение обеспечило повышение производительности труда программистов при написании и отладке программ; получение программ, которые состоят из модулей и пригодны для сопровождения; создание программ коллективом разработчиков; окончание создания программы в заданный срок.
Структурное программирование - это подход, при котором для передачи управления в программе используются конструкции, допускающие последовательную, условную и итеративную передачи управления. Безусловная передача управления оператором goto запрещается. В результате каждая сложная команда в программе, являющаяся комбинацией последовательных, условных и циклических операторов, имеет только одну точку входа и выхода, что обеспечивает разбиение программы на относительно самостоятельные фрагменты.
Структурное программирование является результатом применения аппликативных методов к императивным программам. Для этого используются процедурно-ориентированные языки, в которых имеется возможность описания программы как совокупности процедур. Процедуры могут вызывать друг друга, и каждая из них может быть вызвана основной программой, которую также можно рассматривать как процедуру.
Структура программы – это искусственно выделенные программистом взаимодействующие части программы. Использование рациональной структуры устраняет проблему сложности разработки, делает программу понятной пользователям, повышает надежность работы программы при сокращении срока ее тестирования и сроков разработки.
Очень часто некоторую последовательность инструкций требуется повторить в разных местах программы. Для того чтобы программисту не приходилось тратить время и усилия на копирование этих инструкций, во многих языках программирования предусматриваются средства для организации подпрограмм. Программист получает возможность присвоить последовательности инструкций произвольное имя и использовать это имя в качестве сокращенной записи в тех местах, где встречается соответствующая последовательность инструкций. Итак, подпрограмма – это некоторая последовательность инструкций, которая может вызываться в нескольких местах программы. Подпрограммы принято называть процедурами и функциями.
Описание подпрограммы состоит из двух частей: заголовки и тела. Заголовок содержит идентификатор подпрограммы и переменные используемые в ней. Тело состоит из одной или нескольких инструкций. Идентификатор подпрограммы используется в качестве сокращенной записи в тех местах программы, где встречается соответствующая последовательность инструкций.
Процедуры и функции, называемые подпрограммами, являются одним из тех немногих фундаментальных инструментов в искусстве программирования, которые оказывают решающее влияние на стиль и качество работы программиста.
Процедура – это не только способ сокращения программного текста, но и, средство разложения программы на логически связанные, замкнутые элементы, определяющие ее структуру. Разложение программы на части существенно для понимания программы, особенно если программа сложная и тяжело обозрима из-за большой длины текста. Разложение на подпрограммы необходимо как для документирования, так и для верификации программы. Поэтому желательно оформлять последовательность инструкций в виде подпрограммы, даже если программа используется однократно и, следовательно, отсутствует мотив, связанный с сокращением текста программы.
Информация о переменных или об условия, которым должны удовлетворять аргументы, задается в заголовке процедуры. О полезности процедуры, в частности, о ее роли при структуризации программы, неоспоримо свидетельствуют еще два понятия в программировании. Вспомогательные или локальные переменные, используемые внутри процедуры, не имеют смысла за ее пределами. В программе существо проще разобраться, если явно указаны области действия таких переменных. Процедура выступает как естественная текстовая единица, с помощью которой ограничивается область существования локальных переменных.
Наиболее общая тактика программирования состоит в разложении процесса на отдельные действия:
- функционального описания на подфункции;
- соответствующие программы на отдельные инструкции.
На каждом таком шаге декомпозиции нужно удостовериться, что решения частных задач приводят к решению общей задачи, выбранная последовательность отдельных действий разумна и позволяет получить инструкции, в каком-либо смысле более близкие к языку, на котором будет реализована программа. Это требование исключает возможность прямолинейного продвижения от первоначальной постановки задачи к конечной программе, которая должна получиться в конечном итоге. Каждый этап декомпозиции сопровождается формулированием частных подпрограмм. В процессе этой работы может обнаружиться, что выбранная декомпозиция неудачна в том смысле хотя бы потому, что подпрограммы неудобно выражать с помощью имеющихся средств. В этом случае один или несколько предыдущих шагов декомпозиции следует пересмотреть заново.
Если видеть в поэтапной декомпозиции и одновременном развитии и детализации программы постепенное продвижение в глубь, то такой метод при решении задач можно охарактеризовать как нисходящий (сверху вниз). И наоборот, возможен такой подход к решению задачи, когда программист сначала изучает имеющиеся в его распоряжении вычислительную машину или язык программирования, затем собирает некоторые последовательности инструкций в элементарные процедуры, типичные для решаемой задачи. Затем элементарные процедуры используются на следующем уровне иерархии процедур. Такой метод перехода от примитивных машинных команд к требуемой реализации программы называется восходящим (снизу вверх).
На практике разработку программы никогда не удается провести строго в одном направлении – сверху вниз или снизу вверх. Однако при конструировании новых алгоритмов нисходящей метод обычно доминирует. С другой стороны, при адаптации программы к несколько измененным требованиям предпочтение зачастую отдается восходящему методу.
Оба метода позволяют разрабатывать программы, которым присуща структура – свойство, отличающее их от аморфных линейных последовательностей инструкций или команд машины. Важно, чтобы используемый язык в полной мере отражал эту структуру. Только тогда окончательный вид полученной программы позволит применить систематические методы верификации.
Если программа разбивается на подпрограммы, то для представления результатов и аргументов часто приходится вводить новые переменные и таким образом устанавливать связь между подпрограммами. Такие переменные следует вводить и описывать на том этапе разработки, на котором они потребовались. Более того, детализация описания процесса может сопровождаться детализацией описания структуры используемых переменных. Следовательно, в языке должны быть средства для отражения иерархической структуры данных. Что показывает, какую важную роль играет при пошаговой разработке программы понятие процедуры, локальности процедур и данных, структурирования данных.
Проектирование начинается с фиксации внешних спецификаций. На основании внешних спецификаций составляется описание внутреннего алгоритма программы, обязательно со структурой внутренних данных. Далее крупные функции разбиваются на подфункции до достижения подфункции размера модуля – подпрограммы языка программирования, к которым предъявляются особые дополнительные требования.
Фундаментальным понятием и функциональным элементом технологии структурного программирования является – модуль.
Модуль – это подпрограмма, но оформленная в соответствии со следующими правилами:
1. модуль должен иметь один
вход и один выход и выполнять
строго однозначную функцию, которая
описывается простым
2. модуль должен обеспечивать компиляцию, независимую от других модулей, с «забыванием» всех внутренних значений модулей;
3. модуль может вызывать другие модули по их именам;
4. хороший модуль не использует
глобальные переменные для
5. модуль кодируется только
В понятие структуры программы включаются состав и описание связей всех модулей, которые реализуют самостоятельные функции программы и описание носителей данных, участвующих в обмене, как между отдельными подпрограммами, так и вводимые и выводимые с внешних устройств.
В случае сложной, большой программы необходимо овладеть специальными приемами получения рациональной структуры программы. Рациональная структура программы обеспечивает почти двукратное сокращение объема программирования и многократное сокращение объемов и сроков тестирования, следовательно, принципиально снижает затраты на разработку.
Подчиненность модулей удобно изображать схемой иерархии. Схема иерархии отражает только подчиненность подпрограмм, но не порядок их вызова или функционирование программы.
До составления схемы иерархии целесообразно составить внешние спецификации программы и составить функциональные описания программы вместе с описанием переменных – носителей данных. Особое внимание надо уделить иерархии типов структурированных данных и их комментированию. Декомпозиция программы на подпрограммы производится по принципу от общего к частному, более детальному. Процесс составления функционального описания и составления схемы иерархии является итерационным. Выбор наилучшего варианта является многокритериальным.
Структурный подход рекомендует соблюдать следующие принципы при создании программного продукта:
- модульность программ;
- структурное кодирование
- нисходящее проектирование
- нисходящая реализация
- осуществление планирования на всех стадиях проекта;
- сквозной структурный контроль
программных комплексов в
Модульность программ характеризуется тем, что вся программа состоит из модулей. Некоторые смысловые группы модулей сосредотачиваются в отдельных файлах. Например, в отдельных файлах (Unit) могут быть сосредоточены модули текстового редактора и модули иерархического меню.
Структурное кодирование модулей программ заключается в особом оформлении их текстов. У модуля должен быть легко различимый заголовок с комментарием, поясняющим функциональное назначение модуля. Имена переменных должны быть мнемоническими. Суть переменных и порядок размещения в них информации должны быть пояснены комментариями, код модуля закодирован с использованием типовых алгоритмических структур с использованием отступов.