Модульный принцип программирования. Подпрограммы. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Модульный принцип программирования. Подпрограммы.



Принципы проектирования программ сверху вниз

И снизу вверх

В Паскале подпрограммы называются процедурами и функциями и описываются в разделе с тем же названием.

Процедура имеет такую же структуру, как и программа, но с двумя отличиями:

• заголовок процедуры имеет другой синтаксис и включает служебное слово procedure;

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

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

 

procedure <имя> (<список описаний формальных параметров>) Описание формальных параметров может иметь вид:

<список имен>: <тип> или var <список имен>: <тип>

 

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

Оператор вызова процедуры имеет вид:

 

<имя процедуры> (<список выражений>);

 

Указанные выражения называют фактическими параметрами. Их список должен точно соответствовать списку описаний формальных параметров процедуры. Во время вызова процедуры каждому параметру-значению присваивается значение соответствующего фактического параметра и поэтому их обычно используют для передачи входных данных.

Параметры-переменные следует использовать для представления результатов процедуры.

Функция – это подпрограмма, определяющая единственное скалярное, вещественное или строковое значение. Отличия подпрограммы-функции от процедуры состоят в следующем:

• заголовок функции начинается со служебного слова function и заканчивается указанием типа значения функции:

 

function <имя> (список описаний формальных параметров): <тип>;

 

• раздел операторов функции должен содержать хотя бы один оператор присваивания имени функции;

• обращение к функции – не оператор, а выражение вида:

 

<имя функции> (<список фактических параметров>).

Функции (и процедуры) могут использовать свое имя в собственном описании, т.е. могут быть рекурсивными.

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

Бывают случаи, когда одни и те же подпрограммы могут использоваться в различных программах одного и даже нескольких пользователей. В подобных ситуациях целесообразно создавать внешние подпрограммы, которые можно в необходимый момент подключать в любые программы. Как правило, их объединяют в отдельные пакеты, так называемые библиотеки внешних подпрограмм. Могут создаваться личные и специализированные библиотеки коллективного пользования и др. С одной из таких библиотек – встроенной библиотекой стандартных подпрограмм – пользователи имеют дело практически всегда. В состав этой библиотеки входят процедуры и функции вычисления значений ряда элементарных функций: синуса, косинуса, экспоненты и т.д., процедуры и функции обработки символьных величин, процедуры ввода-вывода и др. Встроенная библиотека подключается к любой программе автоматически при компиляции. Поэтому откомпилиро-ванный файл с расширением.com (иногда называемый «комовским»), как правило, занимает в 8 – 10 раз больше места в памяти, чем исходный текст.

Внешние подпрограммы создаются обычным образом в виде отдельного файла или файлов. Для их подключения в программе пользователя в разделе описания ставится директива $I имя файла. С этого момента все процедуры и функции внешнего файла становятся внутренними для программы, и на все входящие в него процедуры и функции распространяется правило локальных и глобальных переменных. В этой связи директива подключения внешнего файла должна размещаться после описания всех ею используемых глобальных параметров, процедур и функций.

Модули используют в Паскале для создания библиотек и разделения больших программ на логически связанные, независимые друг от друга составные части. В состав модуля входят следующие разделы: заголовок, интерфейс, реализация, инициализация. Заголовок необходим для ссылок на модуль. Интерфейс содержит объявления, включая процедуры и функции, представленные списком заголовков и доступные пользователям в теле основной программы. Раздел «реализация» содержит тела процедур и функций, перечисленных в интерфейсной части модуля. Раздел «инициализация» содержит операторы, необходимые для инициализации модуля. Таким образом, модуль – это набор констант, типов данных, переменных, процедур и функций. Каждый модуль компилируется отдельно. Каждый элемент модуля можно использовать в программе пользователя без дополнительного объявления, для чего достаточно записать имя используемого модуля в директиве Uses в начале программы после его заголовка.

В стандартных модулях CRT, GRAPH содержатся сервисные процедуры и функции по работе с экраном дисплея, с клавиатурой, графическими примитивами и т.п. Модули подключаются к программе путем специальной команды, размещаемой сразу после заголовка: Uses <имя модуля>.

 

 

Объектно-ориентированное программирование

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

Объектно-ориентированное программирование (ООП) — это методика разработки программ, в основе которой лежит понятие объекта. Объект — это некоторая структура, соответствующая объекту реального мира, его поведению. Задача, решаемая с использованием методики ООП, описывается в терминах объектов и операций над ними, а программа при таком подходе представляет собой набор объектов и связей между ними.

Класс

Классический язык Pascal позволяет программисту определять свои собственные сложные типы данных — записи (records). Object Pascal, поддерживая концепцию объектно-ориентированного программирования, дает возможность определять классы. Класс — это сложная структура, включающая, помимо описания данных, описание процедур и функций, которые могут быть выполнены над представителем класса — объектом.

Вот пример объявления простого класса:

TPerson = class

private

fname: string[15]; faddress: string[35];

public

procedure Show;

end;

Данные класса называются полями, процедуры и функции — методами.

В приведенном примере TPerson — это имя класса, fname и faddress – имена полей, show — имя метода.

Объект

Объекты как представители класса объявляются в программе в разделе var, например:

var

student: TPerson; professor: TPerson;

В Object Pascal объект — это динамическая структура. Переменная-объект содержит не данные, а ссылку на данные объекта. Поэтому программист должен позаботиться о выделении памяти для этих данных.

Выделение памяти осуществляется при помощи специального метода класса — конструктора, которому обычно присваивают имя Create (создать). Для того чтобы подчеркнуть особую роль и поведение конструктора, в описании класса вместо слова procedure используется слово constructor.

Выделение памяти для данных объекта происходит путем присваивания значения результата применения метода-конструктора к типу (классу) объекта. Например, после выполнения инструкции:

professor:= TPerson.Create;

выделяется необходимая память для данных объекта «professor».

Помимо выделения памяти, конструктор, как правило, решает задачу присваивания полям объекта начальных значений, т. е. осуществляет инициализацию объекта. Ниже приведен пример реализации конструктора для объекта TPerson:

constructor TPerson.Create;

begin

fname:= '';

faddress:= '';

end;

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

После объявления и инициализации объект можно использовать, например, установить значение поля объекта. Доступ к полю объекта осуществляется путем указания имени объекта и имени поля, которые отделяются друг от друга точкой. Хотя объект является ссылкой, правило доступа к данным с помощью ссылки, согласно которому после имени переменной, являющейся ссылкой, надо ставить значок ^, на объекты не распространяется.

Если в программе какой-либо объект больше не используется, то память, занимаемую полями данного объекта, можно освободить. Для выполнения этого действия используют метод-деструктор Free. Например, для того, чтобы освободить память, занимаемую полями объекта professor, достаточно записать: professor. free;

Метод

Методы класса (процедуры и функции, объявление которых включено в описание класса) выполняют действия над объектами класса. Для того чтобы метод был выполнен, необходимо указать имя объекта и имя метода, отделив одно имя от другого точкой. Например, инструкция:

professor. Show;

вызывает применение метода «show» к объекту «professor». Фактически инструкция применения метода к объекту — это специфический способ записи инструкции вызова процедуры.

Методы класса определяются в программе точно так же, как и обычные процедуры и функции, за исключением того, что имя процедуры или функции, являющейся методом, состоит из двух частей: имени класса, к которому принадлежит метод, и имени метода. Имя класса от имени метода отделяется точкой.



Поделиться:


Последнее изменение этой страницы: 2016-08-16; просмотров: 375; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.139.86.56 (0.017 с.)