Delphi. Урок 23. Свойства 1.2

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

1

2

3

4

5

6

7

8

9

10
 
type

TTriangle = class

public

  a, b, c: double;

  

  function Square: double;

  function Perimeter: double;



  constructor Create(NewA, NewB, NewC: double);

end;

Перед вами пример достаточно простого класса «треугольник». Он содержит три поля с соответствующими сторонами и два метода, которые позволяют найти площадь и периметр этого треугольника. В прошлых уроках мы редко рассматривали примеры реализации методов, давайте исправим это недоразумение. Перед вами реализация методов TTriangle.Square и TTriangle.Perimeter, хотя я думаю, что вы и так прекрасно понимаете как можно найти площадь и, тем более, периметр треугольника, зная его стороны.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21
 
function TTriangle.Square: double;

var 

  p: double; // Полупериметр, пригодится в вычислениях

begin

  // Находим площадь треугольника по формуле Герона

  p := (+ b + c) / 2;

  result := sqrt(p*(p-a)*(p-b)*(p-c));

end;



function TTriangle.Perimeter: double;

begin

  result := a + b + c;

end;



// Конструктор тоже будет выглядеть очень просто:

constructor TTriangle.Create(NewA, NewB, NewC: double);

begin

  a := NewA;

  b := NewB;

  c := NewC;

end;

Все правда совсем просто и не нуждается в дополнительных комментариях. 
Но теперь перед нами стоит задача сделать так, чтобы была возможность устанавливать значения сторон треугольника, присваивая ему периметр. Т.к. мы еще не знакомы со свойствами, то реализуем еще один метод, который будет присваивать поля a, b и c в зависимости от переданного ему значения периметра:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20
 
type

TTriangle = class

public

  a, b, c: double;

  

  function Square: double;

  function GetPerimeter: double; // Переименуем метод "Perimeter", так будет звучать логичнее

  procedure SetPerimeter(Value: double);



  constructor Create(NewA, NewB, NewC: double);

end;



...



procedure TTriangle.SetPerimeter(Value: double);

begin

  a := Value / 3;

  b := Value / 3;

  c := Value / 3;

end;

Для того, чтобы объединить такие методы GetPerimeter и SetPerimeter в единую структуру, и были придуманы свойства (property). Объявляются они так же как и поля или методы внутри класса, их синтаксис выглядит так:

 
1
 
property {Название свойства}: {Тип данных} read {Getter} write {Setter};
Читать дальше
Категория: delphi 7 | Добавил: ghost_mod (14.09.2016)
Просмотров: 571 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email:
Подписка:1
Код *: