Типизация и организация данных
End function
End sub
вызов процедуры:
call Имя_Процедуры(список значений параметров)
или
Имя_Процедуры(список значений параметров)
Рис. 1.2. Описание и вызов процедуры
В принципе, внутри процедуры можно определять множество данных и через параметры передавать их в основную программу. Тогда в список параметров надо добавить дополнительные параметры, а в список значений параметров при вызове процедуры – имена данных, которые определяются в процедуре.
Функции определяют значение одного данного. В отличие от описания процедуры в конце тела функции стоит команда, связывающая имя функции с конкретным ее значением. Это необходимо для передачи значения функции в основную программу. Как видно из рис. 1.3, функция может вызываться в правой части выражения, содержащего знак равенства (в том числе и как составная часть некоторого выражения), а так же как параметр или один из элементов списка параметров некоторой команды, например, команды PRINT (печатай).
описание функции:
function Имя_Функции(список аргументов)
< Команды функции (тело функции)>
Имя_функции = значение(т.е. число, строка или вычисляемое выражение)
вызов функции
Имя_данного = Имя_функции(список значений аргументов)
или
Команда Имя_Функции(список значений аргументов)
Рис. 1.3. Описание и вызов функции
Совершенно очевидно, что для различных данных существуют свои алгоритмы их обработки. Например, сумма чисел 123 и 345 равна 468, а сумма (результат слияния) строк “123” и “345” получает значение “123345”. Следовательно, желательно каким-то образом указывать способ обработки данных. Для данных необходимо указывать и их длину. Это позволит системе выделить соответствующее место (количество байтов) в ОЗУ, отводимых для хранения данных. Например, для данных, имеющих два альтернативных значения, вполне достаточно одного бита, для целых чисел в пределах -32767 … +32768 – двух байтов и т.д.
Интегральной характеристикой данных является их тип, одновременно указывающий и способ их обработки и длину. В тексте программы имеется раздел описания данных на основе простых типов. Современные системы программирования предусматривают простые типы данных, приведенные в табл. 1.2.
Таблица 1.2
Простейшие распространенные типы данных
Тип | Название | Длина, байт | Диапазон |
Boolean | Логические | False – True | |
Integer | Простые целые | -32768 … +32767 | |
Long | Длинные целые | -2147483648 … +2147483647 | |
Single (real) | Числа с плавающей точкой одинарной точности | -3402823х1038…-1401298х10-45 и +1401298х10-45…+3402823х10-45 | |
Double | Числа с плавающей точкой двойной точности | -179769313486232х10308… -4940656458412478х10-324 и +4940656458412478х10-324… +179769313486232х10308 | |
String | Строковые данные постоянной или переменной длины | 1 байт на символ | |
Date | Дата и время | Даты с 01.01.100 по 31.129.9999 Время с 00:00:00 по 23:59:59 |
Кроме перечисленных часто встречающихся типов возможны другие простые типы – число с фиксированной точкой, байт, безтиповые и др.
Современные системы программирования позволяют также на основе простых типов данных конструировать свои сложные типы данных. Например, можно создать тип данных студент,являющийся комбинацией данных string (для имени) и integer (для года рождения).
Для хранения однотипных данных одинакового назначения существует специальный способ организации данных – массив. Данные, объединенные в массив, называются элементами массива и имеют общее символьное имя и уникальные номера. Доступ к элементам массива осуществляется по имени и номеру. Конкретный адрес вычисляется на основании символьного эквивалента адреса (имени), типа данных (т.е. их длины) и номера. Номер элемента (индекс) записывается в скобках (круглых или квадратных).
Следует уяснить разницу между данными с именами, включающими цифры (например, А1, А2, … А100) и похожими на них элементами массива (А[1], А[2], … А[100]). Первые данные никак не связаны между собой, поэтому невозможно определить адрес данного с именем А2 по адресу данного с именем А1. И, наоборот, зная адрес элемента массива А[1], легко можно определить адрес элемента массива с любым номером.
1.4.4. Глобальные и локальные данные.
Статические и динамические данные
Представим себе ситуацию, показанную на рис. 1.4. Внутри описания процедуры есть команда "присвоить данным с именем "х" значение 5". В тексте программы аналогичной командой данным с именем "х" присваивается значение 10, а затем вызывается процедура. Что будет напечатано?
|
Аналогичная ситуация возникает с различными описаниями и определениями значений одноименных данных, разнесенными по множеству модулей. Поэтому приходится описывать данные и указывать их видимость.
|
.
Существует соглашение, согласно которому описание данных как локальных внутри блочной структуры отменяет внутри нее описание одноименных глобальных данных. Таким образом, если мы вне процедуры опишем х как глобальные данные, а внутри процедуры не укажем, что х – локальные данные, то результат будет х=5, если внутри процедуры опишем данные х как локальные, то результат будет х=10, а значение х=5 будет утеряно.
Описывая данные, мы можем указать необходимость выделения места в ОЗУ под массив на все время работы программы или на короткое время. В первом случае мы имеем дело со статическими данными, во втором – с динамическими.
|
1.4.5. Объектно-ориентированное
программирование
Очень важным шагом в развитии программирования как науки является появление объектов – фрагментов программы, выполняющих комплексы некоторых заранее условленных действий и характеризующихся рядом параметров. Действия выполняются процедурами и функциями, которые называются методами объекта, параметры – полями объекта. Обычно объект задается перечнями полей и методов, причем методы в дальнейшем должны быть описаны.
Например, наиболее распространенным элементом интерфейса пользователя является окно. Его можно рассматривать как объект, характеризующийся полями:
x,y - координаты левого верхнего угла окна на экране,
l,h - размеры (ширина и высота),
simvol, fon - цвета текста и фона окна.
Как объект окно обладает хотя бы одним методом, например, процедурой рисования окна RisOkno. При необходимости список полей и методов можно существенно расширить. Описание окна как объекта (не в символах языков программирования), показано на рис. 1.5.
Окно = объект
x,y : <указание типа данных>
l,h : <указание типа данных>
simvol, fon : <указание типа данных>