You are on page 1of 29

PROGRAMAO ORIENTADA OBJETO

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 5. ENCAPSULAMENTO 6. HERANA 7. POLIMORFISMO 7.1 Definio: 7.2 Tipos Clssicos de Polimorfismo: 8. LATE BINDING 8.1 Definio 8.2 Tipos 8.3 Ligao Precoce e Tardia (O. O.) 8.3.1 Dynamic Typing E Dynamic Binding - O.O. 8.4 Concluses 9. BIBLIOGRAFIA

1 1 2 5 6 6 7 11 11 13 20 20 22 22 23 24 24 24 26 27

_____________________________________________________________________________________

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. 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

Pag.: 1

_____________________________________________________________________________________

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: (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,

Pag.: 2

_____________________________________________________________________________________

(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 Reduo no custo de manuteno:

Pag.: 3

_____________________________________________________________________________________

Na programao orientada a objetos, existem certas caractersticas (herana e encapsulamento) que permitem que, quando for necessria alguma alterao, modifiquese 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 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,

Pag.: 4

_____________________________________________________________________________________

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; public: void inicio (void);

Pag.: 5

_____________________________________________________________________________________

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; }; void put ( int valor) { f [ultimo] = valor; ultimo++; };

Pag.: 6

_____________________________________________________________________________________

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 */ tamanho horizontal tamanho vertical paleta de cores cor atual mtodos modo texto ( ) modo grfico ( ) fecha modo grfico ( ) muda cor ( )

funcionais: gira em torno de processos

Pag.: 7

_____________________________________________________________________________________

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 */ ... 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.

Pag.: 8

_____________________________________________________________________________________

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 */ ... } Agora quando define uma classe aluno class Aluno { char nome [30]; char telefone [20]; int nmero; lista_notas notas; ... public: insereNota (matria, nota); listaNotas ( );

Pag.: 9

_____________________________________________________________________________________

... }; 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 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.

Pag.: 10

_____________________________________________________________________________________

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: 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.

Pag.: 11

_____________________________________________________________________________________

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). 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

Pag.: 12

_____________________________________________________________________________________

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 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

Pag.: 13

_____________________________________________________________________________________

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( ); ... } 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

Pag.: 14

_____________________________________________________________________________________

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 generalizao-especializao, 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

Antropide

Tubaro

Homem

Macaco

Elefante

Tu-Tu-Baro

Tarzan

Chita

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

Pag.: 15

_____________________________________________________________________________________

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: A B C implica: C A

Por exemplo, Um Mamfero um Animal, e um Antropide um mamfero. Logo, um Antropide um Animal, e possui as caractersticas de um animal. 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 Golfinho

Peixe

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

Pag.: 16

_____________________________________________________________________________________

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( ) {} ~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 {

Pag.: 17

_____________________________________________________________________________________

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( ) {}; ~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( );

Pag.: 18

_____________________________________________________________________________________

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 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.

Pag.: 19

_____________________________________________________________________________________

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 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; }

Pag.: 20

_____________________________________________________________________________________

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. 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;

Pag.: 21

_____________________________________________________________________________________

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; } 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

Pag.: 22

_____________________________________________________________________________________

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, 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.

Pag.: 23

_____________________________________________________________________________________

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. 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:

Pag.: 24

_____________________________________________________________________________________

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. 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; Procedure P; Begin {faz coisas} end; { Programa Principal PP} Begin clrscr; ... writeln(i); P ; end. A compilao deve ser seqencial seqncia de compilao seqncia de uso
CRT

PP

Pag.: 25

_____________________________________________________________________________________

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:
* A

D E

Ora como no exemplo a seguir, e assim sucessivamente:

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.

Pag.: 26

_____________________________________________________________________________________

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.

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.: 27

You might also like