Apostila Laboratório de Programacao III - v2.2
-
Upload
yuri-rocha -
Category
Documents
-
view
62 -
download
0
Transcript of Apostila Laboratório de Programacao III - v2.2
-
Professor Marcos Antonio Moreira
LABORATRIO DE PROGRAMAO III
E
PROGRAMAO III
Sistemas de Informao
Ensinar e aprender so tarefas que andam juntas e, para que seja alcanado o
objetivo em cada uma delas, necessria muita dedicao e estudo constante.
No h mgica no aprendizado, h, sim, muita determinao por parte daquele
que quer aprender.
Copyright Agosto / 2012 Marcos Antnio Moreira.
Todos os nomes dos produtos citados so marcas registradas da Microsoft Corp. Outros produtos citados so
marcas registradas no respectivo cabealho As vrias Marcas Registradas que aparecem no decorrer desta apostila.
Mais do que simplesmente listar esses nomes e informar quem possui seus direitos de explorao, ou ainda
imprimir o logotipo das mesmas, o autor declara estar utilizando tais nomes apenas para fins editoriais, em
benefcio exclusivo do dono da marca registrada, sem inteno de infringir as regras de sua utilizao.
Professor
Marcos Antnio Moreira
-
Professor Marcos Antonio Moreira
Sumrio
Histrico ........................................................................................................................................................... 1
Definies ....................................................................................................................................................... 3
Evoluo da POO .......................................................................................................................................... 5
Abstrao ................................................................................................................................................... 7
Compartilhamento .................................................................................................................................. 7
Objeto .......................................................................................................................................................... 8
Classe ........................................................................................................................................................ 12
Herana..................................................................................................................................................... 14
Generalizao e Herana ................................................................................................................... 15
Dicas de Desenvolvimento ................................................................................................................ 16
Polimorfismo ................................................................................................................................................ 18
Encapsulamento ......................................................................................................................................... 20
Mtodos ......................................................................................................................................................... 23
Mtodos Estticos ...................................................................................................................................... 24
Amarrao (binding) ................................................................................................................................. 24
Reintroduce .................................................................................................................................................. 26
Abstract ......................................................................................................................................................... 26
Mtodos Virtuais ......................................................................................................................................... 27
Overload - Sobrecarga de Funes ..................................................................................................... 27
Construtores ................................................................................................................................................ 29
Destrutores................................................................................................................................................... 30
Opes de Visibilidade ............................................................................................................................. 31
Criando uma Classe Polgono ................................................................................................................ 34
Mtodo Free ................................................................................................................................................. 39
Mtodos Dinmicos ................................................................................................................................... 47
Mtodos Abstratos ..................................................................................................................................... 47
Propriedade (Property) ........................................................................................................................ 53
Mtodo de Leitura ................................................................................................................................. 55
Mtodo de Escrita ................................................................................................................................. 55
Segundo Exemplo Objeto Carro e Avio ....................................................................................... 58
-
Professor Marcos Antonio Moreira
Criando Mtodos.................................................................................................................................... 64
Terceiro Exemplo ....................................................................................................................................... 70
O que uma Classe? ........................................................................................................................... 71
Herana..................................................................................................................................................... 86
Quarto Exemplo ........................................................................................................................................ 102
Quinto Exemplo ........................................................................................................................................ 102
Introduo a Criao de Componentes ........................................................................................... 103
Criando a Unit do Componente ..................................................................................................... 104
Adicionando Funcionalidades.......................................................................................................... 108
Usando Procedure para Escrita...................................................................................................... 110
Criando Automatismos ...................................................................................................................... 112
Criando outro Componente .................................................................................................................. 116
Crie uma nova unit no Delphi e mo obra! ................................................................................ 116
Estendendo um Componente j Existente ..................................................................................... 124
Contedo Extra Introduo ao Desenvolvimento de um Sistema ........................................ 133
-
Professor Marcos Antonio Moreira
-
P g i n a | 1
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Histrico
A primeira linguagem a incorporar facilidades para definir classes de objetos
genricos na forma de uma hierarquia de classes e subclasses foi idealizada
em 1966, na Noruega, como uma extenso da linguagem ALGOL 60. Uma
classe em Simula um mdulo englobando a definio da estrutura e do
comportamento comuns a todas as suas instncias (objetos).
A linguagem Smalltalk foi desenvolvida no Centro de Pesquisas da Xerox
durante a dcada de 70 que incorporou ideias de Simula e criou o princpio de
objetos ativos, prontos a "reagir" a "mensagens" que ativam
"comportamentos" especficos do objeto.
A linguagem C++ foi projetada para dar suporte a abstrao de dados e a
programao orientada a objetos.
Ada uma linguagem de programao criada atravs de um concurso
realizado pelo U.S. Departament of Defense (DoD). O principal projetista da
equipe foi o francs Jean Ichbiah. Esse concurso foi feito para por ordem na
situao, o DoD em 1974 usava cerca de 450 linguagens ou dialetos de
programao.
A linguagem foi primeiramente padronizada em 1983 pelo ANSI e em 1985 a
Organizao Internacional de Padronizao (ISO).
Eiffel uma Linguagem de Programao avanada, puramente orientada a
objeto que enfatiza o projeto e construo de software reutilizvel e de alta
qualidade. Eiffel foi criada por Bertrand Meyer que tinha uma extensa
experincia com programao orientada a objeto.
O Object Pascal ou Delphi Language uma linguagem orientada a objetos, isto
, todas as informaes so tratadas como objetos. Todos estes objetos
pertencem a uma classe, que so categorias de objetos.
Ex 001
-
P g i n a | 2
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
O Java ao mesmo tempo um ambiente e uma linguagem de programao
desenvolvida pela Sun Microsystems, Inc. Trata-se de mais um representante
da nova gerao de linguagens orientadas a objetos e foi projetado para
resolver os problemas da rea de programao cliente/servidor. Os aplicativos
em Java so compilados em um cdigo de bytes independente de arquitetura.
O termo orientao a objetos pressupe uma organizao de software em
termos de coleo de objetos discretos incorporando estrutura e
comportamento prprios. Esta abordagem de organizao essencialmente
diferente do desenvolvimento tradicional de software, onde estruturas de
dados e rotinas so desenvolvidas de forma apenas fracamente acopladas.
1967: Simula - introduz os primeiros conceitos de OO
1972: Smalltalk
1980: C++ linguagem hbrida, derivada da linguagem C
1983: Ada criada para uso militar nos EUA
1984: Eilffel primeiras caractersticas formais de OO
1986: Object pascal
1995: JAVA - Linguagem puramente orientada a objetos
1995: Vrias linguagens agregando conceitos de OO
-
P g i n a | 3
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Definies
Um objeto uma entidade do mundo real que tem uma identidade. Objetos
podem representar entidades concretas (um arquivo no meu computador, uma
bicicleta) ou entidades conceituais (uma estratgia de jogo, uma poltica de
escalonamento em um sistema operacional). Cada objeto ter sua identidade
significa que dois objetos so distintos mesmo que eles apresentem
exatamente as mesmas caratersticas.
Embora objetos tenham existncia prpria no mundo real, em termos de
linguagem de programao um objeto necessita um mecanismo de
identificao. Esta identificao de objeto deve ser nica, uniforme e
independente do contedo do objeto. Este um dos mecanismos que permite
a criao de colees de objetos, as quais so tambm objetos em si.
A estrutura de um objeto representada em termos de atributos. O
comportamento de um objeto representado pelo conjunto de operaes que
podem ser executadas sobre o objeto. Objetos com a mesma estrutura e o
mesmo comportamento so agrupados em classes. Uma classe uma
abstrao que descreve propriedades importantes para uma aplicao e
simplesmente ignora o resto.
Cada classe descreve um conjunto (possivelmente infinito) de objetos
individuais. Cada objeto dito ser uma instncia de uma classe. Assim, cada
instncia de uma classe tem seus prprios valores para cada atributo, mas
dividem os nomes dos atributos e mtodos com as outras instncias da classe.
Implicitamente, cada objeto contm uma referncia para sua prpria classe --
em outras palavras, ele sabe o que ele .
Polimorfismo significa que a mesma operao pode se comportar de forma
diferente em classes diferentes. Por exemplo, a operao move quando
aplicada a uma janela de um sistema de interfaces tem um comportamento
distinto do que quando aplicada a uma pea de um jogo de xadrez.
Ex 002
-
P g i n a | 4
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Um mtodo uma implementao especfica de uma operao para uma certa
classe.
Polimorfismo tambm implica que uma operao de uma mesma classe pode
ser implementada por mais de um mtodo. O usurio no precisa saber
quantas implementaes existem para uma operao, ou explicitar qual
mtodo deve ser utilizado: a linguagem de programao deve ser capaz de
selecionar o mtodo correto a partir do nome da operao, classe do objeto e
argumentos para a operao. Desta forma, novas classes podem ser
adicionadas sem necessidade de modificao de cdigo j existente, pois cada
classe apenas define os seus mtodos e atributos.
No mundo real, alguns objetos e classes podem ser descritos como casos
especiais, ou especializaes, de outros objetos e classes. Por exemplo, a
classe de computadores pessoais com processador da linha 80x86 uma
especializao de computadores pessoais, que por sua vez uma
especializao de computadores. No desejvel que tudo que j foi descrito
para computadores tenha de ser repetido para computadores pessoais ou para
computadores pessoais com processador da linha 80x86.
Herana o mecanismo do paradigma de orientao a objetos que permite
compartilhar atributos e operaes entre classes baseada em um
relacionamento hierrquico. Uma classe pode ser definida de forma genrica e
depois refinada sucessivamente em termos de subclasses ou classes derivadas.
Cada subclasse incorpora, ou herda todas as propriedades de sua
superclasse (ou classe base) e adiciona suas propriedades nicas e
particulares. As propriedades da classe base no precisam ser repetidas em
cada classe derivada. Esta capacidade de fatorar as propriedades comuns de
diversas classes em uma superclasse pode reduzir dramaticamente a repetio
de cdigo em um projeto ou programa, sendo uma das principais vantagens da
abordagem de orientao a objetos.
-
P g i n a | 5
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Evoluo da POO
No se configura como uma mudana de paradigma abrupta. Evoluiu de ideias
j manifestadas h muito tempo. Larry Constantine - (Dcada de 1960) Foi
quem primeiro lanou a ideia de que softwares poderiam ser projetados antes
que fossem programados. O. J. Dahl e K. Nygaard - (1966) - Foi quem
primeiro lanou a ideia de Classes introduzida na linguagem Simula. Alan Klay,
Adele Goldberg e outros - (1970) iniciaram o conceito de Mensagem e
Herana, usados na linguagem SmallTalk.
Programao orientada a objetos uma evoluo da programao estruturada
que na programao estruturada temos funes (procedures ou rotinas) e
dados (normalmente globais) que podem ser acessados por qualquer funo.
Na programao orientada a objetos, temos funes agregadas aos dados em
uma unidade chamada objeto, ou seja, os dados no esto separados das
funes, mas sim unidos s mesmas. Hoje, a grande maioria das linguagens
de programao, baseada em objetos (OO).
As bases da Orientao a Objetos na compreenso do mundo, os seres
humanos utilizam-se de trs mtodos de organizao dos pensamentos:
Diferenciao
Distino entre todo e parte
Classificao
V a orientao a objetos, como tcnica para modelagem de sistemas,
utiliza estes mtodos para diminuir a diferena semntica entre a
realidade e o modelo.
-
P g i n a | 6
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Exemplos de Classes e Objetos
Classe PRODUTO Classe CLIENTE Classe VEICULO
Atributos Atributos Atributos
Cdigo Cdigo Marca
Descrio Nome Modelo
Preo de Custo Endereo Cor
Preo de Venda Data Nascimento Ano fabricao
Quantidade Limite de Credito Velocidade mxima
Operaes Operaes Operaes
Comprar Alterar limite Ligar
Vender Desligar
Objetos Objetos Objetos
1 100 Marca X
Vassoura Joo da Silva Neturno
R$ 2,00 Rua Fulano, 20 Azul
importante observar e compreender que as linguagens orientadas a objeto so
aderentes a trs conceitos fundamentais: Classe, Herana e Polimorfismo.
-
P g i n a | 7
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Abstrao
Abstrao consiste de focalizar nos aspectos essenciais inerentes a uma
entidade e ignorar as propriedades acidentais'' Em termos de
desenvolvimento de sistemas, isto significa concentrar-se no que um objeto
e faz antes de se decidir como ele ser implementado. O uso de abstrao
preserva a liberdade para tomar decises de desenvolvimento ou de
implementao apenas quando h um melhor entendimento do problema a ser
resolvido.
Muitas linguagens de programao modernas suportam o conceito de
abstrao de dados; porm, o uso de abstrao juntamente com polimorfismo
e herana, como suportado em orientao a objetos, um mecanismo muito
mais poderoso.
O uso apropriado de abstrao permite que um mesmo modelo conceitual
(orientao a objetos) seja utilizado para todas as fases de desenvolvimento
de um sistema, desde sua anlise at sua documentao.
Compartilhamento
Tcnicas de orientao a objetos promovem compartilhamento em diversos
nveis distintos. Herana de estrutura de dados e comportamento permite que
estruturas comuns sejam compartilhadas entre diversas classes derivadas
similares sem redundncia. O compartilhamento de cdigo usando herana
uma das grandes vantagens da orientao a objetos. Ainda mais importante
que a economia de cdigo a clareza conceitual de reconhecer que operaes
diferentes so na verdade a mesma coisa, o que reduz o nmero de casos
distintos que devem ser entendidos e analisados.
-
P g i n a | 8
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
O desenvolvimento orientado a objetos no apenas permite que a informao
dentro de um projeto seja compartilhada como tambm oferece a possibilidade
de reaproveitar projetos e cdigo em projetos futuros. As ferramentas para
alcanar este compartilhamento, tais como abstrao, encapsulao e herana,
esto presentes na metodologia; uma estratgia de reuso entre projetos a
definio de bibliotecas de elementos reusveis. Entretanto, orientao a
objetos no uma frmula mgica para alcanar reusabilidade; para tanto,
preciso planejamento e disciplina para pensar em termos genricos, no
voltados simplesmente para a aplicao corrente.
Objeto
Um objeto denota uma entidade, seja ela de natureza fsica, conceitual ou de
software.
Um objeto pode ser definido como um mdulo que agrupa um estado e um
comportamento.
O estado interno de um objeto representado pelos campos que so
armazenados na memria primria, e pode ser alterado ao longo da vida do
objeto.
O comportamento de um objeto definido pelo seus mtodos. Cada mtodo
composto por um conjunto de instrues com a capacidade de alterar o
estado do objeto. Os mtodos incorporam um conjunto de aes que esto
diretamente relacionadas com as estruturas de dados contidas nos campos de
dados do objeto.
-
P g i n a | 9
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Entidades fsicas: um carro, uma pessoa, uma casa
Entidade conceitual: um organograma de uma empresa
Entidade de software: um boto em uma GUI
Classe
OBJETOS
Um objeto uma entidade do mundo real que tem uma identidade. Objetos
podem representar entidades concretas (um arquivo no meu computador, uma
bicicleta) ou entidades conceituais (uma estratgia de jogo, uma poltica de
escalonamento em um sistema operacional). Cada objeto ter sua identidade
significa que dois objetos so distintos mesmo que eles apresentem
exatamente as mesmas caractersticas. Embora objetos tenham existncia
prpria no mundo real, em termos de linguagem de programao um objeto
necessita um mecanismo de identificao. Esta identificao de objeto deve ser
nica, uniforme e independente do contedo do objeto. Este um dos
mecanismos que permite a criao de colees de objetos, as quais so
tambm objetos em si.
PESSOA (PESSOA)
Marcos Y
(PESSOA)
Gustavo X
(PESSOA)
-
P g i n a | 10
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
A estrutura de um objeto representada em termos de atributos.
Classe
OBJETOS
Classe
OBJETOS
A declarao de uma classe pode conter um ou mais atributos. Cada atributo
da classe define um campo nos objetos que pertencem a essa classe.
Classe possui atributos (declaraes).
Objetos cada instncia dessa classe possui um campo correspondente
declarao de um atributo.
Exemplo classe Pessoa possui um atributo chamado idade, e a instncia X
possui um campo chamado idade.
O conjunto de campos de um objeto compe o seu estado.
PESSOA (PESSOA)
Marcos Y
(PESSOA)
Gustavo X
(PESSOA)
PESSOA (PESSOA)
Marcos Y
35
Nome: String
Idade: 25
(PESSOA)
Marcos Y
27
-
P g i n a | 11
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
O comportamento de um objeto representado pelo conjunto de operaes
que podem ser executadas sobre o objeto (procedimento e funes ). Objetos
com a mesma estrutura e o mesmo comportamento so agrupados em classes.
Um objeto algo que tem:
Estado
Comportamento
Identidade
O estado de um objeto representa uma das possveis condies em que um
objeto pode existir. O estado representado pelos valores das propriedades de
um objeto em um determinado instante. O estado do objeto usualmente muda
ao longo do tempo:
Exemplo (Aluno Maurcio):
Nome: Maurcio
Matrcula: 105018
Semestre de Ingresso: 2009A
O comportamento determina como um objeto pode responder a interaes
mediante ativao de operaes decorrentes de mensagens recebidas de
outros objetos. O Comportamento determinado pelo conjunto de operaes
que o objeto pode realizar.
-
P g i n a | 12
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Classe
A declarao de uma classe descreve a estrutura de um conjunto (
potencialmente infinito ) de objetos.
Na declarao da classe constam todos os mtodos e atributos comuns para
todo um conjunto de objetos que pertencem a essa classe. Todo objeto uma
instncia da classe qual ele pertence.
Uma classe consiste de variveis e mtodos que representam caractersticas
de um conjunto de objetos semelhantes. O conceito de classe dos pilares da
programao orientada a objetos, por permitir a reutilizao efetiva de cdigo.
Na construo de software usado o termo CLASSE, o que na verdade seria o
objeto abstrato construdo computacionalmente. Quando o aplicativo
executado voc vai utilizar essa classe dando assim "vida" ao objeto. Voc
constri a classe onde fica seu cdigo e vai fazer uso dessa classe declarando
uma varivel dessa classe que quando executado o programa a varivel ser
uma instancia dessa classe onde chamamos de objeto. Em geral "criamos
classes" e "instanciamos objetos". A criao de uma classe feita em tempo
de projeto, quando voc esta codificando o seu software, o que envolve a
escrita do cdigo fonte. O objeto criado em tempo de execuo, quando
feita uma instancia da classe criado um objeto. A classe como se fosse um
molde, voc constri o molde e depois utiliza para fazer diversos objetos.
Uma classe a descrio de um grupo de objetos com propriedades
Semelhantes (atributos), mesmo comportamento (operaes), mesmos
relacionamentos com outros objetos (associaes e agregaes), e mesma
semntica.
Ex 003
-
P g i n a | 13
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Um objeto uma instncia de uma classe.
Exemplos de Classes
Voc, agora pode declarar a varivel do tipo TData criado.
-
P g i n a | 14
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Herana
Assim, como a linguagem Java, a linguagem Delphi Language no implementa
herana mltipla. Toda herana simples: Cada subclasse descende de uma
nica classe. Uma classe pode dar origem a inmeras classes porem cada
classe tem apenas uma classe ancestral.
O mecanismo de herana permite declarar uma nova classe a partir de outra j
existente. Isto pode ser feito de duas maneiras: por generalizao e por
especializao.
CLASSE A
CLASSE A
GENERALIZAO ESPECIALIZAO
B Descendente de A
A Ancestral de B
-
P g i n a | 15
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Neste caso a classe B herda automaticamente todos os atributos e mtodos da
classe A. Na declarao da classe descendente B pode-se adicionar novos
atributos e mtodos. Pode-se ainda, sobrepor ou redefinir mtodos e atributos
herdados da classe ancestral A.
Generalizao e Herana
Generalizao e herana so abstraes poderosas para compartilhar
similaridades entre classes e ao mesmo tempo preservar suas diferenas.
Generalizao o relacionamento entre uma classe e um ou mais verses
refinadas (especializadas) desta classe. A classe sendo refinada chamada de
superclasse ou classe base, enquanto que a verso refinada da classe
chamada uma subclasse ou classe derivada. Atributos e operaes comuns a
um grupo de classes derivadas so colocados como atributos e operaes da
classe base, sendo compartilhados por cada classe derivada. Diz-se que cada
classe derivada herda as caractersticas de sua classe base. Algumas vezes,
generalizao chamada de relacionamento is-a (-um), porque cada
instncia de uma classe derivada tambm uma instncia da classe base.
Generalizao e herana so transitivas, isto , podem ser recursivamente
aplicadas a um nmero arbitrrio de nveis. Cada classe derivada no apenas
herda todas as caractersticas de todos seus ancestrais como tambm pode
acrescentar seus atributos e operaes especficos.
-
P g i n a | 16
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Dicas de Desenvolvimento
Na construo de um modelo para uma aplicao, as seguintes sugestes
devem ser observadas a fim de se obter resultados claros e consistentes:
No comece a construir um modelo de objetos simplesmente definindo
classes, associaes e heranas. A primeira coisa a se fazer entender o
problema a ser resolvido.
Tente manter seu modelo simples. Evite complicaes desnecessrias.
Escolha nomes cuidadosamente. Nomes so importantes e carregam
conotaes poderosas. Nomes devem ser descritivos, claros e no deixar
EQUIPAMENTO
Nome
Fabricante
Custo
MOTOR
Velocidade
Potencia
BOMBA
Presso de Suco
Presso de descarga
Taxa de Fluxo
Tipo de Equipamento
-
P g i n a | 17
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
ambiguidades. A escolha de bons nomes um dos aspectos mais difceis da
modelagem.
No enterre apontadores ou outras referncias a objetos dentro de
objetos como atributos. Ao invs disto, modele estas referncias como
associaes. Isto torna o modelo mais claro e independente da
implementao.
Tente evitar associaes que envolvam trs ou mais classes de objetos.
Muitas vezes, estes tipos de associaes podem ser decompostos em
termos de associaes binrias, tornando o modelo mais claro.
No transfira os atributos de ligao para dentro de uma das classes.
Tente evitar hierarquias de generalizao muito profundas.
No se surpreenda se o seu modelo necessitar vrias revises; isto o
normal.
Sempre documente seus modelos de objetos. O diagrama pode especificar a
estrutura do modelo, mas nem sempre suficiente para descrever as
razes por trs da definio do modelo. Uma explicao escrita pode
clarificar pontos tais como significado de nomes e explicar a razo para
cada classe e relacionamento.
-
P g i n a | 18
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Polimorfismo
Polimorfismo significa a capacidade de tomar vrias formas. Em programao
orientada a objetos, polimorfismo se refere possibilidade de uma entidade
referenciar instncias de vrias classes durante o tempo de execuo.
Geralmente isto s possvel se a entidade for declarada em uma classe
ancestral, que generaliza uma ou mais classes descendentes.
Classe descendentes podem implementar de forma diferente um conjunto de
operaes comuns definidas na classe base ( No Delphi, usamos as diretivas
virtual e override para aplicar o polimorfismo)O conceito bsico do
polimorfismo baseia-se no fato de que voc pode escrever uma chamada a um
mtodo aplicando-a a uma varivel, mas o compilador somente poder
determinar a verso do mtodo a ser efetivamente utilizada em tempo de
execuo, de acordo com o tipo de objeto ao qual a varivel esta relacionada.
a capacidade de tratarmos objetos de diferentes tipos de uma mesma
maneira desde que eles tenham um ancestral em comum. Objetos de classes
diferentes podem ter mtodos com mesmo nome e cada objeto responder
adequadamente de acordo com seu mtodo. Mtodos da mesma classe podem
ter o mesmo nome, desde que possuam quantidade ou tipo de parmetros
diferentes.
-
P g i n a | 19
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Supondo que voc crie um objeto chamado MeuObjeto, qual seria o efeito da
chamada MeuObjeto.Voz? O mtodo a ser chamado dependeria da classe ao
qual MeuObjeto pertence.
Para que tenha a possibilidade de sobrepor um mtodo de ligao tardia em
uma classe descendente, preciso que o mtodo seja definido como virtual na
classe ancestral. Alm disso, voc deve escrever o novo mtodo com os
mesmo parmetros do mtodo original e utilizar a palavra reservada Override.
A diretiva Override importante para que o compilador faa a
correspondncia entre os nomes dos mtodos da classe me e da classe filha e
verifique se o mtodo da classe me foi efetivamente definido como virtual.
Voc, pode sobrepor um mtodo esttico, ou seja, um mtodo definido sem a
diretiva virtual na classe bsica. Voc escreve o novo mtodo na classe
derivada, sem a diretiva Override, e pode utilizar parmetros completamente
diferentes do mtodo original.
Como o novo mtodo no esta marcada como Override ele ser considerado
como um mtodo qualquer da classe derivada e no como uma nova verso do
mtodo da classe ancestral.
-
P g i n a | 20
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Encapsulamento
Quando se deseja criar uma classe, voc precisa se preocupar primeiro com os
aspectos essenciais dos objetos da mesma, e no com os detalhes de
implementao da classe.
Por exemplo: Um objeto da classe Carro tem uma operao Ligar Faris
Dianteiros. O fabricante do veiculo pode modificar a fonte de alimentao dos
faris, mudarem o tipo dos fios usados para levar os ate a energia necessria
para faz-los funcionar, fazer com que eles consumam menos energia, etc.
Porem conveniente que se mantenha um boto no painel do veiculo ou junto
ao volante para ligar os faris dianteiros.
Assim, as alteraes das caractersticas internas no vo prejudicar a interface
entre o motorista e os faris. Em POO isso chamado de Encapsulamento.
Voc deixa visvel apenas os aspectos externos do seu projeto. Assim, a
qualquer momento, podem ser feitas alteraes nos detalhes de
implementao para melhorar o desempenho, diminuir o uso de recursos como
memria, espao em disco, etc. E essas alteraes no prejudicaro em nada
os programas que utilizam aquele objeto. Os programas no precisaro ser
alterados, pois a interface entre eles e o objeto nos ser alterada. Quando se
defini uma classe, podemos colocar o nvel de acesso que voc deseja para
cada um de seus campos e mtodos. Conforme o exemplo acima da classe
Carro, um forma de definir o que pode ou no ser acessado atravs dos
especificadores de acesso que so Private, Protected, Public e Problished.
-
P g i n a | 21
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Private Sees private restringem o acesso aos campos, propriedades
e mtodos nela declarados ao modulo onde esta definida a classe. Dentro
do modulo onde est a definio da classe, os identificadores que forem
declarados como private funcionaro como se fossem public, porem fora
deste modulo eles no sero acessveis.
Protected Sees protected restringem o acesso aos identificadores
nela declarados somente s classes descendentes daquela. Isso
proporciona a capacidade de criar novas classes que utilizam estas
caractersticas sem permitir a utilizao destes identificadores por
quaisquer outras partes do cdigo. Em outras palavras, um mtodo como
protected pode ser chamado, e um campo protected pode ser lido ou
escrito a partir da definio de qualquer mtodo pertencente a uma
classe que descenda daquela que contem o membro.
Public Identificadores declarados como sendo public no sofrem
restrio de acesso, ou seja, ser visvel em qualquer lugar onde for
declarado.
Published a parte Default de uma classe. Se nenhum especificar for
definido, o compilador assume a declarao como Published.Este nvel
tem a mesma visibilidade que Public a diferena, que no caso de
membro Published gerada informao RTTI. RTTI (Run Time Type
Interface) o que permite, entre outras coisas, que eventos e
propriedades sejam manipulados atravs do Object Inspector.
Ex 004
-
P g i n a | 22
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
So atravs destes membros ou nveis de visibilidades que encapsulamos
nossos objetos.
Outro exemplo
No exemplo, a seguir, o atributo Mes tratado pela property pMes, usando um
mtodo setMes para tratar a escrita do atributo.
-
P g i n a | 23
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Mtodos
Declaraes de mtodos podem usar diretivas que no so usadas por outras
funes ou procedimentos. Diretivas devem aparecer somente na declarao
da classe, no na implementao do mtodo e deve obedecer sempre a
seguinte ordem.
Reintroduce; Overload; amarrao(binding); converso de
chamada (calling conversation); abstract
Onde amarrao (binding) virtual, dynamic ou override; converso de
chamada register, cdecl, stdcall ou safecall; e advertncia e plataform,
deprecated ou library.
-
P g i n a | 24
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Mtodos Estticos
Um metodo esttico um metodo declarado normalmente dentro de uma
classe sem nenhuma diretiva. Quando um objeto faz uma chamada a um
metodo estatico, o compilador resolve esta chamada em tempo de compilaao.
Os metodos estaticos so executados mais rapidamente, porem no podem ser
sobrescristos de forma a prover polimorfismo.
Amarrao (binding)
Use virtual ou dynamic na classe-pai quando estiver declarando um mtodo
que poder ser alterado nas classes descendentes.
Na classe descendente o mtodo devera ser redeclarado usando a diretiva
Override.
Ex 005
-
P g i n a | 25
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Se, em uma classe descente, uma declarao de mtodo especificar o mesmo
identificador de mtodo e a mesma assinatura de parmetros de um mtodo
virtual existente na classe-pai, mas no incluir a palavra Override, a nova
declarao somente ocultara o mtodo herdado, sem alter-lo. Ou seja, ambos
os mtodos existiro na classe descendente.
-
P g i n a | 26
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Reintroduce
A diretiva reintroduce suprime as mensagens do compilador sobre ocultao de
mtodos virtuais declarado em classe-pai.
Use reintroduce quando voc quiser que um novo mtodo da classe
descendente oculte um mtodo virtual herdado da classe-pai.
Abstract
Um mtodo abstrato um mtodo virtual ou dinmico que no tem
implementao na classe onde foi declarado. Sua implementao delegada
para a classe descendente.
Mtodos abstratos devem ser declarados com a diretiva abstract depois de
virtual ou dynamic.
-
P g i n a | 27
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Mtodos Virtuais
Mtodos virtuais so metodos que permitem que classes descendentes os
substituam, ou estendam, permitindo assim que uma classe descendente
altere a funcionalidade da classe ancestral. Para declararmos um metodo
virtual simplesmente indicamos a diretiva Virtual no fim da declarao do
mesmo conforme mostrado anteriormente. Mas na classe descendente deve
ser acrescentada a diretiva Override aps a declaraao do metodos.
Outro detalhe muito importante que o compilador no resolve a chamada a
um mtodo virtual em tempo de compilao, mas em tempo de execuo. O
resultado prtico disto que o nosso aplicativo ir utilizar o mtodo de acordo
com a instncia que a varivel estiver utilizando e no atravs do seu tipo que
foi declarado.
O mecanismo dos mtodos virtuais junto com a utilizao da herana que
nos permitir criar objetos polimrficos.
Overload - Sobrecarga de Funes
Um mtodo pode ser redeclarado usando a diretiva Overload. Nesse caso, se o
mtodo redeclarado tiver uma lista de parmetros diferentes daquela do seu
ancestral, ele vai sobrecarregar o mtodo herdado, sem ocultar-lo. Chamar o
mtodo em uma classe descendente ativa a implementao em que a lista de
parmetros combinarem com a lista de parmetros passada.
Se voc sobrecarregar um mtodo virtual, use a diretiva reintroduce para
redeclar-lo nas classes descendente.
-
P g i n a | 28
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Como pode observar no exemplo acima, a idia de sobrecarga simples: Voc
pode definir varias funes e procedimentos com o mesmo nome e parmetros
diferentes, utilizando a diretiva Overload. Com base nos parmetros, o
compilador determina qual a verso correta da verso a ser chamada em
determinado instante.
-
P g i n a | 29
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Construtores
Um construtor um mtodo especial que cria e inicializa objetos. A declarao
de um construtor se parece com a declarao de um procedimento. Porem
comea com a palavra Constructor.
Apesar da declarao do construtor no especificar valor de retorno, um
construtor retorna uma referencia ao objeto que ele cria, ou seja, um ponteiro
para a mesma. comum o nome o construtor ser Create.
Podemos utilizar o construtor de uma classe para inicializar algusn campos
internos e ate mesmo conferir alguma funcionalidade bsica mesma. Toda
classe possui um Construtor.
Para criar um objeto, chame o mtodo construtor para a classe desejada.
MeuObjeto := TMinhaClasse.Create;
-
P g i n a | 30
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Geralmente, a primeira ao em um construtor chamar um construtor
herdado da classe-pai para inicializar os dados herdados. Depois, o construtor
criado por voc deve inicializar os novos campos introduzidos na classe
descendente.
J que um construtor sempre limpa a memria para um novo objeto, todos os
campos comeam com valores de zero (tipos ordinais), NIL (apontadores e
classes), vazios (strings), ou Unassigned (variantes). Ento, no h
necessidade de inicializar campos na implementao de um construtor, exceto
se voc desejar valores diferentes de zero, nil, vazio e Unassigned.
Destrutores
Um destrutor um mtodo especial que destri o objeto para qual ele
chamado e desaloca sua memria.
A declarao de um destrutor se parece coma declarao de um procedimento.
Porm, ele comea com a palavra reservada Destructor.
-
P g i n a | 31
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Para chamar um Destrutor, voc deve fazer referencia a um objeto.
MeuObjeto.Destroy;
Opes de Visibilidade
Nesta fase devemos esconder do ambiente externo nossa classe objetos
que so exclusivamente destinados ao funcionamento interno da mesma, ou
objetos aos quais desejamos evitar um acesso direto ao seu contedo. Todos
os membros, mtodos e propriedades de uma classe tm um atributo chamado
visibilidade, que indicado por uma das palavras reservadas: private, public,
published ou automated.
Published property Cor: TColor read GetColor write SetColor
Declaram uma propriedade chamada Cor, com visibilidade published. A
visibilidade determina onde e como um membro poder ser acessado, com
private representando a menor acessibilidade, protected representando um
nvel de acessibilidade intermedirio e public representando o maior nvel de
acessibilidade.
Membros Private, Protected e Public Novamente
Um membro private invisvel fora da unidade ou programa onde sua classe
foi declarada. Em outras palavras, um mtodo private no pode ser chamado a
-
P g i n a | 32
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
partir de outro modulo, e um campo ou propriedade private no pode ser lido
ou escrito a partir de outro mdulo. Colocando classes relacionadas no mesmo
mdulo, voc pode dar a elas acesso aos membros private das outras sem
precisar das aos membros um nvel de acessibilidade maior.
Um membro protected visvel em qualquer lugar do mdulo onde sua classe
esta declarada e a partir de qualquer classe descendente, no importando o
modulo onde a classe descendente aparea. Um mtodo protected pode ser
chamado, e um campo protected pode ser lido ou escrito a partir da definio
de qualquer mtodo pertencente a uma classe que descenda daquela que
contem o membro. Membro que so projetados para uso apenas na
implementao de classes derivadas so, geralmente, protected.
Um membro public ser visvel em qualquer lugar onde a classe for
referenciada.
Membros published tm a mesma visibilidade que membros public. A diferena
que, no caso de membros published gerada informao de tipo RunTime
(RTTI). RTTI permite que uma aplicao consulte os campos e propriedades de
um objeto dinamicamente e localize seus mtodos. RTTI usado para acessar
os valores de propriedades quando se esta salvando ou lendo arquivos de
formulrios, para exibir propriedades no Object Inspector, e para associar
mtodos especficos (manipuladores de eventos).
Se a declarao de um membro aparece sem especificadores de visibilidade, o
membro tem a mesma visibilidade do membro anterior.
-
P g i n a | 33
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Voc pode aumentar a visibilidade de um membro em uma classe descendente
redeclarando-o, mas no pode diminuir sua visibilidade.
Por exemplo, uma propriedade protected pode se tornar public em uma classe
descendente, mas no pode se tornar private. Alm disso, membros published
no pode se tornar public em uma classe descendente.
Para podemos melhor compreender todo conhecimento at o momento
apresentado, vamos desenvolver uma classe e seus mecanismos em um nvel
mais de cdigo do que visual. Vale ressaltar neste momento que este um
exemplo mais de baixo nvel para que possamos visualizar claramente os
conceitos apresentados. Teremos outro exemplo mais de alto nvel onde
utilizaremos a Orientao Objetos em nvel mais visual.
DICA
Ao usar um objeto de uma classe, voc dever:
1. Declarar o Objeto;
2. Criar o objeto;
3. Usar o objeto;
4. Destruir o objeto
-
P g i n a | 34
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Criando uma Classe Polgono
1 Passo - Crie uma nova aplicao e adicione uma unit vazia ao nosso projeto.
2 Passo - Nesta nova Unit, declare uma nova classe na seo Interface.
3 Passo Crie uma classe que ter a funcionalidade de desenhar polgonos
regulares a partir de um ponto base.
Exemplo Pratico - Poligono
Polgono: uma figura plana formada por trs ou
mais segmentos de reta que se intersectam dois a
dois. Os segmentos de reta so denominados lados
do polgono. Os pontos de interseco so
denominados vrtices do polgono. A regio interior
ao polgono muitas vezes tratada como se fosse o
prprio polgono.
DICA
-
P g i n a | 35
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
4 Passo J sabemos que uma classe um conjunto de estruturas de dados e
mtodos. Vamos continuar a aplicao definindo, alguns campos para a nossa
classe. Declaraes de classes no podem aparecer dentro de procedure ou
functions. Elas podem ser declaradas na seo interface ou implementation.
Geralmente usamos a seo Interface para a declarao de classes.
Como nossa classe representar um polgono, definiremos campos internos a
esta classe para armazenar o seu tamanho base e nmeros de lados.
-
P g i n a | 36
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Adicione a Unit Windows clusula uses da seo interface da nossa unit (O
tipo TPoint est definindo nesta Unit )
Um construtor um mtodo especial que tem a finalidade de criar uma
instancia da classe e retornar um ponteiro para a mesma. Podemos utilizar um
construtor de uma classe para inicializar alguns campos internos e at mesmo
conferir alguma funcionalidade bsica mesma.
Vamos agora declarar e implementar um Construtor para a classe TPoligono e
em seguida veremos a relao entre uma classe e um objeto.
-
P g i n a | 37
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Quando um construtor de uma classe chamado, ocorrem as seguintes aes.
alocada uma nova rea de memria onde esto armazenados todos os
campos do novo objeto.
O bloco de memria alocado totalmente preenchido com zeros. Isto
significa que campos inteiros so inicializados automaticamente com
zeros, os tipos strings contero strings vazios, ponteiros recebero o
valor Nil e valores booleanos sero inicializados com falso.
Ao fim da execuo do construtor o mesmo retorna uma referencia
nova classe criada.
-
P g i n a | 38
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Um destrutor assim como existem mtodos especiais para criao de um
objeto, existe um mtodo especial, responsvel por liberar toda a memria
utilizada pelo mesmo.
Em nosso exemplo o destrutor da nossa classe s precisa liberar a memria
alocada pelo construtor, no precisamos implementar nada no destrutor. A
classe TObject j define um destrutor com esta finalidade.
Quando queremos executar um mtodo da classe ancestral antecedemos o
nome do mtodo com a palavra reservada Inherited.
-
P g i n a | 39
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Mtodo Free
A classe TOject define um mtodo chamado Free que sempre deve ser
utilizado ao invs de executarmos diretamente o destrutor da classe. Este
mtodo possui a caracterstica de no provocar uma exceo se estivermos
tentando acessar um objeto invlido (que j foi destrudo, por exemplo). Na
verdade, o mtodo free verifica se o valor da varivel, que representa a classe
instanciada, diferente de Nil, se for, ele chama o mtodo destroy da classe.
Agora vamos declarar um mtodo esttico na classe TPoligono da seguinte
forma (adicione clausula uses da seo interface as unit graphics)
Declarao do cabealho.
Declarao da implantao.
-
P g i n a | 40
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Para testarmos a nossa Classe TPoligono, adicione ao Form os seguintes
componentes.
Acrescente clausula uses da seo implementation a unit da classe
TPoligono.
-
P g i n a | 41
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Implemente o seguinte cdigo para o evento onClick do boto Polgono.
Neste ponto compile e execute a aplicao, testando o desenho de polgonos
com nmeros de lados variados.
Mtodos virtuais so mtodos que permitem que classes descendentes os
substituam, ou estendam, permitindo assim que uma classe descendente
altere a funcionalidade da classe ancestral.
O mecanismo dos mtodos virtuais junto com a utilizao da herana que
nos permitir criar objetos polimrficos.
Para melhor fixarmos os conceitos, criaremos a seguinte estrutura de classes.
TPoligono
TTriangulo TQuadrado
-
P g i n a | 42
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Vamos acrescentar a diretiva virtual aps o construtor da classe TPoligono.
Devemos declarar as classes descendentes e seus construtores com a diretiva
Override (dessa forma sobrescrevemos o construtor da classe ancestral)
Vamos implementar os construtores.
-
P g i n a | 43
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Agora, vamos criar um mtodo virtual na classe TPoligono e sobrescrev-lo na
classe descendente TTriangulo.
Adicione a seguinte declarao de mtodo na classe TPoligono.
Adicione a declarao do mtodo na classe TTriangulo da seguinte forma.
-
P g i n a | 44
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Vamos implementar o mtodo.
Agora, adicione ao final do mtodo Desenhar da classe TPoligono a seguinte
linha de cdigo.
-
P g i n a | 45
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Vamos adicionar dois novos botes ao Form da aplicao.
Implemente o event handle onClick dos botes. Primeiro o Button Triangulo e
logo em seguida o Quadrado.
-
P g i n a | 46
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Compile e execute a aplicao e observe o resultado.
Voc poder concluir que, mesmo quando atribumos uma instancia de
TTriangulo a uma varivel TPoligono, o mtodo Preencher a ser executado
o da classe descendente.
Para poder visualizarmos o funcionamento remova a diretiva virtual do mtodo
Preencher da classe TPoligono e a diretiva override do mtodo Preencher
da classe TTrangulo. Execute a aplicao novamente e observe o resultado.
Depois retorne com as diretivas aos mtodos novamente.
-
P g i n a | 47
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Mtodos Dinmicos
So basicamente idnticos a mtodos virtuais, sendo declarados com uso da
diretiva dynamic. A diferena bsica entre um tipo e outro est nos
mecanismos utilizado para a resoluo da chamada ao mtodo. A
implementao de mtodos dinmicos favorece o tamanho do cdigo enquanto
a implementao dos virtuais favorece a velocidade.
Mtodos Abstratos
Existem situaes em que voc quer que vrios objetos descendente de uma
classe tenham um mtodo em comum, contudo a classe ou superclasse no
tem este mtodo. Nesta situaes, declaramos o mtodo na superclasse e
dizemos que um mtodo abstrato.
A declarao de um mtodo abstrato feita adicionando as diretivas virtual e
abstract aps a declarao do mtodo.
Procedure SetX(value: Double); virtual; abstract;
A declarao do mtodo SetX acima informa ao compilador que ele no deve
esperar encontrar a implementao do mtodo mais adiante.
Vamos adicionar classe TPoligono o mtodo abstrato Area e implementar-lo
nas classes descendentes TTriangulo e TQuadrado.
Na classe TPoligono, adicione o mtodo.
-
P g i n a | 48
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Adicione tambm s classes descendentes e implemente em cada uma:
-
P g i n a | 49
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
No se esquea de adicionar na Uses na Interface a unit SysUtils.
Agora, adicione ao final do cdigo dos eventos dos botes referente ao
Tringulo e ao Quadrado o seguinte cdigo.
Triangulo.
-
P g i n a | 50
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Quadrado.
Vamos compilar nossa aplicao e verificar o resultado.
Como podemos observar, o campo FTamanhoBase da classe TPoligono
destinou a mesma a uma funo definida e restrita aos limites da classe. Esta
propriedade prov uma valor bsico que, dividido pelo numero de lados do
polgono, nos fornece um tamanho de lado que resulte em polgonos da rea
semelhante. Isto tem por objetivo impedir que os polgonos desenhados
extrapolem os limites da tela.
Vamos alterar nossa classe TPoligono. O campo deve ser visvel a classes
externas. Entretanto, como posteriormente permitiremos o acesso a esta
varivel atravs de uma propriedade vai definir sua visibilidade como private.
Veja, nossa classe TPoligono aps alterao.
-
P g i n a | 51
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
As classes descendentes no possuem objetos ou mtodos para os quais
devemos restringir a visibilidade, porem, como a visibilidade default
published, temos que inserir a diretiva public antes dos mesmos.
Como restringindo a visibilidade varivel FNumLados, agora devemos prover
mtodos de acesso ao contedo da mesma. Se declararmos estes mtodos
como pblicos, o desenvolvedor ter acesso a varivel pela chamada aos
mesmos. Isso tira um pouco da elegncia do cdigo, porem atende ao nosso
propsito funcional.
-
P g i n a | 52
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Esta era a forma tradicional de se trabalhar at o lanamento do Delphi, que
trouxe um recurso novo e muito til na rea de proteo de cdigo: O conceito
de Propriedade (Property)
Como a porta de acesso nossa varivel ser uma propriedade que
implementaremos posteriormente, declararemos nossos mtodos tambm na
seo private conforme abaixo.
Em seguida, vamos implementar os mtodos definidos:
-
P g i n a | 53
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Importante: Ao implementar mtodos de escrita de propriedade, cuidado
para no cair em recursividade infinita, acessando a propriedade no lugar do
campo interno do objeto.
Propriedade (Property)
Propriedade so atributos como nomes como os dos campos e que podem ter
aes associadas leitura e escrita. Propriedades uma extenso natural
aos campos de uma classe, pois permitem que o desenvolvedor parea estar
trabalhando com estas, enquanto na realidade est executando chamadas a
mtodos. Uma propriedade, como um campo, define um atributo para um
objeto. Mas, enquanto um campo somente um local para armazenamento
cujo contedo pode ser examinado e modificado, uma propriedade associa
aes especificas a leitura ou alterao de seus dados.
Propriedades oferecem controles sobre acesso aos atributos de um objeto e
permitem que atributos possam ser calculados. A declarao de uma
propriedade especifica um nome e um tipo, e inclui pelo menos um
especificador de acesso.
Especificadores uma seqncia de Read, Write, Stored, default. Cada
propriedade precisa ter pelo menos um especificador Read ou Write.
-
P g i n a | 54
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Read indica como ser obtido o valor da propriedade. Pode ser uma
leitura simples do valor de um campo (Read FCampo) ou calculado
atravs de uma funo que retorne um valor do mesmo tipo da
propriedade.
Write indica como ser alterado o valor do campo associado
propriedade. Pode ser uma escrita simples no campo ou a execuo de
um procedimento que poder, por exemplo, executar testes de validao
nos dados e alterar outros campos tambm, se for o caso.
Propriedades uma extenso natural aos campos de uma classe, pois
permitem que o desenvolvedor sinta estar trabalhando com estas, enquanto na
realidade esta executando chamadas a mtodos (Procedure ou Function)
Uma property tambm define um atributo, todavia podendo associar a aes
relacionadas leitura ou modificao de sues dados. Assim, ao acessarmos
uma property no estaramos acessando diretamente o contedo de um
atributo, e sim, um procedimento que seria um intermedirio desse acesso.
Esse procedimento permite a escrita de cdigos de validao e formatao dos
atributos. Em resumo, propriedades representam um mecanismo, para
encapsular os atributos (privates) de uma Classe, sobrecarregando as
operaes de leitura e escrita.
-
P g i n a | 55
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Property Nomepropriedade: TipoPropriedade
Read Campo ou mtodo de leitura
Write Campo ou mtodo de leitura
Nomepropriedade
Qualquer identificador valido na linguagem. Para propriedade do tipo array
deve ser declarado como: Nomepropriedade [Index: TipoIndice]
Campo
Campo que guardar o valor da propriedade quando no quisermos utilizar
mtodos de acesso. Por converso, todo e qualquer campo comea com a letra
F de Field.
Mtodo de Leitura
um mtodo que controla o acesso de leitura da classe. Deve ser uma funo
que retorna o mesmo tipo da propriedade, por exemplo:
Private
Fcampo: Integer;
Funtion GetCampo: Integer;
Published
Property Campo: Integer Read GetCampo write FCampo;
Mtodo de Escrita
um mtodo que controla o acesso de escrita da classe. Deve ser uma
procedure que tem um parmetro do mesmo da propriedade, por exemplo:
Private
Fcampo: Integer;
Procedure SetCampo Value: Integer;
Published
Property Campo: Integer Read FCampo write SetCampo;
-
P g i n a | 56
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Observao: Se um acesso de escrita no for especificado, a propriedade
somente para leitura (read-only)
Definindo Propriedades
Agora, vamos definir nossas propriedades NumLados da classe TPoligono:
Se tentarmos compilar nossa aplicao neste momento recebemos uma
mensagem de erro dizendo que FNumLados um identificador no declarado.
Isto ocorreu devido perda de visibilidade ao campo FNumlados por partes de
units externas classe TPoligono.
Para sanarmos o problema, devemos substituir referencias ao campo
FNumlados externas units da classe TPoligono por referencias propriedade
NumLados.
-
P g i n a | 57
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Execute a aplicao e tente sugerir o desenho de um polgono com menos de
trs lados.
Propriedade do Tipo Array
Propriedades do tipo Array permitem a implementao de propriedades
indexadas, ou seja, uma propriedade que utiliza mtodos de acesso a um array
atravs do seu ndice.
Ateno: No iremos entrar no conceito de Propriedades do Tipo Array.
-
P g i n a | 58
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Segundo Exemplo Objeto Carro e Avio
Vamos para o nosso segundo exemplo de Orientao Objeto na prtica.
Agora, com um pouco de programao visual para que os
conceitos sejam assimilados e fixados.
No Delphi, inicie uma nova aplicao VCL Win32. D o nome de FrmExemplo
ao formulrio e salve-o nomeando a unit como uFrmMain.pas. D o nome de
ClasseObjetos ao seu projeto. Crie o formulrio mostrado na figura abaixo (o
texto dentro dos Edits indica o nome que voc deve dar a eles). Esse
formulrio servir para entrarmos com os dados que sero usados para
popular os objetos que criaremos a seguir. Observe que ele possui duas
sesses, delimitadas por dois GroupBoxes. Os Edits sero usados para o
usurio informar os valores para os atributos dos objetos. Os botes vo criar
e liberar os objetos da memria.
Ateno: Tenha em mente que todos os nossos exemplos devem ser
salvos para que sempre que houver a necessidade de utilizar o exemplo
novamente, voc o tenha de forma fcil para acessar e continuar seus
estudos.
Exemplo Pratico Carro e Aviao
-
P g i n a | 59
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Vamos agora criar algumas classes, mas especificamente uma classe para
representar um carro e uma para representar um avio. Clique em
File>New>Unit. Salve a nova unit com o nome de uCarro.pas. Usando o
mesmo procedimento crie uma unit chamada uAviao.pas Veja na Listagem 1 o
cdigo das units. Observe a forma como declaramos uma classe Delphi. Veja
tambm que cada classe define atributos. Por exemplo, um carro tem uma
capacidade.
-
P g i n a | 60
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
-
P g i n a | 61
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Volte ao formulrio principal e adicione as units uCarro e uAviao clausula
uses da interface, para podermos ter acesso s classes definidas. Agora
declare duas variveis na seo public do formulrio:
Boa Prtica
Seguindo um padro da maioria das linguagens orientadas a objetos,
procure sempre declarar uma classe por Unit. Mas veja, no entanto,
que a prpria VCL do Delphi no segue esse padro.
-
P g i n a | 62
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
O que est declarado dentro da sesso public pode ser acessado sem restrio
em qualquer parte do cdigo.
Essas variveis representaro instancias das classes que acabamos de criar, e
sero manipuladas pelos controles de tela do formulrio principal. No boto
Criar (do objeto Carro) digite o cdigo da imagem abaixo. Como o prprio
nome sugere, o boto criara uma instancia do tipo TCarro, atribuindo isso ao
objeto chamado Carro. Isso e feito chamando o construtor da classe, um
mtodo especial chamado Create. Ainda no cdigo, aps criar o objeto,
inicializamos seus atributos com base nos valores digitados na tela.
Agora vamos fazer o mesmo para objetos do tipo TAviao. No boto Criar (do
objeto Avio) digite o cdigo da imagem abaixo. O que fazemos aqui e a
mesma coisa que fizemos para o carro instanciaram uma classe e inicializamos
seus atributos conforme os dados que o usurio digitar na tela.
-
P g i n a | 63
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Quando chamamos o Create, o objeto passa a ocupar um espao na memria.
Isso porque um objeto e uma instncia real de uma classe. Aps ser utilizado,
ele precisa ser destrudo. J cuidamos da criao dos objetos, usando Create.
Agora vamos cuidar da destruio. Isso pode ser feito chamando o mtodo
Free do objeto. Ento no boto Liberar (do objeto Carro) digite o cdigo da das
imagens abaixo. Da mesma forma, para o avio, no boto Liberar digite.
-
P g i n a | 64
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Pronto! J podemos testar as funcionalidades bsicas implementadas at aqui.
Execute a aplicao com F9 e faa os testes. Informe os valores para os
atributos do Carro e clique em Criar. Depois libere-o.
Criando Mtodos
Como voc pode ter visto, at agora criamos apenas as classes com atributos,
ou seja, definimos as caractersticas de um carro, de um avio. No tratamos
ainda de outro importante papel de qualquer classe, a funcionalidade, seu
comportamento. Enquanto atributos e propriedades definem as caractersticas
de uma classe, mtodos servem para definir o que uma classe pode fazer. Por
exemplo, um carro pode entrar em movimento. Vamos ento criar um mtodo
chamado Mover. Abra a declarao de TCarro e declare o mtodo Mover, como
mostrado na imagem abaixo.
Aperte Shift+Ctrl+C para que o Delphi gere o cabealho da implementao
para o mtodo que acabamos de definir. Implemente o mtodo como mostrado
abaixo.
-
P g i n a | 65
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Declare na sesso interface Dialogs na clusula uses da unit uCarro, para que
possamos usar a funo ShowMessage.
Agora vamos permitir que o usurio, aps criar um objeto Carro usando o
formulrio, possa coloc-lo em movimento, chamando seu mtodo Mover. No
formulrio principal, nas opes do objeto carro, coloque ento um boto como
Caption Mover. No seu evento OnClick digite o cdigo abaixo.
-
P g i n a | 66
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Evento de o boto Mover Carro.
Agora repita os mesmos passos para classe TAviao. Na imagem abaixo, veja a
implementao do mtodo Mover para TAviao.
Aperte Shift+Ctrl+C para que o Delphi gere o cabealho da implementao
para o mtodo que acabamos de definir. Implemente o mtodo como mostrado
abaixo.
-
P g i n a | 67
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Declare na sesso interface Dialogs na clusula uses da unit uCarro, para que
possamos usar a funo ShowMessage.
Evento de o boto Mover Avio.
Execute a aplicao. Preencha os Edits com dados para criar os objetos, crie-os
e a seguir coloque-os em movimento clicando nos respectivos botes, e veja o
resultado obtido at aqui.
Muito bem, isso finaliza a primeira parte deste nosso exemplo. No se esquea
de salvar todo o seu projeto que em breve estaremos novamente
implementando novas funcionalidades a este exemplo. Ainda pouco sobre
tudo o que ainda vamos ver sobre OO em Delphi. Mas o que foi visto aqui
fundamental: Realizamos um exemplo TPoligono totalmente Orientado a
Objeto mostrando os conceitos de Herana, Polimorfismo e
Encapsulamento de forma prtica e na sua essncia (no brao).
Neste ltimo exemplo, mesclamos um pouco de Orientao Objeto de forma
um pouco visual, pois de forma fcil aprendemos a declarar classes, com
atributos e mtodos. Vimos como instanciar essas classes, que a partir desse
processo, geram objetos. Nos objetos, preenchemos seus atributos com
valores para definir suas caractersticas e chamamos mtodos para testar a
funcionalidade.
-
P g i n a | 68
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Voc pode notar, por exemplo, que ambas as classe que criamos TCarro e
TAviao possuem caractersticas em comum, como a descrio e capacidade.
Alm disso, ambas as classes tem comportamentos semelhantes, como a
capacidade de se movimentar. Isso nos levar a dois importantes conceitos da
orientao a objeto, a Herana e Polimorfismos.
-
P g i n a | 69
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Nota Importante
Ponteiro um importante conceito de qualquer linguagem de programao,
seja ela Orientada a Objetos ou no. Um objeto uma estrutura que ocupa
espao na memria. Quando declaramos uma varivel do tipo integer, por
exemplo, um espao alocado na memria imediatamente, dependendo do
escopo desta varivel (se um procedimento, de um unit, de uma classe).
Porem estruturas mais complexas, como classes, que possuem vrios atributos e
ocupam mais espao na memria, no so alocados automaticamente na
memria. Precisamos criar instancias dessas classes, criar os objetos, em tempo
de execuo. Ou seja, a alocao de memria dinmica.
Esse conceito surgiu h muito tempo. A idia simples. Declaramos uma
estrutura, que guardar informaes sobre um cliente, mas no alocaremos o
espao em memria para alimentar essa estrutura at que seja realmente
necessria. Ao invs disso, criamos uma varivel que aponta (da o nome
ponteiro) para outra varivel que representa essa estrutura. No pascal antigo,
usvamos o smbolo ^ para representar um ponteiro. Ento, um ponteiro
basicamente um numero, um endereo de memria, que voc pode usar para
referenciar outra varivel, que ser realmente criada em outro momento. O
verbo referenciar usado na frase anterior no foi por acaso. Variveis que
apontam para outras variveis so conhecidas na programao como variveis
de referencia.
No Delphi, ainda existe o conceito de ponteiros, mas no precisamos trabalhar
diretamente com eles. Por exemplo, Form1 um Ponteiro. A estrutura da
classe TForm1 s vai ser usada quando o mtodo Create for chamado.
Antigamente, mtodos como GetMem, AllocMem etc. eram usados para alocar
memria reservada por ponteiros. Quando um objeto, que na verdade um
ponteiro, no est apontando para nada, ele possui o valor NIL (nulo, ou null,
como usado em outras linguagens). FreeAndNil, recurso criado no Delphi 5 e
citado no comentrio do cdigo acima, pode ser usado para automaticamente
liberar um objeto e fazer com que o ponteiro seja anulado, no apontando para
uma posio de memria onde no existe mais objeto real.
-
P g i n a | 70
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Terceiro Exemplo
Vamos para o nosso terceiro exemplo de Orientao Objeto na prtica
seguindo a mesma receita do mtodo anterior que a programao visual
para que os conceitos sejam reforados e fixados.
Vamos entender os detalhes de herana, polimorfismo e classes, utilizao
de interface onde iremos abordar os conceitos por traz da parte da
programao. Porque a programao Orientada a Objeto muito importante
no desenvolvimento de software. Com a Orientao a objeto voc consegue a
reutilizao de cdigo. Podemos imaginar a paleta de componentes que so
objetos e alguns desses objetos tm a capacidade visual e outros no.
Como exemplo o objeto TString, TStringList que utilizado dentro de outro
componente. Todos esses objetos/Classes incorporam funcionalidades de tal
forma que conseguimos reutiliz-los sem ter que ficar digitando seu cdigo.
Imagine se toda vez que for criar uma aplicao ter que digitar um cdigo para
colocar um boto ou um Edit no formulrio. Ento alguns objetos que so
sempre reutilizveis com capacidade visual ns conseguimos transform-los
em componentes. J outros objetos, no tem a necessidade de ser um
componente como, por exemplo, a classe TStringList, onde eu no preciso
colocar um componente TStringList dentro de um Form e depois utilizar-los
como se fosse um componente, pois para meu usurio que esta utilizando o
programa, ele no precisa ver os itens da lista mas se ele quiser, eu no vou
criar um TStringList, vou colocar no Form um componente ListBox. Ento,
dependendo da funcionalidade da sua aplicao ou do objeto ou classe que
esta criando, voc pode transform-lo em um componente visual ou em algo
que no seja visual, ou seja, uma Classe. Como exemplo, uma classe de
produto onde eu no preciso ter um componente Produto no Form, eu
Exemplo Pratico Membro
-
P g i n a | 71
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
simplesmente preciso ter que esta classe exista e que ela tenha alguns
mtodos como incluir produto, alterar e etc.
Vamos comear revendo novamente alguns conceitos da orientao a objeto.
O que uma Classe?
Uma classe um aglomerado de funcionalidades. Por exemplo, temos uma
classe TPessoa. Essa classe TPessoa, incorpora todas as funcionalidades e
atributos de uma Pessoa. (CPF, RG, Nome, Endereo) podemos dizer que uma
classe uma coleo e o Objeto um membro dessa coleo.
Vamos criar uma classe simples definindo em uma nova unidade (Unit)
conforme figura abaixo. A partir desta classe criada, podemos definir vrios
membros dessa classe.
Insira um Button no formulrio principal conforme figura abaixo.
-
P g i n a | 72
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Vamos criar uma varivel de nome OBJ do tipo TPessoa conforme imagem.
No se esquea de adicionar na uses do formulrio principal, a unit classe.
Voc pode notar que alguns procedimentos e funes, j esto criados e
prontos para serem utilizados. Mas, voc deve esta se perguntando, de onde
vieram esses mtodos? Toda classe tem um ancestral comum que o
TOBJECT. Como no foi definido uma classe para TPessoa, ele herda de forma
implcita da classe base que TObject. Lembre se que toda classe herda de
TObject. Aps criar, podemos liberar a classe da memria conforme abaixo.
-
P g i n a | 73
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Veja que agora criamos um nome na classe TPessoa e podemos utiliz-la em
nosso objeto.
importante dizer que as boas prticas de programao, nos dizer que no
devemos colocar as propriedades, funcionalidades e as caractersticas dessa
classe de maneira conforme mostrada na imagem abaixo, ou seja, de maneira
como se fossem variveis globais.
-
P g i n a | 74
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Observe que Nome e uma informao pertencente Classe TPessoa e no
pertencente a unit Classe.
Bom, qual a melhor maneira para trabalhar com essa informao?
Existem as propriedades, como as cores dos olhos, cabelo, cor da pele e idade.
Agora, as classes tambm possuem mtodos como, por exemplo, andar, falar,
levantar, ou seja, so aes que sero executadas pela nossa classe.
Em nossa primeira classe TPessoa, iremos criar uma propriedade chamada
Nome essa propriedade ela pode ser acessada pelos objetos dessa classe ou
uma propriedade que pode ser acessada somente dentro da Classe. Veja o
escopo de visibilidade abaixo.
-
P g i n a | 75
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Private: Tudo que for definindo nesta seo, somente poder ser acessado
dentro da minha classe, ele esta protegido.
Protected: Tudo que for definindo nesta seo, somente poder ser acessado
dentro da minha classe e das minhas classes filha que so filha de TPessoa.
Public: Tudo que for definindo nesta seo poder ser acessado dentro da
minha classe e dentro das minhas instancias.
Published: Tudo que for definindo nesta seo poder ser acessado por
qualquer coisa. A diferena entre Public e Published, so que as variveis
definidas em published, so acessadas na guia de propriedade e eventos do
Object Inspector.
Deve se observar que algumas propriedades no ficam como published elas
ficam protegidas. Por qu? Porque no h necessidade ainda de se exibir esta
propriedade nesse momento. Ento, vamos colocar nossa propriedade
conforme abaixo. Uma propriedade pode ser Read-Only onde ela somente tem
um mtodo de leitura. O campo deve ser do mesmo tipo da propriedade.
-
P g i n a | 76
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Se realizarmos a compilao agora, no conseguimos atribuir o valor para a
minha varivel nome. Porque no podemos atribuir valores para variveis
Read-Only, ou seja, somente de leitura. Toda vez que acessamos a
propriedade Nome, ele vai dentro do campo FNome, e pega o valor que estar
armazenado dentro dele e retorna para a minha propriedade Nome.
Por exemplo:
Vamos criar dentro da visibilidade Public, um Constructor conforme imagem
abaixo.
-
P g i n a | 77
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Pressione as teclas Ctrl + C para montar a estrutura e chamamos o construtor
da classe pai e atribuir para o campo FNome o valor Univale.
Vamos para o evento do Button1Click e realizamos a seguinte alterao e em
seguida, compile.
Repare que toda vez que algum quiser ler o contedo da propriedade Nome,
a minha Classe deve ler o contedo da varivel FNome. Lembre se que esta
varivel (campo) foi inicializada no Create.
Agora, se nos quisermos permitir que uma instancia possa alterar o contedo
de uma propriedade, eu no posso dizer que ela Read-Only e sim Write ou
seja ela pode ser escrita. Desta forma podemos alterar sem nenhum problema
o valor desta propriedade.
-
P g i n a | 78
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
O que estamos fazendo, que antes da varivel ser mostrada, est sendo
atribuindo a ela um novo valor. O valor que foi atribudo no evento Create foi
substitudo.
Vamos observar passo a passo como tudo ocorre depurando nossa aplicao.
Ento, nossas propriedades podem ser somente Read-Only, somente Write, ou
seja, depois que atribuir no pode ser acessado ou leitura e escrita (Write).
Quando eu falo que uma propriedade pode ser de leitura ento eu posso ler o
contedo de uma varivel ou o contedo de uma funo. Para ler o contedo
de uma varivel, faa conforme figura abaixo.
-
P g i n a | 79
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Para ler o contedo de uma funo, voc deve utilizar conforme cdigo abaixo.
-
P g i n a | 80
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Como estamos escrevendo o valor direto na varivel, uma boa prtica
escrever o valor atravs de um procedimento.
Faa alterao na property, conforme figura abaixo.
-
P g i n a | 81
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Vamos verificar novamente o comportamento depurando nossa aplicao.
Lembre-se, que a leitura no realizada direto na varivel e sim no campo
atravs da funo GetNome e escrevendo via procedimento SetNome.
Mas, voc deve estar se perguntando, Marcos, qual a diferena de trabalhar
com funes e trabalhar com campos. Quando trabalhamos com funes
conseguimos uma organizao e um trabalho encapsulado do nosso cdigo.
Mas, o que trabalhar de forma encapsulada? quando no expomos os
campos das propriedades. Como por exemplo: Se em determinado momento
haja a necessidade de alterar um comportamento, da nossa propriedade Nome
em uma classe Filha, existe esta possibilidade. Porque todo o contedo
responsvel de gerenciar nossa propriedade, esta dentro de um mtodo de
leitura e escrita que pode ser alterado em mtodo de classe filha. importante
ressaltar que para que um mtodo ou varivel possa ser acessvel em classes
filhas, eles devem estar no mnimo dentro do escopo de visibilidade Protected.
Vamos agora, criar outra propriedade (property) chamada usurio.
-
P g i n a | 82
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Nome momento da leitura do Nome feita a seguinte verificao.
Vamos alterar o cdigo do evento Onclick do boto para que se faa uma
simples leitura do contedo da varivel.
-
P g i n a | 83
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Voc deve estar se perguntando, no foi inicializada a propriedade usurio.
Exatamente, aps compilar e executar o programa, a seguinte mensagem
mostrada.
Mas, porque isso ocorreu? Porque agora foi adicionado dentro das minhas
propertys, quem pode fazer leitura e quem pode fazer escrita.
Podemos fazer da mesma forma para atribuir o Nome.
-
P g i n a | 84
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Vamos alterar o cdigo do evento Onclick do boto.
No momento da leitura do valor Nome, ele vai continuar lendo o valor que foi
inicializado pelo construtor da Classe. Por qu? Porque no momento que estou
tentado fazer a leitura no Nome vale uma ressalva que no foi possvel nem de
fazer a gravao do valor Delphi. No foi possvel gravar a informao Delphi,
porque no foi atribudo o Usurio. Como no foi definido o Usurio, e tento
fazer a gravao, o usurio est vazio ento no possvel mudar. possvel
verificar que desta forma podemos gerenciar o acesso quando trabalhamos
com mtodos e no diretamente com o campo.
Como seria se fosse trabalhar com Nome (FNome)? Deveramos impedir que a
classe fosse instanciada, pois estamos fazendo a leitura direta da varivel
ento no posso impedir. Algumas perguntas quanto trabalhamos com
mtodos. Quantas leituras foram realizadas do objeto? Quem leu? Em que
momento foi realizado a leitura?
-
P g i n a | 85
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Ento, muito importante trabalharmos com mtodos, pois desta forma,
estamos encapsulando, ou seja, estamos protegendo que as pessoas faam o
acesso direto aos campos que so privados e que correspondem as nossas
propriedades.
Vamos alterar o cdigo do evento Onclick do boto.
Como foi atribudo o valor UNIVALE para Usurio, conseguimos escrever e ler o
valor da minha propriedade. Uma tima oportunidade pelo qual devemos
trabalhar com Campos.
-
P g i n a | 86
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Herana
Falando um pouco de herana em conjunto com a nossa classe.
Vamos criar dois mtodos e alterar a propriedade Usurio conforme figura
abaixo.
Pressione as teclas Ctrl + Shift + C para que seja montado o esqueleto das
nossas funes declaradas.
-
P g i n a | 87
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Vamos alterar todos os nossos mtodos para o escopo de visibilidade protegida
(Protected) caso seja necessrio alterar seu comportamento.
Na funo GetNome e na precedure SetNome, vamos fazer a seguinte
alterao.
-
P g i n a | 88
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Agora vamos criar outra classe chamada TPessoFisica que filha da nossa
classe criada anteriormente TPessoa.
O que estamos fazendo criar uma nova coleo (TPessoaFisica) que vai
herdar todas as caracterstica da classe TPessoa e tendo a vantagem de
estender novas funcionalidades para classe filha TPessoaFisica.
Para que possamos comprovar o real funcionamento desta herana, faa a
seguinte alterao no evento Onclick do boto. Voc pode notar que o
programa continua funcionando corretamente mesmo voc alterando para a
classe filha (TPessoaFisica). Mas porque isto possvel? Simplesmente a classe
filha herdou todas as caracterstica da classe ancestral TPessoa.
-
P g i n a | 89
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Se fizermos uma alterao no escopo de visibilidade em nossas propriedades
(Property) retirando elas de Public e passando para Protected, vai ocorrer o
seguinte erro.
-
P g i n a | 90
Professor Marcos Antonio Moreira
Reviso: 08/2012 - Verso: 2.2
Este erro ocorreu porque mtodos protegidos somente podem ser acessados
por classes filhas. Para que uma instancia possa acessar um mtodo deve
estar no escopo de visibilidade Published ou Public. Volte visibilidade public
ao normal para que o cdigo funcione corretamente.
Vamos agora estender mais duas novas funcionalidades para a nossa classe
TPessoaFisica.
Pressi