apostila laboratório de programacao iii - v2.2

180
Professor Marcos Antonio Moreira LABORATÓRIO DE PROGRAMAÇÃO III E PROGRAMAÇÃO III Sistemas de Informação Ensinar e aprender são tarefas que andam juntas e, para que seja alcançado o objetivo em cada uma delas, é necessária muita dedicação e estudo constante. Não há mágica no aprendizado, há, sim, muita determinação por parte daquele que quer aprender. Copyright© Agosto / 2012 – Marcos Antônio Moreira. Todos os nomes dos produtos citados são marcas registradas da Microsoft Corp. Outros produtos citados são marcas registradas no respectivo cabeçalho As várias Marcas Registradas que aparecem no decorrer desta apostila. Mais do que simplesmente listar esses nomes e informar quem possui seus direitos de exploração, ou ainda imprimir o logotipo das mesmas, o autor declara estar utilizando tais nomes apenas para fins editoriais, em benefício exclusivo do dono da marca registrada, sem intenção de infringir as regras de sua utilização. Professor Marcos AntÔnio Moreira

Upload: yuri-rocha

Post on 26-Nov-2015

60 views

Category:

Documents


0 download

TRANSCRIPT

  • 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