Você está na página 1de 30

PROGRAMAO

ORIENTADA
A
OBJETOS

1. INTRODUO

1.1 UM BREVE HISTRICO DE LINGUAGENS DE PROGRAMAO

1.2 PROGRAMAO ORIENTADA A OBJETOS

2. CLASSE

2.1 ATRIBUTOS

2.2 MTODOS

3. OBJETOS

4. MENSAGENS

11

5. ENCAPSULAMENTO

12

6. HERANA

14

7. POLIMORFISMO

20

7.1 Definio:

20

7.2 Tipos Clssicos de Polimorfismo:

23

8. LATE BINDING

23

8.1 Definio

23

8.2 Tipos

24

8.3 Ligao Precoce e Tardia (O. O.)


8.3.1 Dynamic Typing E Dynamic Binding - O.O.

25
25

8.4 Concluses

27

9. BIBLIOGRAFIA

28

__________________________________________________________________________________
___

1. INTRODUO

1.1 UM BREVE HISTRICO DE LINGUAGENS DE PROGRAMAO


Os caminhos da programao tm mudado dramaticamente desde a inveno do
computador. A primeira razo para as mudanas acomodar o aumento da complexidade dos
programas. Por exemplo, quando os computadores foram inventados, a programao era feita
por chaveamentos em instrues binrias de mquina, usando-se o painel frontal. Enquanto os
programas continham somente algumas centenas de instrues, esse mtodo funcionava.
Quando cresceram, a linguagem assembly foi inventada para permitir a um programador
manipular complexidades. A primeira linguagem de alto nvel difundida foi, obviamente,
FORTRAN. Ainda que o FORTRAN tenha dado um primeiro passo bastante considervel,
uma linguagem que somente torna os programas mais claros e fceis de entender do que o
assembly, sem introduzir mudanas considerveis no estilo de programao.
Nos anos 60 nasceu a programao estruturada. Esse o mtodo estimulado por
linguagens como C e Pascal. Usando-se linguagens estruturadas, foi possvel, pela primeira vez,
escrever programas moderadamente complexos de maneira razoavelmente fcil. Entretanto,
com programao estruturada, quando um projeto atinge um certo tamanho, torna-se
extremamente difcil e muito custoso efetuar sua manuteno e fazer qualquer modificao. A
cada marco no desenvolvimento da programao, mtodos foram criados para permitir ao
programador tratar com complexidades incrivelmente grandes. Cada passo combinava os
melhores elementos dos mtodos anteriores com elementos mais avanados. Atualmente,
muitos projetos esto prximos ou no ponto em que o tratamento estruturado no mais
funciona. Para resolver esse problema, a programao orientada a objetos foi criada.
A programao orientada a objetos aproveitou as melhores idias da programao
estruturada e combinou-as com novos conceitos poderosos que levam a ver na tarefa de
programao uma nova luz, permitindo que um problema seja mais facilmente decomposto em
subgrupos relacionados. Ento, usando-se a linguagem, pode-se traduzir esses subgrupos em
objetos.
A primeira linguagem a incorporar facilidades para definir classes de objetos genricos na
forma de uma hierarquia de classes e subclasses foi a linguagem Simula, que 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). Como o nome indica, uma
linguagem adequada programao de simulaes de sistemas que podem ser modelados pela
interao de um grande nmero de objetos distintos.

Pag.:

__________________________________________________________________________________
___

As idias de Simula serviram de base para as propostas de utilizao de Tipos Abstratos


de Dados, e tambm para Smalltalk. Smalltalk foi desenvolvida no Centro de Pesquisas da
Xerox durante a dcada de 70, e incorporou, alm das idias de Simula, um outro conceito
importante, devido a Alan Kay, um de seus idealizadores: o princpio de objetos ativos, prontos
a reagir a mensagens que ativam comportamentos especficos do objeto. Ou seja, os
objetos em Smalltalk deixam de ser meros dados manipulados por programas, e passam a
ser encarados como processadores idealizados individuais e independentes, aos quais podem
ser transmitidos comandos em forma de mensagens.
Outras linguagens orientadas para objetos tem sido desenvolvidas. Notadamente C++,
uma extenso de C, Objetive-C, outra extenso de C, menos popular que a anterior, Pascal
orientado a objetos, Eiffel e mais recentemente, no Brasil, TOOL.
Alm da Xerox, que criou a ParcPlace Systems especialmente para comercializar
Smalltalk-80 e seus sucedneos (objectWorks), a Digitalk lanou em 1986 uma verso de
Smalltalk para ambiente DOS, e mais recentemente a verso para Windows, o que contribuiu
para uma maior difuso da linguagem [Digitalk].
Smalltalk, uma das mais populares linguagens orientadas a objetos, assim como outras
linguagens orientadas para objetos, tem sido usada em aplicaes variadas onde a nfase est
na simulao de modelos de sistemas, como automao de escritrios, animao grfica,
informtica educativa, instrumentos virtuais, editores de texto e bancos de dados em geral,
entre outras. Tais aplicaes diferem substancialmente daquelas em que a nfase est na
resoluo de problemas atravs de algoritmos, tais como problemas de busca, otimizao e
resoluo numrica de equaes. Para essas aplicaes, mais adequado o uso de linguagens
algortmicas convencionais, como Pascal, Algol e Fortran.

1.2 PROGRAMAO ORIENTADA A OBJETOS


Uma das atividades mais interessantes em Informtica certamente a busca constante de
melhorias nas linguagens e tcnicas para o desenvolvimento de software. Desta busca decorrem
as transformaes e evolues das linguagens de programao, surgindo novas linguagens e
novos paradigmas.
A Programao Orientada a Objetos utiliza os conceitos que aprendemos no jardim de
infncia: objetos e atributos, todos e partes, classes e membros. difcil explicar por que
demoramos tanto a aplicar estes conceitos anlise e especificao de sistemas de informaes
- talvez porque estivssemos ocupados demais seguindo a boiada durante o auge da anlise
estruturada para imaginar que havia alternativas.
A Enciclopdia Britnica afirma:
Na compreenso do mundo real, as pessoas empregam constantemente trs mtodos de
organizao, sempre presentes em todos os seus pensamentos:

Pag.:

__________________________________________________________________________________
___

(1) Diferenciao, baseado na experincia de cada um, de objetos particulares e seus


