Модульное программирование в Delphi

Автор работы: Пользователь скрыл имя, 30 Сентября 2013 в 11:45, курсовая работа

Описание работы

Основным принципом модульного программирования является принцип "разделяй и властвуй". Модульное программирование - это организация программы как совокупности небольших независимых блоков, называемых модулями, структура и поведение которых подчиняются определенным правилам.
Заметим, что нужно различать использование слова "модуль", когда имеется в виду синтаксическая конструкция языков программирования (unit в Object Pascal), и когда имеется в виду единица дробления большой программы на отдельные блоки (которые могут быть реализованы и в виде процедур, и в виде функций).

Содержание работы

1. Утвержденное техническое задание на работу 4
2. Введение 5
3. Технический и рабочий проект программной системы 8
4. Заключение 12
5. Список литературы 13
Приложение 1. Листинг программы. 14

Файлы: 1 файл

Копия Курсовая_Работа.doc

— 148.50 Кб (Скачать файл)

Руководитель: ст. преп. кафедры  МОВС  Колесникова М.Д.

Рецензент: ст. преп. кафедры МОВС  Колесникова М.Д.

 

Сосницкий А.В.

Курсовая работа по специальности 230201 «Информационные системы и технологии»: М. 2012 г., МИРЭА, факультет Информационных технологий, кафедра МОВС. –12 стр.

 

Целью данной курсовой работы является разработка приложения для Windows в среде Delphi реализующее решения ряда задач с применением модульного программирования.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

СОДЕРЖАНИЕ

 

1. Утвержденное техническое задание на работу 4

2. Введение 5

3. Технический и рабочий проект программной системы 8

4. Заключение 12

5. Список литературы 13

Приложение 1. Листинг  программы. 14

 

 

 

1. Утвержденное техническое задание на работу.

 

 

 

Задание на курсовую работу по дисциплине

«Технология программирования».

Вариант №20

ТЕМА: Модульное программирование.

 

Содержательная задача:

Разработать приложение для Windows в  среде Delphi, реализующее решение следующей  задачи:

Дан одномерный целочисленный массив А из N элементов. N заданное натуральное число.

    • сформировать массив В из элементов массива А, которые являются числами Мерсенна (число N является числом Мерсенна, если это простое число и N+1=2Р, где Р также простое число)
    • удалить из массива А те элементы, в записи которых есть цифра 5
    • выполнить циклический сдвиг массива А вправо на заданное число элементов К
    • упорядочить массив по правилу перед элементом, который был первым в массиве, разместить все большие его, а за ним все остальные, сохраняя взаимное расположение как среди элементов, стоящих перед первым так и среди остальных элементов.

 

Специальные требования:

  1. Исходные данные для тестирования приложения подготовить в текстовых файлах.
  2. Результаты тестирования представить в элементах диалоговых форм.
  3. Подпрограммы для использования в приложении оформить в виде модуля, не связанного с формой

 

 

 

 
 

 

 

2. Введение.

 

Основным принципом модульного программирования является принцип "разделяй и властвуй". Модульное программирование - это организация программы как  совокупности небольших независимых блоков, называемых модулями, структура и поведение которых подчиняются определенным правилам.

 

Заметим, что нужно различать  использование слова "модуль", когда имеется в виду синтаксическая конструкция языков программирования (unit в Object Pascal), и когда имеется в виду единица дробления большой программы на отдельные блоки (которые могут быть реализованы и в виде процедур, и в виде функций).

 

Использование модульного программирования позволяет упростить тестирование программы и обнаружение ошибок. Аппаратно-зависимые подзадачи могут быть строго отделены от других подзадач, что улучшает мобильность создаваемых программ.

 

Упрощается процесс повышения  эффективности программ, так как  критичные по времени модули могут  многократно переделывать независимо от других. Кроме того, модульные программы значительно легче понимать, а модули могут использоваться как строительные блоки в других программах.

 

