CAPÍTULO 2
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


2.8 Programação orientada a objeto com  Gambas


BASIC  é uma linguagem de programação estruturada. Isto significa que os programas têm o fluxo que temos visto até agora: Inicia  em um ponto de uma subrotina e vai executando as instruções de sima a baixo, com os saltos correspondentes as chamadas e procedimentos e varias funções de controle de fluxo como loops, condições, etc.

Este tipo de programação permite resolver a maior parte dos problemas e está sendo usado há muitos anos. Até os dias de hoje, seguem desenvolvendo aplicações com linguagens como BASIC ou C, de programação estruturada. Desde os anos 70 se vem trabalhando também em outros paradigmas de programação: a programação orientada a objetos. As linguagens que adotam este paradigma, como Smalltalk, Java o C++, tentam modelar a realidade. A execução destes programas se baseia na interação dos vários objetos que definem o problema, tal e como ocorre na vida real, como os objetos, pessoas e animais nos movemos, enviamos mensagens uns aos outros e  executamos ações. A programação orientada a objeto é usada a cada dia com mais frequência porque permite uma melhor divisão das tarefas que um programa deve fazer, facilita a depuração e a colaboração entre vários programadores e nos projetos que são de grande tamanho e, em muitos aspectos, tem um potencial muito maior que a programação estruturada.

Por todas estas razões, é comum se adicionar características de programação orientada a objetos a linguagens que, como o BASIC, em principio não a tenham. Gambas permite fazer programas estruturados a moda antiga, escrevendo o código em Módulo, como já vimos antes e também permite a programação orientada a objeto mediante o uso de Classes. E mais, a maior parte dos componentes que são adicionados a linguagem, tem mais alternativas que o uso de objetos.

Podemos ver como funciona tudo isso no Gambas pensando no caso de que tenhamos que escrever um programa que simula o comportamento de um carro. Usando  a programação orientada a objetos, definiremos cada uma das partes do carro mediante um arquivo de classes onde escreveremos o código BASIC necessário para definir as características e a interface com que se comunica com o mundo. Por exemplo, definiremos como é um volante, como é uma roda, como é um assento, um acelerador, um motor, etc. Depois, baseado nessas informações, criaríamos  cada um dos objetos para criar o carro: um volante, quatro rodas, vários assentos, um motor, um acelerador, etc.  Cada um desses objetos responderia a certas mensagens, por exemplo, o volante responderia a um giro atuando sobre o eixo das rodas, o motor responderia incrementando suas rotações se recebessem uma pressão do acelerador, etc.

Cada vez que criamos um objeto baseando-nos em arquivo de classe que foi definido, dizemos que o objeto foi instanciado. Podemos estanciar tantos objetos quanto desejar a partir de uma classe e uma vez criados tem vida própria, são independentes uns dos outros com suas próprias variáveis respondendo as várias ações segundo tenham sido definidos no classe.

Outra das características da programação orientada a objetos é a Herança. Quando um objeto herda de outro objeto significa que é do mesmo tipo, mas que pode ter características acrescentadas. Por exemplo, suponhamos que definimos a classe quadro_de texto com certas características como tamanho de texto, alinhamento, etc. A seguir, podemos criar objeto dessa classe e são quadro_de_texto. Com o Gambas podemos, além do mas, criar uma nova classe, por exemplo: quadro_de_texto_multilinha que herda do quadro_de_texto. Isso significa que um quadro_de_texto_multilinha é um  quadro_de_texto só que são adicionados mais coisas. Todo o comportamento e propriedades do quadro_de_texto já estão codificado e não há necessidade de fazê-lo novamente.

Vamos a um exemplo simples que esclarece alguns conceitos, para isso vamos criar no ambiente de desenvolvimento um novo projeto de programa de texto. Para começar, vamos adicionar um Módulo com um nome qualquer e dois arquivos de classe, um nós chamamos SerVivo e ao outro Homem.

Este é o código que devemos escrever no arquivo de classe SerVivo.cls:


' Gambas class file
PRIVATE Patas AS Integer
PRIVATE Nascimento AS Integer

PUBLIC SUB nascido(Data AS Date)

Nascimento = Year(Data)

END

PUBLIC SUB PPatas(Numero AS Integer)

Patas = Numero

END

PUBLIC FUNCTION Idade() AS Integer

RETURN Year(Now) - Nascimento

END

PUBLIC FUNCTION DPatas() AS Integer

RETURN Patas

END

