Delphi справочник - Форум программистов - Навигация  
 A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z      По первой букве  
System     SysUtils     StrUtils     DateUtils     FileCtrl     ConvUtils     StdConvs     Math     Classes     Dialogs     Types     Variants    ПО Unit   Compiler directives     Directives     Keywords     Types     Variables     Constants     Functions     Procedures    По категории  

форум программистов

Основы Delphi
Abstract
Деректива
Определяет метод класса, осуществляемый только в подклассах unit
  Function|Procedure declaration; Virtual; Abstract;
Описание
Директива Abstract определяет метод класса, как осуществляемый только в полученных классах. Это абстрактно в том смысле, что она является меткой - заполнителем, она не выполняется в текущем классе, но должна быть осуществлена в любых полученных классах.

Она используется, там где базовый класс всегда обрабатывается как скелетный класс. Где такой класс непосредственно никогда не используется, а используются только основанные классы, когда-либо проиллюстрированные в объектах.

Например, класс TAnimal может иметь абстрактный метод для того, как животное перемещается. Только при создании, скажем, TCat класс, основанный на TAnimal будет Вы осуществлять этот метод. В этом образце, кот перемещается, идя.

Класс Abstract должен использоваться, чтобы квалифицировать виртуальный класс, так как мы не осуществляем класс (см. Virtual для больших подробностей).
Примечания
Если Вы создаете образец класса, который имеет метод Abstract, то delphi предупреждает вас, что имеется невызываемый метод.

Если затем вы попробуете вызвать этот метод, Delphi попробует вызвать AbstractErrorProc. Если AbstractErrorProc не найден, выбрасывается исключение EAbstractError.
Похожие команды
AbstractErrorProc  Определяет процедуру, вызываемую при вызыве абстрактного метода

Function  Определяет подпрограмму, которая возвращает значение

Inherited  Используется для вызова родительского класса конструктора или метода деструктора

Overload  Позволяет 2-м или более подпрограммам иметь одинаковое название

Override  Определяет метод, который заменяет виртуальный родительский метод класса

Procedure  Определяет подпрограмму, которая не возвращает значение

Virtual  Позволяет методу класса быть отменённым в производных классах

Dynamic  Позволяет методу класса быть заменённым в производных классах

 
Пример кода : Класс скелета многоугольника с основанными классами треугольника и квадрата
// Полный код Модуля.
// -----------------------------------------------------------
// Вы должны поместить этот код в модуль с именем Unit1 и с формой
// названную Form1, которая имеет событие OnCreate названное FormCreate.

unit Unit1;

interface

uses
  Forms, Dialogs, Classes, Controls, StdCtrls, SysUtils;

type
  // Определение базового класса TPolygon :
  // Этот класс - треугольник если 3 стороны, квадрат если 4 стороны...
  TPolygon = class
  private
    sideCount  : Integer;  // Сколько сторон?
    sideLength : Integer;  // Какой длины каждая сторона?
    shapeArea  : Double;   // Площадь многоугольника
  protected
     procedure setArea; Virtual; Abstract;  // Не может закодировать пока стороны не известны
  published
    property count  : Integer read sideCount;
    property length : Integer read sideLength;
    property area   : Double  read shapeArea;
    constructor Create(sides, length : Integer);
  end;

  // Определение потомков треугольника и квадрата
  TTriangle = class(TPolygon)
  protected
    procedure setArea; override;   // Замена абстрактного метода
  end;

  TSquare = class(TPolygon)
  protected
    procedure setArea; override;   // Замена абстрактного метода
  end;

  // Определение класса формы используемой этим модулем
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
{$R *.dfm} // Вложение определений формы

// Создание объекта TPolygon

constructor TPolygon.Create(sides, length : Integer);
begin
  // Сохранение числа и длины сторон
  sideCount := sides;
  sideLength := length;

  // Установка области, используя метод setArea :
  // Этот запрос будет удовлетворён только подклассом
  setArea;
end;

// Выполнение родительского для треугольника абстрактного метода setArea
procedure TTriangle.setArea;
begin
  // Вычисление и сохранение площади треугольника
  shapeArea := (sideLength * sideLength*0.866) / 2;
end;

// Выполнение родительского для квадрата абстрактного метода setArea
procedure TSquare.setArea;
begin
  // Вычисление и сохранение площади квадрата
  shapeArea := sideLength * sideLength;
end;

// Основная линия кода
procedure TForm1.FormCreate(Sender: TObject);
var
  triangle : TTriangle;
  square   : TSquare;
begin
  // Создание треугольника и квадрата
  triangle := TTriangle.Create(3, 10);
  square   := TSquare.Create(4, 10);

  // Показ значений площади наших многоугольников :
  ShowMessageFmt('Площадь тругольника = %f',[triangle.area]);
  ShowMessageFmt('Площадь квадрата = %f',[square.area]);
end;

end.
Площадь тругольника = 43.3
Площадь квадрата = 100.0
 


Оплата за обучение в Kata Academy только после твоего трудоустройства в IT, начни карьеру Middle Java-разработчика



Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки? Slurm подготовили для вас особенный продукт!





форум программистов


© Форум Delphi  |  Форум Pascal   |  Блог программистов   |  Исходники Delphi   |  Автор сайта  |  Ссылки   |  Английская версия