showsland.com020.png

Действительно, вряд ли найдется в нашей стране программист или просто выпускник средней школы, который не знал бы (или не слышал) об этом языке программирования. Основные концепции языка были разработаны в 1967-1968 г. профессором Николаусом Виртом (Niklaus Wirth) (Биографию Вирта можно прочитать на http://cc.kzoo.edu/~k98ja01/wirth.html) и опубликованы в 1971 году (The Programming Language Pascal Acta Informatica, 1 (Jun 1971), 35-63). Стандарт языка был разработан им в 1974 г. (PASCAL - User Manual and Report, ISO Pascal Standard Kathleen Jensen and Niklaus Wirth) совместно с Кетлин Йенсен (Kathleen Jensen). Паскаль достаточно быстро превратился из средства, предназначенного для обучения студентов программированию, в инструмент, который стали использовать для создания больших программных проектов. Заметим, что ни один из последующих языков, разработанных автором (а Вирт является создателем Модулы и Оберона), не получил такого распространения. Трудно сказать, с чем это связано. Возможно, с тем, что язык удачно сочетает простоту с выразительностью и силой. Возможно, что просто он оказался в нужный момент на нужном месте, поскольку на момент создания языка, получившего свое имя в честь великого французского математика, в распоряжении программистов было весьма и весьма немного языков высокого уровня. И что самое главное, все они были разработаны для решения конкретных прикладных задач и во многом являлись продуктом , а не результатом серьезного научного труда. Фортран, названный одним из пионеров программирования Дейкстрой (Edsger Dijkstra) инфантильным дезорганизатором, предназначался только для математических расчетов и не выдерживал никакой критики с точки зрения ограничения доступа к данным и отсутствия поддержки структурного программирования. Об интерпретаторе Бейсик (тогда еще без приставки Visual) нельзя было говорить без слез. Кобол был ориентирован на решение экономических задач, a PL/I - чрезмерно сложен и принадлежал скорее к области проблем, чем к области решений. И вот тут появляется язык, на порядок отличающийся от них своим качеством. Основное, что привлекало к нему, - логичность, поддержка концепций структурного и процедурного программирования, работа с динамической памятью, возможность создания своих типов данных. Все это стало теперь настолько привычным, что трудно представить, как можно программировать без использования этих жизненно необходимых возможностей.

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

Еще одной причиной, которая позволила языку перейти в категорию бестселлеров, стала поддержка разработчиков коммерческого ПО. И тут мы не можем пройти мимо фирмы Borland (ныне Inprise). Разработанный ею Turbo Pascal во всех его модификациях является в России одним из самых популярных продуктов. Интегрированная оболочка, которая включает в себя редактор, компилятор, компоновщик и отладчик, вместе с интерактивной справочной системой сделали разработку программ на Паскале делом простым и понятным практически любому человеку. Но так было не всегда. Например, в начале восьмидесятых автору довелось поработать с одним из первых компиляторов Паскаля на платформах DEC. В нем сначала нужно было в редакторе создавать программу, затем однопроходный компилятор выдавал код на ассемблере, далее приходилось транслировать его в объектный код, компоновать с системными библиотеками и только после этого запускать программу. Поиск ошибок (без встроенного отладчика, который сейчас просто показывает вам строку, где произошла ошибка) был делом, требующим терпения, и, самое главное, процессом весьма длительным.

Кроме создания интегрированной оболочки, Borland ввел в Pascal поддержку модульного программирования, а начиная с версии 5, и поддержку объектно-ориентированного программирования.

В настоящее время действуют три стандарта языка. Первый из них - нерасширенный Паскаль (unextended Pascal) был разработан в 1983 году (Смотрите стандарты ANSI/IEEE 770Х3 97-1993 и ISO 7185:1983. Стандарты ISO доступны по адресу http://www.iso.ch/welcome.html) и практически полностью совпадает с описанием языка в нотации Йенсен-Вирта. Второй - Extended Pascal - содержит расширения, касающиеся модульного программирования (раздельная компиляция модулей, импорт-экспорт подпрограмм, интерфейсная часть и реализация), и дополнен рядом процедур и функций (прямой доступ к файлам, работа со строками и т д.) (Смотрите стандарты ANSI/IEEE 770Х3.160-1989 и ISO/IEC 10206:1991). Последний - объектный Паскаль (Object-Oriented Extensions to Pascal), в отличие от первых двух, формально не утвержден, но оформлен в виде отчета (ANSI Technical Report) в 1993 г. (Смотрите ANSI/X3-TR-13-1994) Объектный Паскаль поддерживает классы, обладающие свойствами и методами, наследование классов, переопределение методов у потомков (полиморфизм) и ряд других атрибутов объектно-ориентированного программирования.

Delphi

В России Borland Delphi появляется в конце 1993 г. и сразу же завоевывает широкую популярность. Новые версии выходят практически каждый год. В них реализуются все новые мастера, компоненты и технологии программирования.

Действительно, процесс разработки в Delphi предельно упрощен. В первую очередь это относится к созданию интерфейса, на который уходит 80% времени разработки программы. Вы просто помещаете нужные компоненты на поверхность Windows-окна (в Delphi оно называется формой) и настраиваете их свойства с помощью специального инструмента (Object Inspector). С его помощью можно связать события этих компонентов (нажатие на кнопку, выбор мышью элемента в списке и т.д.) с кодом его обработки - и вот простое приложение готово. Причем разработчик получает в свое распоряжение мощные средства отладки (вплоть до пошагового выполнения команд процессора), удобную контекстную справочную систему (в том числе и по Microsoft API), средства коллективной работы над проектом, всего просто не перечислить. Вы можете создавать компоненты ActiveX без использования Microsoft IDL, расширять возможности web-сервера (скрипты на стороне сервера), практически ничего не зная об HTML, XML или ASP. Можно создавать распределенные приложения на базе СОМ и CORBA, Интернет- и intranet-приложения, используя для доступа к данным Borland DataBase Engine, ODBC-драйверы или Microsoft ADO. Появившаяся, начиная с Delphi 3, поддержка многозвенной технологии (multi-tiered) доступа к данным позволяет создавать масштабируемые приложения (относительно слабо зависящие от сервера БД) за счет перенесения методов обработки информации (бизнес-правил) на среднее звено.

Как уже говорилось ранее, в Delphi используется язык Object Pascal, который постоянно расширяется и дополняется Borland. Язык в полной мере поддерживает все требования, предъявляемые к объектно-ориентированному языку программирования. Как и положено строго типизированному языку, классы поддерживают только простое наследование, но зато интерфейсы могут иметь сразу несколько предков. К числу особенностей языка следует отнести поддержку обработки исключительных ситуаций (exceptions), а также перегрузку методов и подпрограмм (overload) в стиле C++. К числу удачных, на взгляд автора, относится также поддержка длинных строк в формате WideChar и AnsiChar. Последний тип (AnsiStrmg) позволяет использовать все прелести динамического размещения информации в памяти без всяких забот о ее выделении и сборке мусора Delphi делает это автоматически. Для поклонников свободного стиля программирования имеются открытые массивы, варианты и вариантные массивы, позволяющие размещать в памяти все, что душе угодно и смешивать типы данных.

Вы можете создавать свои собственные компоненты, импортировать ОСХ-компоненты, создавать проектов и , создающих проектов. Мало того, Delphi предоставляет разработчику интерфейс для связи ваших приложений (или внешних программ) с интегрированной оболочкой Delphi (IDE).

Таким образом, вы можете использовать Delphi для создания как самых простых приложений, на разработку которых требуется 2-3 часа, так и серьезных корпоративных проектов, предназначенных для работы десятков и сотен пользователей. Причем для этого можно использовать самые последние веяния в мире компьютерных технологий с минимальными затратами времени и сил.

Ну, и одна из самых последних новостей от Inprise обещает, что в ближайшем будущем вы сможете переносить приложения, разработанные в Delphi, на платформу Linux. Более подробную информацию о Delphi можно получить на сайтах www.inprise.com и www.inprise.ru. Существует большое количество сайтов, посвященных Delphi, например - delphi.vitpc.com, Torry's Delphi Pages - www.torry.ru. Последний содержит большое число ссылок на ресурсы, связанные с Delphi. Ну а если вы уже давно знакомы с этим продуктом, то на сайте www.brainbench.com можно бесплатно протестироваться в качестве программиста Delphi 3 и получить по почте сертификат.

Александр Александровский
 BYTE

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

Листинг. Object Раsсаl

Program BYTE_Example;               // Oject Pascal, Delphi 5
{$APPTYPE CONSOLE}                  // Прагма, делающая приложение консольным

uses SysUtils, Classes;             // Используемые внешне модули

type
  ТМуArray = class (TObject)        // Класс - динамический массив
  private
    FArray : array of integer;      // Поле для хранения данных
    FPos : integer;                 // Счетчик введенных элементов
  public
    function GetLastNumber:integer;               // номер последнего элемента
    function GetElement(Poz:integer):integer;     // Элемент по номеру
    procedure AddElement(Value:integer);          // Добавление в конец массива
    constructor create;                           // Конструктор
    destructor Destroy; override;                 // Деструктор
  end;

const delta=100;                     // Приращение динамического массива

procedure TMyArray.AddElenient(Value: integer);
begin
  if FPos>High(FArray) then                       // Нужно увеличить массив?
    SetLength(FArray,Length(FArray)+delta);       // Увеличим на Delta
  FArray[FPos]:=Value;                            // Добавляем элемент
  Inc(FPos);
end;

constructor ТМуArray.create;        // Конструктор динамического массива
begin
  inherited,                        // Вызываем конструктор предка
  SetLength(FArray,delta);          // Создали массив из delta-элементов
  FPos:=0;                          // Счетчик элементов массива
end;

destructor ТМуАrrау.Destroy;        // Деструктор динамического массива
begin                               // Уничтожаем объект
  FArray:=nil;                      // Удаляем массив 
  inherited;                        // Вызываем деструктор предка
end;

function ТМуАrrау.GetElement(Poz: integer): integer;
begin result := FArray[Poz] end;    // Читаем элемент по номеру

function ТМуАrrау.GetLastNumber: integer;
begin result :=FPos-1; end;         // Получаем количество элементов массива

procedure ReadElementsFromFile;     // Читаем из файла и выводим нечетные на экран 

var
  F: file of Integer;               // Файл с целыми числами
  МуАrrау: ТМуАrrау;                // Объект для хранения чисел
  i: integer;                       // Переменная цикла
begin
  МуArray := ТМуArray. create;      // Создали объект-массив
  AssignFile(F, 'TestFile.dat');    // Открываем файл
  reset(F);
  while not eof (F) do
  begin
    read(F,I);                                    // Читаем элемент
    МуArray.AddElement(I);                        // Добавляем элемент в массив
  end;
  closeFile(F);                                   // Закрываем файл
  for i := МуArray.GetLastNumber downto 0 do      // Выводим в обратном порядке
    if МуArray.GetElement(i) mod 2 <> 0 then      // Выводим только нечетные
      writeln( intTostr(MyArray.GetElement(i)));  // элементы в колонку 
  МуArray.Free;                                   // Уничтожаем массив
end;

begin                                             // Главный модуль
  ReadElementsFromFile
end.




Gallery Events: Concerts, Show, Albums, Conferences, Art, Presentations, Discovery, Clubs, Meetings, Flashmobs

Август, 2019
ПнВтСрЧтПтСбВс
   1234
567891011
12131415161718
19202122232425
2627
Семинар "Древние символы"

Подробнее
28293031 
Сентябрь, 2019
ПнВтСрЧтПтСбВс
      1
2345678
9101112131415
16171819202122
2324252627
Семинар "Древние символы"

Подробнее
2829
30      
Октябрь, 2019
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
Семинар "Древние символы"

Подробнее
28293031   
Ноябрь, 2019
ПнВтСрЧтПтСбВс
    123
4
День народного единства
5678910
11121314151617
18192021222324
252627
Семинар "Древние символы"

Подробнее
282930 
Декабрь, 2019
ПнВтСрЧтПтСбВс
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
Январь, 2020
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031  
Февраль, 2020
ПнВтСрЧтПтСбВс
     12
3456789
10111213141516
17181920212223
242526272829 
Март, 2020
ПнВтСрЧтПтСбВс
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
Апрель, 2020
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
27282930   
Май, 2020
ПнВтСрЧтПтСбВс
    123
45678910
11121314151617
18192021222324
25262728293031
Июнь, 2020
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
2930     
Июль, 2020
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031  
You PC time:
showsland_anim1.gif
New York Singapore Paris Delhi London Москва Sydney Tokyo Омск Denver