Основные принципы модульного программирования
История развития и классификация языков программирования. Основные принципы модульного программирования, особенности модульной организации программ. Этапы создания программ и характеристики их качества. Рассмотрение основных видов программирования.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | узбекский |
Дата добавления | 23.12.2019 |
Размер файла | 369,5 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
ГЛАВА 2. ОСНОВНЫЕ ПРИНЦИПЫ МОДУЛЬНОГО ПРОГРАММИРОВАНИЯ
2.1 Виды программирования
Программирование - одна из первых автоматизированных информационных технологий[1]. Программирование как область человеческой деятельности характеризуется определенными этапами и способами создания законченного программного продукта, формами организации взаимодействия разработчиков-программистов.
Виды программирования:
· процедурное;
· операторное;
· функциональное;
· логическое;
· структурное (модульное);
· объектно-ориентированное;
· визуально-ориентированное.
· Экстремальное[2].
В основе процедурного, операторного и функционального типов программирования лежат процедуры, операторы и функции, используемые как основные объекты языка.
Логическое программирование реализуется с помощью логических операторов и функций. Это позволяет реализовать основные идеи логического программирования.
Эдсгер В. Дийкстра, опираясь на теорему Бома и Джакопини, ввел понятие структурного программирования, которое часто называют «программирование без GOTO» (управляющая конструкция перехода не используется при написании программ).
В соответствии с данным способом разработки любая программа представляет собой структуру, построенную из трех типов базовых конструкций. Еще один из принципов структурного программирования состоит в том, что программная единица (подпрограмма) должна иметь одну точку входа и одну точку выхода.
Соблюдение принципов структурного программирования делает тексты программ, даже довольно больших, нормально «читаемыми», что существенно облегчает понимание программ, - появилась возможность разработки код в промышленном режиме, когда код может без особых затруднений понять не только ее автор, но и другие программисты.
Объектно-ориентированное программирование (ООП) появилось именно как эффективный способ преодоления трудностей, возникающих при создании сложных программ. Объектно-ориентированное программирование особенно актуально при программировании задач графики.
Наиболее значимой частью ООП является особый подход к решению сложных задач программирования, называемый объектно-ориентированным анализом, а объектно-ориентированные языки программирования - просто удобные инструменты для реализации этого подхода.
Процедурное программирование - это фундаментальная концепция, являющаяся основой всех современных подходов к проектированию и реализации. В то же время суть ее проста и отражает широко известные методы, заключающиеся в поиске и реализации некоторого базового набора элементов, комбинация которых дает решение задачи.
Если концепция структурного программирования предлагает некоторый универсальный алгоритмический базис, то процедурное программирование состоит в разработке под конкретную задачу или круг задач (предметную область) собственного базиса в виде набора подпрограмм, позволяющего наиболее эффективно по целому ряду критериев построить программный комплекс. С применением процедурного программирования появились возможности коллективной разработки программ как набора «независимых» частей, последовательного уменьшения сложности методом разбиения сложной задачи на более простые подзадачи, наконец, возможности повторного использования созданного ранее кода.
В последнее время получила распространение еще одна технология разработки программ - экстремальное программирование. По этой технологии с самого начала программа пишется в предположении, что заказчик заранее не может сформулировать все требования к программному продукту, поэтому программа все время будет меняться, в том числе в процессе работы над ней. Одним из элементов экстремального программирования является парное программирование. Оно означает, что любой кусок кода создается парами людей, программирующими одну задачу сидя за одним рабочим местом. Один программист работает над кодированием конкретных частей программы, другой сосредоточен на картине в целом и непрерывно просматривает код, производимый первым программистом с целью сделать его абсолютно прозрачным. Время от времени люди меняются ролями. Пары не фиксированы: рекомендуется «перемешивать» их насколько это возможно, так чтобы каждый знал, что делает каждый другой, и все были знакомы со всей системой в целом.
2.2 Основные принципы модульного программирования
Часто в разных программах приходится многократно выполнять одни и те же действия. Например, выводить окно с предупреждением о невозможности отмены какого-либо действия. Естественным в таких случаях является использование библиотек, содержащих подпрограммы (процедуры) для выполнения стандартных действий. Такие «заготовки» можно использовать в качестве строительных «кубиков» при создании программы.
Эта идея была реализована в виде возможности подключения к программе модулей - библиотек готовых подпрограмм. Программист может не только использовать стандартные библиотеки процедур, но и создавать свои собственные модули.
При использовании библиотечных модулей всегда возникает проблема их состыковки с программой. Для облегчения этой работы, были разработаны стандарты, которые позволяют записывать библиотечные подпрограммы в форме, максимально облегчающей такую состыковку.
При программировании сверху вниз алгоритмы и данные делятся на относительно независимые части, называемые модулями. Некоторые из модулей являются стандартными и поставляются в составе языков программирования, например, вычисление элементарных математических функций квадратный корень, логарифм, синус и т. д. Но главные модули все равно приходится проектировать программистам.
Таким образом, алгоритм является деревом модулей: одни модули вызывают другие модули, начиная с самого верхнего первого модуля, называемого корневым модулем, или головной программой.
Модульность -- в языках программирования -- принцип, согласно которому программное средство (программа, библиотека, web-приложение и др.) разделяется на отдельные именованные сущности, называемые модулями[5].
Модуль характеризуют:
-один вход и один выход - на входе программный модуль получает определенный набор исходных данных, выполняет содержательную обработку и возвращает один набор результатных данных, т.е. реализуется стандартный принцип IPO (Input - Process - Output) - вход-процесс-выход;
-функциональная завершенность - модуль выполняет перечень регламентированных операций для реализации каждой отдельной функции в полном составе, достаточных для завершения начатой обработки;
-логическая независимость - результат работы программного модуля зависит только от исходных данных, но не зависит от работы других модулей;
- слабые информационные связи с другими программными модулями - обмен информацией между модулями должен быть по возможности минимизирован;
-обозримый по размеру и сложности программный элемент.
Таким образом, модули содержат определение доступных для обработки данных, операции обработки данных, схемы взаимосвязи с другими модулями.
Каждый модуль состоит из спецификации и тела. Спецификации определяют правила использования модуля, а тело - способ реализации процесса обработки.
Модульный принцип написания программ самый старый по возрасту принцип программирования. Модульным он назван потому, что каждая задача для предстоящего программирования разбивается на какие-то цельные завершенные части. И программирование ведется исключительно по этим частям - написали часть номер 1, протестировали ее, написали часть номер 2, протестировали ее - потом все вместе собрали и получили программный продукт. То есть программу в конечном итоге можно представить в виде мозаики, которую сначала рисует, а потом и собирает вместе программист. Большим плюсом данного подхода (и, собственно, причиной, по которой он появился) является возможность работы над программой не одного программиста, а нескольких или даже нескольких групп программистов. Простые и близкие языки модульного принципа - Pascal, и C, Phyton и даже Perl.
Модульное программирование - это организация программы как совокупности небольших независимых блоков (модулей), структура и поведение которых подчиняется определенным заранее правилам[6].
Модульное программирование предназначено для разработки больших программ.
Разработкой больших программ занимается коллектив программистов. Каждому программисту поручается разработка некоторой самостоятельной части программы. И он в таком случае отвечает за конструирование всех необходимых процедур и данных для этих процедур. Сокрытие данных (запрет доступа к данным из-за пределов модуля) предотвращает их случайное изменение и соответственно нарушение работы программы. Для взаимодействия отдельных частей (модулей) программы коллективу программистов необходимо продумать только интерфейс (взаимодействие) сконструированных модулей в основной программе.
Принципы модульного программирования программных продуктов во многом сходны с принципами нисходящего проектирования. Сначала определяются состав и подчиненность функций, а затем - набор программных модулей, реализующих эти функции.
Однотипные функции реализуются одними и теми же модулями. Функция верхнего уровня обеспечивается главным модулем; он управляет выполнением нижестоящих функций, которым соответствуют подчиненные модули.
При определении набора модулей, реализующих функции конкретного алгоритма, необходимо учитывать следующее:
-каждый модуль вызывается на выполнение вышестоящим модулем и, закончив работу, возвращает управление вызвавшему его модулю;
-принятие основных решений в алгоритме выносится на максимально «высокий» по иерархии уровень;
-для использования одной и той же функции в разных местах алгоритма создается один модуль, который вызывается на выполнение по мере необходимости. В результате дальнейшей детализации алгоритма создается функционально-модульная схема алгоритма, которая является основой для программирования[7].
2.3 Модульная организация программ
Способы модульной организации программы и взаимодействия ее частей в значительной степени обусловлены особенностями трансляции программы, поэтому здесь необходимы минимальные знания о трансляции и связывании программы и ее элементов.
Под трансляцией в самом широком смысле можно понимать процесс восприятия компьютером программы, написанной на некотором формальном языке. При всем своем различии языки программирования имеют много общего и, в принципе, эквиваленты с точки зрения потенциальной возможности написать одну и ту же программу на любом из них. На самом деле сложно подвести под одну схему имеющееся многообразие языков программирования,
Компиляция - преобразование объектов (данных и операций над ними) с входного языка в объекты на другом языке для всей программы в целом с последующим выполнением полученной программы в виде отдельного шага.
Интерпретация - анализ отдельного объекта на входном языке с одновременным выполнением (интерпретацией)[13].
Следовательно, компиляция и интерпретация отличаются не характером и методами анализа и преобразования объектов программы, а совмещением фаз обработки этих объектов во времени. То есть при компиляции фазы преобразования и выполнения действий разнесены во времени, но зато каждая из них выполняется над всеми объектами программы одновременно. При интерпретации, наоборот, преобразование и выполнение действий объединены во времени, но для каждого объекта программы.
Если посмотреть на эти различия несколько с другой стороны, то можно заметить, что интерпретатор непосредственно выполняет действия, связанные с определением или преобразованием объектов программы, а компилятор - переводит их на другой (не обязательно машинный язык)[15].
Многие языковые системы программирования, называемые интерпретаторами, на самом деле имеют фазу компиляции во внутренне представление, на котором производится интерпретация.
Выходной язык компилятора может быть машинным языком для компьютера с другой архитектурой, нежели тот, в котором работает компилятор. Такой компилятор называется кросс-компилятором, а сама система программирования кросс-системой программирования. Такие системы используются для разработки программ для архитектур, не имеющих собственных операционных систем или систем программирования (контроллеры, управляющие микропроцессоры).
Таким образом, граница между компиляцией и интерпретацией в трансляторе может перемещаться от входного языка (тогда мы имеем чистый интерпретатор) до машинного кода (тогда речь идет о чистом компиляторе).
Во-первых, транслятор представляет собой компилятор, генерирующий программный код целевого процессора. Во-вторых, транслятор «сознательно» не включает в этот код никаких дополнительных команд и обращений к внешним функциям, кроме явно прописанных в программе. То же самое касается и обрабатываемых данных: они имеют прямое представление в памяти без всяких дополнений или изменений. Все это гарантирует программе следующие свойства: программист контролирует эффективность полученного программного кода; программист контролирует размерности и размещение данных в памяти; программный код может выполняться без поддержки какой-либо операционной среды (исполнительной системы языка, библиотек, операционной системы), т.е. на «голой» (standalone) машине[17].
Именно поэтому на классическом Си могут быть написаны такие компоненты, как программы для встроенных процессоров, ядро и драйверы операционных систем, т.е. то, что традиционно пишется на машинном языке (языке Ассемблера). Поэтому «классический» Си еще называют машинно-независимым Ассемблером.
Что же касается Си++, то там указанные принципы частично нарушаются, хотя он тоже является «чистым» компилятором, но не обеспечивает чистоту программного кода и данных.
Технология подготовки программ для языков компилирующего типа (к каковым относится Си/Си++) сформировалась в начале 60-х годов и с тех пор не претерпела существенных изменений. Заложенные тогда принципы оказывают влияние на способы использования стандартных библиотечных функций и разработки больших проектов.
Подготовка программы начинается с редактирования файла, содержащего текст этой программы, который имеет стандартное расширение для данного языка. Затем выполняется его трансляция (компиляция), которая включает в себя несколько фаз: препроцессор, лексический, синтаксический, семантический анализ, генерация кода и его оптимизация. В результате трансляции получается объектный модуль - некий «полуфабрикат» готовой программы, который потом участвует в ее сборке. Файл объектного модуля имеет стандартное расширение obj.
Компоновка (сборка) программы заключается в объединении одного или нескольких объектных модулей программы и объектных модулей, взятых из библиотечных файлов, содержащих стандартные функции и другие полезные вещи. В результате получается исполняемая программа в виде отдельного файла (загрузочный модуль, программный файл) со стандартным расширением - exe, который затем загружается в память и выполняется.
При модульном проектировании весьма важна разница между определением и объявлением объектов программы (переменных, функций, методов, классов).
Определение переменной или функции - это фрагмент программы, в котором полностью задано содержание объекта, и по которому происходит его трансляция во внутреннее представление. Объявление только упоминает объект языка и перечисляет его свойства, если он недоступен в данной точке программы.
С учетом раздельного размещения определений и объявлений в проекте модульной Си-программы присутствуют три вида файлов (модулей):файлы исходного текста (с расширением - cpp), содержащие определения переменных, функций, методов;заголовочные файлы (с расширением - h), содержащие объявления для соответствующих файлов исходного текста;объектные модули (с расширением - obj), полученные в результате независимой трансляции файлов исходного текста[18].
Назначение заголовочных файлов заключается в том, что содержащиеся в них объявления позволяют сформировать правильный программный код для обращения к объекту языка, который определен в другом модуле (следовательно, его внутреннее представление находится в другом объектном модуле).
Для обращения к такому внешнему объекту необходимо подключить соответствующий заголовочный файл с его объявлением директивой include. То же самое касается данных и функций, содержащихся в библиотеках и библиотечных классах.
Рис.4 - Модульное проектирование на «классическом» Си [20]
Подводя итог можно выделить следующее:
-для выполнения программы, написанной на определенном формальном языке после ее компиляции необходим интерпретатор, выполняющий эту программу, но уже записанную на выходном языке компилятора;
-процессор и память любого компьютера (а в широком смысле и вся программная среда, создаваемая операционной системой, является интерпретатором машинного кода);
-в практике построения трансляторов часто встречается случай, когда программа компилируется с входного языка на некоторый промежуточный уровень (внутренний язык), для которого имеется программный интерпретатор.
ЗАКЛЮЧЕНИЕ
Подводя итог данного исследования можно выделить следующее.
Существующие языки программирования можно разделить на две группы: процедурные и непроцедурные. Процедурные (или алгоритмические) программы представляют из себя систему предписаний для решения конкретной задачи. Роль компьютера сводится к механическому выполнению этих предписаний. Процедурные языки разделяют на языки низкого и высокого уровня. Разные типы процессоров имеют разные наборы команд. Если язык программирования ориентирован на конкретный тип процессора и учитывает его особенности, то он называется языком программирования низкого уровня. Имеется в виду, что операторы языка близки к машинному коду и ориентированы на конкретные команды процессора.
Проектирование и разработку программ целесообразно разбить на ряд последовательных этапов: постановка задачи; проектирование программы; построение модели; разработка алгоритма; написание программы; отладка программы; тестирование программы; документирование.
Программирование - одна из первых автоматизированных информационных технологий. Виды программирования: процедурное; операторное; функциональное; логическое; структурное (модульное); объектно-ориентированное; визуально-ориентированное; экстремальное.
При определении набора модулей, реализующих функции конкретного алгоритма, необходимо учитывать следующее:
-каждый модуль вызывается на выполнение вышестоящим модулем и, закончив работу, возвращает управление вызвавшему его модулю;
-принятие основных решений в алгоритме выносится на максимально «высокий» по иерархии уровень;
-для использования одной и той же функции в разных местах алгоритма создается один модуль, который вызывается на выполнение по мере необходимости.
Источником объектного модуля может быть не только Си-программа, но и программа, написанная на любом другом языке программирования, например, на Ассемблере. Но в этом случае необходимы дополнительные соглашения по поводу «стыковки» вызовов функций и обращений к данным в различных языках.
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
1.Агальцов, В.П. Информатика для экономистов: Учебник / В.П. Агальцов, В.М. Титов. - М.: ИД ФОРУМ, НИЦ ИНФРА-М, 2016. - 448 c.
2. Балдин, К.В. Информатика для ВУЗов: Учебник / К.В. Балдин, В.Б. Уткин. - М.: Дашков и К, 2016. - 395 c.
3. Балдин, К.В. Информатика и информационные системы в экономике: Учебное пособие / К.В. Балдин. - М.: НИЦ ИНФРА-М, 2016. - 218 c.
4. Блиновская, Я.Ю. Введение в информатику: Учебное пособие / Я.Ю. Блиновская, Д.С. Задоя. - М.: Форум, НИЦ ИНФРА-М, 2016. - 112 c.
5. Бодров, О.А. Предметно-ориентированные экономические информационные системы: Учебник для вузов / О.А. Бодров. - М.: Гор. линия-Телеком, 2017. - 244 c.
6. Варфоломеева, А.О. Информационные системы предприятия: Учебное пособие / А.О. Варфоломеева, А.В. Коряковский, В.П. Романов. - М.: НИЦ ИНФРА-М, 2017. - 283 c.
7. Васильков, А.В. Информатика: Учебное пособие / А.В. Васильков, А.А. Васильков, И.А. Васильков. - М.: Форум, 2017. - 528 c.
8. Вдовин, В.М. Предметно-ориентированные экономические информационные системы: Учебное пособие / В.М. Вдовин. - М.: Дашков и К, 2013. - 388 c.
9. Велихов, А. С. Основы информатики и компьютерной техники: учебное пособие / А. С. Велихов. - Москва: СОЛОН-Пресс, 2017. - 539 с.
10. Гвоздева, В. А. Информатика, автоматизированные информационные технологии и системы: учебник / В. А. Гвоздева. - Москва: Форум: Инфра-М, 2016. - 541 с.
11. Горбенко, А.О. Информационные системы в экономике / А.О. Горбенко. - М.: БИНОМ. ЛЗ, 2016. - 292 c.
12. Гришин, А.В. Промышленные информационные системы и сети: практическое руководство / А.В. Гришин. - М.: Радио и связь, 2016. - 176 c.
13. Завгородний, В.И. Информатика для экономистов: Учебник для бакалавров / В.П. Поляков, Н.Н. Голубева, В.И. Завгородний; Под ред. В.П. Полякова. - М.: Юрайт, 2016. - 524 c.
14.Золотова, Е.В. Основы кадастра: Территориальные информационные системы: Учебник для вузов / Е.В. Золотова. - М.: Фонд «Мир», Акад. Проект, 2016. - 416 c.
15. Исаев, Г.Н. Информатика в экономике: Учебник для студентов вузов / Г.Н. Исаев. - М.: Омега-Л, 2017. - 462 c.
16. Информатика. Базовый курс: учебное пособие для высших технических учебных заведений / [С. В. Симонович и др.]. - Санкт-Петербург: Питер, 2017. - 639 с.
17. Информатика в экономике: учебное пособие: / [Н. Г. Бубнова и др.]. - Москва: Вузовский учебник, 2016. - 476 с.
18. Иопа, Н. И. Информатика: (для технических специальностей): учебное пособие / Н. И. Иопа. - Москва: КноРус, 2016. - 469 с.
19. Мезенцев, К.Н. Автоматизированные информационные системы: Учебник для студентов учреждений среднего профессионального образования / К.Н. Мезенцев. - М.: ИЦ Академия, 2017. - 176 c.
20. Олейник, П.П. Корпоративные информационные системы: Учебник для вузов. Стандарт третьего поколения / П.П. Олейник. - СПб.: Питер, 2016. - 176 c.
21.Ройтберг, М.А. Информатика и ИКТ. Подготовка к ЕГЭ в 2017 году. Диагностические работы / М.А. Ройтберг. - М.: МЦНМО, 2017. - 176 c.
22. Семакин, И.Г. Информатика и ИКТ Профильный уровень Учебник для 11 класса / И.Г. Семакин. - М.: Бином. Лаборатория знаний, 2012. - 350 c.
23.Соловьева, Л.Ф. Информатика и ИКТ. Работаем в Windows и Linux. Учебник для 8 класса / Л.Ф. Соловьева. - СПб.: BHV, 2011. - 288 c.
24. Угринович, Н.Д. Информатика и ИКТ: Методическое пособие для 8-11 классов / Н.Д. Угринович. - М.: Бином. Лаборатория знаний, 2012. - 149 c.
Размещено на Allbest.ru
Подобные документы
История формирования традиционной технологии программирования. Задачи и предмет структурного программирования, как одного из крупнейших достижений в технологии программирования. Подпрограмма, типы управляющих структур. Понятие модульного программирования.
презентация [1,8 M], добавлен 05.11.2016Функции и основные компоненты систем программирования. Средства создания программ. Трансляторы языков программирования. Принципы и фазы работы компилятора, трансформация языка программирования в машинный код. Механизм преобразования интерпретатора.
презентация [3,3 M], добавлен 07.02.2012Сущность и функции языков программирования, их эволюция и оценка популярности различных видов. Особенности компьютерных программ, разработанных на компилируемом, интерпретируемом или смешанном языке. Основные классы и иерархия языков программирования.
презентация [873,4 K], добавлен 23.01.2013Машинные коды и ассемблер. Первые языки программирования высокого уровня. Язык программирования FORTRAN. Достоинства и недостатки ALGOL. Научные и бухгалтерские программы. Основные принципы, которые соблюдались при создании языка программирования Basic.
курсовая работа [407,4 K], добавлен 21.06.2014Появление первых вычислительных машин и возникновение "стихийного" программирования. Структурный подход к декомпозиции сложных систем. Развитие модульного и объектно-ориентированного программирования. Особенности компонентного подхода и CASE-технологий.
презентация [1,5 M], добавлен 14.10.2013Язык программирования как формальная знаковая система, предназначенная для записи программ, его отличие от естественных языков. Прописные и строчные буквы латинского алфавита. Ключевые слова языка программирования. Классическая схема создания программы.
презентация [1,2 M], добавлен 19.02.2014Понятия языка программирования, разновидности и характеристика языков. Исторический обзор их создания и применения. Классификация, примеры использования. Характеристики языков программирования с точки зрения элементов объектной модели, их популярность.
реферат [463,6 K], добавлен 07.09.2009Сущность и основные свойства алгоритмов, принципы их составления. Скалярные типы данных в языке Pascal. Тождественность и совместимость типов данных. Понятие и основные этапы развития, а также движущие силы эволюции языков программирования, типы.
презентация [85,8 K], добавлен 18.05.2014Характеристика базовых конструкций языков программирования. Изучение истории их развития и классификации. Определение основных понятий языков программирования. Описание основных операторов, которые используются в языках программирования высокого уровня.
курсовая работа [400,6 K], добавлен 10.11.2016Языки программирования низкого и высокого уровней и среды реализации. Особенности процедурных, логических, объектно-ориентированных языков. Состав системы программирования: трансляторы, библиотеки и отладчик программ, компоновщик, средства редактирования.
презентация [11,9 K], добавлен 23.10.2013