Аннотация: Методы работы с модулями. Стандартные модули языка Pascal. Создание модульных программ. Передача в программу аргументов из командной строки.
Модульность программ
Модуль — это кусок программы, компилируемый отдельно от остальных ее частей. Именно возможность раздельной компиляции и является основным преимуществом модулей .
Простейшая модульность программы может достигаться за счет применения процедур и функций, однако этого не всегда достаточно. Если все подпрограммы содержатся в одном файле, то исправление единственной ошибки в какой-либо подпрограмме приведет к неизбежной перекомпиляции всего кода. А при современных размерах программ компиляция может длиться даже не минуты, а часы.
Кроме того, если коллектив программистов пишет одну большую программу (а именно в таких условиях работают сегодня все производители программного обеспечения), то каждому из них нужно обеспечить более или менее независимый «фронт работ «. Даже два человека не могут одновременно исправлять один и тот же файл , иначе конфликт обновлений будет гарантирован. Что уж тут говорить о проектах, над которыми работают десятки и даже сотни человек! В такой ситуации модули , которые хранятся каждый в отдельном файле и могут быть отредактированы, откомпилированы и протестированы независимо от остальных частей программы, являются наилучшим решением этой проблемы.
Концепция модульной структуры образовательной программы и выделение новых профилей подготовки.
Несколько модулей , являющихся составными частями одной программы, объединяются в библиотеку . Например, вместе с компилятором языка Pascal поставляются стандартные библиотеки , содержащие важнейшие подпрограммы обработки данных.
Стандартные модули языка Pascal
Перечислим самые распространенные модули , входящие в состав стандартных библиотек языка Pascal. Подробное описание этих библиотек можно найти в любом справочном издании 1 Например, «Справочник по процедурам и функциям Borland Pascal with Objects 7.0» (сост. И.И. Дериев, С.В. Токарь.
Киев: Диалектика , 1993) или «Программирование на языке Turbo Pascal (версии 6.0 и 7.0). Справочник по процедурам, функциям, диагностическим сообщениям » (сост. В.С. Зубов, М., 1997). .
System
Модуль System является основным: в нем содержатся все изученные нами стандартные процедуры и функции обработки арифметических выражений , множеств, строк и т.п. Специального подключения этот модуль не требует: его содержимым можно пользоваться по умолчанию.
Напомним, что этот модуль содержит следующие типы подпрограмм:
- подпрограммы для обработки величин порядковых типов данных ( dec , inc , odd , pred , succ );
- арифметические функции ;
- функции преобразования типов данных ( chr , ord , round , trunc );
- процедуры управления процессом выполнения программы ( break , continue , exit , halt );
- подпрограммы обработки строк ( concat , copy , delete , insert , length , pos , str , val );
- подпрограммы файлового ввода и вывода ;
- подпрограммы динамического распределения памяти ( dispose , freemem , getmem , new );
- функции для работы с указателями и адресами ( addr );
- а также некоторые другие подпрограммы (например, exclude , include , random , randomize , upcase ).
Crt
Модуль Crt служит для организации «хорошего» вывода на экран. Подробнее о содержимом этого модуля мы расскажем в следующей лекции.
«Проектирование модульной программы воспитания»
Wincrt
Модуль WinCrt предназначен для создания программ, поддерживающих простейший оконный интерфейс .
Printer
Модуль Printer позволяет производить вывод информации не на консоль, а на принтер (под операционной системой DOS).
Winprn
Модуль WinPrn является аналогом модуля Printer для операционной системы Windows.
Dos
Модуль Dos позволяет обмениваться информацией с операционной системой. Системное время, прерывания, состояния параметров окружения, процедуры обработки процессов, работа с дисковым пространством — всем этим занимается модуль Dos .
Windos
Модуль WinDos является аналогом модуля Dos для операционной системы Windows.
Strings
Модуль Strings позволяет перейти от стандартных строк языка Pascal к строкам, ограниченным нулем. В отличие от обычных строк, чья длина не может превышать 255 символов, эти строки могут состоять из 65 535 символов, причем конец каждой такой строки помечен символом #0 .
Graph
Модуль Graph содержит разнообразнейшие подпрограммы, которые позволяют создавать на экране различные рисунки из многоцветных геометрических фигур . Модуль управляет также палитрами, фактурами фона и шрифтами.
Overlay
Модуль Overlay предоставляет возможность делать большие программы оверлейными (многократно использующими одну и ту же область памяти).
Winapi
Модуль WinApi отвечает за создание динамических библиотек . Этот модуль свойственен лишь поздним версиям языка Pascal (например, Turbo Pascal 7.0).
Источник: intuit.ru
Принципы и подходы к проектированию модульной программы
Дидактическая система модуля обучения прогнозируется, проектируется и осуществляется на основе общих и специфических научных принципов. При проектировании модульной программы необходимо учитывать следующие общие принципы:
• компоновка содержания учебного процесса вокруг базовых понятий и методов;
• систематичность и логическая последовательность изложения учебного материала;
• целостность и практическая значимость содержания;
• наглядность представления учебного материала.
К специфическим принципам проектирования модульной программы относятся: модульность, структуризация, динамичность, гибкость, паритетность, реализация обратной связи, осознанная перспектива.
Принцип динамичности обеспечивает вариативность модульных программ, изменение их с учетом динамики востребуемых профессий и профессиональной специализации обучаемых.
Принцип гибкости определяет построение модульных программ таким образом, чтобы они легко адаптировались к изменяющимся научно-ехническим и социально-экономическим условиям, к индивидуальным законам и уровням подготовки обучаемых.
Принцип паритетности предполагает субъект-субъектные отношения между педагогом и обучаемым.
Принцип реализации обратной связи способствует созданию системы контроля и самоконтроля, коррекции и оценки успешности изучения учебного материала модуля.
Принцип осознанной перспективы подчеркивает, что условием успешности обучения являются сформированная профессиональная мотивация учения, осознание его близких и дальних перспектив.
В теории и практике модульного обучения в профессиональной школе выделяются два подхода: предметно-деятельностный и системно-деятельно-стный. На основе этих подходов разрабатываются различные концепции подготовки специалистов, в которых процесс обучения или целиком, или в рамках конкретного предмета (предметов) ориентирован на последовательное усвоение обучаемым элементов профессиональной деятельности и содержания модульной образовательной программы.
В разрабатываемых концепциях подготовки специалистов модульные образовательные программы имеют различный состав и структурное построение. В документах они могут быть представлены в различных формах, но три основных компонента включаются обязательно: целевая содержательная программа, банк информации, методические руководства для обучаемых.
Рассмотрим краткие характеристики двух подходов.
В основе модульных программ профессионально-обязательных учебных предметов лежат модули, представляющие собой профессионально значимые действия. Для каждой модульной программы учебного предмета составляется пакет обучающих модулей.
Существуют три варианта составления пакетов обучающих модулей:
а) применение разработанных и опубликованных в литературе обучающих модулей, их адаптация к конкретным условиям;
Модульный учебный план —это модель содержания профессионального образования, состоящая из образовательных блоков (гуманитарного, общенаучного, общетехнического, профессионального), которые структурируются на дисциплины профессионально-обязательные, дисциплины по выбору и факультативы.
б) трансформация накопленного преподавателем учебного и методического материала в обучающие модули;
в) создание обучающих модулей на проектной основе.
Одним из вариантов системно-деятелъностного подхода к модульным технологиям является концепция профессионального обучения «Модули трудовых навыков» (МТН-концепция), разработанная Международной организацией труда.
Для МТН-концепции характерны:
• ориентация на целостное обучение с отсутствием деления на учебные предметы;
• основные функции педагогики: координирующая, консультационная и контролирующая;
• адаптация к индивидуальным потребностям и возможностям обучаемого;
• наличие свободного временного фактора.
Итак, суть технологии модульного обучения заключается в том, что для достижения требуемого уровня компетентности обучаемых на основе соответствующих принципов и подходов осуществляется укрупненное структурирование учебного материала, выбор адекватных ему методов, средств и форм обучения, направленных на самостоятельный выбор и прохождение обучаемым полного, сокращенного или углубленного варианта обучения.
Источник: neudov.net
Модульное проектирование программ
Информатика. Основы объектно-ориентированного программирования. Конспект лекций: учеб. пособие / В. Ю Наумов, Л. Г. Акулов, О. А. Авдеюк, Е. С. Павлова; ВолгГТУ. – Волгоград, 2013. – 249 с.
Содержит начальные сведения по основам объектно-ориентированного программирования. В качестве основного языка программирования выбран С++.
Ил. 115. Табл. 10. Библиогр.: 8 назв.
технический университет, 2013.
В. Ю. Наумов, О. А. Авдеюк, 2013
1. Модульное проектирование программ.. 5
2. Основные возможности C++. 8
3. C++ как Си с классами. 17
4. Определение класса. 19
5. Сокрытие информации. 20
6. Описание член-функций. 22
7. Неявный указатель this 23
8. Конструкторы.. 24
9. Деструктор. 28
10. Пример программы с использованием классов. 30
11. Статические члены класса. 32
12. Объектно-ориентированное программирование. 33
13. Наследование. 36
14. Наследование и доступность. 41
15. Композиция. 49
16. Динамическое связывание. 52
17. Виртуальные функции. 55
18. Дружественные функции. 61
19. Перегрузка операций. 64
20. Перегрузка операции присваивания. 68
21. Программа для работы с комплексными числами. 72
22. Перегрузка операций и преобразование типов. 74
23. Индексирование. 75
24. Функция operator() 77
25. Операция выбора элемента. 79
26. Перегрузка операций new и delete. 80
27. Ввод и вывод. 83
28. Ввод и вывод встроенных типов. 84
29. Состояние потока. 87
30. Ввод и вывод пользовательских типов. 91
31. Форматированный ввод. 92
32. Шаблоны функций. 98
33. Классы и шаблоны.. 106
Модульное проектирование программ
Модульной называют программу, составляемую из таких частей — модулей, что их можно независимо друг от друга программировать, транслировать, отлаживать (проверять, исправлять). Предполагается, что модули имеют небольшие размеры, четко определенные функции и, кроме того, их связи между собой максимально упрощены, в частности, предполагается, что модули имеют лишь одну точку входа (вначале модуля) и одну точку выхода. Разбиение программы на модули при ее написании позволяет существенно облегчить в дальнейшем работу над программой на других этапах.
После того как в алгоритме выявлены малозависимые друг от друга части, составление программы упрощается, так как при программировании каждой из этих частей почти не приходится заботиться об их взаимодействии с другими частями, что, в свою очередь, способствует уменьшению количества вносимых ошибок. Кроме того, малая зависимость модулей позволяет при необходимости существенно распараллелить составление программы, поручив программирование программистам разного класса, причем, всегда можно найти подходящую работу и для начинающих, и для опытных программистов.
На этапе отладки независимость модулей позволяет отлаживать их в любом порядке, в частности и одновременно. Считается, что усилия, затрачиваемые на отладку модуля, обычно пропорциональны квадрату его длины и поэтому при тестировании небольшие размеры модулей дают возможность поставить задачу о проверке всех ветвей таких модулей, что ведет к увеличению достоверности тестирования. Решение такой задачи является обычно недостижимым по отношению ко всей программе или крупным ее блокам, когда приходится ограничиваться лишь проверкой работы всех линейных участков блока и условий. Разумеется, и наиболее трудная часть отладки — локализация ошибок, проводимая для модулей, при этом значительно упрощается и ускоряется.
В силу минимальности логических связей между модулями облегчается внесение исправлений в алгоритм программы, поскольку меньше приходится заботиться о том, чтобы при изменении одной части программы не испортить работу другой ее части.
Замечание. Серьезной помощью в разработке программ могут стать библиотеки стандартных (типовых) модулей, заранее составленные автором или другими программистами. Применение при разработке ранее многократно опробованных модулей, трудность использования которых сводится только к заданию правильных аргументов, значительно ускоряет составление программы и облегчает ее отладку.
Программы разбивают на модули, чтобы:
1. упростить их разработку и реализацию;
2. облегчить чтение программ;
3. упростить их настройку и модификацию;
4. облегчить работу с данными, имеющими сложную структуру;
5. избежать чрезмерной детализации алгоритмов;
6. обеспечить более выгодное размещение программы в памяти ЭВМ.
1. Модуль — независимая программная единица, обеспечивающая отдельную от других модулей компиляцию.
2. Модуль должен реализовывать единственную функцию.
3. Модуль может вызывается по имени и, следовательно, обращаться к другому модулю.
4. Модуль имеет один вход и один выход.
5. Хороший модуль не использует глобальные переменные для общения с другим модулем, так как потом трудно отыскать, какой из них портит данные.
Подчиненность модулей удобно изображать схемой иерархии.
Рис.1 Схема иерархии.
Схема иерархии отражает только подчиненность модулей, но не порядок их вызова или функционирования программы. Схема иерархии обычно дополняется расшифровкой функций, выполняемых модулями.
Классификация строения программ.
Строение программ можно охарактеризовать следующим образом:
1. Монолитное. Программа написана цельным куском, без выделения каких-либо отдельных независимых частей.
2. Монолитно-модульное. Имеется достаточно большая монолитная главная часть программы, в которой производятся основные вычисления, и из которой происходят последовательные обращения к модулям.
3. Последовательно-модульное. Центральная часть программы состоит из последовательно выполняемых модулей, которые в свою очередь обращаются к другим модулям.
4. Иерархическое. Программа состоит из модулей, связи между которыми подчиняются строгой иерархии: каждый модуль может обращаться только к модулям, которые ему непосредственно подчинены. Возврат всегда должен происходить в вызывающий модуль, даже в том случае, если в вызываемом модуле обнаруживается ошибка, препятствующая дальнейшим вычислениям (правда, не все языки программирования имеют средства для выполнения этого требования).
5. Иерархически-хаотическое. Иерархическая (или последовательная) подчиненность модулей нарушена дополнительными связями.
6. Модульно-хаотическое. Программа состоит из модулей, но связи их между собой не отвечают принципу иерархии (или последовательности).
Последовательно-модульное и иерархическое (для более сложных программ) строение, как наиболее простые по логическим связям, являются теми образцами, к которым необходимо стремиться при разработке программы. Допустимыми вариантами являются иерархически-хаотическое и, может быть, монолитно-модульное.
Помимо модульности другим свойством, которое содействует предупреждению появления в программе ошибок, является структурированность.
С труктурированной называется программа, логическая структура которой отвечает некоторым жестко установленным требованиям.
Уже модульную программу можно иногда считать в определенной степени структурированной, поскольку от модульной программы требуется, например, чтобы она состояла только из модулей с одним входом.
— разделяет работу между исполнителями;
— открывает возможности для дальнейших переделок программы.
Структурные программы можно изучать последовательно, читая небольшие сегменты (одностраничные) программного текста. Логика выполнения каждого фрагмента задана в тексте явно и может быть изучена путем чтения сверху вниз.
2. Основные возможности C++
Язык С++ полностью включает в себя язык Си со всеми его ключевыми словами и операциями. Библиотеки языка Си также могут быть подключены к программам написанными на С++.
Язык Си++ является расширением языка Си за счет возможности объектного программирования, поэтому язык Си++ является совершенно новым языком программирования по сравнению с Си. Также в Си++ включены новые возможности, не касающиеся объектного программирования, но делающие написание программ более удобным и комфортным.
1. Комментарии. Введен новый символ комментария //. Вся строка после него считается комментарием.
2. Константы. В C++ для определения символических констант вместо директивы #define рекомендуется использовать объявление переменной с начальным значением и ключевым словом const.
Пример.
Такая переменная не может быть изменена и может использоваться везде, где требуется константа:
3. Встраиваемые функции. В C++ для определения функции, которая должна встраиваться в текст программы, используется ключевое слово inline.
Пример.
inline double SUMMA (double a, double b)
При определении и использовании встраиваемых функций нужно придерживаться следующих правил:
— определение и объявление функции inline должны быть совмещены и располагаться перед первым вызовом этой функции;
— имеет смысл определять с ключевым словом inline только очень маленькие функции;
— ключевое слово inline является только рекомендацией компилятору, что данную функцию надо сделать встраиваемой. Компилятор сам решает, будет функция встраиваемой или нет. В частности компилятор BorlandC++ не разрешает использовать в inline-функциях операторы цикла.
4. Объявление структур, смесей и перечислений. В C++, в отличие от Си, имена типов структур, перечислений и смесей рассматриваются как полноценные типы, определенные пользователем.
Пример.
struct path list;
Тот же фрагмент на C++:
5. Объявление переменных. В C++ разрешено объявлять переменную в любом месте программы, где это необходимо. На объявление переменной накладывается лишь одно требование: переменная должна быть объявлена к моменту ее использования.
Пример.
Переменная видна только в том блоке, в котором объявлена.
6. Новые операции. C++ полностью унаследовал набор и приоритеты языка Си, кроме того, были введены новые операции, расширяющие возможность языка.
1):: — операция разрешения области видимости, которая позволяет обратиться к глобальной переменной, если видима локальная переменная с тем же именем.
Пример.
printf (“i-строка=%s t i-целое=%d n”, i. i);
В результате выполнения программы получим:
i — строка = Hello i — целое =2
Так как эта операция нарушает модульность кода, то ее применение редко бывает оправдано и является плохой практикой. Основная причина ее введения — использование при организации классов.
2) В C++ для работы с динамической памятью введены две новые операции:
— операция new для распределения памяти;
— операция delete для освобождения памяти. Можно распределить память для одиночного объекта или массива объектов любого типа, в том числе и типа, определенного пользователем. Результатом выполнения будет указатель на отведенную память или нулевой указатель в случае ошибки.
Пример.
// Распределение одного элемента типа int
// Распределение массива из 20 элементов типа str
str *pstr=new str[20];
Память, полученная операцией new, будет распределена до тех пор, пока она не будет явно освобождена операцией delete, либо пока указатель не выйдет из области видимости.
Операция delete имеет формат:
delete указатель; // для одиночных переменных
delete []указатель; //для массивов
С помощью операции delete может быть освобождена только память, ранее распределенная операцией new.
Пример.
int *first = new int[5];
//Освобождение памяти из 5 элементов типа int
// Ошибка: mas не распределялась операцией new
7. Ссылки. В C++ введен новый тип данных – ссылка, который позволяет определить альтернативное имя переменной.
Синтаксис объявления ссылки:
Такое объявление фактически назначает переменной с именем «идентификатор1» второе имя «идентификатор2». Ссылка при объявлении всегда должна быть проинициализирована, и затем ее уже нельзя изменить.
Пример.
int // alt является ссылкой на а
Объявление ссылки напоминает объявление указателя, только вместо «*» используется «alt.
Ссылку можно рассматривать как постоянный указатель, который всегда разадресован, и потому для него не надо выполнять операцию разадресации «*». Ссылка не создает копии объекта, а является другим именем объекта.
8. Объявление функций. В языке Си объявление функции перед ее использованием было желательным, но не обязательным условием. В языке C++ все функции должны быть объявлены с полным списком типов формальных параметров и с указанием типа возвращаемого значения, т.е. должны иметь прототип. Компилятор C++ при вызове функции производит контроль на соответствие типов фактических аргументов формальным параметрам, а также преобразование аргументов к требуемому типу, если это возможно. В С++ объявления функций имеют ту же область видимости, что и переменные,. то есть, если функция объявлена в блоке, то это объявление локально для данного блока.
9. Передача аргументов функции по ссылке. Она может быть использована в двух случаях:
— для передачи в функцию больших структур, чтобы избежать копирования в стек;
— для передачи в функцию аргумента, который должен быть изменен функцией.
Можно для обоих случаев воспользоваться указателем, но его использование влечет за собой дополнительные расходы на разадресацию в функции и передачу адреса вместо самого фактического аргумента.
Пример.
void swap (int *a, int *b)
Источник: mydocx.ru