Você está na página 1de 18

Programao Orientada a Objetos (com Delphi/Object Pascal)

PARTE I

Programao Orientada a Objetos (com exemplos em Delphi)


Por Cludio Roberto Martins claudio@cinbesa.com.br

SUMRIO
1. PROGRAMAO ORIENTADA A OBJETOS COM OBJECT PASCAL .........2
1.1 CLASSES E OBJETOS ........................................................................................... 2 1.1.1 Classes ........................................................................................................ 2 1.1.2 Objetos........................................................................................................ 3 1.2 DECLARANDO CONSTRUTORES ........................................................................... 3 1.3 OCULTANDO INFORMAES ............................................................................... 4 1.3.1 Operadores de visibilidade........................................................................... 4 1.3.2 Property (propriedade)................................................................................. 5 1.4 HERANA .......................................................................................................... 6 1.4.1 Criando Subclasses...................................................................................... 6 1.4.2 Herana e Compatibilidade de Tipo............................................................. 6 1.5 POLIMORFISMO .................................................................................................. 7 1.5.1 Mtodos Virtuais e Dinmicos..................................................................... 8 1.5.2 Classes e Mtodos Abstratos ....................................................................... 9 1.5.3 Informao de Tipos em Tempo de Execuo.............................................. 9 1.6 SOBRECARGA DE OPERADORES......................................................................... 10 1.7 TPICOS AVANADOS ...................................................................................... 10 1.7.1 Self............................................................................................................ 10 1.7.2 Mtodos de Classe..................................................................................... 11 1.7.3 Ponteiros de Mtodo e Tipos Procedurais .................................................. 11 1.8 MANIPULANDO EXCEES ............................................................................... 12 1.9 A BIBLIOTECA DE COMPONENTES VISUAIS ....................................................... 13

2. BIBLIOGRAFIA ...................................................................................13 3. EXERCCIOS ......................................................................................14 4. ANEXO 1 RESUMO DA LINGUAGEM OBJECT PASCAL (DELPHI) .....15

CEFET/PA Centro Federal de Educao Tecnolgica do Par Curso Superior de Tecnologia em Informtica

Set/2003 Prof. Cludio Roberto Martins

Programao Orientada a Objetos (com Delphi/Object Pascal)

1. PROGRAMAO ORIENTADA A OBJETOS COM OBJECT PASCAL


O assunto apresentado neste tpico discutir os conceitos tericos da orientao a objetos (OO) em uma linguagem de programao, neste caso, com Object Pascal, que a linguagem base do ambiente Delphi. O Object Pascal permite uma abordagem orientada a objetos, que se baseia em trs conceitos fundamentais: classes, herana e polimorfismo. Tambm so vistas caractersticas especficas do Delphi quando se est trabalhando com OO.

1.1 CLASSES E OBJETOS


Classe Tipo de dados definido pelo programador, que possui um estado, uma representao e algumas operaes ou comportamentos. Uma classe tem alguns dados internos (atributos) e algumas operaes (mtodos), na forma de procedimentos ou funes. Uma classe descreve caractersticas genricas e o comportamento de uma srie de objetos semelhantes. Classes so usadas pelo programador para organizar o cdigo-fonte e pelo compilador para gerar o aplicativo. Objeto uma instncia de uma classe, ou seja, uma varivel (dinmica) do tipo definido pela classe. Objetos so entidades reais, que quando o programa est em execuo, ocupam parte da memria para sua representao interna.
1.1.1 Classes

Uma classe declarada atravs do uso da palavra reservada class, conforme o exemplo a seguir.
Type MinhaClasse = class End; // fim da definio da classe

Essa classe no til, pois no tem definies de atributos nem mtodos. Um exemplo mais interessante mostrado a seguir.
Type Data = class Mes, Dia, Ano: Integer; Procedure AjustaValores(m,d,a: Integer); Function AnoBis: Boolean; End; // fim da definio da classe

Os mtodos da classe precisam ser implementados, indicando que fazem parte da classe. Para esta finalidade, o Object Pascal adota a notao de pontos, conforme exemplo a seguir.
Procedure Data.AjustaValores(m,d,a: In teger); Begin Mes := m; Dia := d; Ano := a; End; // na implementation

(continua)

CEFET/PA Centro Federal de Educao Tecnolgica do Par Curso Superior de Tecnologia em Informtica

Set/2003 Prof. Cludio Roberto Martins

Programao Orientada a Objetos (com Delphi/Object Pascal)

function TData.AnoBis : boolean; begin if (ano mod 4 <> 0) then AnoBis := false else if (ano mod 100 <> 0) then AnoBis := true else if (ano mod 400 <> 0) th en AnoBis := False else AnoBis := True; end;

1.1.2 Objetos

Agora que temos uma classe definida, para us-la devemos criar uma instncia de um objeto. Assim como qualquer outro tipo de dados definido pelo programador, devemos criar um varivel do tipo da classe definida. Porm, nos modelos de objetos do Object Pascal, uma varivel do tipo de uma classe apenas um referncia, ou indicador, para a localizao de memria em que o objeto ser armazenado. As instncias de objetos definidos pelo programador devem ser criadas manualmente atravs da chamada do mtodo Create, que um construtor (procedimento especial usado para alocar memria para novos objetos e inicializ-los). Assim como se deve instanciar, tambm se deve dispor de um objeto, e isso feito chamando-se o mtodo Free. Os mtodos Create e Free, correspondem ao construtor e destrutor da classe TObject do Object Pascal. Todos os objetos criados no Delphi so herdados automaticamente desta classe, por isso usamos esses mtodos sem declar-los. A determinao de sub-classes e heranas ser discutida posteriormente. Um exemplo de instanciao e uso da classe definida mostrado a seguir.
Type Hoje: Data; Begin Hoje := Data.Create; Hoje.Dia := 7; Hoje.Mes := 3; Hoje.Ano := 2002; //ou Hoje.AjustaValores(7,3,2002); Hoje.Free; End;

CUIDADO: Um objeto s pode ser utilizado depois da sua instanciao (Create), e antes da sua desalocao (Free), seno ocorrer uma exceo no seu aplicativo.

1.2 DECLARANDO CONSTRUTORES


Para instanciar um objeto a partir de uma classe, chamamos o mtodo Create, porm muito comum ser necessrio realizar alguma inicializao antes de us-lo. Como esse objetivo, o Object Pascal permite a definio de construtores para as classes definidas pelo usurio. Da mesma forma, pode-se definir destrutores, caso seja necessrio realizar alguma limpeza de recursos antes do objeto ser destrudo. Construtores so procedimentos declarados com a palavra-chave constructor, e destrutores declarados com a palavra-chave destructor, conforme

CEFET/PA Centro Federal de Educao Tecnolgica do Par Curso Superior de Tecnologia em Informtica

Set/2003 Prof. Cludio Roberto Martins

Programao Orientada a Objetos (com Delphi/Object Pascal)

o exemplo a seguir. Com o uso de construtores e destrutores, o Delphi j aloca e libera memria para o objeto desejado, ou seja, realiza a tarefa do Create e do Destroy.
Data = class Mes, Dia, Ano: Integer; constructor Init(d,m,a: Integer); Procedure AjustaValores(m,d,a: Integer); Function AnoBis: Boolean; End;

Um exemplo de cdigo para o construtor mostrado a seguir.


constructor Data.Init (d,m,a: Integer); Begin Dia := d; Mes := m; Ano := a; End;

Assim, ao invs de instanciar o objeto como:


Hoje := Data.Create; Hoje.AjustaValores(8,3,2002);

Podemos fazer:
Hoje := Data.Init(8,3,2002);

1.3 OCULTANDO INFORMAES


A abordagem orientada a objetos introduz o conceito de encapsulamento, que a capacidade de "esconder" detalhes de implementao (abstrao), como se uma classe fosse uma caixa preta onde somente uma parte visvel: a interface da classe, representada pela assinatura de suas operaes (mtodos) pblicas. O principal objetivo do encapsulamento (o mesmo conceito de hiding, em ingls) tornar o objeto independente de sua implementao interna, para isso a implementao das suas propriedades e mtodos so "escondidas" de forma que o usurio (programador) precise apenas conhecer a interface do objeto para poder utiliz-lo. Desta forma, o projetista poder alterar tranqilamente a implementao de um objeto (Classe) sem causar transtornos aos programas que as usam. O ideal fornecer acesso aos dados das classes sempre atravs de mtodos, que sabero operar corretamente com eles. Imagine no exemplo da classe Data, se o programador atribusse diretamente um valor ao atributo Dia, poderamos chegar a um valor de data inexistente. Um mtodo para ajustar os valores da data faria essa validao, e tiraria essa complexidade dos usurios da classe.
1.3.1 Operadores de visibilidade

O Object Pascal tem trs especificadores de acesso bsicos: Private (privado) o membro (atributo ou mtodo) invisvel fora da unit ou programa onde a classe declarada. Em outras palavras, um mtodo privado no pode ser chamado de outro mdulo, e um atributo (propriedade) privado no pode ser acessado de outro mdulo, tambm.

CEFET/PA Centro Federal de Educao Tecnolgica do Par Curso Superior de Tecnologia em Informtica

Set/2003 Prof. Cludio Roberto Martins

Programao Orientada a Objetos (com Delphi/Object Pascal)

Public (pblico) define que membros da classe (atributos e mtodos) podem ser acessados livremente a partir de qualquer outra parte do programa. Protected (protegido) o membro visvel em qualquer parte do mdulo (unit) onde a classe declarada e de suas sub-classes (descendentes), independente da unit onde essas sub-classes forem declaradas. O exemplo da classe Data pode ser modificado para:
Type Data = class Private Mes, Dia, Ano: Integer; Public Procedure AjustaValores(d,m,a: Integer); Function AnoBis: Boolean; Protected Function DiasNoMes: Integer; End;

Veja que agora foi adicionado o mtodo DiasNoMes declarado como protected. Esse mtodo retornaria o nmero de dias do ms atual. Esse mtodo tambm poderia ser declarado como private, pois s faria sentido execut-lo no contexto da prpria classe, mas como protected ela poderia ser usada a partir de uma classe herdada de Data. No Delphi h um outro especificador de acesso, o published. Elementos desse tipo so acessados no s em tempo de execuo, mas em tempo de projeto. Isso usado para dar suporte criao de componentes.
1.3.2 Property (propriedade)

Property (propriedades) representa um mecanismo, em Delphi, para encapsular os atributos (privates) de uma Classe, sobrecarregando as operaes de leitura e escrita. So uma extenso natural s variveis da instncia (os membros atributos ou campos) de uma classe, pois permitem que o desenvolvedor parea estar trabalhando diretamente com esses membros atributos, enquanto na realidade est executando chamadas a mtodos. Para utilizar property, os campos (atributos) devem ser declarados como private, os mtodos como protected, e as propriedades (property) como public. A seguir, a declarao em Delphi.
property Identificador : TIPO [read MtodoDeLeitura ou Campo] [write MtodoDeEscrita ou Campo];

onde, Identificador representa a propriedade (property); TIPO o tipo ou classe da propriedade; MtodoDeLeitura o mtodo (ou campo) associado leitura da propriedade, correspondente a um mtodo get....; e, MdodoDeEscrita (ou campo) o mtodo associado escrita da propriedade, correspondente a um mtodo set..... No exemplo, a seguir, o atributo Mes tratado pela property pMes, usando um mtodo setMes para tratar a escrita do atributo.

CEFET/PA Centro Federal de Educao Tecnolgica do Par Curso Superior de Tecnologia em Informtica

Set/2003 Prof. Cludio Roberto Martins

Programao Orientada a Objetos (com Delphi/Object Pascal)

Type Data = class Private Mes, Dia, Ano: Integer; Public property pMes: integer read Mes write setMes; Protected procedure setMes(valor: integer); End; // na implementation: procedure Data.setMes (valor: integer); begin if (valor <= 0) or (valor >= 13) then // provoca um erro (exceo), alertando para o valor incorreto. raise Exception.Create (Valor invlido para o M es!) else Mes := valor; // recebe o valor correto para mes. end;

1.4 HERANA
1.4.1 Criando Subclasses

O Object Pascal permite que se defina um novo tipo de classe diretamente a partir de uma existente atravs de herana. Para herdar de um tipo existente, preciso somente indicar o tipo da superclasse no incio da declarao da subclasse, conforme o exemplo a seguir.
Type NovaData = class (Data) Public Function ObterTexto: String; End;

Neste exemplo, NovaData derivada de Data. Podemos dizer que Data ancestral de NovaData, ou classe-pai, e NovaData descendente de Data, ou classe-filha. A nova classe definida possuir todos os atributos e mtodos da classe ancestral e o novo mtodo definido (ou redefinido, caso j exista) ObterTexto, que deve ser implementada, conforme a seguir.
Const
Meses: array[1..12] of String = (Janeiro,Fevereiro,Maro,...,Dezembro);

Function NovaData.ObterTexto: String; Begin ObterTexto := Format(%d de %s, %d, [Dia,Meses[Mes], Ano]); End;

1.4.2 Herana e Compatibilidade de Tipo

Pascal uma linguagem fortemente tipada, ou seja, no se pode atribuir a uma varivel de um tipo um valor de outro tipo. No entanto, quando trabalhos com heranas em orientao a objetos, uma subclasse do tipo da superclasse. Assim, pode-se utilizar um objeto de uma classe descendente quando um objeto da classe ancestral for esperado, mas o inverso no verdadeiro. A seguir mostrado um exemplo com a classe Animal e uma classe Cao, herdada de animal.
CEFET/PA Centro Federal de Educao Tecnolgica do Par Curso Superior de Tecnologia em Informtica Set/2003 Prof. Cludio Roberto Martins

Programao Orientada a Objetos (com Delphi/Object Pascal)

Type Animal = class Public Constructor Create; Function ObterTipo: String; Private Tipo: String; End; Cao = class (Animal) Public Constructor Create; End;

Assim, a implementao dos mtodos poderia ser:


Constructor Animal.Create; Begin Tipo := Animal; End; Constructor Cao.Create; Begin Tipo := Cao; End; Function Animal.ObterTipo: String; Begin ObterTipo := Tipo; End;

E poderamos us-los da seguinte forma:


Var UmAnimal: Animal; UmCao: Cao; MeuAnimal: Animal; Begin UmAnimal := Animal.Create; UmCao := Cao.Create; MeuAnimal := UmAnimal; ShowMessage(MeuAnimal.ObterTipo); MeuAnimal := UmCao; ShowMessage(MeuAnimal.ObterTipo); End;

Como dito anteriormente, a atribuio seguinte estaria errada:


UmCao := UmAnimal;

1.5 POLIMORFISMO
a capacidade de tratarmos objetos de diferentes tipos (classes) de uma mesma maneira desde que eles tenham um ancestral em comum. Em outras palavras, objetos de classes diferentes podem ter mtodos com mesmo nome e cada objeto responder adequadamente de acordo com seu mtodo.
CEFET/PA Centro Federal de Educao Tecnolgica do Par Curso Superior de Tecnologia em Informtica Set/2003 Prof. Cludio Roberto Martins

Programao Orientada a Objetos (com Delphi/Object Pascal)

Mtodos da mesma classe podem ter o mesmo nome, desde que possuam quantidade ou tipo de parmetros diferentes. Mtodos da classe derivada podem ter nomes iguais aos da classe base, inclusive com parmetros iguais.
1.5.1 Mtodos Virtuais e Dinmicos

Procedimentos e funes em Pascal baseiam-se em ligao esttica, ou seja, o endereo da operao a ser chamada resolvida em tempo de compilao e linkedio. Uma outra forma de ligao, usada em linguagens orientadas a objetos, a ligao tardia ou dinmica. Nessa forma, o endereo do mtodo a ser executado resolvido em tempo de execuo. Para esclarecer, suponha que uma classe (Animal) e sua subclasse (Cao) definam ambas um mtodo, e que este tenha uma ligao dinmica. Usando uma varivel genrica (do tipo da superclasse) e aplicando o mtodo definido, ser chamado o mtodo da superclasse ou da subclasse, dependendo do tipo do objeto atual atribudo varivel. Ou seja, o endereo do mtodo ser resolvido em tempo de execuo. A vantagem dessa abordagem se chama polimorfismo, e sua idia bsica que se escreve a chamada de um mtodo, mas o cdigo chamado em tempo de execuo corresponde ao tipo do objeto do mtodo chamado. No Object Pascal, mtodos virtuais so definidos com a palavra reservada virtual, na superclasse, e a sua redefinio na subclasse, com a palavra reservada override. Um exemplo dado a seguir usando o exemplo anterior e introduzindo um novo mtodo EmitirSom.
Type Animal = class Public Constructor Create; Function ObterTipo: String; Function EmitirSom: String; virtual; Private Tipo: String; End; Cao = class(Animal) Public Constructor Create; Function EmitirSom: String; override; End;

Os mtodos devem ser implementados na seo implementation, como a seguir.


Function Animal.EmitirSom: String; Begin EmitirSom := Som do animal; End; Function Cao.EmitirSom: String; Begin EmitirSom := Au Au Au; End;

A criao de uma varivel do tipo da superclasse (Animal) e chamada do seu mtodo EmitirSom, deve funcionar se atribumos qualquer objeto descendente da superclasse.

CEFET/PA Centro Federal de Educao Tecnolgica do Par Curso Superior de Tecnologia em Informtica

Set/2003 Prof. Cludio Roberto Martins

Programao Orientada a Objetos (com Delphi/Object Pascal)

Veja que isso favorece muito a reutilizao de cdigo. Em vez de escrever uma chamada de mtodo para cada tipo de objeto descendente, podemos atribuir o objeto a uma varivel genrica e chamar seu mtodo normalmente que a ligao ser resolvida automaticamente. O Object Pascal oferece uma variao desse mecanismo atravs do uso da palavra reservada dynamic ao invs de virtual. O efeito o mesmo, a diferena alguma variao em relao como o compilador tratar a ligao dinmica para fins de desempenho. Para maiores detalhes, consultar o help do Delphi. O Object Pascal tambm oferece um mecanismo que permite, ao invs de substituir totalmente o mtodo da superclasse por uma nova verso, adicionar algum cdigo a mais ao mtodo existente. Isso feito com a palavra reservada inherited, conforme exemplo a seguir.
Procedure Subclasse.Metodo; Begin // Cdigo adicional... // Chamada da verso do cdigo da superclasse = Superclasse.Mtodo. inherited; End;

1.5.2 Classes e Mtodos Abstratos

Uma classe abstrata definida para ser base de uma hierarquia de classes. Possui mtodos que no esto implementados e no pode ser instanciada. O Object Pascal oferece um recurso que permite definir um mtodo em uma superclasse e s implement-lo em suas subclasses, so os mtodos abstratos. A razo de mtodos abstratos existirem o polimorfismo: se uma superclasse possuir um mtodo abstrato, toda subclasse poder redefini-lo e continuamos a poder usufruir da ligao dinmica, conforme discutido no item anterior. No Object Pascal, possvel instanciar um objeto a partir de uma classe abstrata, porm, no possvel executar um mtodo abstrato. Se isso ocorrer h uma exceo fatal e o aplicativo finalizado. difcil entender porque no Delphi possvel instanciar uma classe abstrata. A definio de mtodos abstratos se d atravs do uso da palavra reservada abstract, conforme exemplo a seguir.
Type ClasseAbstrata = class Function Metodo: Integer; virtual; abs tract; End;

