Модули и объекты в языке Турбо Паскаль 7.0
Модули и объекты в языке Турбо Паскаль 7.0
Министерство образования Российской Федерации
Таможенный колледж
Оренбургский Государственный Аграрный Университет
Бузулукское представительство
КУРСОВАЯ РАБОТА
по дисциплине "Основы алгоритмов и программирования"
Модули и объекты в языке Турбо Паскаль 7.0
Руководитель
работы
________________Симонова С.В.
"______"________________2002г.
Исполнитель
Студент
гр. 34 АСОИ и У
______________Кислинский С.В.
"______"________________2002г.
Бузулук 2002
Содержание
Введение…............................................................
.................................стр. 3
1 Модули…………………………………………………...……..........стр. 4
1.1 Структура модулей………………………………………...........стр. 6
1.2 Заголовок модулей и связь модулей друг с другом……….…стр. 8
1.3 Интерфейсная часть……………………………………………стр. 9
1.4 Исполняемая часть………………………………………...…...стр. 10
1.5 Инициирующая часть………………………....…………...…стр. 11
1.6 Компиляция модулей………………………………….......…стр. 12
1.7 Доступ к объявленным в модуле объектам……………..........стр. 14
1.8 Стандартные модули…………………………………………стр. 15
2 Объекты……………………………………………………………..стр. 17
2.1 Основные принципы ООП……………………………………стр. 19
2.2 Инкапсуляция………………………………………………….стр. 20
2.3 Наследование…………………………………………………стр. 22
2.4 Полиморфизм…...……………………………………………стр. 24
Заключение……………………………………………………………стр. 26
Список используемых источников…………………………………..стр. 27
Приложение А………………………………………………………...стр. 28
Введение
В 1992 году фирма Borland International выпустила два пакета
программирования на использовании языка Паскаль, - Borland Pascal 7.0 и
Turbo Pascal 7.0.
Пакет Borland Pascal 7.0 учитывает многие новейшие достижения в
программировании и практике создания программ и включает в себя три режима
работы: в обычном режиме операционной системы MS DOS, в защищенном режиме
MS DOS и в среде Windows. Обладая расширенными возможностями, пакет Borland
Pascal 7.0 тем не менее требует для использования всех своих возможностей
довольно большую память – примерно 30 Мбайт на жестком диске и не менее 2
Мбайт оперативной памяти.
Пакет Turbo Pascal 7.0 обладает ограниченными возможностями и
позволяет работать только в обычном режиме MS DOS. Начинающему
программисту, по-видимому, целесообразно начать изучение языка и среды
именно с этого пакета.
Язык характеризуется расширенными возможностями по сравнению со
стандартом, хорошо развитой библиотекой модулей, позволяющих использовать
возможности операционной системы, создавать оверлейные структуры,
организовывать ввод-вывод, формировать графическое изображение и т.д.
Среда программирования позволяет создавать тексты программ,
компилировать их, находить ошибки и оперативно их исправлять, компоновать
программы из отдельных частей, включая стандартные модули, отлаживать и
выполнять отлаженную программу.
В данной работе будут описаны основные возможности языка, работа в
интегрированной среде, набор стандартных модулей.
Паскаль ( замечательный язык программирования, который относительно
прост в изучении, довольно ясен и логичен и, будучи первым изучаемым языком
программирования, приучает к хорошему стилю. Паскаль воспитывает дисциплину
структурного программирования и программирования вообще лучше, чем другие
языки программирования, такие, как, например Бейсик.
Паскаль – гибкий и развитый в отношении типов данных язык.
Привлекательны его рекурсивные возможности, а также поддержка технологии
объектно-ориентрованного программирования.
1 Модули
Модуль ( это автономно компилируемая программная единица, включающая
в себя различные компоненты раздела описаний (типы, константы, переменные,
процедуры и функции) и, возможно, некоторые исполняемые операторы
инициирующей части.
Наличие модулей в Turbo Pascal позволяет программировать и
отлаживать программу по частям, создавать библиотеки подпрограмм и данных,
воспользоваться возможностями стандартных модулей, практически
неограниченно увеличивать кодовую (содержащую коды команд) часть программы.
Модуль содержит описания типов данных, переменных и других объектов,
а также подпрограммы, которые используются в различных программах.
Подпрограмму имеет смысл включать в состав модуля в том случае, когда она
реализует действие, которое приходится выполнять достаточно часто.
Подпрограммы, входящие в модуль, можно написать, отладить и откомпилировать
один раз, а использовать многократно.
Модули представляют собой прекрасный инструмент для разработки
библиотек прикладных программ и мощное средство модульного
программирования. Важная особенность модулей заключается в том, что
компилятор Турбо Паскаля размещает их программный код в отдельном сегменте
памяти. Максимальная длина сегмента не может превышать 64 Кбайта, однако
количество одновременно используемых модулей ограничивается лишь доступной
памятью, что дает возможность создавать весьма крупные программы.
Доступ к описаниям, функциям и процедурам модуля обеспечивает
оператор использования Uses, в котором указывается имя модуля. Этот
оператор размещается в разделе описаний программы, сразу после заголовка.
Если в программе используется не один модуль, а несколько, необходимо
указать имена всех модулей, перечислив их через запятую. Исключением
является модуль System, ссылка на который необязательна. Этот модуль
содержит, в частности, процедуры файлового ввода/вывода, процедуры и
функции для работы со строками и некоторые другие.
Модуль начинается заголовком
unit unit_name;
где unit_name – имя модуля, которое выбирается в соответствии с
правилами Паскаля. Файл, содержащий модуль, обязан иметь то же имя, что и
модуль.
Разберем в качестве примера модуль с описанием гиперболических
функций, которых нет в числе встроенных функций языка Паскаль, но эти
функции достаточно часто появляются в прикладных задачах, и поэтому имеет
смысл включить их в состав библиотечного модуля. Доступ к функциям из этого
модуля обеспечивает оператор использования Uses, в котором указывается имя
модуля. Итак, сам модуль выглядит следующим образом.
{$N+}
unit hyp_fun;
interface
type
Float = Extended;
function sinh(x: Float): Float;
function cosh(x: Float): Float;
function tanh(x: float): Float;
implementation
var
t: Float;
function sinh(x: Float): Float;
begin
t := Exp(x);
sinh := 0.5*(t – 1.0/t);
end;
function cosh(x: Float): Float;
begin
t := Exp(x);
cosh := 0.5*(t + 1.0/t);
end;
function tanh(x: Float): Float;
begin
t := Exp(2.0*x);
tanh := (t – 1.0) / (t + 1.0);
end;
end.
Зарезервированные слова interface и implementation здесь играют
важную роль. Каждый модуль имеет части (секции), озаглавленные этими
словами. Секция interface (она называется интерфейсной секцией) содержит
описания констант, типов, переменных и процедур, доступных из вызывающей
программы или модуля. Секция implementation (секция реализации) содержит
исходный код программы. Она может также содержать локальные описания, такие
как var t: Real; из нашего примера.
Каждый модуль начинается с зарезервированного слова unit и
заканчивается словом end, за котором следует точка. Для этого end не
требуется соответствующего слова begin, хотя можно и поставить его
непосредственно перед end. Оператор type в начале нашего модуля определяет
тип Float, который в данном случае эквивалентен типу Extended. Указав,
справа от знака равенства любой другой эквивалентный тип, можно изменить
точность вычисления гиперболических функций.
1.1 Структура модулей
Модуль имеет следующую структуру:
|Unit module_name |
|Interface |
|Интерфейсная секция |
|Implementation |
|Секция реализации |
|Секция инициализации |
Рис. 1. Структура модуля
Здесь Unit ( зарезервированное слово (единица), начинает заголовок
модуля; name ( имя модуля (правильный идентификатор). Interface –
интерфейсная секция – содержит те описания типов, переменных и других
объектов данных, которые можно использовать в других программах или
модулях. Секция реализации начинается с зарезервированного слова
implementation. Все описания, содержащиеся в секции реализации, являются
локальными, их область действия – данный модуль. Здесь же содержаться
полные описания функций и процедур модуля. Последняя часть модуля – секция
инициализации. Она может быть пустой и содержать только зарезервированное
слово end или включать в себя исполняемые операторы, выполняющие
необходимые действия по инициализации (например, по присваиванию начальных
значений переменным) модуля.
В качестве примера рассмотрим модуль func1 /см. приложение А/,
расширяющий вычислительные возможности Турбо Паскаля, так как он содержит
функции, отсутствующие в стандартных модулях системы. Среди «стандартных»
функций – синус (Sin), косинус (Cos), арктангенс (ArcTan), экспонента
(Exp), натуральный логарифм (Ln), квадрат числа (Sqr) и квадратный корень
из него (Sqrt). В модуле func1 имеются тангенс (Tan), арксинус (ArcSin) и
арккосинус (ArcCos), функции перевода градусной меры в радианную и наоборот
(Degrees_to_Radians, Radians_to_Degrees), набор гиперболических функций
(Sinh, Cosh, Tanh), а также десятичный логарифм (Log10) и произвольная
степень числа (Power).
Напомню математическое определение гиперболических функций:
[pic]
[pic]
[pic]
В нашем примере интерфейсная секция содержит описания вещественного
типа float, а также константу Infinity – «бесконечно большое значение».
Бесконечность здесь понимается, разумеется, в смысл машинной арифметики,
как значение, близкое к максимально допустимому для типа Extended. Далее
следуют заголовки функций модуля.
Секция реализации содержит константы, используемые в подпрограммах-
функциях. Затем идут полные описания функций. Вычисление тангенса
использует «классическое» определение этой функции как отношение синуса к
косинусу. Учтено также приближение значения тангенса к бесконечности при
определенных значениях аргумента. В этом случае функция возвращает
«машинную бесконечность».
При программировании арксинуса и арккосинуса следует учитывать то,
что эти функции – многозначные. В нашем случае вычисляется «главное
значение», лежащее в интервале [-(/2, (/2] (для арксинуса) или [0, (] (для
арккосинуса) радиан. Для этого используются формулы, известные из курса
элементарной математики.
При вычислении гиперболических функций учитывается то
обстоятельство, что уже при относительно небольших значениях аргумента
вычисление экспоненты приводит к арифметическому переполнению. В этом
случае функция возвращает «бесконечное» значение.
1.2 Заголовок модуля и связь модулей друг с другом
Заголовок модуля состоит из зарезервированного слова Unit (
следующего за ним имени модуля. Для правильной работы среды Турбо Паскаля и
возможности подключения средств, облегчающих разработку крупных программ,
это имя должно совпадать с именем дискового файла, в который помещается
исходный текст модуля. Если, например, имеем заголовок
Unit Global;
то исходный текст соответствующего модуля должен размещаться в
дисковом файле GLOBAL.PAS. Имя модуля служит для его связи с другими
модулями и основной программой. Эта связь устанавливается специальным
предложением
Uses
Здесь Uses - зарезервированное слово (использует);
- список модулей, с которыми устанавливается связь;
элементами списка являются имена модулей, отделяемые друг от друга
запятыми, например:
Uses CRT, Graph, Global:
Если объявление Uses... используется, оно должно открывать раздел
описаний основной программы. Модули могут использовать другие - модули.
Предложение Uses в модулях может следовать либо сразу за зарезервированным
словом Interface, либо сразу за словом Implementation.
1.3 Интерфейсная часть
Через интерфейс осуществляется взаимодействие основной программы с
модулем (модуля с модулем). В интерфейсе указываются константы, типы,
переменные, процедуры и функции, которые могут быть использованы основной
программой (модулем) при вызове этого модуля.
Интерфейсная часть открывается зарезервированным словом Interface. В
этой части содержатся объявления всех глобальных объектов модуля (типов,
констант, переменных и подпрограмм), которые должны стать доступными
основной программе и/или другим модулям. При объявлении глобальных
подпрограмм в интерфейсной части указывается только их заголовок, например:
Unit Cmplx;
Interface
type
complex = record
re, Im : real
end;
Procedure AddC (x, у : complex; var z : complex);
Procedure MulC (x, у : complex; var z : complex);
Если теперь в основной программе написать предложение
Uses Cmplx;
то в программе станут доступными тип Complex и две процедуры ( AddC и МulC
из модуля Cmplx.
Отметим, что объявление подпрограмм в интерфейсной части
автоматически сопровождается их компиляцией с использованием дальней;
модели памяти. Таким образом, обеспечивается доступ к подпрограммам из
основной программы и других модулей.
Следует учесть, что все константы и переменные, объявленные
интерфейсной части модуля, равно как и глобальные константы и переменные
основной программы, помещаются компилятором Турбо Паскаля в общий сегмент
данных (максимальная длина сегмента 65536 байт). Порядок появления
различных разделов объявлений и их количество может быть произвольным. Если
в интерфейсной части объявляются внешние подпрограммы или подпрограммы в
машинных кодах, их тела (т.е. зарезервированное слово External, в первом
случае, и машинные коды вместе со словом Inline ( во втором) должны
следовать сразу за их заголовками в исполняемой части модуля (не в
интерфейсной). В интерфейсной части модулей нельзя использовать опережающее
описание.
В интерфейсах различных модулей недопустимо циклическое обращение
друг к другу, т.к. компилятор в этом случае не может установить связей.
1.4 Исполняемая часть
Исполняемая часть включает все подпрограммы модуля. Она может также
включать локальные метки, константы, типы и переменные.
Исполняемая часть начинается зарезервированным словом
Implementation и содержит описания подпрограмм, объявленных в интерфейсной
части. В ней могут объявляться локальные для модуля объекты -
вспомогательные типы, константы, переменные и блоки, а также ( метки, если
они используются в инициирующей части.
Описанию подпрограммы, объявленной в интерфейсной части модуля, в
исполняемой части должен предшествовать заголовок, в котором можно опускать
список формальных переменных (и тип результата для функции), так как они
уже описаны в интерфейсной части. Но если заголовок подпрограммы приводится
в полном виде, т.е. со списком формальных параметров и объявлением
результата, он должен совпадать с заголовком, объявленным в интерфейсной
части, например:
Unit Cmplx;
Interface
type
complex = record;
re, im: Real;
end;
Procedure AddC (x, у : complex; var r : complex);
Implementation
Procedure AddC;
begin
z.re := x.re + y.re;
z,im := x.Im * y.im;
end;
end.
Локальные переменные и константы, а также все программные коды,
порожденные при компиляции модуля, помещаются в общий сегмент памяти.
В отличие от интерфейсов модулей в исполнительных частях модулей
допустимо циклическое обращение друг к другу, т.к. все равно взаимодействие
осуществляется через интерфейсы, и здесь не возникает проблемы с
Страницы: 1, 2, 3
|