2. Conceitos Básicos
Janelas e eventos
Existem muitas diferenças entre a programação em DOS e a programação em
Windows. Vejamos a principal: Quando programamos em DOS, nosso programa é
responsável pelo fluxo de processamento. Temos que definir claramente não só
que instruções,
mas também em que ordem devem ser executadas. Em Windows não é bem
assim. Nosso programa não controla o fluxo de processamento, ele responde e
trata eventos que ocorrem no sistema. Existem muitos eventos que podem ocorrer,
sendo que os principais são aqueles gerados pelo usuário através do mouse e
do teclado. A coisa acontece mais ou menos assim: O usuário clica o mouse e o
Windows verifica que aplicação estava debaixo do mouse no momento em que foi
clicado. Em seguida ele manda uma mensagem para a aplicação informando que
ocorreu um clique e as coordenadas do cursor do mouse na tela no momento do
clique. A aplicação então responde à mensagem executando uma função de
acordo com a posição do mouse na tela. É claro que o Delphi toma conta do
serviço mais pesado e facilita muito as coisas para o programador. Detalhes
como as coordenadas da tela em que ocorreu o clique, embora estejam disponíveis,
dificilmente são necessários nos programas.
Programação Orientada a Objeto (POO)
Embora não seja objetivo deste curso ensinar POO, uma breve introdução é
necessária, já que o Delphi é essencialmente orientado a objeto.
De maneira prática, podemos pensar no objeto sendo uma estrutura que agrupa
dados e funções para manipular estes dados. Como as funções são sempre “íntimas”
dos dados, o sistema todo funciona de maneira mais segura e confiável. Além
disso, a POO utiliza conceitos como encapsulamento e herança que facilitam
muito programação e manutenção dos programas.
Neste ponto é oportuno citar que os dados de um objeto costumam ser chamados de
variáveis de instância e as funções de métodos. As variáveis de instância
definem as propriedades (as vezes chamada de atributos) do objeto e os métodos
definem seu comportamento.
Encapsulamento - Como as variáveis e métodos estão na mesma estrutura,
pode-se pensar em variáveis e métodos privados, ou seja, dados e funções que
só podem ser manipulados pelas funções que estão dentro da estrutura. Desta
maneira é possível formar uma camada protetora nos dados e evitar atribuições
desastradas que comprometeriam o funcionamento do programa. Os defensores mais
ortodoxos da POO dizem que todos os dados de um objeto deveriam ser privados e o
número de funções públicas deve ser o menor possível, mas isso nem sempre
é viável ou prático. O Delphi implementa este conceito e oferece dados/funções
publicas (public) e privadas (private). Outra conseqüência do encapsulamento
é que os objetos podem ser “caixas pretas”. Não é necessário
(teoricamente) conhecer detalhes de funcionamento de um objeto para usá-lo,
basta enviar as mensagens apropriadas que ele responde com a ação desejada.
Classes - A classe representa um tipo ou categoria de objetos, o modelo a
partir do qual um objeto pode ser construído. É a estrutura propriamente dita,
que define os dados e métodos daquela classe de objetos. O objeto em si, é uma
instância da classe. Na programação estruturada podemos fazer uma analogia
com os tipos e variáveis, onde a classe eqüivale ao tipo e o objeto à variável
desse tipo.
Herança - É a capacidade que uma classe de objetos tem de herdar variáveis
e métodos de outra classe. Esta capacidade permite que o código já escrito
seja reutilizado de maneira muito mais eficiente e simples do que na programação
estruturada. Um programa orientado a objeto costuma implementar verdadeiras árvores
genealógicas de classes, com vários níveis de herança.
Para programar no nível do designer (veja adiante o que significa) não é
necessário um conhecimento profundo de POO. Mas é preciso conhecer pelo menos
a sintaxe. Todas as aplicações para Windows, precisam de pelo menos uma
janela, que no Delphi é chamada de Form. Cada form (assim como todos os objetos
visuais) tem um objeto associado a ele e sua representação visual, que vemos
na tela. Todos os componentes que incluímos no form, passam a fazer parte do
objeto que define o form. Exemplo: Se colocarmos um botão no form, a classe
deste form será modificada para incluir este botão. Os eventos e métodos
deste form, também estão na classe. Assim, supondo que o form se chame Form1
(nome default), para por exemplo desativar o botão que incluímos (de nome
Buttom1) escreveríamos:
Form1.Buttom1.Enabled
:= false;
Note
como o Buttom1 faz parte da estrutura que define o form. Mas se quisermos ativar
método RePaint (Repintar) do form faríamos:
Form1.Repaint;
Veja
que Repaint, não é uma variável, tecnicamente é uma procedure, mas fazemos
referência a ela como parte da estrutura Form1. Pode parecer confuso no início,
mas facilita muito a programação.