1.5.3 Informao de Tipos em Tempo de Execuo Imagine que uma subclasse defina um mtodo no presente na superclasse. Se tivermos uma varivel do tipo da superclasse, e se esta referir-se subclasse, ser possvel chamar o mtodo definido anteriormente. Mas se a varivel referir-se superclasse, teremos um erro em tempo de execuo. Esse tipo de problema comum, e o Object Pascal possui dois operadores (is e as) que nos permite lidar com tipos de classes em tempo de execuo. O operador is retorna TRUE se um objeto de um tipo de classe passado como parmetro, conforme exemplo a seguir.
If objeto is TipoClasse then ...

Assim, podemos saber com certeza o tipo de um objeto e podemos fazer um typecasting explcito sem causar erros de execuo, como o exemplo a seguir.
If Meu Animal is Cao then MeuCao := Cao(MeuAnimal);

CEFET/PA Centro Federal de Educao Tecnolgica do Par Curso Superior de Tecnologia em Informtica

Set/2003 Prof. Cludio Roberto Martins

Programao Orientada a Objetos (com Delphi/Object Pascal)

10

Essa operao poderia ser realizada diretamente com o uso do operador as. Esse operador retorna um objeto do tipo da classe passada como parmetro. A sua diferena para operador is, que caso as classes no sejam compatveis, retornada uma exceo. Um exemplo do uso do operador as dado a seguir.
MeuCao := MeuAnimal as Cao; MeuCao.Comer;

Ou, simplesmente,
(MeuAnimal as Cao).Comer;

1.6 SOBRECARGA DE OPERADORES


O Object Pascal possui um recurso que permite a declarao de vrios mtodos com o mesmo nome, mas parmetros diferentes, diferenciando a forma de uso, conforme as necessidades. A sobrecarga de um mtodo feita com o uso da palavra reservada overload.
TMinhaClasse = class constructor Create; overload; constructor Create(msg: String); overload; end;

Dependendo dos parmetros usados na chamada do mtodo, ser realizado um comportamento diferente.
obj := TMinhaClasse.Create; obj.Free; obj := TMinhaClasse.Create(Ola); obj.Free;

Mtodos sobrecarregados so herdados pelas classes descendentes.

1.7 TPICOS AVANADOS


1.7.1 Self

A palavra reservada self refere-se a um parmetro implcito chamado automaticamente a qualquer mtodo quando ele chamado. Self pode ser definido como um ponteiro para o objeto atual. Como em um exemplo visto anteriormente, a implementao de um mtodo deve operar somente sobre seus prprios atributos e no afetar os demais objetos. Procedure Data.AjutarValores (d, m, a: Integer);
Begin Dia := d; Mes := m; Ano := a; End;

Nesse exemplo, Mes refere-se ao atributo do prprio objeto. Isso poderia ser expresso como:
Self.Mes := m;

CEFET/PA Centro Federal de Educao Tecnolgica do Par Curso Superior de Tecnologia em Informtica

Set/2003 Prof. Cludio Roberto Martins

Programao Orientada a Objetos (com Delphi/Object Pascal)

11

1.7.2 Mtodos de Classe

O Object Pascal permite a declarao de mtodos de classe. Um mtodo de classe um mtodo que no pode acessar os atributos de um objeto, mas pode ser chamado ao se referir a uma classe ao invs de uma instncia. Tecnicamente, um mtodo de classe um mtodo que no tem o parmetro self. Para declarar um mtodo de classe, basta definir um mtodo com o uso da palavra reservada class, conforme exemplo a seguir.
Type MinhaClasse = class ... class function Metodo: Integer; ... end;

Esse tipo de construo pode ser usado para manter informaes gerais relacionadas classe, por exemplo, o nmero de objetos instanciados. Um exemplo de mtodo de classe o construtor Create, herdado de TObject. O mtodo usado sem que o objeto seja instanciado, afinal ele responsvel por realizar esta atividade.
Var Obj: MinhaClasse; I: Integer; Begin I := MinhaClasse.Metodo; Obj := MinhaClasse.Create; Obj.Free; End;

1.7.3 Ponteiros de Mtodo e Tipos Procedurais

No Object Pascal existe o conceito de tipo procedural, que parecido com o conceito de ponteiro para funo em C. A sua declarao deve indicar a lista de parmetros e retorno , se for uma funo. Tipos procedurais so compatveis com procedimentos que possuem exatamente os mesmos parmetros. Dentro da abordagem orientada a objetos, o Object Pascal possui o mesmo recurso de tipos procedurais, s que se referindo a um mtodo de um objeto, o que chamado de ponteiro de mtodo. A declarao de um tipo ponteiro de mtodo e tipo procedurais so semelhantes, a diferena que para mtodos so utilizadas as palavras reservadas of object, conforme o exemplo a seguir.
Type TipoProc = procedure(Par: Integer); TipoMetod = procedure(Par: Integer) of object;

