CAPÍTULO 8
Programação visual com Software Livre
EDIT LIN EDITORIAL S.L,  dos autores  Daniel Campos Fernández e José Luis Redrejo.  Prólogo de Benoit Minisini

<< Anterior Próximo >>


Utilizando métodos especiais  New e  Free

    

Vamos criar uma nova classe filho de ClsCalculo, que se comporte como a original, mas que, neste caso, no momento de inicializar um objeto da classe, armazene alguns valores Ponhamos como exemplo a medida de nosso temperatura.
 
Figura 4
Figura 4. Nova classe
 filha ClsCalculo3.
 
Os objetos, ao inicializar-se, pode tomar os valores da temperatura da semana anterior de forma automática para que, depois, o programador introduza os da semana em curso e obtenha a média da quinzena.

Para isso criaremos a classe ClsCalculo3, com este código:

' Gambas class file

INHERITS ClsCalculo

PUBLIC SUB _New()

SUPER.Add ( 12.5 )

SUPER.Add ( 15.3 )

SUPER.Add ( 18.4 )

SUPER.Add ( 19.12 )

SUPER.Add ( 21.15 )

SUPER.Add ( 20.4 )

SUPER.Add ( 19.5 )

END
 

Igualmente escrevemos e executamos o código de Main() para comprovar o resultado:
 

PUBLIC SUB Main()

DIM Calculo AS NEW ClsCalculo3

Calculo.add [ 29.2 ]

PRINT  " -Média: " & calculo.Average ()

END

O resultado da execução é:                                                                                                                        
Média: 19.44625

Como era de se esperar, pelo explicado anteriormente, foi executado no modo _New() de nossa classe filha. Se bem, neste método não só adicionamos elementos, porem não inicializamos a matriz, o interpretador comportou-se como nos casos anteriores, deveríamos ter obtido um erro em tempo de execução, ao ter no início a matriz com o valor Null.

O que ocorre na realidade, é que ao utilizarmos o método especial _New(), o interpretador sempre executa o método original da classe pai e depois a nova implementação do filho.
 
O método especial _New() realizado na classe filhas, como no resto dos métodos ou propriedades, em seu lugar se chama sempre o método original New() do pai para que inicialize todo o necessário e, depois, se existe, se chama o método _New() da classe filha. Deste modo, o objeto sempre está pronto e inicializado quando começarmos a trabalhar com ele.

Adicionamos agora um destructor _Free() personalizado para nossa classe herdeira, na qual indicamos no valor da variável _Numbers:

' Gambas class file

INHERITS ClsCalculo

PUBLIC SUB _New()

SUPER.Add ( 12.5 )

SUPER.Add ( 15.3 )

SUPER.Add ( 18.4 )

SUPER.Add ( 19.12 )

SUPER.Add ( 21.15 )

SUPER.Add ( 20.4 )

SUPER.Add ( 19.5 )

END

PUBLIC SUB _Free()

IF SUPER._Numbers = NULL THEN PRINT "NULO"

END
 

A execução do programa da agora como resultado o que vemos a seguir:

Média: 19.44625
NULO
Com isto se demostra que o interpretador, como no caso do _New, chamou primeiro o método _Free da classe original, para depois o método _Free da classe filho.
Se nos surgir alguma dúvida a respeito da ordem de execução de algumas funções, recordemos que sempre podemos executar o código passo a passo para testa-lo.








<< Anterior Próximo >>

HOME



Cópia literal

Extraído do livro “GAMBAS, programação visual com software Livre”, da editora EDIT LIN EDITORIAL S.L,  dos autores  Daniel Campos Fernández e José Luis Redrejo. Prólogo de Benoit Minisini

LICENSA DESTE DOCUMENTO


É permitido a cópia e distribuição da totalidade ou parte desta obra sem fins lucrativo. Toda cópia total ou parcial devera expressar o nome do autor e da editora e incluir esta mesma licença, adicionando se é uma cópia literal “Cópia literal”. Se é autorizada a modificação e tradução da obra  sem fins lucrativo sempre se deve constar na obra resultante  a modificação o nome da obra original o autor da obra original e o nome da editora e a obra resultante também deverá ser livremente reproduzida, distribuída, ao publico e transformada em termos similares ao exposto nesta licença.

Tradução

Cientista
 (Antonio Sousa)