Термин "модуль" в программировании начал использоваться в связи  с внедрением модульных принципов при создании программ. В 70-х годах под модулем понимали какую-либо процедуру или функцию, написанную в соответствии с определенными правилами. Например "Модуль должен быть простым, замкнутым (независимым), обозримым (от 50 до 100 строк), реализующим только одну функцию задачи, имеющим только одну входную и только одну выходную точку". Однако общепризнанных требований не было и модулем очень часто называли любую процедуру размером до 50 строк.

 

Первым основные свойства программного модуля более-менее четко сформулировал Парнас (Parnas): "Для написания одного модуля должно быть достаточно минимальных знании о тексте другого". Таким образом! Парнас первым выдвинул концепцию скрытия информации (information! hiding) в программировании.

 

В соответствии с определением Парнаса, модулем могла быть любая отдельная процедура (функция) как самого нижнего уровня иерархии (уровня реализации), так и самого верхнего уровня, на котором происходят только вызовы других процедур-модулей.

 

Однако существующие в языках 70-х годов только такие синтаксические конструкции, как процедура и функция, не могли обеспечить надежного скрытия информации, поскольку подвержены влиянию глобальных переменных, поведение которых в сложных программах зачастую бывает трудно предсказуемым. Решить эту проблему можно было, только разработав новую синтаксическую конструкцию, которая не подвержена влиянию глобальных переменных. Такая конструкция была создана и названа модулем.

 

Впервые специализированная синтаксическая конструкция модуля была предложена Н.Виртом в 1975 г. и включена в его новый язьк Modula. В этом же году была сделана опытная реализация языка Modula. После некоторой переработки этот новый язык был окончательно реализован в 1977 г. и получил название Modula-2. Впоследствии, аналогичные конструкции, с некоторыми отличиями, были включены и в другие языки программирования: Pascal Plus (Уэлш и Бастард, 1979 г.), Ada (1980), Turbo Pascal версии 4.0 и другие.

 

Изначально предполагалось, что  при реализации сложных программных  комплексов модуль должен использоваться наравне с процедурами и функциями как конструкция, объединяющая и надежно скрывающая детали реализации определенной подзадачи. Однако в языке Borland (Turbo) Pascal были реализованы не все теоретические возможности модуля. В частности, в этом языке отсутствует поддержка внутренних модулей (аналогичных внутренним процедурам и функциям), недостаточно гибко реализован импорт (предложение uses), который не позволяет импортировать объекты из других модулей выборочно. Это обстоятельство, а также то, что с появлением персональных компьютеров круг программирующих людей резко расширился (а это существенно снизило средний уровень теоретической подготовки программистов), привело к тому, что при разработке приложений на этой, предшествующей Object Pascal, версии языка модули использовались в основном как средство создания проблемных библиотек процедур и функций. И только наиболее квалифицированные программисты использовали всю мощь этой языковой конструкции для структурирования своих проектов. В языке Object Pascal отмеченные ограничения реализации модулей остались, однако благодаря тому, что в среде Delphi каждой форме обязательно соответствует свой модуль и невизуальные алгоритмические действия также, как правило, оформляются в виде отдельных модулей, конструкцию "модуль" стали использовать по ее первоначальному предназначению все программисты, независимо от их квалификации.

 

Среда Delphi имеет встроенную поддержку  концепции модульного программирования на языке Object Pascal, что стимулирует  прогрессивный и надежный стиль программирования с широким использованием модулей, и тем самым выгодно отличает Delphi и Object Pascal от других современных средств разработки приложений.

 

Таким образом, количество модулей  в проекте должно определяться декомпозицией поставленной задачи на независимые подзадачи. В предельном случае модуль может использоваться даже для заключения в него всего лишь одной процедуры, если необходимо, чтобы выполняемое ею локальное действие было гарантировано независимым от влияния других частей программы при любых изменениях в коде проекта. В частности, такое использование модуля характерно для класса задач реального времени, в которых критерий надежности и предсказуемости поведения программы является ключевым.

 