Este é o código para escrever no arquivo de classes Homem.cls:


' Gambas class file
INHERITS SerVivo
PRIVATE Nome AS String
PRIVATE Apelido AS String

PUBLIC SUB PNome(Cadeia AS String)

Nome = Cadeia

END

PUBLIC SUB PApelido(Cadeia AS String)

Apelido = Cadeia

END

PUBLIC FUNCTION NomeCompleto() AS String

RETURN Nome & " " & Apelido

END

E este é o código para escrever no Módulo que havíamos criado:

' Gambas module file
PUBLIC SUB Main()
DIM Macaco AS SerVivo
DIM Sujeito AS Homem

Macaco = NEW SerVivo
Macaco.nascido(CDate("2/2/1992"))
Macaco.PPatas(3)

PRINT Macaco.Idade()
PRINT Macaco.DPatas()

Sujeito = NEW Homem

Sujeito.nascido(CDate("2/18/1969"))
Sujeito.PNome("Vicente")
Sujeito.PApelido("Pires")

PRINT Sujeito.Idade()
PRINT Sujeito.NomeCompleto()

END

Vejamos os três arquivos, inclusive o de classe SerVivo.cls tem um código muito simples: declara um par de varáveis, um par de subrotinas com  as quais podemos atribuir um valor a essas variáveis e duas funções as quais devolvem valores de alguns cálculos realizado entre as variáveis e a data atual.

O arquivo Homem.cls é muito similar, mas com uma sentença nova: no inicio do arquivo foi declarado a instrução INHERITS SerVivo. Ao fazermos isso estamos dizendo que todos os objetos que se estanciam na classe Homem será objeto SerVivo e, por tanto, terão também as mesmas funções que um SerVivo e poderão realizar as mesmas operações.

Se for necessário alguns valores de inicialização dos objetos a ser criado, basta adicionarmos ao arquivo de classe uma subrotina com a sintaxe: PUBLIC SUB New(). Todo o código que se crie aqui será executado cada vez que se criar um objeto.

E finalmente, o módulo e seu procedimento Main. Declaramos duas variáveis: Macaco e Sujeito, porem em lugar de declararmos como um dos tipos de dados que vimos nos primeiros parágrafos deste capitulo, a declaramos como objeto da classe SerVivo e Homem. Portanto falando como propriedade, Macaco  e Sujeito não são variáveis, e sim objetos. As classes correspondem aos nomes dos dois arquivos de classe que definimos anteriormente. Além disso, vimos que para criar um objeto de uma classe é necessário usar sempre a palavra NEW, o que aconteceria mesmo que executando o código da subrotina New do arquivo de classe, se esta subrotina existisse. Uma vez que o objeto tenha sido criado, podemos ter acesso as suas subrotinas e funções escrevendo o nome do objeto e o procedimento separados por um ponto. Só podemos acessar os procedimentos que tenham sido declarados no arquivo de classe como PUBLIC.

Poupamos códigos, obviamente para a classe Homem, afinal não tivemos que escrever as funções que faz um SerVivo, há algumas consequências mais importantes que deduzimos deste exemplo. Tal e como está escrito, poderíamos trocar o código da classe SerVivo, modificando e trocando as variáveis, e o programa seguiria funcionando igual, sem ter que tocar em absoluto a classe Homem.

Quer dizer, podíamos, por exemplo, melhorar o método para calcular a idade, levando em conta o dia do nascimento dentro do ano. Também podíamos trocar o nome das variáveis e não afetar a classe Homem ou o resto do programa. Outras das possibilidades que existe é o uso dos arquivos de classes tal e como estão em outro projeto onde o modo seres vivos é necessário, reutilizando de formas simples o código já escrito.

Já foram elaborado multidão de livros e artigos sobre a programação orientada a objetos. A pretensão deste parágrafo  é unicamente servir de mera introdução geral e explicar as sintaxes necessárias para seu uso com o Gambas. A melhor forma de aprender, e desfrutar dela e obter todo o seu potencial é provando e vendo exemplos que a usem extensivamente.

O código fonte do ambiente de desenvolvimento Gambas faz um uso muito amplo de classes e objetos, o que o torna uma fonte completa de exemplos. Está disponível dentro do diretório apps/src/gambas2 do arquivo compactado    que contem os fontes do Gambas.






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 Benoît Minisini

LICENSA DESTE DOCUMENTO


É permitido a cópia e distribuição da totalidade ou parte desta obra sem fins lucrativos. 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 lucrativos 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)