ВСЕРОССИЙСКИЙ ЗАОЧНЫЙ ФИНАНСОВО-ЭКОНОМИЧЕСКИЙ ИНСТИТУТ
КАФЕДРА АВТОМАТИЗИРОВАННОЙ ОБРАБОТКИ ЭКОНОМИЧЕСКОЙ ИНФОРМАЦИИ
КУРСОВАЯ РАБОТА
По дисциплине «Информатика»
на тему «Модульное и объектно-ориентированное программирование»
Исполнитель:
специальность менеджмент о.
группа 4 поток (вечер)
Руководитель:
Ст.пр. Валуева Т.В.
Калуга – 2007
Оглавление TOC \o "1-3" \h \z \u
HYPERLINK \l "_Toc164741286" Общее введение PAGEREF _Toc164741286 \h 3
HYPERLINK \l "_Toc164741287" Введение PAGEREF _Toc164741287 \h 4
HYPERLINK \l "_Toc164741288" Понятие модуль и модульное программирование PAGEREF _Toc164741288 \h 5
HYPERLINK \l "_Toc164741289" Модульная структура программных продуктов PAGEREF _Toc164741289 \h 6
HYPERLINK \l "_Toc164741290" Объектно-ориентированное программирование PAGEREF _Toc164741290 \h 9
HYPERLINK \l "_Toc164741291" Объектно-ориентированные языки программирования PAGEREF _Toc164741291 \h 12
HYPERLINK \l "_Toc164741292" Этапы разработки программных систем HYPERLINK \l "_Toc164741293" с использованием ООП PAGEREF _Toc164741293 \h 13
HYPERLINK \l "_Toc164741294" Заключение PAGEREF _Toc164741294 \h 15
HYPERLINK \l "_Toc164741295" Практикум PAGEREF _Toc164741295 \h 16
HYPERLINK \l "_Toc164741296" Общая характеристика задачи PAGEREF _Toc164741296 \h 16
HYPERLINK \l "_Toc164741297" Алгоритм решения задачи PAGEREF _Toc164741297 \h 19
HYPERLINK \l "_Toc164741308" Список использованной литературы PAGEREF _Toc164741308 \h 24
Общее введение
Данная курсовая работа написана по теме «Модульное и объектно-ориентированное программирование». Вот некоторый список вопросов, которые раскрывают тему:
понятия: модуль и модульное программирование;
основные концепции модульного программирования;
модульная структура программных продуктов;
понятие: компиляция, его использование в модульном программировании;
объектно-ориентированное программирование как технология создания сложного программного обеспечения;
достоинство и недостаток объектно-ориентированного программирования;
принципы, положенные в основу объектно-ориентированного программирования;
объектно-ориентированные языки программирования;
этапы разработки программных систем с использованием объектно-ориентированного программирования.
В практической части курсовой работы представлено решение задачи находящейся в методических указаниях под номером 8.
Для выполнения и оформления курсовой работы я использовала компьютер: AMD Athlon ™ XP 1800+/1.53ГГц, 256МБ ОЗУ, с системой: Microsoft Windows XP Professional версия 2002.
Введение
Объектом изучения теоретической части моей работы является программирование как процесс подготовки задач для их решения с помощью компьютера.
Предметом же изучения является непосредственно модульное – как метод разработки программ, предполагающий разбиение программы на независимые модули и объектно-ориентированное программирование [6, NOTEREF _Ref164743165 \h 1С.18 –19] – как методика разработки программ, в основе которой лежит понятие объекта как некоторой структуры, описывающей объект реального мира, его поведение.
Понятие модуль и модульное программирование
Модульное программирование осуществляется путём разбиения задачи на некоторое число различных модулей. Под модульным программированием понимают [6, NOTEREF _Ref164743291 \h 2С. 16] умение широко (всесторонне) использовать стандартные модули путём настройки их параметров; автоматизацию сборки готовых модулей из библиотек, банков модулей.
Модуль, в свою очередь, отдельная функционально-законченная программная единица. Как правило, каждый модуль содержит паспорт, в котором указаны все основные его характеристики: язык программирования, объём, входные и выходные переменные, их формат, ограничения на них, точки входа, параметры настройки и так далее. Объём модуля обычно не превышает 1000 команд ЭВМ или операторов языка программирования. В противном случае модуль становится громоздким и трудным к восприятию и использованию.
Модуль можно сравнить с устройством, имеющим средства сопряжения (подключения), через которые происходит как управление самим устройством, так и обмен данными. Это своего рода чёрный ящик, для которого импорт и экспорт определяют его интерфейс и зависимость от других устройств.
Стандартизация интерфейса между отдельными программными единицами – вот основная черта модульного программирования.
Интерфейс в модульном программировании рассматривается как жёсткая спецификация, контракт, который должен неукоснительно соблюдаться клиентами модуля (импортирующими его) и реализацией данного модуля (или несколькими альтернативными реализациями).
Основные концепции модульного программирования:
- каждый модуль реализует единственную независимую функцию;
- каждый модуль имеет единственную точку входа и выхода – на входе программный модуль получает определённый набор исходных данных, выполняет содержательную обработку и возвращает один набор результатных данных, то есть реализуется стандартный принцип IPO (Input-Process-Output – вход-процесс-выход);
- размер модуля по возможности должен быть минимизирован;
- каждый модуль может быть разработан и закодирован различными членами бригады программистов и может быть отдельно протестирован;
- вся система построена из модулей;
- модуль не должен давать побочных эффектов;
- каждый модуль не зависит от того, как реализованы другие модули.
В результате такого подхода сложная система разделяется на несколько частей, одновременно создаваемых различными программистами. Каждый модуль реализует единственную функцию. Размер модуля не велик, поэтому тестирование управляемо и может быть проведено тщательным образом. После кодирования и тестирования всех модулей происходит их интеграция, и тестируется вся система. При сопровождении тестируется и отлаживается только тот модуль, который плохо работает. Очевидны преимущества в облегчении написания и тестирования программ, уменьшается стоимость их сопровождения.
Модульная структура программных продуктов
Принципы модульного программирования программных продуктов строятся на такой системе: сначала определяются состав и подчинённость функций, а затем – набор программных модулей, реализующих эти функции. Однотипные функции реализуются одними и теми же модулями. Функция верхнего уровня обеспечивается главным модулем; он управляет выполнением нижестоящих функций, которым соответствуют подчинённые модули.
При определении набора модулей, реализующих функции конкретного алгоритма, необходимо учитывать следующее:
- каждый модуль вызывается на выполнение вышестоящим модулем и, закончив работу, возвращает управление вызвавшему его модулю;
- принятие основных решений в алгоритме выносится на максимально «высокий» по иерархии уровень;
- для использования одной и той же функции в разных местах алгоритма создаётся один модуль, который вызывается на выполнение по мере необходимости.
В результате дальнейшей детализации алгоритма создаётся функционально-модульная схема (ФМС) алгоритма приложения, которая является основой для программирования. Пример такой схемы можно увидеть в приложении, где видно, что функция Ф1 реализуется в виде последовательности выполнения программных модулей. Функция Фm реализуется с помощью иерархии связанных модулей. Модуль n управляет выбором на выполнение подчинённых модулей. Функция Фх реализуется одним программным модулем.
Чтобы более подробно разобраться в природе модульного программирования, обратимся к истории. До начала 1970-х годов программы создавались в виде монолитных блоков, либо делались из независимых частей, сопряжение которых было достаточно примитивным – на уровне вызовов подпрограмм (процедур). Отсюда появились два понятия – цельная компиляция и независимая компиляция. В свою очередь, под компиляцией понимают трансляцию программы или отдельного программного модуля, составленных на языке программирования высокого уровня (исходная программа, исходный модуль) в программу или модуль на машинном языке или языке, близком к машинному (объектная программа, объектный модуль).
Первый случай, то есть цельная компиляция – простой: транслируется вся программа целиком. Во втором случае, при независимой компиляции каждый блок (файл) транслируется отдельно, фактически без наличия информации о точках сопряжения. Все проблемы увязки возлагались на компоновщик. Именно он состыковывал оттранслированные части, соединял программу с библиотеками, которые та использовала.
В процессе компиляции программа преобразуется в промежуточную форму, к которой впоследствии необходимо присоединить библиотечные средства, содержащие стандартные подпрограммы и процедуры, а если нужно, то можно добавить любые другие модули, написанные самим пользователем, и скомпилированные в объектные модули, возможно, с иных языков высокого уровня.
Для модульного программирования характерно использование раздельной компиляции, когда компиляция интерфейса и реализации модуля делается отдельно от реализации других модулей, но с обязательным участием интерфейсов всех прямо и косвенно импортируемых модулей. Если нет возможности отделить интерфейс в текстовом или бинарном виде от реализации модуля, то такую систему программирования нельзя считать системой раздельной компиляции, ибо нарушается главный принцип – компиляции модуля при отсутствии в пределах досягаемости компилятора реализаций импортируемых им модулей.
Все ошибки несостыковки обнаруживаются на этапе трансляции (причём даже до реализации других модулей, ведь нужны только контракты-интерфейсы). Более примитивная и распространённая схема независимой компиляции не использует эту информацию и вынуждена заниматься выявлением расхождений в сопряжении файлов лишь на этапе компоновки. Высокая гибкость в модульном программировании достигается за счёт совмещения фазы компоновки и загрузки. А в некоторых случаях совмещается на этом этапе (перед компоновкой) и фаза генерирования машинного кода для конкретной целевой архитектуры. То есть безо всякой виртуальной машины достигается эффективное выполнение модулей на любой операционной платформе.
Объектно-ориентированное программирование
Стремление уменьшить количество связей между отдельными частями программы привело к появлению объектно-ориентированного программирования (ООП). Оно является естественной эволюцией более ранних нововведений в разработке языков программирования.
В теории программирования ООП определяется как технология создания сложного программного обеспечения, которая основана на представлении программы в виде совокупности программных объектов, каждый из которых является экземпляром определённого типа (класса), а классы образуют иерархию с наследованием свойств.
Взаимодействие программных объектов в такой системе осуществляется путём передачи сообщений.
Основное достоинство ООП – сокращение количества межмодульных вызовов и уменьшение объёмов информации, передаваемой между модулями, по сравнению с модульным программированием. Это достигается за счёт более полной локализации данных и интегрирования их с подпрограммами обработки, что позволяет вести практически независимую разработку отдельных частей (объектов) программы.
Основной недостаток ООП – некоторое снижение быстродействия за счёт более сложной организации программной системы.
В основу ООП положены принципы абстрагирования, ограничения доступа, модульности, иерархичности, типизации, параллелизма, устойчивости.
Рассмотрим, что представляет собой каждый принцип.
Абстрагирование – процесс выделения абстракций в предметной области задачи. Абстракция – совокупность существенных характеристик некоторого объекта, которые отличают его от всех других видов объектов и, таким образом, чётко определяют особенности данного объекта с точки зрения дальнейшего рассмотрения и анализа решаемой задачи. В соответствии с определением применяемая абстракция реального предмета существенно зависит от решаемой задачи: в одном случае нас будет интересовать форма предмета, в другом – вес, в третьем – материалы, из которых он сделан, в четвёртом – закон движения предмета и т.д. ООП предполагает объединение всех свойств абстракции (как касающихся состояния анализируемого объекта, так и определяющих его поведение) в единую программную единицу – некий абстрактный тип (класс).
Ограничение доступа – сокрытие отдельных элементов реализации абстракции, не затрагивающих существенных характеристик её как целого.
Необходимость ограничения доступа предполагает разграничение двух частей в описании абстракции:
- интерфейс – совокупность доступных извне элементов реализации абстракции (характеристики состояния и поведения);
- реализация – совокупность недоступных извне элементов реализации абстракции (внутренняя организация абстракции и механизмы реализации её поведения).
Ограничение доступа в ООП позволяет разработчику, во-первых, выполнять конструирование системы поэтапно, не отвлекаясь на особенности построения используемых абстракций, во-вторых – легко модифицировать реализацию отдельных объектов, что в правильно организованной системе не потребует изменения других объектов.
Сочетание объединения всех свойств объекта, определяющих его состояние и поведение, в единую абстракцию и ограничение доступа к реализации этих свойств получило название инкапсуляции.
Модульность – принцип разработки программной системы, предполагающий реализацию её в виде отдельных частей (модулей). При выполнении декомпозиции системы на модули желательно объединять логически связанные части, по возможности обеспечивая сокращение количества внешних связей между модулями. Принцип унаследован от модульного программирования, следование ему упрощает проектирование и отладку программы.
Иерархия – это ранжированная или упорядоченная система абстракций. Принцип иерархичности предполагает использование иерархий при разработке программных систем.
Типизация – ограничение, накладываемое на свойства объектов и препятствующее взаимозаменяемости абстракций различных типов (или сильно сужающее возможность такой замены). В языках с жёсткой типизацией для каждого программного объекта (переменной, подпрограммы, параметра и т.д.) объявляется тип, который определяет множество операций над соответствующим программным объектом.
Параллелизм – свойство нескольких абстракций одновременно находиться в активном состоянии, т.е. выполнять некоторые операции.
Существует целый ряд задач, решение которых требует наличия одновременного выполнения некоторых последовательностей действий. К таким задачам, например, относятся задачи автоматического управления несколькими процессами.
Реальный параллелизм достигается только при реализации задач такого типа на многопроцессорных системах, когда имеется возможность выполнения каждого процесса отдельным процессором. Системы с одним процессором имитируют параллелизм за счёт разделения времени процессора между различными процессами. В зависимости от типа используемой операционной системы (одно- или мультипрограммной) разделение времени может выполняться либо разрабатываемой системой (как MS DOS), либо непосредственно операционной системой (как в системах Windows).
Устойчивость – свойство абстракции существовать во времени независимо от процесса, породившего данный программный объект, и/или в пространстве, перемещаясь из адресного пространства, в котором он был создан.
Объектно-ориентированные языки программирования
Язык считается объектно-ориентированным, если в нём реализованы первые четыре из рассмотренных семи принципов.
В теории программирования также принято выделять объектные языки программирования. Они отличаются тем, что не поддерживают наследования свойств в иерархии абстракций, например, Ада – объектный язык, а С++ и объектные версии Паскаля – объектно-ориентированные языки.
Принципиально ООП возможно на многих языках программирования. Однако для реализации этого подхода желательно использовать языки, включающие специальные средства создания объектно-ориентированных программ, например, Borland Pascal (начиная с версии 5.5), С++, Delphi Pascal, Java и т.д.
Самая простая объектная модель использована при разработке Borland Pascal 7.0. она специально создавалась для облегчения перехода программистов на использование технологии ООП. Особое место занимают объектные модели Delphi Pascal и С++Builder. Они обобщают опыт ООП для MS DOS и включают некоторые новые средства, обеспечивающие эффективное создание сложных систем. На базе этих моделей созданы визуальные среды для разработки Windows. Сложность программирования «под Windows» удалось существенно снизить за счёт создания специальных библиотек объектов, «спрятавших» многие элементы техники программирования.
Этапы разработки программных систем
с использованием ООП
Процесс разработки программного обеспечения с использованием ООП включает четыре этапа: анализ и уточнение спецификаций, проектирование, реализация, модификация. Рассмотрим их подробнее.
Анализ и уточнение спецификаций. Цель этапа – максимально полное описание задачи. На этом этапе выполняют анализ предметной области задачи, определяют важнейшие особенности поведения объектов (описание абстракций). По результатам анализа разрабатывают диаграмму объектов программного продукта, на которой показывают основные абстракции (объекты) предметной области и сообщения, передаваемые между ними. Все выявленные абстракции и отношения между ними описывают.
Проектирование. Различают:
- логическое проектирование, при котором принимаемые решения практически не зависят от условий эксплуатации (операционной системы и используемого оборудования), заключается в разработке структуры классов.
- физическое проектирование, включает объединение реализаций классов в модули, выбор схемы их подключения, определение способов взаимодействия с оборудованием, с операционной системой и/или другим программным обеспечением, обеспечение синхронизации процессов для систем параллельной обработки и т.д.
Реализация системы. Это процесс поэтапной реализации и подключения классов к проекту.
При этом начинают с создания основной программы или проекта будущего программного продукта. Затем реализуют и подключают классы так, чтобы создать грубый, но, по возможности, работающий прототип будущей системы. Например, таким прототипом может служить система, в которой реализован только интерфейс с пользователем (передача сообщений в отсутствующую пока часть системы не выполняется). Интерфейс тестируют и отлаживают. Полученный в результате работоспособный прототип продукта может быть, например, показан заказчику для уточнения требований.
На следующих этапах к системе подключают классы, например, связанные с реализацией некоторого пункта меню. Полученный вариант системы также тестируют и отлаживают. Процесс продолжают до реализации всех возможностей системы.
Использование поэтапной реализации существенно упрощает тестирование и отладку программного продукта.
Модификация. Это процесс добавления новых функциональных возможностей или изменение существующих свойств системы. Как правило, изменения затрагивают реализацию класса, оставляя без изменения его интерфейс, что при использовании ООП обычно обходится без особых неприятностей, так как процесс изменений затрагивает локальную область. Изменение интерфейса – также не очень сложная задача, но её решение может повлечь за собой необходимость согласования процессов взаимодействия объектов, что потребует изменении в других классах программы. Однако сокращение количества параметров в интерфейсной части по сравнению с модульным программированием существенно облегчает и этот процесс. Существенным также является то, что при использовании ООП объект или группа объектов могут разрабатываться отдельно, и, следовательно, их проектирование может находиться на различных этапах. Например, интерфейсные классы уже реализованы, а структура классов предметной области ещё только уточняется. Обычно проектирование начинается, когда какой-либо фрагмент предметной области достаточно полно описан в процессе анализа.
Все указанные выше принципы в той или иной степени реализованы в различных версиях объектно-ориентированных языков.
Заключение
Компьютерные науки вообще и программная инженерия в частности – очень популярные и стремительно развивающиеся области знаний. Человеческое общество XXI века – информационное общество. Занятость населения в информационной сфере беспрерывно растет. Именно поэтому во всех развитых странах мира профессии связанные с компьютерными науками и информационными технологиями считаются престижными и высоко оплачиваются.
В курсовой работе я постаралась раскрыть такие понятия как модульное и объектно-ориентированное программирование. Рассмотрела основные концепции, структуру, а так же достоинства и недостатки этих понятий.
И пришла к выводу, что объектно-ориентированное программирование значительно удобнее в использовании, нежели модульное благодаря уменьшению количества связей между отдельными частями программы.
Практикум
Задача, решение которой представлено ниже, выполнена с использованием табличного процессора Microsoft Excel. Целью решения задачи является ознакомление с возможностями работы табличного процессора со списком данных, приобретение навыков создания списков (базы данных) пользователя и организации межтабличных связей, сводных таблиц и диаграмм.
Общая характеристика задачи
Предприятие ООО «Красный Октябрь» осуществляет деятельность, связанную с выпуском различных видов деталей для промышленного оборудования. Для повышения эффективности функционирования предприятия ежемесячно производится анализ плановых и фактических показателей выпуска продукции.
Данные фактических и плановых показателей выпуска продукции приведены на рис.1 и 2.
Построить таблицы по приведённым ниже данным.
Ведомость учёта выпущенной продукции за январь 2006г.
Ведомость учёта выпущенной продукции за февраль 2006г.
Ведомость учёта выпущенной продукции за март 2006г.
Рис. 1. Фактические данные выпуска продукции по месяцам
Плановые показатели выпуска продукции.
Рис. 2. Плановые показатели выпуска продукции
Выполнить расчет отклонения фактических показателей от плановых в абсолютной и относительной форме, подвести итоги за месяц.
Результаты вычислений представить в виде консолидированной таблицы, содержащей сводные данные о выпущенной продукции.
Сформировать и заполнить форму сводной ведомости по учёту выпущенной продукции за квартал (рис.3).
Рис. 3. Сводная ведомость учёта выпуска продукции за квартал
Результаты плановых и фактических показателей выпуска продукции за квартал по каждой бригаде представить в графическом виде.
Алгоритм решения задачи
Запустить табличный процессор MS Excel.
Создать книгу с именем «ООО Красный Октябрь».
Лист 1 переименовать в лист с названием «Ведомость за январь».
На листе «Ведомость за январь» разработать шаблон таблицы «Ведомость учёта выпущенной продукции за январь 2006 г.» (см. рис. 1).
Лист 2 переименовать в лист с названием «Ведомость за февраль».
На рабочем листе «Ведомость за февраль» разработать шаблон таблицы «Ведомость учёта выпущенной продукции за февраль 2006 г.» (см. рис 1).
Лист 3 переименовать в лист с названием «Ведомость за март».
На рабочем листе «Ведомость за март» разработать шаблон таблицы «Ведомость учёта выпущенной продукции за март 2006 г.» (см. рис 1).
Лист 4 переименовать в лист с названием «Плановые показатели».
На рабочем листе «Плановые показатели выпуска продукции» создать таблицу, в которой будут содержаться данные о плановых показателях выпуска продукции трёх бригад за три месяца.
Заполнить таблицу «Плановые показатели выпуска продукции» исходными данными (рис. 2).
Заполнить графу «По плану» таблицы «Ведомость учёта выпущенной продукции за январь 2006 г.» находящейся на листе «Ведомость за январь» следующим образом:
Занести в ячейку B2 формулу:
=ПлановыеПоказатели!B3.
Размножить введенную в ячейку B2 формулу для остальных ячеек (с B3 по B4) данной графы.
В ячейку B5 введём формулу: = B2+B3+B4.
В ячейку C5 таблицы «Ведомость учёта выпущенной продукции за январь 2006 г.» находящейся на листе «Ведомость за январь» ввести формулу: = C2+C3+C4.
Заполнить графу «Абсолютное отклонение от плановых показателей» таблицы «Ведомость учёта выпущенной продукции за январь 2006 г.» находящейся на листе «Ведомость за январь» следующим образом:
Занести в ячейку D2 формулу:
=C2-B2,
размножить введенную в ячейку D2 формулу для остальных ячеек (с D3 по D5) данной графы.
Занести в ячейку E2 формулу:
=C2/B2,
размножить введенную в ячейку E2 формулу для остальных ячеек (с E3 по E5) данной графы.
В результате получили:
Далее относительно таблиц: «Ведомость учёта выпущенной продукции за февраль 2006 г.» и «Ведомость учёта выпущенной продукции за март 2006 г.» следует выполнить соответствующие аналогичные действия (см. п. 12 –16).
В результате Ведомость учёта выпущенной продукции за февраль 2006 г.» имеет следующий вид:
Ведомость учёта выпущенной продукции за март 2006 г.» выглядит так:
Далее представим результаты вычислений в виде консолидированной таблицы, содержащей сводные данные о выпущенной продукции.
Сформируем и заполним форму сводной ведомости по учёту выпущенной продукции за квартал.
Графическое представление полученных результатов.
Список использованной литературы
Левин А. Самоучитель работы на компьютере. – СПб.: Питер, 2002. – 656 с.
Леонтьев В.П. Новейшая энциклопедия персонального компьютера 2006.– М.: ОЛМА-ПРЕСС Образование, 2006. –896 с.
Рычков В. Excel. – М.: ОЛМА Медиа Групп, 2007. – 256 с.
Степанов А.Н. Информатика: Учебник для вузов. 4-е изд. – СПб.: Питер 2006. – 684 с.
Технологии разработки программного обеспечения. Учебное пособие. 2-е изд./ С. Орлов. – СПб.: Питер, 2003. – 480 с.: ил.
Объектно-ориентированное программирование: Учебник для вузов. – 2-е изд., перераб. и доп./ Под ред. Г.С. Ивановой. – М.: Изд-во МГТУ им. Н.Э. Баумана, 2003. – 368 с., ил.
Экономическая информатика: учебник/Под ред. В.П. Косарева. – 2-е изд.–М.: Финансы и статистика 2005.