atributos - quando distinguem uma rvore, e seu tamanho ou relaes espaciais, dos outros
objetos,
(2) Distino entre objetos como um todo e entre suas partes componentes - por
exemplo, quando separam uma rvore dos seus galhos, e
(3) Formao de, e distino entre, as diferentes classes de objetos - por exemplo,
quando formam uma classe de todas as rvores, uma outra classe de todas as rochas e
distinguem-nas.
A Programao Orientada a Objetos se apia nestes trs mtodos usuais de
organizao.
Programao Orientada a Objetos a programao implementada pelo envio de
mensagens a objetos. Cada objeto ir responder s mensagens conhecidas por este, e cada
objeto poder enviar mensagens a outros, para que sejam atendidas, de maneira que ao final
do programa, todas as mensagens enviadas foram respondidas, atingindo-se o objetivo do
programa. Programao Orientada a Objetos, tcnicas e artefatos ditos orientados a objetos
incluem linguagens, sistemas, interfaces, ambientes de desenvolvimento, bases de dados, etc.
No entanto, cabe ressaltar que o conceito de Orientao Objeto depende mais da
mentalidade do programador do que da linguagem de programao que est sendo utilizada.
Pode-se conseguir programas razoavelmente orientados a objeto em linguagens tipicamente
estruturadas, assim como pode-se conseguir programas estruturados em linguagens voltadas
para objetos. Tomemos como exemplo a frase:
O navio atraca no porto e descarrega sua carga.
se analisssemos esta frase estruturadamente, pensaramos logo em como o navio atraca no
porto e como ele faz para descarregar sua carga, ou seja, pensaramos na ao que est sendo
feita (que na frase representada pelos verbos) para transform-la em procedimento. Em
orientao objeto, o enfoque com que se encara a frase diferente: primeiro pensaramos no
objeto navio, no objeto porto e no objeto carga, pensando como eles seriam e procurando
definir seu comportamento. Aps isto que pensaremos em como o navio se relaciona com o
porto e com a carga, e como o porto se relaciona com carga. De modo grosseiro, podemos
dizer que ao analisarmos uma frase pensando estruturadamente, damos nfase aos verbos, e
pensando orientado a objetos, damos nfase aos substantivos.
Pelo que foi visto acima, percebe-se que o programador experiente ter inicialmente
grande dificuldade em migrar para a orientao a objeto, pois ter que esquecer os anos de
prtica analisando os problemas estruturadamente, para reaprender a analis-los de forma
voltada a objeto. Ningum faria isto se no tivesse bons motivos. Abaixo so mostradas
algumas das vantagens que motivam veteranos programadores a readaptar-se para o
paradigma de orientao a objeto:
? ?Sensvel reduo no custo de manuteno do software
? ?Aumento na reutilizao de cdigo

Pag.:

__________________________________________________________________________________
___

?? Reduo no custo de manuteno:


Na programao orientada a objetos, existem certas caractersticas (herana e
encapsulamento) que permitem que, quando for necessria alguma alterao, modifique-se
apenas o objeto que necessita desta alterao, e ela propagar-se- automaticamente s demais
partes do software que utilizam este objeto. Veremos mais detalhadamente o motivo desta
propagao e os conceitos de herana e encapsulamento em captulos adiante na apostila.
?? Aumento na reutilizao de cdigo:
Pode-se dizer, de modo simplrio, que o conceito de orientao objeto fornece a
possibilidade de um objeto acessar e usar como se fossem seus os mtodos e a estrutura de
outro objeto. Deste modo, quando, por exemplo, existirem dois objetos bastante semelhantes,
com mnimas diferenas, pode-se escrever os mtodos apenas uma vez e us-los para os dois
objetos. Apenas os mtodos que realmente forem diferentes para os dois objetos que
precisam ser escritos individualmente. Observamos o exemplo abaixo:

Neste caso, tanto PROFESSOR quanto ALUNO comem, andam e respiram, e foi necessrio
escrever o cdigo do mtodo Come ( ), Anda ( ) e Respira ( ) somente uma vez. Apenas os
mtodos especficos de PROFESSOR (no caso, Leciona ( ) e Corrige_Prova ( ) ) e de
ALUNO (Assiste_Aula ( ) e Faz_Prova ( ) ) que precisam ser escritos
Atualmente existe uma grande discusso sobre o que exatamente uma linguagem
orientada a objetos. importante lembrar que um claro conceito de objeto, no caracteriza um
sistema como orientado a objetos. Ao invs de entrarmos na discusso do que seja uma
linguagem orientada a objetos, vamos apresentar os principais mecanismos utilizados nestas
linguagens, sem uma preocupao de explicitar quais deles seriam necessrios para dar a uma
linguagem o "Ttulo" de Orientada a Objetos.
Este texto visa ento, introduzir o leitor s principais idias e conceitos de Programao
Orientada a Objetos. Sero expostos exemplos de implementao em C++ e ilustraes que

Pag.:

__________________________________________________________________________________
___

permitiro um melhor entendimento do assunto. Nas pginas seguintes abordaremos os


conceitos bsicos do Paradigma de Orientao a Objetos: Objetos, Classes, Mensagens,
Mtodos, Herana, Generalizao, Especializao, Abstrao, Polimorfismo, Encapsulamento
e Late-Binding. Conheceremos suas definies conceituais, como podem ser aplicados,
quando devem ser utilizados e principalmente por que devemos usar estes conceitos e quais
so suas vantagens e desvantagens sobre a programao estruturada.

2. CLASSE
Classe o termo tcnico utilizado em linguagens orientadas a objetos que descreve um
conjunto de dados estruturados que so caracterizados por propriedades comuns. Tambm
pode ser interpretado como uma estrututura modular completa que descreve as propriedades
estticas e dinmicas dos elementos manipulados pelo programa.
Pode-se definir classes de objetos como a descrio de um grupo de objetos por meio
de um conjunto uniforme de atributos e servios. Uma classe um conjunto de objetos que
compartilham as mesmas operaes.
Enquanto um objeto individual uma entidade concreta que executa algum papel no
sistema como um todo, uma classe captura a estrutura e o comportamento comum a todos os
objetos que so relacionados. Um objeto possui uma identidade e suas caractersticas sero
definidas para a classe.
Uma classe definida por:
??

um nome da classe;
?? o nome da sua superclasse;
?? o nome de suas variveis privadas;
?? os nomes e as definies de todas as operaes associadas a esta classe;
Classe um conceito esttico: uma classe um elemento reconhecido num texto de
programa. por outro lado, um objeto um conceito puramente dinmico, o qual pertence no
ao texto do programa, mas memria do computador, local onde os objetos ocupam espao
durante a execuo. (Conceitualmente, classes no so necessrias durante a execuo, mas
em linguagens interpretadas elas podem ser mantidas).
Exemplo de classe:
Uma classe semelhante a uma struct e em C++ podemos definir a classe fila do
seguinte modo:
class fila {
int f [100];
int primeiro, ultimo;

Pag.:

__________________________________________________________________________________
___

public:
void inicio (void);
void put (int valor);
int get (void)
};
Examinando a declarao anterior, vemos:
Uma classe pode contertanto partes pblicas como privadas. Por exemplo, as variveis f
, primeiro e ultimo so privadas. Isto significa que no podem ser acessadas por qualquer
funo que nao seja membro dessa classe.
Para tornar pblicas as partes de uma classe, ou seja, acessveis o outras partes do
programa, preciso declar-las aps a palavra public.

2.1 ATRIBUTOS
Um atributo um dado para o qual cada objeto tem seu prprio valor.
Atributos so, basicamente, a estrutura de dados que vai representar a classe.
Exemplo de atributos, usando a classe fila:
int f [100] ;
int primeiro, ultimo;

2.2 MTODOS
Mtodos so declarados dentro de uma classe para representar as operaes que os
objetos pertencentes a esta classe podem executar.
Um mtodo a implementao de uma rotina, ou seja, o cdigo propriamente dito. Pode
ser comparado a um procedimento ou funo das linguagens imperativas.
Exemplo de mtodos, utilizando a classe fila:
void iniciar (void)
{
primeiro = 0;
ultimo = 0;
};

Pag.:

__________________________________________________________________________________
___

void put ( int valor)


{
f [ultimo] = valor;
ultimo++;
};
int get (void)
{
return f [primeiro];
primeiro++;
};

3. OBJETOS
O que caracteriza a programao orientada a objetos so os objetos. De um modo
geral podemos encarar os objetos como sendo os objetos fsicos do mundo real, tal como:
carro, avio, cachorro, casa, telefone, computador, etc., por isso que s vezes dito que
orientao a objetos representa os problemas mais prximo ao mundo real, dando assim mais
facilidade a programao como um todo, mais isso no sempre verdade, porque s vezes
temos problemas que so extremamente funcionais1. Nesses problemas funcionais difcil
representar a estrutura lgica em torno de objetos. Com isso, no so todos os problemas que
giram em torno dos objetos facilmente visveis.
De maneira simples, um objeto uma entidade lgica que contm dados e cdigo para
manipular esses dados. Os dados so denominados como sendo atributos do objeto, ou seja,
a estrutura que o objeto tem, e o cdigo que o manipula denominamos mtodo. Um mtodo
uma funo que manipula a estrutura de dados do objeto.
Um objeto um ente independente, composto por:
??

estado interno, uma memria interna em que valores podem ser armazenados e
modificados ao longo da vida do objeto.
?? comportamento, um conjunto de aes pr-definidas (mtodos), atravs das quais o
objeto responder a demanda de processamento por parte de outros objetos.
Por exemplo:
Uma tela de computador pode ter os seguintes atributos e mtodos:
atributos
modo de operao /* texto/grfico */
1

funcionais: gira em torno de processos

Pag.:

__________________________________________________________________________________
___

tamanho horizontal
tamanho vertical
paleta de cores
cor atual
mtodos
modo texto ( )
modo grfico ( )
fecha modo grfico ( )
muda cor ( )
escreve caracter ( )
coloca pixel ( )
muda dimenses (x,y)
...

Um guarda-roupa:
estrutura
conjunto de roupas /* tipo, tamanho, cor, estilo, preo, etc. */
portas
nmero de portas
capacidade mxima
mtodos
abre porta ( )
fecha porta ( )
escolhe roupa ( )
tira roupa ( )
coloca roupa ( )
estado do guarda-roupa ( ) /* portas abertas e fechadas, quantidade de roupas,
etc. */
...
Uma lista:
estrutura
(nodo e um apontador para um prximo nodo) Primeiro e atual
mtodos
cria lista ( ) /* cria clula cabea e inicializa */
prximo ( ) /*vai para o prximo elemento da lista */
insere ( ) /* insere um elemento na posio atual */
deleta ( ) /* apaga posio atual */
volta ao comeo ( ) /* atual = primeiro */
...

Pag.:

__________________________________________________________________________________
___

Podemos notar que um objeto composto por estrutura e processos, onde esses
processos giram em torno da estrutura, ao contrrio das linguagens funcionais, nas quais a
estrutura se adapta a funo. Um objeto s pode ser manipulado por sua estrutura e seus
mtodos, nada mais do que isso.
Somente um objeto de um determinado tipo pode acessar seus mtodos e estrutura, um
outro tipo de objeto no tem nenhum acesso a estes. Por exemplo, em uma classe cachorro
temos o mtodo fala. Se por exemplo definirmos um objeto da classe gato, este objeto no
tem acesso nenhum ao mtodo fala de cachorro.
Dentro de um objeto, alguns mtodos e/ou estrutura podem ser privados ao objeto, o
que nos diz que so inacessveis diretamente para qualquer elemento fora dele, o que impede
que outros objetos tenham acesso direto s partes privadas do objeto referenciado. Para o
objeto poder referenciar seus elementos privados ele deve passar pelos seus mtodos, neste
caso um mtodo especfico que faa a operao desejada, ou seja, ele pode acessar sua
estrutura privada somente atravs de seus mtodos, dando assim uma certa abstrao de como
feita a manipulao da estrutura. Isso consiste no encapsulamento de dados que ser
explicado na seo referente a este tema. A princpio toda a estrutura deve ser privada, mas
algumas linguagens como C++ permitem que a estrutura de um objeto possa ser acessada
diretamente por outros objetos. J em SmallTalk toda a estrutura privada. Dessa maneira,
um objeto evita significativamente que algumas outras partes no relacionadas de programa
modifiquem ou usem incorretamente as partes privadas do objeto referenciado, dando assim
maior confiabilidade na manipulao do objeto. Isso tudo nos mostra uma caracterstica muito
grande para construo de mdulos independentes e abstrao ao usurio.
Mais exatamente, cada objeto uma instncia de sua classe. a classe que contm a
descrio da representao interna e dos mtodos comuns a todas as suas instncias
(objetos). Cada instncia da classe, por sua vez, possui sua prpria memria privativa (seu
estado interno) onde ficam armazenados os valores de seus componentes, que representam
suas caractersticas individuais. Associando com a linguagem C, uando voc define uma
estrutura como por exemplo:
struct aluno {
char nome [30];
char telefone [20];
int nmero;
};
Quando voc declara uma varivel do tipo struct aluno voc define uma instncia da
estrutura aluno.
main ( ) {
struct aluno a; /* a uma varivel do tipo da estrutura aluno */
...
}

Pag.:

__________________________________________________________________________________
___

Agora quando define uma classe aluno


class Aluno {
char nome [30];
char telefone [20];
int nmero;
lista_notas notas;
...
public:
insereNota (matria, nota);
listaNotas ( );
...
};
Definiremos uma varivel aluno
void main ( ) {
Aluno Joo;
...
}
Neste caso Joo uma varivel (instncia) do tipo aluno, o qual denominamos de
objeto, porque a classe aluno descreve uma estrutura que o caracteriza e mtodos que o
manipulam.
Com isso podemos diferenciar claramente uma classe de objeto. A classe apenas um
tipo de dado, que somente representa caractersticas comuns a determinados objetos. Uma
classe pode ser comparada com uma estrutura, com apenas uma forma definida, mas nenhuma
varivel que a manipula. Para manipul-las preciso definir uma varivel. Esta varivel do tipo
da classe que chamada de objeto.
Os objetos de uma determinada classe no so iguais. Por exemplo, podemos ter os
objetos Joo e Pedro da classe Aluno, cada um vai ter um nome, telefone, nmero, notas, e
uma posio na memria. A sua similaridade consiste apenas no fato de que possuem
propriedades idnticas.
Uma coisa importante de um objeto seu ciclo de vida, que engloba o momento em que
declarado at sua eliminao. No instante em que um objeto declarado, alocado um
espao em memria para ele e automaticamente executado seu construtor. A partir deste
momento o objeto est pronto para ser usado. Esta fase vai at a eliminao do objeto. A sua
eliminao pode ser de duas formas: a primeira, que todas as linguagens utilizam, elimina o
objeto no final do programa se ele for global, no final de um mdulo se for local, e no final de
um bloco se for declarado dentro deste. A segunda forma de eliminao chamada de
Garbage Collection. Esta maneira de eliminao no implementada em todas as linguagens e

Pag.:

10

__________________________________________________________________________________
___

no uma caracterstica somente de orientao a objetos. Garbage Collection consiste em


eliminao pelo compilador do objeto/varivel depois de sua ltima utilizao. A partir do
momento em que ele no mais referenciado, passa a no existir mais na memria. Por
exemplo, Garbage Collection implementado em Lisp e SmallTalk enquanto que em C++ e
Pascal no. Quando o objeto eliminado ele automaticamente executa seu destrutor.
Em programao orientada a objetos, primeiramente o que deve ser identificado so os
objetos que o problema requer (at mesmo os tipos simples de dados so vistos como objetos,
porque tm estrutura e operaes (mtodos) que o manipulam). Por exemplo um objeto inteiro
comparado com outro, recebe uma atribuio, tem operaes aritmticas. Esta nova
concepo no to fcil de ser encarada, principalmente para quem j experiente em
programao imperativa. As principais dificuldades a princpio so a identificao dos objetos,
e o tratamento do problema somente atravs de objetos.

4. MENSAGENS
Mensagens so requisies para que um objeto execute uma de suas aes. Cada objeto
somente pode responder s mensagens que constem do seu protocolo. O protocolo de um
objeto so as mensagens correspondentes as suas operaes, alm do protocolo de sua
superclasse.
Os objetos interagem atravs de mensagens.
O atendimento de uma mensagem envolve a execuo de algum tipo de cdigo, ou seja,
os mtodos, sobre um dado associado quela operao, ou seja, sobre os atributos.
Quando um objeto criado, o acesso a suas caractersticas feito atravs de
mensagens. Para cada mensagem recebida pelo objeto, existe um mtodo associado para
respond-la. Quando a mensagem estiver se referenciando a um atributo, o valor deste deve
ser devolvido, e no caso de uma operao, o procedimento desta executado.
As operaes podem ter parmetros de entrada e sada com tipos determinados. Esta
caracterstica, juntamente com o seu nome, definem a assinatura de uma mensagem.

Exemplo de mensagem, utilizando a classe fila:


seja a declarao de um objeto:
fila fila_atual;
.
.
.
A mensagem a este objeto seria:

Pag.:

11

__________________________________________________________________________________
___

fila_atual.get( );

5. ENCAPSULAMENTO
O conceito de encapsulamento decorrente do fato de se combinar os dados
(atributos) e o cdigo que manipula estes dados (mtodos) em um nico Objeto. Ele garante
que a nica forma de acesso aos dados atravs dos mtodos disponveis ao usurio
(chamados pblicos). Os demais mtodos e os atributos da classe ficam sendo privados, ou
seja, apenas funes-membro da classe tm acesso direto aos mesmos.

Objeto
atributos
mtodos

Aplicao

O conceito de encapsulamento no exclusivo do paradigma de Orientao a Objetos.


Ele j era utilizado na definio de Tipos Abstratos de Dados, para dizer que os dados s
deveriam ser manipulados pelas funes que compunham o TAD.
Trocando em midos, o encapsulamento diz respeito definio de uma estrutura que
contenha os dados, defina quais os mtodos de acesso pblico a esses dados e possua meios
de proteger os demais mtodos e os dados contra acesso direto.
Mas... por que impedir este acesso?

Responderemos esta pergunta com um exemplo prtico.


Imaginemos um objeto Polinmio. Vamos supor que a estrutura de dados utilizada para
representar um polinmio dentro do objeto seja um vetor. Este objeto, quando criado, recebe
um string contendo o polinmio que ele representar (por exemplo, x2 + 2x +10) e possui,
entre outros, um mtodo para, dado um x, calcular f(x).

Pag.:

12

__________________________________________________________________________________
___

typedef struct{
float coeficiente;
int expoente;
} termo;
class polinmio{
termo Vetor[30];
public:
polinomio(char *string);
~polinomio ( ) { };
void insere (float coef, int exp);
...
float calcula_fx (float x);
}
Digamos que o encapsulamento no existe e eu no tenho este mtodo, mas eu estou
fazendo uma aplicao que usa a classe polinmio, e preciso calcular f(x). Eu posso ento
acessar diretamente o vetor dentro do objeto, obter o coeficiente e expoente de cada termo do
polinmio e calcular f(x) sem mais problemas, no posso? Pode.
Mas um belo dia voc chega brilhante concluso que um vetor no a maneira mais
econmica (em se tratando de memria) de se representar um polinmio, e resolve alterar a
estrutura de dados para uma lista.
E agora, o que aconteceu com o cdigo para calcular f(x)? Bem, voc ter que
implementar praticamente tudo de novo, s que agora com lista. E assim seria se a estrutura de
dados fosse mudada de novo, e de novo, e de novo...
Agora vejamos o que acontece no mesmo objeto polinmio, mas agora com
encapsulamento: A minha aplicao chama o mtodo da classe calcula_fx e obtm o resultado
desejado. Se eu mudar a estrutura de dados do objeto, precisarei fazer mudanas neste
mtodo, para que ele opere corretamente. MAS ... a minha aplicao no mudou em nada!!!
Isto quer dizer que se eu modificar o objeto sem alterar a interface dos meus mtodos de
acesso, no precisarei mudar uma linha na minha aplicao para que ela funcione corretamente.
Isso s ser possvel se eu sempre acessar os dados atravs dos mtodos da classe, e nunca
diretamente.
claro que no sempre que eu consigo preservar a interface de um objeto quando da
mudana da estrutura de dados, e s vezes a minha aplicao tambm precisar ser
modificada. Entretanto, o Encapsulamento facilita estas mudanas, que no precisaro ser to
drsticas quanto no exemplo sem a aplicao deste conceito.
Alm desse aspecto, ainda h o da proteo dos dados encapsulados. Restringir o
acesso dos atributos aos mtodos da classe garante que nenhum dado ser alterado por
engano ou de forma descontrolada. Por exemplo, se a lista do meu objeto polinmio fosse
acessvel minha aplicao, nada impediria que eu, por engano, mudasse um apontador da