Uma vez declarado o tipo, podemos criar um atributo deste tipo em um objeto:
Type MinhaClasse = class Atrib: Integer; Metodo: TipoMetod; End; OutraClasse = class Procedure Adiciona(N: Integer); End;

CEFET/PA Centro Federal de Educao Tecnolgica do Par Curso Superior de Tecnologia em Informtica

Set/2003 Prof. Cludio Roberto Martins

Programao Orientada a Objetos (com Delphi/Object Pascal)

12

Aps instanciar os objetos poderamos fazer a atribuio (repare que os parmetros das operao so exatamente iguais):
MeuObjeto.Metodo := OutroObjeto.Adiciona;

O conceito de ponteiros para mtodos a base para a construo de componentes com seus eventos, e corresponde ao conceito de delegao, na orientao a objetos. Lembre-se que no ambiente do Delphi estamos atribuindo nossos procedimentos aos eventos definidos pelo componente.

1.8 MANIPULANDO EXCEES


Exceo um mecanismo que tem como objetivo tornar programas mais robustos ao adicionar a capacidade de manipular erros de software ou hardware. Permite o tratamento e reportagem de erros ou situaes indesejveis no programa com uma escrita de cdigo mais compacto. Permite tambm, que se separe o cdigo que descobre uma situao de erro do cdigo que o trata e reporta. No Object Pascal, toda exceo um objeto do tipo de uma classe herdada de Exception. possvel criar novas excees, simplesmente definindo uma subclasse de Exception. O mecanismo de tratamento de excees do Delphi baseia-se nas seguintes palavras-chave: Try Determina o incio de um bloco de cdigo protegido. Except Delimita o final de um bloco de cdigo protegido e insere as instrues de manipulao:
On (tipo de exceo) do (instruo)

Finally Indica um bloco de cdigo opcional usado para desalocar recursos do bloco try que sempre ser executado antes da manipulao da exceo. Raise Instruo usada para criar uma exceo definida pelo desenvolvedor, ou propagar qualquer exceo, inclusive emita pelo sistema, para o prximo manipulador. Um exemplo de cdigo para o tratamento de excees dado a seguir.
Function Divide(A, B: Integer): Integer ; Begin Try Divide := A div B; // Pode gerar uma exceo de diviso por zero Except On EdivByZero do Begin Divide := 0; MessageDlg(Diviso por zero capturada, mtError, [mbOk], 0); End; End; End; // fim da function.

Outra forma de tratar uma exceo obter o seu manipulador, ou objeto exceo passado pela instruo raise, quando esta for capturada. Com o manipulador, podemos acessar os seus atributos como um objeto qualquer. Um exemplo dado a seguir.
On E: Exception do // Captura qualquer exceo MessageDlg(E.Message, mtError, [mbOk], 0);

CEFET/PA Centro Federal de Educao Tecnolgica do Par Curso Superior de Tecnologia em Informtica

Set/2003 Prof. Cludio Roberto Martins

Programao Orientada a Objetos (com Delphi/Object Pascal)

13

Um exemplo de criao de uma nova exceo mostrado abaixo.


Type EminhaExcecao = class(Exception);

Para lanar essa exceo, no cdigo da deteco do erro, basta usar raise com o mtodo Create da classe de exceo desejada, conforme a seguir.
raise EminhaExcecao.Create(Mensagem de erro);

1.9 A BIBLIOTECA DE COMPONENTES VISUAIS


A biblioteca do sistema Delphi chamada Biblioteca de Componentes Visuais (VCL), que inclui todos os componentes disponveis para facilitar a criao de aplicaes. Todo o conjunto de classes da VCL segue uma hierarquia, onde TObject o pai de todas as classes. Isto significa que todos os componentes e classes que criamos so herdados de TObject. Isso feito implicitamente. Se voc notar o cdigo-fonte de um formulrio, voc perceber a estrutura de uma classe. O uso de componentes, como um formulrio, feito como o uso de qualquer outro objeto. Os componentes possuem atributos, propriedades e mtodos. Possuem tambm, ponteiros para mtodos, que so atribuies que fazemos em tempo de projeto para definirmos eventos. Componentes podem ser visuais, controles de interface com usurio, e no visuais. Muitos esto disponveis na barra de componentes, mas outros, como o Tapplication e o TForm, no. Alm do componentes, a VCL tambm possui outros tipo de classes que no se enquadram nessa categoria. Basicamente, so classes para objetos grficos (Ex. Tcanvas, Tbitmap, Tfont e outros), objetos de fluxo/arquivos (Ex. TfileStream, Treader, Twriter, etc) e Colees (Ex. Tlist, Tstrings, Tcolletion e outros). Uma terceira parte da VCL composta das classes de exceo. Classes de exceo so subclasses da Exception, descendentes diretas de TObject. O Help do Delphi explana detalhadamente toda a VCL, para maiores informaes consult-la. Diante do exposto, a orientao a objetos a base para a construo de seus prprios componentes, biblioteca de classes e excees.

