Escolar Documentos
Profissional Documentos
Cultura Documentos
Programacao Orientada A Objetos Com Object Pascal
Programacao Orientada A Objetos Com Object Pascal
Joo Morais
2003
SUMRIO
PARTE I Conceitos da Programao Orientada a Objetos .......................................... 3 1. Introduo........................................................................................................... 3 2. Conceitos da programao orientada a objetos ................................................. 3 2.1. Conceitos bsicos ........................................................................................... 3 2.1.1. Classe .......................................................................................................... 3 2.1.2. Objeto ........................................................................................................... 3 2.1.3. Instncia ....................................................................................................... 4 2.1.4. Herana ........................................................................................................ 4 2.1.5. Polimorfismo ................................................................................................. 4 2.2. Quanto ao contedo da classe ........................................................................ 4 2.2.1. Atributos ....................................................................................................... 4 2.2.2. Propriedades ................................................................................................ 4 2.2.3. Mtodos ........................................................................................................ 4 2.2.3.1. Mtodos Construtores (Constructor) .......................................................... 5 2.2.3.2. Mtodos Destrutores (Destructor) .............................................................. 5 2.2.3.3. Mtodos Estticos (Static) ......................................................................... 5 2.2.3.4. Mtodos Dinmicos (Dynamic) .................................................................. 5 2.2.3.5. Mtodos Virtuais (Virtual) ........................................................................... 5 2.2.3.6. Mtodos Sobrescritos (Override) ............................................................... 5 2.2.3.7. Mtodos Abstratos (Abstract) .................................................................... 6 2.3. Quanto rea da declarao .......................................................................... 6 2.3.1. Privado (Private) ........................................................................................... 6 2.3.2. Protegido (Protected) .................................................................................... 6 2.3.3. Pblico (Public) ............................................................................................. 6 2.3.4. Publicado (Published) ................................................................................... 6 PARTE II Implementao dos conceitos em Object Pascal .......................................... 7 3. Introduo........................................................................................................... 7 4. Objetos e herana de objetos ............................................................................. 7 5. Classes de Objeto e Instncias .......................................................................... 8 6. Herana, Polimorfismo e Mtodos No-Estticos............................................... 9 7. Propriedades .................................................................................................... 11 7.1. Uso dos parmetros de uma propriedade ..................................................... 11 7.2. Exemplos de uso de propriedades ................................................................ 11 8. rea da declarao de atributos e mtodos ..................................................... 12
2.1.2. Objeto
a informao em memria, e segue as regras definidas pela classe que o criou. Ao criar uma classe, voc cria diversas regras que definem o comportamento de parte do seu programa, e a partir destas regras, voc pode criar objetos, que iro armazenar estas informaes. Exemplos de objetos: ao criar regras que explicam como um boto ou uma tabela de banco de dados deve funcionar (as classes), pode-se criar objetos que iro armazenar as informaes do programa, tal como o comportamento que determinado boto ter ao ser clicado, e a localizao da tabela do banco de dados.
Arquivo de Object Pascal
2.1.3. Instncia
Instncia um sinnimo de objeto. Quando voc cria um boto Ok para o seu formulrio, costuma-se dizer que voc cria uma instncia da classe Boto. Todo objeto precisa ser criado, precisa ser instanciado para que possa ser utilizado.
2.1.4. Herana
um conceito muito importante da programao orientada a objetos, e trata da reutilizao do cdigo. bastante comum existirem classes de objetos com caractersticas em comum, e o conceito de herana, alm de evitar a repetio do cdigo, ajuda na depurao do programa e na criao de classes mais complexas e funcionais. Um bom exemplo j abordado - as classes que criam objetos visuais (botes, formulrios, etc.), e as classes que criam objetos no visuais (aplicao, tabela do banco de dados, etc.). Todos os objetos visuais possuem informaes em comum, tal como as coordenadas de posicionamento na tela, tamanho, etc. Estas informaes podem ser agrupadas em uma classe genrica e passadas s classes-filha atravs do conceito de herana.
2.1.5. Polimorfismo
Uma importante caracterstica da programao orientada a objetos, e permite que determinada rotina, em uma classe genrica, possua implementaes distintas em classes herdeiras. Exemplo de polimorfismo: o boto e a caixa de texto precisam de uma rotina que faa o seu desenho na tela. Mas como utilizar uma rotina para criar desenhos distintos? O polimorfismo cuidar disto. Neste ponto voc me pergunta - se eu tenho desenhos distintos em classes distintas, eu posso simplesmente abandonar o conceito de herana e o conceito de polimorfismo, e criar rotinas separadas em cada classe. Mas a eu te respondo - o polimorfismo e a herana so os grandes destaques da programao orientada a objetos, eles simplificam e muito a construo de sistemas complexos. A segunda parte desta apostila dar nfase a estes conceitos.
2.2.2. Propriedades
possvel criar uma estrutura que funcione como uma varivel (recebendo e retornando dados), e controlada por um par de rotinas. Em uma propriedade, pode-se definir um procedimento que ir receber a informao, e/ou definir uma funo que ir retornar a informao. Propriedades so especialmente teis para proteger as informaes dentro do objeto e/ou executar alguma instruo quando a informao alterada ou recuperada. Propriedades so definidas com a palavra reservada property frente do nome da propriedade.
2.2.3. Mtodos
So as rotinas da classe, e podem ser dos seguintes tipos:
Neste exemplo est sendo declarado um formulrio fictcio. As declaraes constructor e destructor indicam os procedimentos de abertura e encerramento do objeto. Quero chamar a ateno para uma particularidade deste objeto - a redundncia. Este um exemplo bem simples, mas uma implementao completa de um formulrio se estenderia a vrios outros dados e mtodos, seria totalmente invivel repetir tudo isto para cada janela que quisssemos criar. Veja este segundo exemplo:
type TForm = Object Top, Left: integer; Visible: boolean; constructor Create; destructor Destroy; procedure Show; procedure Hide; end; TForm_ok = Object(TForm) botao_ok: TButton; end; var Form_ok: TForm_ok;
Ocorreram duas diferenas importantes neste exemplo. Note a declarao do tipo PForm_ok, e note tambm a nova declarao da varivel objeto Form_ok. Vou falar da diferena entre objeto (citado no exemplo anterior) e classe (comentado no incio da apostila). No primeiro exemplo, a varivel Form_ok era o prprio objeto. Bastava, ento, declarar esta varivel (na rea var) para que ela ocupasse o seu espao na memria. A classe uma estrutura que aponta para o objeto alocado na memria. um ponteiro para objeto. Uma varivel do tipo classe possui sempre o mesmo tamanho, independente do tamanho da sua estrutura. Isto possvel porque esta varivel indica apenas a localizao do objeto na memria. Mas ento, para qu complicar tanto? H alguns bons motivos para funcionar desta maneira, e o mais importante deles que cria-se uma instncia (leia-se - roubada memria do computador) apenas quando for necessrio, e depois a memria pode ser liberada ainda com o programa em funcionamento. Desta forma, vrios programas podem compartilhar a memria do computador, harmnica e economicamente.
Aqui temos trs clssicos exemplos de programao com alocao dinmica: alocar (new), acessar (Form.Show) e liberar (dispose). O termo alocao dinmica indica que foi reservado memria para os dados enquanto o programa estava em execuo. O procedimento new do Pascal aloca espao na memria, suficiente para guardar a estrutura indicada. O primeiro parmetro indica quem recebe o endereo da estrutura, e o segundo indica o mtodo construtor. Observao importante: nunca acesse um objeto que no foi instanciado. Na melhor das hipteses, voc ser presenteado com uma mensagem de erro, nada amigvel, informando uma violao de acesso memria. No DOS, como no h proteo da memria, a sua sesso poder ser encerrada sem maior cerimnia. O conceito "ponteiro para objeto" continua valendo at hoje, mas implementado de forma mais limpa e dedutvel. Nosso ltimo exemplo fica assim:
type TForm_ok = class(TForm) Botao_ok: TButton; end; var Form_ok: TForm_ok; begin Form_ok:=TForm_ok.Create(self); Form_ok.Show; Form_ok.Destroy; end;
A palavra reservada class e o conceito de classe veio fazer companhia ao Object Pascal apenas no Free Pascal, no Delphi e em outros compiladores Pascal modernos. A nica diferena estrutural da class para o ponteiro a objeto ao referenciar mtodos e atributos, em que dispensado o uso do circunflexo - o compilador sempre saber quando voc est se referindo ao objeto ou ao seu endereo. No v ficar com raiva de mim por ter feito voc estudar ponteiros. Se voc no entende como as coisas realmente funcionam, no poder dizer que conhece o assunto ;-)
Agora, analise a seguinte situao: visualize uma tela qualquer do Windows ou qualquer outro ambiente, com diversos Rtulos (Labels), Caixas de Texto, Botes, etc. Voc j sabe que cada um deles um objeto, e que pertence a uma determinada classe. Tambm fcil deduzir que estes desenhos no aparecem na tela por mgica. Cada objeto deve possuir um mtodo responsvel por seu desenho. De forma simplificada, isto funciona assim: o sistema operacional ordena que determinada janela seja atualizada (redesenhada), ento esta janela percorre a lista de controles que possui, e ordena que cada controle seja redesenhado. Esta lista de controles possui o endereo de cada objeto TControle. Volte a observar o exemplo - h um mtodo para cada um dos tipos de controle que foram implementados. Na tradicional programao procedural, a implementao fica assim:
if Controle is TEdit then DesenhaEdit else if Controle is TBotao then DesenhaBotao;
Veja aqui a importncia do polimorfismo na programao orientada a objetos: precisamos de um mtodo virtual (abstrato, ou com alguma implementao padro) que funcione como uma referncia para o mtodo correto. Veja agora, uma tpica implementao orientada a objetos:
Controle.Desenha;
Internamente, ela funciona como o exemplo "procedural", colocado anteriormente. Perceba que Controle, por pertencer classe TControle, pode referenciar tanto um TEdit como um TBotao. Como o mtodo Desenha virtual, o programa ir determinar, em tempo de execuo, qual implementao ser executada. Para ajudar a ilustrar as explicaes, verifique estes trechos de cdigo:
var Controle: TControle;
10
7. Propriedades
Propriedades so muito teis para manter a integridade das informaes do objeto, de forma simples e transparente ao usurio da classe. Ao usurio, uma propriedade funciona como uma varivel, por outro lado, permite ao programador da classe criar regras e aes que ocorrem no momento da leitura ou escrita dos dados. Sintaxe da declarao de uma propriedade:
property <nome_propriedade>[ [<var_indice>] ]:<tipo> [read <funo ou varivel>] [write <funo ou varivel>] [default];
Para escrita:
obj.propriedade:=<valor ou varivel>;
O uso de colchetes aps a declarao do nome, trata a propriedade como uma matriz. O valor passado pelo usurio enviado ao primeiro parmetro da procedure ou funo. O default utilizado em propriedades com ndice (colchetes), e a coloca como a propriedade padro da classe. Caso o usurio faa uma referncia classe, utilize um ndice e no indique uma propriedade especfica, a propriedade default ser utilizada.
11
As propriedades so teis para promover alteraes no objeto. No exemplo acima, ao fazer a leitura da propriedade Expression, a informao ser retirada diretamente da varivel VExpression. Ao fazer a escrita de um valor a esta propriedade, ser chamada a procedure SetExpression que receber o novo valor atravs do parmetro AExpression, verificar a integridade da expresso e providenciar as alteraes necessrias ao objeto, para possibilitar o clculo do resultado da expresso.
TLista = class(TObject) private VItems: TList; function GetItem(AIndex: integer): TItemLista; public property Items[AIndex: integer]: TItemLista read GetItem; default;
A propriedade Items somente leitura e utilizada para acessar os itens da varivel privada VItems. Para acessar esta propriedade:
ItemLista:=Lista.Items[i];
O contedo da varivel i passado ao parmetro AIndex da funo GetItem. A propriedade Items default, portanto, a linha acima poder ser escrita da seguinte forma:
ItemLista:=Lista[i];
O exemplo acima esconde as variveis VTop e VLeft de qualquer implementao fora do contexto da classe TForm. H um bom motivo para ser implementado desta forma - ao alterar a posio do formulrio, necessrio redesenh-lo em outra posio. Por isto as variveis VTop e VLeft esto em uma rea privada.
12
No exemplo acima h um mtodo declarado na rea protected da classe TFuncao, ou seja, acessvel apenas aos herdeiros desta classe. O segundo, declarado como pblico, um mtodo virtual e dever ser aperfeioado por seus herdeiros. Neste exemplo, o mtodo CalcFuncao possui implementaes distintas mas possui uma rotina em comum, chamada Recalc. O mtodo Recalc foi declarado como protegido porque parte de uma rotina, e no h qualquer interesse exceto ser chamado atravs dos herdeiros da classe.
Documento: Programao Orientada a Objetos com Object Pascal Original: Traduo: Reviso: Publicao: Joo Morais Joo Morais 27/12/2003
Todas as publicaes do Arquivo de Object Pascal so aprovadas por seus respectivos autores
13