Pag.:

13

__________________________________________________________________________________
___

mesma e perdesse algum dado. O encapsulamento protege os dados, e faz o uso do objeto ser
mais seguro.
Em outras palavras, o Encapsulamento garante que a minha classe seja uma caixinha
preta para o usurio: ele no sabe o que h dentro do objeto, sabe apenas para que ele serve e
quais os mtodos disponveis para a manipulao deste.
Note-se que este conceito possui efeito contrrio para um objeto mal definido. Se, ao
projetarmos uma classe, no fornecemos mtodos de acesso adequados, teremos dificuldades
em criar aplicaes eficientes com objetos instanciados da mesma. Por exemplo, a nossa
classe polinmio deveria possuir um mtodo para informar se um termo de ordem n est
presente no objeto. Caso contrrio, fica difcil, por exemplo, implementar uma aplicao que
compare dois polinmios e diga se possuem todos os termos de ordens iguais ( ex.: x2 + 2 e
3x2 + 5).
Logo, a tarefa de projetar uma classe envolve, entre outras atividades, definir da melhor
maneira possvel quais mtodos de acesso ao objeto sero disponibilizados ao usurio. Um
bom projeto inicial evita a necessidade de se redefinir uma classe j implementada.

6.

HERANA

Herana a propriedade dos objetos que permite a criao de uma hierarquia entre eles,
onde os descendentes herdam o acesso ao cdigo e estruturas de dados dos seus ancestrais.

Coad-Yourdon define Herana como:


Mecanismo para expressar a similaridade entre classes, simplificando a definio de
Classes similares a outras que j foram definidas. Ela representa generalizao e especializao,
tornando atributos e servios comuns em uma hierarquia de Classe.
Para entender o significado dessa definio, usaremos um exemplo simples. Digamos que
eu tenha uma classe Animal. Todos os objetos da classe Animal possuem caractersticas
(atributos) comuns, como peso, altura, idade, estados como ter fome, etc. Tambm fazem
determinadas tarefas (servios ou mtodos) como Comer, Procriar, Nascer, Morrer, se
movimentar, etc. Eu posso abstrair esse objeto Animal para reduzi-lo seguinte representao:
class Animal {
int
Peso, Altura, Idade;
boolean
EstaComFome;
public:
Animal( ) { ... }
/* Construtor */
~Animal( ) { ... }
/* Destrutor */
boolean ComFome( );
int Peso( );
int Altura( );

Pag.:

14

__________________________________________________________________________________
___

...
}
Muito bem, ento eu defini minha classe Animal e a usei no meu aplicativo. Digamos que
a classe foi projetada e implementada de uma maneira tima, que possui todos os atributos e
classes necessrias para a representao de um animal qualquer.
Digamos que eu tenha mais um aplicativo para fazer, que precise de uma Classe
Mamfero. A representao de um mamfero muito parecida com a de um Animal, mas ele
possui atributos e mtodos que no so comuns a todos os animais: mamferos (mamar, emitir
sons etc.), alm de fazerem algumas atividades de forma diferente dos demais Animais (Nem
todos os animais comem ou procriam como os mamferos, por exemplo).
Numa linguagem de programao sem herana, a implementao da classe Mamfero
provavelmente implicaria na replicao do cdigo de Animal, com as modificaes necessrias
para caracterizar a classe. Se fosse necessrio implementar uma classe Macaco, eu replicaria o
cdigo de Mamfero na nova classe. Uma classe Chimpanz teria o cdigo de Macaco
replicado em si, e assim sucessivamente.
Isso no est bom. Se fosse necessrio implementar todas as classes existentes entre o
Ser Vivo e o Mosquito, teramos centenas de classes, todas com replicao do cdigo das
classes anteriores. Alm disso, se houvesse a necessidade de modificar algum mtodo de
Animal que fosse comum a todas estas centenas de classes, esta modificao teria que ser feita
em todas elas, uma a uma. Ser que no existe uma maneira melhor?
Na verdade, fcil perceber que Mamfero na verdade uma especializao de
Animal, um herdeiro dessa classe. Assim, se eu dispuser de um mecanismo que me permita
declarar Mamfero como tal, e assim herdar todos os mtodos e atributos da classe ancestral,
no precisarei replicar cdigo, apenas incluirei os mtodos e atributos especficos na classe
Mamfero, e redefinirei os mtodos que achar necessrio. O mecanismo que me permite isso
a Herana.
A Herana vai produzir uma ordem de hierarquia entre as diversas Classes-Objetos que
estiverem relacionadas desta forma. Um objeto herdeiro em geral uma especializao do seu
ancestral, que por conseqncia ser uma generalizao de seu sucessor. Eu posso montar
uma estrutura de hierarquias entre Classes-Objetos baseada na relao generalizaoespecializao, resultando que os objetos mais ancestrais so mais genricos ou abrangentes, e
os seus sucessores so cada vez mais especficos, medida que nos aprofundamos na
estrutura. Observe como eu posso montar uma estrutura desse tipo baseado na classe Animal:
Animal

Mamfero

Peixe

Pag.:

15

__________________________________________________________________________________
___

Antropide

Homem

Tarzan

Tubaro

Macaco

Elefante

Chita

Tu-Tu-Baro

Dumbo

Nessa estrutura, podemos observar alguns nveis de especializao da classe mamfero.


Mamferos e Anfbios so especializaes de Animais: possuem as caractersticas comuns a
todos os animais, mas comem e procriam de suas prprias maneiras, por exemplo. Antropide
ancestral comum a Homem e Macaco, e rene as caractersticas comuns a seus
descendentes. J Elefante descendente (herdeiro) direto de Mamfero, pois no possui as
caractersticas de um Antropide. Homem e Macaco so herdeiros diretos de Antropide e
herdeiros indiretos de Mamfero e Animal, j que todo o antropide necessariamente um
mamfero, que por sua vez um animal. Peixe no mamfero, logo no herda as
caractersticas desta classe. Tubaro herdeiro de Peixe, e herdeiro indireto de Animal. Nesta
estrutura, as instncias de classe foram representadas por retngulos com os cantos
arredondados, e as classes por retngulos normais. As arestas representam as relaes de
herana entre as classes.
importante ressaltar que seria possvel ter instncias de qualquer das classes desta
estrutura, e no apenas das classes folha. A princpio, qualquer destas classes
instancivel.
Uma propriedade que fica clara aqui a transitividade. Se a classe B herda de A, e a
classe C herda de B, ento C herda de A:

implica:

Por exemplo, Um Mamfero um Animal, e um Antropide um mamfero. Logo, um


Antropide um Animal, e possui as caractersticas de um animal.

Pag.:

16

__________________________________________________________________________________
___

Uma classe pode ser herdeira direta de mais de uma classe ao mesmo tempo. Isto
chamado de Herana Mltipla. A herana mltipla se aplica em situaes como a do golfinho.
Ele um mamfero, mas possui caractersticas de Peixe. Assim, fazemos a classe Golfinho
herdar de Peixe e Mamfero, e redefinimos os mtodos especficos para Golfinho.
Animal

Mamfero

Peixe

Golfinho
importante ressaltar que normalmente no preciso redefinir os mtodos, e atributos
herdados no precisam ser redeclarados ou redefinidos, a no ser que haja necessidade de
refin-los. Por exemplo, Antropide e Homem respiram do mesmo jeito, logo eu vou utilizar o
mtodo Respira( ) de Antropide para fazer Homem respirar. Entretanto Os mamferos andam
de formas diferentes, logo um mtodo Anda( ) em Mamfero provavelmente ter que ser
redefinido para Antropide e Elefante, por exemplo.
A principal vantagem da herana em linguagens Orientadas a Objeto est no
reaproveitamento de cdigo que ela proporciona, pela declarao de classes herdeiras mais
especficas ao meu problema. Do ponto de vista da Anlise Orientada a Objetos, a herana
permite uma melhor organizao dos elementos que envolvem o Domnio do Problema,
facilitando a compreenso do mesmo e a procura de solues adequadas para o Sistema em
questo.
A estrutura dos exemplos acima poderia ser implementada em C++ desta forma:
class Mamifero:public Animal {
boolean querMamar;
public:
Mamfero( ):Animal( ) {}
~Mamfero( );
void Mamar( );
void Respirar( );
...
}
class Elefante:public Mamifero {
public:
Elefante( ):Mamfero( ) {}

Pag.:

17

__________________________________________________________________________________
___

~Elefante( );
void LevantarTromba( );
void Andar( );
...
}
class Antropoide:public Mamifero {
public:
Antropoide( ):Mamifero( ) {};
~Antropoide( );
void Andar( );
void Procriar( );
...
}

class Homem: public Antropoide {


public:
Homem( ):Antropoide( ) {};
~Homem( );
void Fala( );
...
}
class Macaco:public Antropoide {
public:
Macaco( ):Antropoide( ) {};
~Macaco( );
void SobeNaArvore( );
...
}
class Peixe: public Animal {
int nmero_de_escamas;
public:
Peixe( ):Animal( ) {};
~Peixe( );
void Nadar( );
void Comer( );
...
}
class Tubarao:public Peixe {
public:
Tubarao( ):Peixe( ) {};

Pag.:

18

__________________________________________________________________________________
___

~Tubarao( );
void Comer( );
...
}
class Golfinho:public Mamifero, Peixe {
public:
Golfinho( ):Mamifero( ),Peixe( ) {};
void Comer( );
void Respirar( );
...
}
Homem Tarzan;
Macaco Chita;
Elefante Dumbo;
Tubarao Tu_Tu_Barao;
Golfinho Flipper;
void main(void)
{
Tarzan.Comer( );
Chita.Comer( );
Tarzan.Respirar( );
Chita.Respirar( );
Dumbo.Respirar( );
Dumbo.Andar( );
Tanzan.Andar( );
Chita.Mamar( );
Flipper.Mamar( );
Tarzan.Mamar( );
Chita.SobeNaArvore( );
Tu_Tu_Barao.Comer( );
Flipper.Comer( );
}
Observe a declarao do mtodo Comer( ): ele declarado em Antropide, e redefinido
para Homem e para Macaco, j que estes comem de formas diferentes. No momento de
enviarmos uma mensagem para o objeto Tarzan e para o objeto Chita, fazemos da mesma
forma, j que os mtodos possuem nomes idnticos, mas a mensagem a Tarzan resultar na
execuo do mtodo Comer( ) de Homem, e a mensagem a Chita, na do mtodo Comer( ) de
Macaco. J na chamada a Respirar( ), o mtodo chamado tanto para Tarzan como para Chita
e Dumbo o mesmo, herdado de Mamfero.
importante entender que cada objeto vai ter o seu prprio grupo de atributos. A
chamada Chita.Mamar( ) vai afetar as variveis de Chita unicamente, e no de algum objeto
Mamfero declarado. Homem e Macaco so mamferos diferentes, objetos diferentes. Cada um

Pag.:

19

__________________________________________________________________________________
___

deles possui um atributo quer_mamar, herdado de Mamifero. Tarzan.Mamar( ) afeta


quer_mamar de Tarzan, e no de algum objeto ancestral.
Tambm importante no confundir Herana com Composio de Classes.
Composio de classes quando temos uma classe que possui como atributo um objeto de
outra classe. Por exemplo, podemos dizer que o objeto carro possui pneus, e podemos colocar
na sua lista de atributos quatro objetos Pneu:
class Carro{
Pneu pneus[4];
...
}
Neste caso, o objeto Carro possui objetos Pneu, mas no herda nada de Pneu. Se
Carro fosse um Pneu, ento poderamos definir uma relao de herana, e fazer Carro herdar
desta classe:
class Carro:public Pneu{
...
}
obvio que Carro no um Pneu, logo esta definio um absurdo, no faz sentido.
Neste caso, ns precisamos compor a classe com objetos Pneu ( a classe precisa de atributos
Pneu), como mostrado no primeiro exemplo.
Assim, a pergunta-chave para distinguir herana de composio : A minha classe
possui a classe X, ou ela X? Se ela possui, temos composio, se ela , temos herana.

7. POLIMORFISMO
7.1 Definio:
Polimorfismo a propriedade de uma ou mais classes responderem a mesma mensagem,
cada uma de uma forma diferente. Numa linguagem orientada a objeto, uma referncia
polimrfica tal que, no decorrer do desenvolvimento do software, refere-se a mais de uma
classe. Desta forma possvel explorar similaridades entre diferentes classes de objetos. Este
conceito til para distinguir mensagens de um mtodo. Um objeto emissor envia uma
mensagem, se o objeto receptor implementa um mtodo com a mesma assinatura, ele poder
respond-la. Diferentes respostas sero possveis, dependendo de como os mtodos dos
receptores esto implementados.

No C++ o polimorfismo implementado pelo uso de sobrecarga de funes. Em C++,


duas ou mais funes podem compartilhar o mesmo nome, contanto que as suas declaraes
de parmetros sejam diferentes. Nessa situao, as funes que compartilham o mesmo nome

Pag.:

20

__________________________________________________________________________________
___

so conhecidas como sobrecarregadas e o processo chamado de sobrecarga de funes.