Рассмотрим еще один теоретический вопрос, связанный с использованием модульного программирования. Этот вопрос касается формы модульного проекта.

 

Придание иерархической структуре  модульного проекта хорошей формы  позволяет улучшить процесс ее разработки. Число модулей, которые подключаются каким-либо модулем, и число модулей, которые его подключают, оказывают влияние на сложность проекта. Йодан (Yourdon) назвал число модулей, подключаемых из данного модуля, размахом или шириной управления модулями. Наряду с большим размером модуля очень маленькая или очень большая ширина управления является npизнаком плохой схемы разбивки на модули. В общем случае, ширина управления модуля не должна превышать 10-ти. Это число связано с "магическим" числом 7, которое базируется на положениях психологии, в особенности, на теории "кусков" ("chunking") информации. Кратковременная память человека имеет ограниченные способности сохранения "кусков" информации. Психологические эксперименты показали, способность нашей кратковременной памяти находится в пределах 5-11 "кусков" (в среднем - 7). Она может одновременно оперировать около 7 "кусками" информации. Когда человек превышает этот предел, он более склонен к ошибкам. Реорганизация информации с разбивкой на подходящие части является важным действием для эффективного использования кратковременной памяти человека и для улучшения понимаемого материала. Люди во многих жизненных ситуациях делают такую реорганизацию бессознательно. Однако программист может сам себе помочь, сознательно не допуская ширины управления модулями, которая существенно превышает число 7.

 

Что касается программирования в среде Delphi, то рассмотренные рекомендации о форме модульного проекта следует  относить в основном к модулям, созданным  пользователем, поскольку Delphi автоматически  генерирует основную часть кода, связанную с обработкой форм, и прикладному программисту нет особой надобности задумываться о стандартно подключаемых модулях.

 

Кроме того, эти же принципы следует  применять и при проектировании иерархии классов. Например, в иерархии предопределенных классов Object Pascal, только два класса, TObject и Exception, имеют число непосредственных классов-потомков, значительно большее, чем 7. Это можно объяснить глобальной базовой ролью TObject и "перечисляемым" характером класса Exception. Еще у троих классов это число находится в пределах 8-9, а остальные классы имеют менее 7 непосредственных потомков.

 

3. Технический и рабочий проект программной системы.

 

I

 

Условие задачи: сформировать массив В из элементов массива А, которые являются числами Мерсенна (число N является числом Мерсенна, если это простое число и N+1=2Р, где Р также простое число)

 

  1. Постановка задачи.

Дано:  a – массив целых чисел,

n – число элементов массива a.

Требуется сформировать массив целых  чисел b из чисел массива a удовлетворяющих условию.

 

  1. Декомпозиция задачи.
    1. Определение является ли элемент массива числом Мерсенна.
      1. Таблица переменных.

Имя объекта

Структура

Тип

Семантика

a

массив

целое

Массив целых чисел

n

простая

целое

Число элементов массива a, b

b

массив

целое

Массив целых чисел


 

  1. Определение входных и выходных данных.

Входные данные:  a – массив целых чисел,

n – число элементов массива a.

Выходные данные:  b – массив чисел Мерсенна.

 

  1. Шаблон ввода/вывода.

Шаблон ввода:

Введите число элементов массива  n:

Введите массив целых чисел (через пробел):

 

Шаблон вывода:

Массив после выполнения операции:

 

  1. Тестовые примеры.

№ теста

n

a

b

1

5

1 3 5 127 625

127

2

6

90 125 7 11 800 8191

7 8191

3

3

15 16 14

 

 

  1. Таблица имен переменных.

Имя переменной

Структура данных

Диапазон значений

Тип

Семантика

a

массив

0…10 000

целое

Исходный массив

n

простая

0…10

целое

Число элементов массива a, b

b

массив

0…10 000

целое

Конечный массив

Информация о работе Модульное программирование в Delphi