В последние годы развивается объектно-ориентированный подход к программированию. Наиболее полно он реализован в языках Форт и СМОЛТОК. Форт сочетает в себе свойства операционной системы, интерпретатора и компилятора одновременно. Основной чертой языка является его открытость. Программист может легко добавлять новые операции, типы данных и определения основного языка. Форт позволяет поддерживать многозадачный режим работы, использует принцип одновременного доступа программ. К объектно-ориентированным средам разработки программ можно отнести Delphi, Visual Basic, Visual FoxPro.
К функциональнымязыкам программирования можно отнести языки Лиеп, Пролог И Снобол. Лиеп является инструментальным средством для построения программ с использованием методов искусственного интеллекта. Особенность этого языка заключается в удобстве динамического создания новых объектов. В качестве объектов могут выступать и сами исходные объекты. В настоящее время для Лиепа определились две сферы активного применения: проектирование систем искусственного интеллекта и анализ текстов на естественном языке.
Нетрудно заметить, что языка, который был бы идеальным для всех случаев, не существует. Какой язык является лучшим, надо определять в каждой конкретной ситуации. Поэтому перед разработкой программы следует установить:
1. назначение разрабатываемой программы;
2. время выполнения программы;
3. ожидаемый размер программы – хватит ли объема памяти?
4. необходимость сопряжения программ с другими пакетами или программами;
5. возможность и необходимость переноса программы на другие типы компьютеров;
6. основные типы данных, с которыми будет работать программа;
7. характер и уровень использования в программе аппаратных средств (дисплея, клавиатуры, НМД и др.);
8. возможность и целесообразность использования стандартных библиотек программ.
II.2 Структурное и объектно-ориентированное программирование
Рассмотрим идею структурного и объектно-ориентированного программирования с использованием языка Pascal.
Возможность структурного программирования в ТП 7.0 заключается в разделении программы на меньшие программы, оформив последние как процедуры и функции.
При создании процедур или функций пытаются достичь целей:
1. разделения некоторой большой общей задачи на несколько меньших по объему и сложности частных задач;
2. уменьшения объема программы за счет многократного применения команд, формируемых в виде отдельных процедур или функций;
3. универсализации применения процедур или функций, то есть решение частной задачи обобщается с той целью, чтобы ее можно было использовать для решения широкого круга задач.
Таким образом, структурное программирование привело к разделению труда среди программистов. Это значит, что каждый программист может заниматься разработкой конкретной частной задачи, поставленной перед ним. Ему не обязательно знать настоящих размеров проекта, так как его задача может составлять лишь малую часть последнего.
Структура процедуры, функции:
Раздел объявлений и соглашений | |
PROCEDURE (FUNCTION) | Имя процедуры (функции) со списком параметров; |
LABEL | Подраздел объявления локальных меток; |
CONST | Подраздел объявления локальных констант; |
TYPE | Подраздел объявления локальных типов; |
VAR | Подраздел объявления локальных переменных; |
Раздел вложенных процедур и функций | |
PROCEDURE (FUNCTION) | Имя вложенной процедуры (функции) |
LABEL | Подраздел объявления локальных меток; |
CONST | Подраздел объявления локальных констант; |
TYPE | Подраздел объявления локальных типов; |
VAR | Подраздел объявления локальных переменных; |
BEGIN | |
Раздел основного блока процедуры или функции | |
END; |
Непосредственно текст процедуры располагается в разделе объявлений и соглашений основной программы перед оператором BEGIN основной программы. Завершается описание процедуры оператором END;. Начинается блок описания процедуры (функции) оператором BEGIN.
Процедура может содержать также при необходимости и вложенные процедуры, описанные согласно структуре.
Все переменные, метки, константы, типы, описанные внутри процедуры (функции), называемые локальными, доступны только внутри ее, но не в основной программе. Глобальные переменные, типы, константы, метки можно использовать внутри процедуры (функции).
Объявление процедуры:
PROCEDURE <Имя процедуры> (Список параметров);
Список параметров может отсутствовать.
Объявление функции:
FUNCTION <имя функции>(Список параметров):<Тип возвращаемого результата>;
Список параметров может отсутствовать.
Вызов процедуры (функции) в основной программе выполняется командой:
<Имя процедуры>(Список параметров);
<Имя функции>(Список параметров);
Если в описании процедуры (функции) список параметров отсутствует, то вызов последней выполняется просто командой:
<Имя процедуры>;
<Имя функции>;
Пример: PROCEDURE INPUT(VAR P1:Integer; P2,P3:Byte);
Здесь: P1 – параметр-переменная ,P2,P3 – параметры-значения, INPUT – имя процедуры.
Перед параметром-переменной всегда ставится VAR. Это значит, что при выполнении процедуры параметр P1 может изменяться в отличие от параметров P2,P3, поглощаемых процедурой.
Рассмотрим пример задачи: сложение двух целых чисел.
1 вариант решения задачи
Program Summa;
Uses Crt;
Var A,B,S: LongInt;
Procedure SSS(Var SUM:LongInt; A,B:LongInt);
Begin
SUM:=A+B;
End;
Begin {Основной блок программы}
ClrScr;
Write(‘Введите числа а и b=’);
ReadLn(A,B);
{Вызов процедуры SSS для поиска суммы}
SSS(S,A,B); {В глобальную переменную S считывается значение локальной переменной Sum вызываемой процедуры, значения А и В «поглощаются» процедурой для суммирования}
WriteLn(‘Сумма А+В=’,S);
ReadKey;
End.
2 вариант решения задачи
Program Summa;
Uses Crt;
Var A,B,S: LongInt;
Function SSS(A,B:LongInt):LongInt;
Begin
SSS:=A+B;
End;
Begin {Основной блок программы}
ClrScr;
Write(‘Введите числа а и b=’);
ReadLn(A,B);
{Вызов функции SSS для поиска суммы}
S:=SSS(A,B); {В переменную S считывается значение функции SSS, переменные A,B – параметры, необходимые для суммирования}
WriteLn(‘Сумма А+В=’,S);
ReadKey;
End.
Идея современного подхода к программированию – объектно-ориентированного – заключается в объединении данных и обрабатываемых их процедур в единое целое - объект. Таким образом, программа представляется в виде совокупности объектов, каждый из которых есть реализация некоторого класса (типа).
Весь окружающий мир состоит из объектов (предметов живой и неживой природы), а объекты, используемые в программировании, являются высшим уровнем абстракции данных.
Приведем пример: пусть задан некоторый класс (тип) под названием «геометрический объект», включающий в себя подклассы геометрических фигур «плоская» и «объемная». В свою очередь, подклассы могут подразделяться на подклассы: «с вершинами», «без вершин». Подкласс «без вершин» может подразделятся на «окружность» и «эллипс». Таким образом, представлена иерархия объектов, причем здесь соблюдается следующее правило: свойства и методы, определенные ранее в более общем объекте (в зависимости от уровня), наследуются последующими (более специфическими объектами).
В основе ООП лежат три основных понятия:
- наследование: данный объект может наследовать свойства объекта и добавлять свойства, характерные только для данного объекта; в рассмотренном выше примере объект «геометрическая фигура» является объектом-предком, включающий в себя остальную иерархию объектов-потомков. Здесь все свойства и методы объекта-предка могут быть использованы объектами-потомками.
- инкапсуляция: объединение данных и методов (процедур и функций) в одно целое – объект;
- полиморфизм: при описании наследников некоторого объекта существует возможность модифицировать методы объекта-предка внутри объекта-наследника, т. е. объект-наследник может иметь методы с такими же именами как и объект-предок, но выполняющие другие функции.
Объект – определяемый пользователем тип, содержащий в себе как данные, так и подпрограммы для их обработки. Данные объекта называют полями, а подпрограммы для их обработки – методами объекта.
Инкапсуляцией называют объединение данных и методов обработки в одном типе.
Данные типа объект в программе описываются в разделе описания типов TYPE:
TYPE
{Описание полей объекта}
<Имя>=OBJECT
<поле 1>:<Тип 1>;
<поле 2>:<Тип 2>;
………………..
<поле N>:<Тип N>;
{Описание методов объекта}
PROCEDURE <Имя метода 1>[(параметры)];
……………………..
FUNCTION <Имя метода N>[(параметры)]:<Тип>;
END;
Требования, предъявляемые к полям и методам объекта:
1) Необязательное: поля объекта обрабатываются только с помощью его методов.
2) Обязательное: поля объекта являются параметрами по умолчанию для его методов, т.е. не допускается указание в списке параметров-переменных с такими же именами как и поля.
Описание методов объектов производится по составному имени:
имя объекта. имя метода:
<имя объекта>.<имя метода> [(параметры)];
Begin
<список команд>;
End;
Переменная типа объект называется экземпляром объекта.
Переменная типа объект описывается в разделе описания переменных VAR:
VAR <имя экземпляра>:<имя объекта>;
В основной программе доступ к полям и методам экземпляра объекта производится по составному имени:
<имя экземпляра>:<имя метода>; - обращение к методу экземпляра,
<имя экземпляра>:<имя поля>; - обращение к полю (переменной) экземпляра.
Заключение
Даже при наличии десятков тысяч программ для ЭВМ пользователям может потребоваться что-то такое, чего не делают (или делают, но не так) имеющиеся программы. В этих случаях следует использовать системы программирования, т.е. системы для разработки новых программ.