HDI Propriedades computorizadas
Definição e cálculos
Magia!
Aqui estão dois exemplos simples. Em ambos os casos, todos os atributos podem ser introduzidos.
Quando se modifica o width ou height, os perimeters e surfaces são recalculados. O inverso também é verdade: altere o surface ou perimeter, e os widths e heights irão variar em conformidade.
Onde está a magia?
Em ambos os casos, não há nenhum guião nos bastidores! Todos os cálculos são definidos de uma vez por todas dentro da classe Rectângulo! Portanto, aqui está um grande benefício: se precisar de mais formulários utilizando estes atributos, não precisará de escrever qualquer código (tal como acima).
Vamos ver como isto é feito!
Acesso às propriedades COMPUTADAS
GET
The function gets surface é definida dentro da classe Rectângulo.
Function get surface() -> $surface: Real
$surface := This.width * this.altura
Uma vez escrita a função acima, pode agora utilizar a propriedade de superfície como uma propriedade regular!
$rect:=cs. Rectângulo.new(60; 20)
$surface :=$rect.surface // get the surface property
ALERT("The surface of this rectangle is: "+String($surface))
SET
// this function will be called when surface is modified
Function set surface($surface)
// manter a relação largura-altura
$ratio :=This.width/This.height
This .height:=Square root($surface/$ratio)
This .
width. :=Square root($surface*$ratio)
Uma vez escritas as funções acima referidas, pode agora modificar a propriedade surface como uma propriedade regular! Os atributos width e height serão ajustados em conformidade.
//Let's create a rectangle who's original width and height are 60x20
$rectRectângulo :=cs.Rectângulo.new(60; 20)
$surface :=$rect.surface // obter a propriedade de superfície
ALERT ("A superfície deste rectângulo é: "+String($surface)) // devolve 120
// Vamos modificar a superfície
$rect .surface:=1000
// Depois mostrar a nova largura e altura
$width :=$rect.width
$height:=$rect.height
ALERT ("O rectângulo é agora: "+String($width)+" x "+String($height)) // devolve 54,77 x 18,25
Consultas e tipos…
Colecções preenchidas com objectos de classe Rectângulo podem ser consultadas e classificadas usando propriedades computorizadas!
Consulta de amostra:
myRectangles:=myRectangles.query("perimeter < 200")
Encomendar por amostra:
myRectangles:=myRectangles.orderBy("perimeter desc")
…e JSON
Quando se utiliza um objecto com propriedades computorizadas, essas propriedades serão consideradas quando o se “stringify “.
$rect:=cs. Rectângulo.new(30; 40)
ALERT (JSON Stringify($rect;*)))