Por exemplo, considere este programa:
#include <iostream.h>
// a funo quadrado sobrecarregada trs vezes
int quadrado (int i);
double quadrado (double d);
long quadrado (long l);
main (void)
{
cout << quadrado (10) << \n;
cout << quadrado (11.0) << \n;
cout << quadrado (9L) << \n ;
return 0;
}
int quadrado ( int i)
{
cout << Dentro da funo quadrado ( ) que usa ;
cout << um argumento inteiro.\n;
return i*i;
}
double quadrado (double d)
{
cout << Dentro da funo quadrado ( ) que usa ;
cout << um argumento double.\n;
return d*d;
}
long quadrado (long l)
{
cout << Dentro da funo quadrado ( ) que usa ;
cout << um argumento long.\n;
return l*l;
}
Esse programa cria trs funes similares, porm diferentes, chamadas de quadrado.
Cada uma delas retorna o quadrado do seu argumento. Como o programa ilustra, o
compilador sabe qual funo usar em cada situao por causa do tipo de argumento. O mrito
da sobrecarga de funes permitir que conjuntos relacionados de funes sejam acessados
usando-se somente um nome. Nesse sentido, a sobrecarga de funes deixa que se crie um
nome genrico para algumas operaes, com o compilador resolvendo exatamente qual funo
necessria no momento para realizar a operao.

Pag.:

21

__________________________________________________________________________________
___

O que torna a sobrecarga de funes importante o fato de ela poder ajudar


simplificar o entendimento do software. Para entender como, considere este exemplo. Muitos
compiladores de linguagem C contm funes como atoi( ), atof ( ) e atol( ) nas suas
bibliotecas-padres. Coletivamente, essas funes convertem uma string de dgitos em
formatos internos de inteiros, double e long, respectivamente. Embora essas funes realizem
aes quase idnticas, trs nomes completamente diferentes devem ser usados em C para
representar essas tarefas, o que torna a situao, conceitualmente, mais complexa do que o
na realidade. Ainda que o conceito fundamental da cada funo seja o mesmo, o programador
tem trs coisas para se lembrar, e no somente uma. Entretanto, em C++, possvel usar o
mesmo nome, atonum ( ), por exemplo, para todas as trs funes. Assim, o nome atonum( )
representa a ao geral que est sendo realizada. de responsabilidade do compilador
selecionar a verso especfica para uma circunstncia particular. Assim, o programador s
precisa lembrar da ao geral que realizada. Portanto, aplicando-se o polimorfismo, trs
coisas a serem lembradas foram reduzidas a uma. Ainda que esse exemplo seja bastante trivial,
se voc expandir o conceito, ver como o polimorfismo pode ajudar na compreenso de
programas muito complexos.
Um exemplo mais prtico de sobrecarga de funes ilustrado pelo programa seguinte.
Como voc sabe, a linguagem C ( e o C++ ) no contm nenhuma funo de biblioteca que
solicite ao usurio uma entrada, esperando, ento, uma resposta. Este programa cria trs
funes, chamadas solicitao( ), que realizam essa tarefa para dados dos tipos int, double e
long:
# include <iostream.h>
void solicitao ( char *str, int *i);
void solicitao ( char *str, double *d);
void solicitao ( char *str, long *l);
main (void)
{
int i;
double d;
long l;
solicitao (Informe um inteiro: , &i);
solicitao (Informe um double: , &d);
solicitao (Informe um long: , &l);
cout << i << << d << << l;
return 0;
}
void solicitao (char *str, int *i)
{
cout << str;
cin >> *i;
}

Pag.:

22

__________________________________________________________________________________
___

void solicitao (char *str, double *d)


{
cout << str;
cin >> *d;
}
void solicitao (char *str, long *l)
{
cout << str;
cin >> *l;
}
CUIDADO Voc pode usar o mesmo nome para sobrecarregar funes no relacionadas,
mas no deve faz-lo. Por exemplo, voc pode usar o nome quadrado ( ) para
criar funes que retornam o quadrado de um int e a raiz quadrada de um double.
Entretanto, essas duas operaes so fundamentalmente diferentes e a aplicao
de sobrecarga de funo, dessa maneira, desvirtua inteiramente o seu propsito
principal. Na prtica, voc somente deve usar sobrecarga em operaes
intimamente relacionadas.

7.2 Tipos Clssicos de Polimorfismo:


1) De operadores (distino pelo tipo do elemento): j vem implementado em todas as
linguagens. Por exemplo, se voc deseja somar dois nmeros inteiros
2) Redefinio de operadores: utilizada quando necessita-se de operaes que normalmente
no so disponveis na linguagem de programao. Por exemplo, soma de matrizes.
3) Dois mtodos iguais na mesma classe: distinguem-se pelo nmero e/ou tipo de parmetros
ou objetos referenciados.

8. LATE BINDING

8.1 Definio
Late Binbing um tcnica que no esta ligada somente as linguagens Orientadas a
Objetos, muitas outras linguagem usam esta tcnica, principalmente as linguagens no tipadas.
Cada linguagem que a implementa faz algum tipo de Binding, que no so necessariamente
iguais. As linguagens orientadas a objetos interpretadas que fazem com maior freqncia o
Late Binding.
No existe muita bibliografia que fale sobre essa tcnica, pelo menos para linguagens
orientadas a objetos. Geralmente citada no decorrer da explicao dos conceitos de
orientao objeto e/ou da linguagem, no ressaltando a tcnica especificamente. No entanto,

Pag.:

23

__________________________________________________________________________________
___

a tcnica que permite a existncia de muitos conceitos do paradigma orientado a objetos. As


raras bibliografias que falam especificamente sobre o Late Binding geralmente ressaltam esta
importncia, que enfocada porque um programa orientado a objeto no age de forma
seqencial como linguagens imperativas compiladas/interpretadas. Esta seqncia se refere
mais ou menos a uma ordem de compilao.
Na programao orientada a objeto ao definir uma classe ela pode usar objetos que no
foram definidos ainda e ser compilada normalmente. Esta caracterstica est em linguagens
orientadas a objetos porque um programa orientado a objetos basicamente um programa
com descries de formas e aes de objetos e a interao entre eles, e essa interao no
necessariamente seqencial.
Fazendo-se uma analogia, pode-se comparar estes tipos de declarao como prottipos
de funes que a linguagem C oferece, ou em compilao, s DLLs (Dynamic Link Library)
do Windows. Um programa que usa DLL compilado independente da existncia desta DLL.
Somente em tempo de execuo verificado se a DLL esta presente ou no. Se esta no
estiver presente, ocorrer um erro.
Mas afinal qual o conceito de Ligao Tardia? No existe apenas uma definio deste
tema, principalmente porque existem vrias formas de Ligao Tardia e diferentes em cada
linguagem, portanto no existe nenhum padro para Ligao Tardia. Em algumas linguagens
uma ferramenta feita com a tcnica de Ligao Tardia e em outras esta mesma ferramenta
no utiliza esta tcnica (ex. Polimorfismo em Smalltalk feito em tempo de execuo, j em
C++ em tempo de compilao, uma ligao bem menos dinmica). Estas definies cobrem
praticamente todas as ligaes que linguagens orientadas a objetos fazem.
??

