<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://camokathomelab.servebeer.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Object_Pascal</id>
	<title>Object Pascal - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://camokathomelab.servebeer.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Object_Pascal"/>
	<link rel="alternate" type="text/html" href="https://camokathomelab.servebeer.com/mediawiki/index.php?title=Object_Pascal&amp;action=history"/>
	<updated>2026-07-16T17:48:45Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://camokathomelab.servebeer.com/mediawiki/index.php?title=Object_Pascal&amp;diff=1479&amp;oldid=prev</id>
		<title>31.41.59.210 в 08:39, 22 марта 2026</title>
		<link rel="alternate" type="text/html" href="https://camokathomelab.servebeer.com/mediawiki/index.php?title=Object_Pascal&amp;diff=1479&amp;oldid=prev"/>
		<updated>2026-03-22T08:39:55Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Карточка языка программирования&lt;br /&gt;
 |class                  = [[Компилятор|компилируемый]]&lt;br /&gt;
 |typing                 = [[Статическая типизация|статическая]], [[динамическая типизация|динамическая]] (array of const, [[RTTI]], Variant), [[Строгая типизация|строгая]]&lt;br /&gt;
 |implementations        = [[Delphi (язык программирования)|Delphi]] ([[x86]] and [[Common Language Infrastructure|CLI]]), [[Oxygene (язык программирования)|Oxygene]] ([[Common Language Infrastructure|CLI]]), [[Free Pascal]] ([[x86]], [[x86-64]], [[PowerPC]], [[ppc64]], [[SPARC]] and [[ARM (архитектура)|ARM]]), [[Virtual Pascal]] ([[x86]]), [[TMT Pascal]] ([[x86]]), Turbo51 ([[Intel 8051]])&lt;br /&gt;
 |dialects               = Apple, [[Turbo Pascal]], objfpc, [[Delphi (язык программирования)|Delphi]], Delphi.NET, [[Oxygene (язык программирования)|Oxygene]]&lt;br /&gt;
 |influenced             = [[C Sharp|C#]], [[Java]], [[Nim]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Object Pascal&amp;#039;&amp;#039;&amp;#039; ({{tr-en|Объектный Паскаль}}) — [[язык программирования]], разработанный в фирме [[Apple Computer]] в [[1986 год]]у группой [[Ларри Теслер]]а, который консультировался с [[Никлаус Вирт|Никлаусом Виртом]]&amp;lt;ref&amp;gt;{{cite journal |last1=Tesler |first1=Larry |title=Object Pascal Report |journal=Structured Language World |date=1985 |volume=9 |issue=3 |pages=10–7}}&amp;lt;/ref&amp;gt;. Произошёл от более ранней объектно-ориентированной версии [[Паскаль (язык программирования)|Паскаль]]&amp;lt;ref&amp;gt;Буч Г. Объектно-ориентированное проектирование с примерами применения К.: Диалектика; М.: Конкорд, 1992. — 519 с.&amp;lt;/ref&amp;gt;, называвшейся [[Clascal]], который был доступен на компьютере [[Apple Lisa]].&lt;br /&gt;
&lt;br /&gt;
== Изменения в Object Pascal от [[Borland]] в сравнении с [[Turbo Pascal]] ==&lt;br /&gt;
Изменения коснулись групп целых, символьных и строковых типов, которые стали разделяться на две категории:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Фундаментальные (fundamental) типы&amp;#039;&amp;#039;&amp;#039;. Их представление в памяти (число битов и наличие знака) строго фиксируется и выдерживается неизменным во всех последующих реализациях Object Pascal для любых операционных систем и компьютерных платформ.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Родовые (generic) типы&amp;#039;&amp;#039;&amp;#039;. Их представление в памяти не фиксируется и будет реализовано оптимальным способом, в зависимости от реализации для конкретной операционной системы и компьютерной платформы.&lt;br /&gt;
&lt;br /&gt;
=== Интерфейсы ===&lt;br /&gt;
См. [[Интерфейс (ООП)#Delphi|Интерфейсы: Delphi]]&lt;br /&gt;
&lt;br /&gt;
=== Перегрузка процедур и функций (не ООП) ===&lt;br /&gt;
Введена перегрузка процедур и функций, не являющихся членами объекта или класса. Перегружаются (с помощью ключевого слова &amp;#039;&amp;#039;&amp;#039;overload&amp;#039;&amp;#039;&amp;#039;) различающиеся типами и числом параметров процедуры и функции:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
procedure Calc(I: Integer); overload;&lt;br /&gt;
// ...&lt;br /&gt;
procedure Calc(S: String; J: Integer); overload;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Динамический массив ===&lt;br /&gt;
Введён для устранения рутинных операций выделения и возвращения памяти в heap-область (кучу), и для того, чтобы избежать случайных ошибок и утечки памяти. Элементы массива должны быть одинаковыми по типу. Нумерация элементов начинается с нуля.&lt;br /&gt;
&lt;br /&gt;
Пример объявления:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
var MyFlexibleArray: array of Real;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Использование:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
var&lt;br /&gt;
  A, B: array of Integer;&lt;br /&gt;
begin&lt;br /&gt;
  SetLength(A, 1); //Выделяем память под один элемент&lt;br /&gt;
  A[0] := 1;   B := A;&lt;br /&gt;
  B[0] := 2;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Начиная с Delphi XE7 стали возможны следующие действия с динамическими массивами:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
var M: array of integer;&lt;br /&gt;
begin&lt;br /&gt;
  M := [1, 2, 3, 4, 5];&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
 M := M + [5, 6, 7];&lt;br /&gt;
 Insert([6, 7, 8], M, 5); // вставка массива [6, 7, 8], в M, начиная с индекса 5&lt;br /&gt;
 Delete(M, 1, 3); // удаляем 3 элемента, начиная с индекса 1&lt;br /&gt;
 Concat([1, 2, 3, 4], [5, 6, 7])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
То есть с динамическими массивами можно работать так же, как со строками.&lt;br /&gt;
&lt;br /&gt;
В динамическом массиве также возможно задание открытого массива параметров, но тип их должен быть объявлен ранее, например:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
type TDynamicCharArray = array of Char;&lt;br /&gt;
function Find(A: TDynamicCharArray): Integer;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Динамическая типизация ===&lt;br /&gt;
&lt;br /&gt;
==== Операторы динамической проверки и приведения типов ====&lt;br /&gt;
В языке Object Pascal фирмы [[Borland]] появилась [[динамическая типизация]], а также оператор динамического приведения типов &amp;#039;&amp;#039;&amp;#039;as&amp;#039;&amp;#039;&amp;#039; и оператор &amp;#039;&amp;#039;&amp;#039;is&amp;#039;&amp;#039;&amp;#039; для динамической проверки типов. Также в открытом массиве параметров стала возможна передача параметров различного типа (variant open array parameters).&lt;br /&gt;
&lt;br /&gt;
==== Вариантный тип ====&lt;br /&gt;
В языке Object Pascal был введён вариантный тип данных (&amp;#039;&amp;#039;&amp;#039;Variant&amp;#039;&amp;#039;&amp;#039;), тип которых не известен на этапе компиляции и может изменяться на этапе выполнения программы.&lt;br /&gt;
Однако этот тип данных поглощает больше памяти по сравнению с соответствующими переменными и операции над данными типа Variant выполняются медленнее.&lt;br /&gt;
Более того, недопустимые операции над данными этого типа чаще приводят к ошибкам на этапе выполнения программы, в то время как подобные ошибки над данными другого типа были бы выявлены ещё на этапе компиляции.&lt;br /&gt;
&lt;br /&gt;
Вариантные переменные могут принимать различные значения (целые, строковые, булевские, &amp;#039;&amp;#039;&amp;#039;Currency&amp;#039;&amp;#039;&amp;#039;, OLE-строки), быть массивами элементов этих же типов и массивом значений вариантного типа, а также содержать COM и CORBA объекты, чьи методы и свойства могут быть доступны посредством этого типа.&lt;br /&gt;
Однако Variant не может содержать:&lt;br /&gt;
* данные структурных типов;&lt;br /&gt;
* указатели;&lt;br /&gt;
* Int64 (начиная с Delphi 6 — может).&lt;br /&gt;
&lt;br /&gt;
Variant можно смешивать (в выражениях и операторах) с другими вариантами, числовыми, строковыми и булевскими данными. При этом компилятор автоматически выполняет преобразование типа. Варианты, содержащие строки, не могут, однако, индексироваться (V[i] недопустимо).&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
var&lt;br /&gt;
  V1, V2, V3, V4, V5: Variant;&lt;br /&gt;
  I: Integer;&lt;br /&gt;
  D: Double;&lt;br /&gt;
  S: String;&lt;br /&gt;
begin&lt;br /&gt;
  V1 := 1; //значение типа integer&lt;br /&gt;
  V2 := 359.768; //значение типа real&lt;br /&gt;
  V3 := &amp;#039;Hello world!&amp;#039;; //значение типа string&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Параметры типа вариантного открытого массива ====&lt;br /&gt;
Стала возможна передача параметров различного типа.&lt;br /&gt;
В оригинале он назван как «variant open array parameters». Тип данных определяется динамически в процессе выполнения программы. Так же как и в обычном открытом массиве функция High вызывается для определения числа элементов массива. Для объявления используются ключевые слова &amp;#039;&amp;#039;&amp;#039;array of const&amp;#039;&amp;#039;&amp;#039;. Пример:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
function Output(const Args: array of const): string;&lt;br /&gt;
var&lt;br /&gt;
  I: Integer;&lt;br /&gt;
begin&lt;br /&gt;
  Result := &amp;#039;&amp;#039;;&lt;br /&gt;
  for I := 0 to High(Args) do with Args[I] do&lt;br /&gt;
    case VType of&lt;br /&gt;
      vtString:     Result := Result + VString^;&lt;br /&gt;
      vtPChar:      Result := Result + VPChar;&lt;br /&gt;
      vtInteger:    Result := Result + IntToStr(VInteger);&lt;br /&gt;
      vtBoolean:    Result := Result + BoolToStr(VBoolean);&lt;br /&gt;
      vtChar:       Result := Result + VChar;&lt;br /&gt;
      vtExtended:   Result := Result + FloatToStr(VExtended^);&lt;br /&gt;
      vtObject:     Result := Result + VObject.ClassName;&lt;br /&gt;
      vtClass:      Result := Result + VClass.ClassName;&lt;br /&gt;
      vtVariant:    Result := Result + string(VVariant^);&lt;br /&gt;
      vtInt64:      Result := Result + IntToStr(VInt64^);&lt;br /&gt;
      vtAnsiString: Result := Result + string(VAnsiString);&lt;br /&gt;
      vtCurrency:   Result := Result + CurrToStr(VCurrency^);&lt;br /&gt;
    end;&lt;br /&gt;
&lt;br /&gt;
  Result := Result + &amp;#039; &amp;#039;;&lt;br /&gt;
end;&lt;br /&gt;
//...&lt;br /&gt;
&lt;br /&gt;
Output([&amp;#039;test&amp;#039;, 777, &amp;#039;@&amp;#039;, True, 3.14159, TForm]); //передача открытого массива параметров&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Будет возвращена строка «test 777 @ T 3.14159 TForm».&lt;br /&gt;
&lt;br /&gt;
Как видно, имеет свою внутреннюю структуру, обращение к которой даёт возможность определить тип данных. В строке вызова функции создаётся массив, с помощью &amp;#039;&amp;#039;конструктора открытого массива&amp;#039;&amp;#039;, который использует квадратные скобки.&lt;br /&gt;
&lt;br /&gt;
=== Различия в объектных моделях ===&lt;br /&gt;
Для введения новой объектной модели введено ключевое слово &amp;#039;&amp;#039;&amp;#039;class&amp;#039;&amp;#039;&amp;#039; (в [[Turbo Pascal]] ключевое слово &amp;#039;&amp;#039;&amp;#039;object&amp;#039;&amp;#039;&amp;#039;).&lt;br /&gt;
&lt;br /&gt;
Введены операторы для проверки и приведения классов &amp;#039;&amp;#039;&amp;#039;is&amp;#039;&amp;#039;&amp;#039; и &amp;#039;&amp;#039;&amp;#039;as&amp;#039;&amp;#039;&amp;#039; динамически в ходе выполнения программы.&lt;br /&gt;
Появились указатели на методы, для чего введено новое использование ключевого слова &amp;#039;&amp;#039;&amp;#039;object&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
type&lt;br /&gt;
  TMyMethod = procedure (Sender : Object) of object;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Изменения синтаксиса из-за изменения размещения объектов ====&lt;br /&gt;
В Turbo Pascal можно было работать как с динамическими, так и со статическими экземплярами объектов.&lt;br /&gt;
&lt;br /&gt;
В объектной модели Object Pascal программист работает только с динамическими экземплярами классов, выделяемых в heap-области (куче). В связи с этим изменён синтаксис обращения к полям и методам объектов.&lt;br /&gt;
&lt;br /&gt;
Ранее для работы с динамическими экземплярами объектов, инициализированными с использованием обращения к конструктору в сочетании с функцией &amp;#039;&amp;#039;&amp;#039;New&amp;#039;&amp;#039;&amp;#039;, необходимо было использовать обращение по [[Указатель (тип данных)|указателю]] (^). Теперь тип класса стал являться по умолчанию также указателем.&lt;br /&gt;
&lt;br /&gt;
Пример для сравнения:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Объектная модель в Turbo Pascal&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
type&lt;br /&gt;
  PMyObject = ^TMyObject;&lt;br /&gt;
  TMyObject = object (TObject)&lt;br /&gt;
    MyField : PMyType;&lt;br /&gt;
    constructor Init;&lt;br /&gt;
  end;&lt;br /&gt;
//...&lt;br /&gt;
var&lt;br /&gt;
  MyObject : PMyObject;&lt;br /&gt;
begin&lt;br /&gt;
  MyObject := New(PMyObject,Init);&lt;br /&gt;
  MyObject^.MyField := //...&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Новая объектная модель в Object Pascal&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
type&lt;br /&gt;
  TMyObject = class (TObject)&lt;br /&gt;
    MyField : TMyType;&lt;br /&gt;
    constructor Create;&lt;br /&gt;
  end;&lt;br /&gt;
//...&lt;br /&gt;
var&lt;br /&gt;
  MyObject : TMyObject;&lt;br /&gt;
begin&lt;br /&gt;
  MyObject := TMyObject.Create;&lt;br /&gt;
  MyObject.MyField := //...&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Было изменено соглашение об именовании конструкторов и деструкторов. В старой объектной модели вызов &amp;#039;&amp;#039;&amp;#039;New&amp;#039;&amp;#039;&amp;#039; отвечал за распределение памяти, а обращение к конструктору инициализировало выделенную область памяти. В новой модели эти действия выполняет конструктор &amp;#039;&amp;#039;&amp;#039;Create&amp;#039;&amp;#039;&amp;#039;. Начиная с версии Delphi XE появились статические методы класса.&amp;lt;ref&amp;gt;[http://www.interface.ru/iarticle/files/25458_53867033.pdf Преимущества перехода на Delphi XE Что нового по сравнению с Delphi 7 Андреано Лануш (Andreano Lanusse)] {{Wayback|url=http://www.interface.ru/iarticle/files/25458_53867033.pdf |date=20160615174245 }},Ноябрь 2010 г. Embarcadero Technologies Россия, СНГ&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Появилась возможность ограничивать видимость членов класса (методы, свойства), которые предназначены для использования только в реализации производных классов. Это даёт возможность защищать исходный код от модификации пользователями класса. Такие методы содержатся в секции &amp;#039;&amp;#039;&amp;#039;protected&amp;#039;&amp;#039;&amp;#039; (защищённые) в объявлении класса.&lt;br /&gt;
&lt;br /&gt;
==== Визуальное объектно-ориентированное программирование ====&lt;br /&gt;
Появились понятия свойства (&amp;#039;&amp;#039;&amp;#039;property&amp;#039;&amp;#039;&amp;#039;) и связанные со свойствами ключевые слова &amp;#039;&amp;#039;&amp;#039;read&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;write&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;stored&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;default&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;nodefault&amp;#039;&amp;#039;&amp;#039;), &amp;#039;&amp;#039;&amp;#039;index&amp;#039;&amp;#039;&amp;#039;. Свойства визуальных объектов, видимых в [[Интегрированная среда разработки|интегрированной среде разработки]], объявляются с помощью нового слова &amp;#039;&amp;#039;&amp;#039;published&amp;#039;&amp;#039;&amp;#039; в качестве секции в объявлении класса, являющегося визуальным объектом.&lt;br /&gt;
&lt;br /&gt;
=== [[Обобщённое программирование|Обобщения]] ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
type&lt;br /&gt;
  {объявление}&lt;br /&gt;
  generic TList&amp;lt;T&amp;gt; = class&lt;br /&gt;
    Items: array of T;&lt;br /&gt;
    procedure Add(Value: T);&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
  {реализация}&lt;br /&gt;
  procedure TList.Add(Value: T);&lt;br /&gt;
  begin&lt;br /&gt;
    SetLength(Items, Length(Items) + 1);&lt;br /&gt;
    Items[Length(Items) - 1] := Value;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Общий класс может быть просто специализирован для конкретного типа с использованием ключевого слова &amp;#039;&amp;#039;&amp;#039;specialize&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
type&lt;br /&gt;
  TIntegerList = specialize TList&amp;lt;Integer&amp;gt;;&lt;br /&gt;
  TPointerList = specialize TList&amp;lt;Pointer&amp;gt;;&lt;br /&gt;
  TStringList  = specialize TList&amp;lt;string&amp;gt;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Перегрузка операторов]] ===&lt;br /&gt;
Разработчики [[TMT Pascal]] (модификация Object Pascal) первыми ввели полноценную [[перегрузка операторов|перегрузку операторов]], что впоследствии было перенято разработчиками других диалектов языка: Delphi (с Delphi 2005), [[Free Pascal]] и др.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
{объявление}&lt;br /&gt;
type&lt;br /&gt;
  TVector = packed record&lt;br /&gt;
    A, B, C: Double;&lt;br /&gt;
    procedure From(const A, B, C: Double);&lt;br /&gt;
    class operator Add(const Left, Right: TVector): TVector;&lt;br /&gt;
    class operator Implicit(const v: TVector): TPoint;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
{реализация}&lt;br /&gt;
implementation&lt;br /&gt;
//...&lt;br /&gt;
  class operator TVector.Add(const Left, Right: TVector): TVector;&lt;br /&gt;
  begin&lt;br /&gt;
    Result.A := Left.A + Right.A;&lt;br /&gt;
    Result.B := Left.B + Right.B;&lt;br /&gt;
    Result.C := Left.C + Right.C;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  class operator TVector.Implicit(const v: TVector): TPoint;&lt;br /&gt;
  begin&lt;br /&gt;
    Result.A := round(v.A);&lt;br /&gt;
    Result.B := round(v.B);&lt;br /&gt;
  end;&lt;br /&gt;
//...&lt;br /&gt;
&lt;br /&gt;
{использование}&lt;br /&gt;
var&lt;br /&gt;
  v1, v2: TVector;&lt;br /&gt;
begin&lt;br /&gt;
  v1.From(20, 70, 0);&lt;br /&gt;
  v2.From(15, 40, 4);&lt;br /&gt;
  Canvas.Polygon([v1, v2, v1 + v2]);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Поддержка различными разработчиками ==&lt;br /&gt;
Начиная с версии среды Delphi 7 фирма [[Borland]] стала официально называть язык Object Pascal как [[Delphi (язык программирования)|Delphi]]&amp;lt;ref&amp;gt;[http://docs.codegear.com/docs/radstudio/radstudio2007/RS2007_helpupdates/HUpdate4/EN/html/devcommon/overview_xml.html Delphi Language Overview]{{Недоступная ссылка|date=2018-01|bot=InternetArchiveBot }}&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Язык Object Pascal поддерживается и развивается другими разработчиками. Наиболее серьёзные реализации Object Pascal (помимо Delphi) — это кроссплатформенный [[TopSpeed Pascal]] (версия языка Turbo Pascal&amp;lt;ref&amp;gt;[http://www.nf-team.org/drmad/stuff/t.htm TopSpeed-компиляторы: не дожили до триумфа] {{webarchive|url=https://web.archive.org/web/20120111161303/http://www.nf-team.org/drmad/stuff/t.htm |date=2012-01-11 }}&amp;lt;/ref&amp;gt;) мультиязыковой среды [[JPI#TopSpeed JPI|TopSpeed]], [[TMT Pascal]], [[Virtual Pascal]], [[PascalABC.NET]], [[Free Pascal]], [[GNU Pascal]]. Язык программирования [[Oxygene (язык программирования)|Oxygene]] является диалектом Object Pascal для платформы .NET и дальнейшим его развитием, а новыми возможностями языка является оператор &amp;quot;:&amp;quot;, асинхронный и отложенный вызовы методов, асинхронное выполнение блока кода, параллельные циклы, анонимные конструкторы, элементы контрактного и аспектно-ориентированного программирования и др.&amp;lt;ref&amp;gt;{{Cite web |url=https://codmasters.ru/thread-33-1-1.html |title=Remobjects Oxygene |access-date=2015-11-16 |archive-url=https://web.archive.org/web/20151117021059/https://codmasters.ru/thread-33-1-1.html |archive-date=2015-11-17 |url-status=dead }}&amp;lt;/ref&amp;gt; (компилятор распространяется без ограничений).&lt;br /&gt;
&lt;br /&gt;
== Примеры «[[Hello, world!]]» в различных объектных расширениях языка ==&lt;br /&gt;
{{Начало скрытого блока|Заголовок=Object Pascal от Apple}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
program ObjectPascalExample;&lt;br /&gt;
&lt;br /&gt;
type&lt;br /&gt;
  THelloWorld = object&lt;br /&gt;
    procedure Put;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
  HelloWorld: THelloWorld;&lt;br /&gt;
&lt;br /&gt;
procedure THelloWorld.Put;&lt;br /&gt;
begin&lt;br /&gt;
  WriteLn(&amp;#039;Hello, World!&amp;#039;);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
  New(HelloWorld);&lt;br /&gt;
  HelloWorld.Put;&lt;br /&gt;
  Dispose(HelloWorld);&lt;br /&gt;
end.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Конец скрытого блока}}&lt;br /&gt;
&lt;br /&gt;
{{Начало скрытого блока|Заголовок=Turbo Pascal}}&lt;br /&gt;
Delphi (для обеспечения обратной совместимости) и [[Free Pascal]] также поддерживают этот вариант синтаксиса.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
program ObjectPascalExample;&lt;br /&gt;
&lt;br /&gt;
type&lt;br /&gt;
  PHelloWorld = ^THelloWorld;&lt;br /&gt;
  THelloWorld = object&lt;br /&gt;
    procedure Put;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
  HelloWorld: PHelloWorld; { это указатель на THelloWorld }&lt;br /&gt;
&lt;br /&gt;
procedure THelloWorld.Put;&lt;br /&gt;
begin&lt;br /&gt;
  WriteLn(&amp;#039;Hello, World!&amp;#039;);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
   New(HelloWorld);&lt;br /&gt;
   HelloWorld^.Put;&lt;br /&gt;
   Dispose(HelloWorld);&lt;br /&gt;
end.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Конец скрытого блока}}&lt;br /&gt;
{{Начало скрытого блока|Заголовок=Delphi и Free Pascal}}&lt;br /&gt;
В Free Pascal этот вариант синтаксиса доступен в режимах &amp;#039;&amp;#039;&amp;#039;ObjFpc&amp;#039;&amp;#039;&amp;#039; и &amp;#039;&amp;#039;&amp;#039;Delphi&amp;#039;&amp;#039;&amp;#039;.&amp;lt;ref&amp;gt;{{cite web|url=http://www.freepascal.org/docs-html/ref/refch6.html#x66-760006|title=Chapter 6: Classes|author=Michaël Van Canneyt|date=2011-12|work=Free Pascal : Reference guide.|lang=en|access-date=2012-01-16|archive-url=https://www.webcitation.org/659qF0xXI?url=http://www.freepascal.org/docs-html/ref/refch6.html#x66-760006|archive-date=2012-02-02|url-status=dead}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
program ObjectPascalExample;&lt;br /&gt;
&lt;br /&gt;
type&lt;br /&gt;
  THelloWorld = class                    { определение класса }&lt;br /&gt;
    procedure Put;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
procedure THelloWorld.Put;               { описание процедуры метода Put класса THelloWorld }&lt;br /&gt;
begin&lt;br /&gt;
  Writeln(&amp;#039;Hello, World!&amp;#039;);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
  HelloWorld: THelloWorld;               { определение переменной-указателя на экземпляр класса }&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
  HelloWorld := THelloWorld.Create;      { конструктор возвращает значение указателя на экземпляр класса }&lt;br /&gt;
  HelloWorld.Put;&lt;br /&gt;
  HelloWorld.Free;                       { деструктор уничтожает экземпляр класса и освобождает область памяти }&lt;br /&gt;
end.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Конец скрытого блока}}&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
{{примечания}}&lt;br /&gt;
&lt;br /&gt;
{{Pascal}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Object Pascal]]&lt;/div&gt;</summary>
		<author><name>31.41.59.210</name></author>
	</entry>
</feed>