2. BIBLIOGRAFIA
1. Cant, Marco Dominando o Delphi 5, A bblia Makron Books. 2. Borland Object Pascal Language Guide Disponvel on-line em: http://www.borland.com/. 3. Bobatti, Isaias Programao Orientada a Objetos Usando Delphi Visual Books.

CEFET/PA Centro Federal de Educao Tecnolgica do Par Curso Superior de Tecnologia em Informtica

Set/2003 Prof. Cludio Roberto Martins

Programao Orientada a Objetos (com Delphi/Object Pascal)

14

3. EXERCCIOS
Exerccio 1 Polimorfismo.

D exemplos do uso do conceito de polimorfismo, em Delphi.


Exerccio 2 Calculadora

Modele uma classe para representar uma calculadora aritmtica simples, que permita a realizao das quatro operaes bsicas. Em seguida, elabore uma aplicao para manipular um objeto da classe calculadora, a partir de dois operandos, mostrando o resultado, seguindo a mesma metfora do aplicativo Calculadora (padro), do Windows.
Exerccio 3 Classe Data

Defina e implemente uma classe simples de data que verifique se o ano bissexto, conforme exemplos da apostila, permita incrementar e decrementar o dia atual e tenha uma funo que retorne a data. Faa uma interface que instancie e permita o uso da classe, de forma a test-la.
Exerccio 4 Herana de Data

Refaa o exemplo anterior com uma nova classe herdada de Data que redefina o mtodo criado para retorno da data em formato textual com o nome dos meses.
Exerccio 5 Herana e compatibilidade de tipo

Implemente as classe Animal e Cao (ver apostila). Em um formulrio, acrescente dois RadioButtons, um para cada tipo, e um boto, de forma que ao pression-lo, se execute o mtodo ObterTipo do objeto correspondente ao radiobutton selecionado. Mostre o resultado no formulrio.
Exerccio 6 Mtodos Virtuais

Altere o exerccio anterior acrescentando o mtodo virtual EmitirSom (conforme apostila) e teste-o.
Exerccio 7 Mtodos Abstratos

Altere o exerccio anterior modificando o mtodo EmitirSom para abstract na superclasse(conforme apostila) e teste-o.
Exerccio 8 Informao de tipo

Altere o exerccio anterior de forma a testar o tipo de objeto antes de executar o mtodo EmitirSom (conforme apostila) e teste-o.
Exerccio 9 Figuras Geomtricas

1. Defina uma superclasse relativa a figuras geomtricas e trs subclasses relativas s especializaes: crculo, quadrado e tringulo equiltero. Defina atributos e mtodos de forma a permitir atribuio de valores, clculo de permetro, rea e desenho das figuras na tela. Para isso, utilize o componente TpaintBox do Delphi (Ver help do Delphi). 2. Implemente um formulrio no Delphi para a realizao das operaes definidas com a figura geomtrica desejada. 3. Faz parte do exerccio a correta definio de atributos e mtodos s classes, e o melhor uso possvel dessas dentro do paradigma OO.

CEFET/PA Centro Federal de Educao Tecnolgica do Par Curso Superior de Tecnologia em Informtica

Set/2003 Prof. Cludio Roberto Martins

Programao Orientada a Objetos (com Delphi/Object Pascal)

15

Anexos
4. ANEXO 1 RESUMO DA LINGUAGEM OBJECT PASCAL (DELPHI)
O item entre [ e ] opcional.
Estrutura de uma Unit
Unit <Nome_Unit_identificador>; Interface {Especifica o que ser exportado pela UNIT a fim de ser u tilizados por outros mdulos } [uses <lista de units>;] <sees de declarao> Implementation {Declarao de Variveis, Implementao dos mtodos.} [uses <lista de units>;] <definies> [Initialization] // Opcional {Cdigo executado automaticamente quando um aplicativo que utiliza a UNIT executado} <instrues>] [Finalization] // Opcional {Cdigo executado automaticamente quando um aplicativo que utiliza a UNIT finalizado} <instrues>] end.

Constante

tipos

locais

UNIT

Classes
Definio de uma Classe
<NomeClasse_identificador> = class[(Classe_Ascendente)] <atributos e mtodos> end; // fim da classe

- Deve ser feita na seo de declarao de tipos principal de um programa ou de uma unit, comeando com a palavra reservada Type. - No caso do Delphi, todas as classes so descendentes de TObject.

CEFET/PA Centro Federal de Educao Tecnolgica do Par Curso Superior de Tecnologia em Informtica

Set/2003 Prof. Cludio Roberto Martins

Programao Orientada a Objetos (com Delphi/Object Pascal)

16

Atributos e Mtodos
<visibilidade 1> <lista de variveis> <lista de procedimentos ou funes> <visibilidade 2> <lista de variveis> <lista de procedimentos ou funes> . . <visibilidade n> <lista de variveis> <lista de procedimentos ou funes>