a tcnica de adaptar objetos a determinadas situaes;


usar objetos definidos em mdulos completamente independentes, de modo que no
necessrio conhecer o estado do mdulo, apenas a sua interface;
?? Escolha de uma propriedade
num conjunto delas. Durante a processamento
(interpretao/compilao) so definidos conjuntos de possibilidades.
??

8.2 Tipos
Existem os seguintes tipos de Binding:
?? Execution Time (tempo de execuo): o mais comum em tipos de variveis.
?? Entrada em um subprograma: o binding ocorre apenas na entrada de um subprograma,
por exemplo em Pascal, onde as variveis so tipadas no incio do procedimento (aloca
espao para as variveis).
?? Pontos arbitrrios durante a execuo: pode ocorrer em qualquer ponto da execuo,
em exemplo so linguagens onde no existem declaraes de tipos.
?? Translation Time (tempo de compilao): existem em todas as linguagens.

Pag.:

24

__________________________________________________________________________________
___

?? Ligao escolhida pelo programador: decises tomada pelo programador que podem ser
decididas durante o processamento (tipos de variveis).
?? Ligao escolhida pelo processador: so ligaes feitas pelo processador, em
FORTRAN ligaes de determinadas variveis para determinada lugares so feitas em
tempo de carregamento. (atribuies, default).
?? Tempo de implementao da linguagem: alguns aspectos da linguagem que usam ligao
so definidas no desenvolvimento da linguagem. Exemplo: representao de nmeros (10
10.0).
?? Tempo de definio de linguagem: muitas estruturas de linguagens so fixadas na sua
definio. Por exemplo a possibilidade de alternativas formas, dados, estrutura e tipos so
definidas pela linguagem. (o operador + em C definido para inteiros e reais).

8.3 Ligao Precoce e Tardia (O. O.)


H dois termos que so normalmente usados quando se discute linguagens de
programao orientada a objeto. Ligao precoce e ligao tardia, relativos a linguagens
compiladas, eles referem-se aos eventos que ocorrem no momento da compilao, e no
momento da execuo respectivamente,
Em ralao orientao a objetos, ligao precoce significa que um objeto ligado a sua
chamada de funo no momento da compilao, isto , todos as informaes necessrias para
determinar qual funo ser chamada so conhecidas quando o programa compilado. A
principal vantagem da ligao precoce a eficincia - mais rpido e requer menos memria.
A ligao tardia significa que um ligado a sua chamada de funo na momento da
execuo. Isso determina no decorre da execuo do programa qual funo se relacionar com
qual objeto. A vantagem a flexibilidade.

8.3.1 Dynamic Typing E Dynamic Binding - O.O.


Dynamic Typing e Dynamic binding esto diretamente associados a estes termos, onde:
??

Dynamic Typing (tipos dinmicos): alocao de variveis - o software pode usar um


objeto e seus processos sem ele ter sido definido.
?? Dynamic Binding (ligao dinmica): a operao associada com um objeto particular,
selecionada em tempo de execuo.
A programao orientada para objetos esta associada com um estilo de programao
constituda pela criao dinmica de objetos e ligao dinmica de operaes a objetos. Este
estilo surgiu com as linguagens orientadas a objetos interpretadas como Smalltalk e Flavors.
Estes sistemas apresentam grande flexibilidade durante a execuo, so ferramentas bem
sucedidas para prototipagem e soluo imediata de problemas e situaes.

Pag.:

25

__________________________________________________________________________________
___

possvel escrever programas orientados para objetos em C++, onde nos oferece
criao dinmica de instncias de objetos e ligao dinmica de operaes com objetos com
funes virtuais. As chamadas de funes virtuais so vinculadas dinamicamente em tempo de
execuo, enquanto que o tipo de instncia do objeto em tempo de compilao.

Exemplos
Agora passaremos alguns exemplos para deixar mais claro o sua definio e propsito.
Ex1 - Uma comparao entre linguagens imperativas e O.O.
Programa imperativo
Program imperativo;
uses crt;
var i : integer;

CRT

Procedure P;
Begin
{faz coisas}
end;

{ Programa Principal PP}


Begin
clrscr;
...
writeln(i); P ;
end.

PP

A compilao deve ser seqencial


seqncia de compilao

seqncia de uso

Programa O.O.
O desenvolvimento no seqencial, cada mdulo construdo separadamente. A seguir
mostraremos como funciona um programa orientado a objetos, onde as setas indicam a troca
de mensagens e o * onde comea o processo.
Ora uma seqncia pode se aplicado como no exemplo seguinte:

Pag.:

26

__________________________________________________________________________________
___

* A

D
E

Ora como no exemplo a seguir, e assim sucessivamente:

D
*

8.4 Concluses
O programa que usa ligao tardia no depende de sua aplicao. Na prtica, muitos
programas grandes usaro uma combinao das duas ligaes (precoce e tardia). Ligao
tardia uma das ferramentas mais poderosas de orientao a objetos. Porm, o preo que se
paga por essa potencialidade a lentido do programa. Portanto deve-se usar ligao tardia
somente quando acrescentar significativamente estruturao e flexibilidade ao programa. A
perda de performance muito pequena, da maneira que , quando a situao pedir ligao
tardia, deve-se definitivamente usa-la.
Varia de linguagem para linguagem. As principais vantagens desta tcnica que nos
permite facilidade de programao, uma maior reutilizao de cdigo e independncia no
desenvolvimento de mdulos.

Pag.:

27

__________________________________________________________________________________
___

9. BIBLIOGRAFIA
Anlise e Projeto Orientado a Objeto - Jaelson Freire Brelaz de Castro - [94]
Programao Orientada a Objetos - Tadao Takahashi e Hans K. E. Liesenberg - [90]
Smalltalk 80 - A. Goldberg & Robson
Smalltalk V - Digitalk
Introduo Programao Orientada a Objeto - Miguel Jonathan [94]
Anlise Baseada em Objetos - Peter Coad & Edward Yourdon [92]
Programao em C++ - Uma Abordagem Orientada a Objetos - Ben Ezzel [91]
Projeto de Algoritmos - Nvio Ziviani [93]
O Paradigma de Objetos: Introduo e Tendncias - Tadao Takahashi [89]
Programando em C++ - Steven Holzner & The Peter Norton Computing Group [93]
Programming language: concepts and paradigms - David A. Watt
Object Oriented Software Construction - Bertrand Meyer

Pag.:

28

Você também pode gostar