Visibilidade

Define quem tem permisso de acessar e alterar os atributos e mtodos da classe. Em uma mesma classe podem existir atributos e mtodos com visibilidades diferentes. Visibilidade Descrio Os atributos e mtodos podem ser manipulados por qualquer classe. Public Os atributos e mtodos s podem ser manipulados pela prpria Private classe. Os atributos e mtodos podem ser manipulados pela prpria classe Protected ou por qualquer subclasse desta e por demais classes declaradas na mesma UNIT. Semelhante a visibilidade public sendo que permite o acesso em Published tempo de projeto.

Declarando, Instanciando, Destruindo e Referenciando Objetos

declarado da mesma maneira que uma varivel. Para que um objeto possa ser utilizado, este deve ser instanciado e aps o seu uso o mesmo deve ser liberado da memria (ou destrudo). - Se comporta como um ponteiro, mas manipulado como uma varivel normal. - Pode ser atribudo o valor nil (objeto NULO).
<Objeto> : Classe; <Objeto> := Classe.Create; <Objeto>.Free; <Objeto>.Identificador {Declarando} {Instanciando} {Destruindo} {Referenciando um membro ou mtodo}

onde: Identificador representa uma propriedade ou um mtodo. A referncia a Dados idntica a referncia a cdigo.
Mtodo Construtor

constructor <identificador> ( <parmetros formais> ); Aloca memria e inicializa o objeto, baseado nos parmetros passados. Normalmente a primeira ao invocar o construtor da classe base, atravs da instruo:

inherited <construtor> ( <parmetros reais > );

CEFET/PA Centro Federal de Educao Tecnolgica do Par Curso Superior de Tecnologia em Informtica

Set/2003 Prof. Cludio Roberto Martins

Programao Orientada a Objetos (com Delphi/Object Pascal)

17

Mtodo Destrutor

destructor <identificador> ( <parmetros formais> ); Destroi o objeto, baseado nos parmetros passados, e libera a memria alocada para ele. Normalmente a ltima ao invocar o destrutor da classe base, atravs da instruo:

inherited <destrutor> ( <parmetros reais > );


O Parmetro Self

Representa um parmetro invisvel passado a todos os mtodos de uma classe e representa a instncia da classe que esta chamando o mtodo. utilizado para evitar conflitos de nomes de objetos

Mtodos Estticos

Os mtodos declarados numa classe so por default estticos Tem suas referncias determinadas em tempo de compilao

Mtodos Virtuais

O objetivo dos mtodos virtuais a possibilidade de substitu-los por novos mtodos, contendo os mesmo parmetros, das classes descendentes. - Para tornar um mtodo virtual, basta acrescentar no final de sua declarao na classe, a palavra virtual; - Um mtodo virtual pode ser substitudo em uma classe descendente atravs de sua redeclarao seguida da diretiva override;
Mtodos Dinmicos

Mtodos dinmicos so basicamente idnticos a mtodos virtuais sendo declarados com o uso da diretiva dynamic

OBS :Os mtodos dinmicos favorecem o tamanho do cdigo enquanto os mtodos virtuais favorecem a velocidade.
Mtodos Abstratos

- So mtodos que no fazem nada, servem apenas para definir a estrutura de uma hierarquia. - Para tornar um mtodo abstrato, basta acrescentar no final de sua declarao na classe, a palavra abstract; Para um mtodo ser abstrato, necessrio que ele seja tambm virtual.
Propriedades (Property)

Representa um mecanismo para encapsular os campos de uma Classe sobrecarrgando as operaes de leitura e escrita So uma extenso natural s variveis de instncia de uma classe, pois permitem que o desenvolvedor parea esta trabalhando com estas, enquanto na realidade est executando chamadas a mtodos. Para utilizar as propriedades os campos (atributos) devem ser declarados como private, os mtodos como protected, e as propriedades como public.

property Identificador : TIPO


CEFET/PA Centro Federal de Educao Tecnolgica do Par Curso Superior de Tecnologia em Informtica Set/2003 Prof. Cludio Roberto Martins

Programao Orientada a Objetos (com Delphi/Object Pascal)

18

[read MtodoDeLeitura] [write MtodoDeEscrita]; Onde: Identificador representa a propriedade, TIPO o tipo da propriedade, MtodoDeLeitura o mtodo associado a leitura da propriedade, MdodoDeEscrita o mtodo associado a escrita da propriedade.
Verificao de Tipo

- Verifica, em tempo de execuo, se o objeto uma instncia da classe ou de alguma subclasse desta. - Retorna true ou false. <objeto> is <classe>
Converso de Tipo

- Converte, se possvel, uma referncia para o objeto de uma classe base em uma referncia para objeto da subclasse. (<objeto> as <classe>).<Mtodos ou Proprieda de>

CEFET/PA Centro Federal de Educao Tecnolgica do Par Curso Superior de Tecnologia em Informtica

Set/2003 Prof. Cludio Roberto Martins

Você também pode gostar