Você está na página 1de 28

Conceitos de Orientao a Objetos

Ementa 1. Histria sobre OO (Orientao a Objetos) 2. Programao Estruturada vs Programao Orientada a Objetos 3. Objeto 4. Atributos e Mtodos 5. Classe 6. Mensagem 7. Abstrao 8. Encapsulamento 9. Herana 10. Polimorfismo 11. O bsico de UML 12. Extras: 12.1 Referncias Bibliogrficas 12.2 Referncias para Aprofundamento

Conceitos de Orientao a Objetos


1. Histria sobre OO Os caminhos da programao tm mudado drasticamente desde a inveno do computador. A primeira razo para tais 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 do equipamento. Enquanto os programas continham somente algumas centenas de instrues, esse mtodo funcionava. No entanto, quando cresceram, a linguagem Assembly foi inventada para permitir a um programador manipular complexidades. A primeira linguagem de mais alto nvel (isto , mais prxima da lngua humana) difundida foi a denominada FORTRAN. Ainda que isso possa ser visto como um primeiro passo bastante considervel, o FORTRAN uma linguagem

que somente torna os programas mais claros e fceis de entender quando comparado ao Assembly, sem introduzir mudanas considerveis no estilo de programao. Nos anos 60 nasceu a chamada Programao Estruturada. Esse o mtodo utilizado em linguagens como C e Pascal. A partir das linguagens estruturadas, foi possvel, pela primeira vez, escrever programas moderadamente complexos de maneira razoavelmente fcil. Entretanto, com a programao estruturada, quando um programa atinge um certo tamanho, torna-se extremamente difcil efetuar quaisquer manuteno ou modificao. A cada marco no desenvolvimento da programao, mtodos foram criados para permitir ao programador lidar com complexidades cada vez maiores. Cada passo combinava os melhores elementos dos mtodos anteriores com elementos mais avanados. Atualmente, muitos projetos esto prximos do ponto, ou nele prprio, 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 ideias da programao estruturada e combinou-as com novos conceitos poderosos, de modo que um problema seja mais facilmente decomposto em subgrupos relacionados. Com a utilizao desta linguagem, esses subgrupos so traduzidos 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, idealizada em 1966, na Noruega, como uma extenso da linguagem ALGOL 60. Uma classe em Simula um mdulo que engloba 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 ideias de Simula serviram de base para as propostas de utilizao de Tipos Abstratos de Dados e tambm para a Smalltalk. A Smalltalk foi desenvolvida no Centro de Pesquisas da Xerox durante a dcada de 70 e incorporou, alm das ideias 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 individual e independentemente, para os quais podem ser transmitidos comandos em forma de mensagens. Outras linguagens orientadas para objetos tm sido desenvolvidas. Notadamente tem-se C++, uma extenso de C, Objetive-C, outra extenso de C mas menos popular, 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 a maior difuso da linguagem [Digitalk]. A Smalltalk, uma das mais populares linguagens orientadas a objetos, assim como outras linguagens orientadas para objetos, tem sido usada em aplicaes variadas em que 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. Tais aplicaes diferem substancialmente daquelas em que a nfase est na resoluo de problemas atravs de algoritmos, 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.

Conceitos de Orientao a Objetos


2. Programao Estrutura vs Programao Orientada a Objetos As tcnicas de programao tradicionais, como por exemplo a decomposio funcional, levam o desenvolvedor a decompor o sistema em partes menores (funes), criando um emaranhado de inmeras funes que chamam umas s outras. Geralmente, no h separao de conceitos e responsabilidades, o que causa dependncias enormes no sistema e dificulta futuras manutenes no cdigo do programa. Alm disso, no existe muito reaproveitamento de cdigo, havendo muitas vezes a duplicidade de cdigo. O Paradigma Estruturado uma forma de programao de computadores que utiliza apenas trs estruturas: sequncia, deciso e iterao. Segue abaixo um exemplo de cdigo em C:

#include <stdio.h> #define NMAX 10

/* as variveis tSize e tab so globais */ int tSize; int tab[NMAX];

void init() {

tSize = 0; }

int insert(int v) { if(tSize >= NMAX-1) return -1; tab[++tSize] = v; return tSize; }

int sort() { int i,j,t; for(i=0; i < tSize-1; i++) for(j = i+1; j < tSize; j++) if(tab[i] >tab[j]) { t = tab[i]; tab[i] = tab[j]; tab[j] = t; } }

void printTab() { int i; printf("tab: "); for(i=0; i < tSize; i++) { printf("%d ",tab[i]); printf("\n"); } }

int main()

{ init(); insert(5); insert(8); insert(2); insert(12); sort(); printTab(); }

O paradigma da Orientao a Objetos, ou Programao Orientada a Objetos (POO ou OOP), eleva a programao e o desenvolvimento de sistemas para um novo patamar. A OO um mecanismo moderno que ajuda a definir a estrutura de programas baseada nos conceitos do mundo real, sejam eles reais ou abstratos. A OO permite criar programas componentizados, separando as partes do sistema, chamadas de OBJETOS, por responsabilidades e fazendo com que essas partes se comuniquem entre si por meio de um mecanismo chamado mensagem. A Orientao a Objetos introduz e enfatiza os seguintes conceitos:

Objeto Mensagem Classe Abstrao Encapsulamento

Herana Polimorfismo Contudo, importante destacar que possvel se conseguir programas razoavelmente orientados a objeto em linguagens tipicamente estruturadas, assim como possvel conseguir programas estruturados em linguagens voltadas para objetos. Tomemos como exemplo a frase: [1] 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. Somente aps isto que pensaramos em como o navio se relaciona com o porto e com a carga e como o porto se relaciona com a carga. De modo grosseiro, pode-se dizer que ao analisarmos uma frase pensando de maneira estruturada, daramos nfase aos verbos, e, pensando orientado a objetos, daramos nfase aos substantivos. A OO mais intuitiva e fcil de aprender do que as tcnicas tradicionais, pois foca o problema em conceitos do mundo real. Dentre as vantagens que a OO pode proporcionar, podemos destacar: o aumento de produtividade o reuso de cdigo a reduo das linhas de cdigo programadas a separao de responsabilidades a componentizao a maior flexibilidade do sistema a escalabilidade a facilidade na manuteno, dentre outras vantagens.

Conceitos de Orientao a Objetos


3. O que objeto? Objetos so chave para se compreender a tecnologia orientada a objetos. Voc olha ao seu redor e tudo o que se v so objetos: carro, mesa, janela, livro, pessoa, etc.

Assim, objeto um representante do mundo real e possui as seguintes caractersticas essenciais: Identidade: cada objeto identificado pelas suas qualidades (atributos), por seus estados e comportamentos. Atributo: qualidades de um objeto, por exemplo, um carro pode ter como atributos: ano, marca, modelo, quilometragem, etc. Estado: diz se da situao do objeto em determinado tempo ou espao, por exemplo, um carro pode estar em movimento ou parado. Comportamento: so servios que um usurio pode requisitar, aes que o objeto deve executar como, por exemplo, um carro ter como comportamento acelerar e frear.

Esses objetos podem ser classificados tanto como conceitos concretos (carro, livro, nota fiscal), quanto conceitos abstratos (conta corrente, venda, pessoa jurdica). Na Orientao a Objetos, os objetos do mundo real so modelados e representados no mundo computacional, ou seja, dentro do sistema, por meio de objetos de software. Cada objeto deve ser conhecido, bem definido e ter seu limite e um significado dentro do sistema.

Um sistema pode conter um ou inmeros objetos ativos. Cada objeto ativo no sistema em particular tambm chamado de instncia, e, as diferentes instncias possuem seu prprio estado. O exemplo a seguir mostra vrias instncias de pessoas. Notem que cada instncia de pessoa possui um estado diferente em particular e, alm do estado, tambm possui seus mtodos (comportamento) que operam sobre o prprio estado. Em outras palavras, para pular, cada pessoa vai fazer uma determinada fora dependendo da sua idade, altura e peso, por exemplo. A ideia que cada objeto seja responsvel por seus dados (estado) e seja capaz de realizar as prprias operaes que lhe foram atribudas (comportamento).

Alm das caractersticas essencias, os objetos e o paradigma de orientao a objetos carregam tambm alguns outros aspectos que podem ser resumidos em: Abstrao: representam os diversos pontos de vista sobre um determinado objeto, como por exemplo, um gato. Na viso de seu dono ele seu mascote, seu animalzinho. J na viso do veterinrio o mesmo gato visto como um ser dotado de sistema esqueltico, digestivo, circulatrio Ou seja, dependendo de um ponto da anlise somente os aspectos relevantes ao sistema so vistos.

Classificao: significa agrupar objetos que possuam os mesmos atributos, como no exemplo a seguir:

Encapsulamento: restringe a visibilidade da informao para obter maior clareza, ajudando na manuteno e na reutilizao dos cdigos. Por exemplo uma calculadora e um carro. Podemos olhar para esses objetos e utiliz-los sem abri-los para ver seu funcionamento.

Herana: os objetos podem ser subdivididos e as subclasses herdam os mesmos atributos da superclasse, auxiliando na reutilizao do cdigo. Por exemplo os meios de transporte. Temos vrios meios de transporte, mas todos eles possuem caractersticas em comum: transportar pessoas e/ou objetos.

Polimorfismo: entendido como um cdigo que pode possuir diferentes comportamentos, ou seja, o mesmo cdigo pode ser utilizado por mais de uma classe. Por exemplo, classe polgonos, comportamento: calcular rea.

Persistncia: o estado e o comportamento de um objeto variam com o tempo. Por exemplo, o preo de um produto.

Conceitos de Orientao a Objetos


4. Atributos e Mtodos Uma classe e os objetos que pertencem a esta classe seriam inteis se no fosse possvel fazer algo com eles. Atributos e mtodos so a forma, orientada a objetos, de manipular os objetos de uma classe. Os Atributos so os elementos que definem a estrutura de uma Classe. Os atributos tambm so conhecidos como variveis de classe e podem ser divididos em dois tipos bsicos: atributos de instncia e atributos de classe. Os valores dos atributos de instncia determinam o estado de cada objeto. Um atributo de classe, tambm chamado de atributo esttico ou constante, possui um estado que compartilhado por todos os objetos de uma mesma classe. As mensagens enviadas a um objeto (mtodos, ver a seguir) podem mudar o valor de um ou mais atributos, alterando o estado de um objeto. Um atributo um dado para o qual cada objeto tem seu prprio valor e , basicamente, a estrutura de dados que vai representar a classe. Exemplo de atributos:

int f [100] ; int primeiro, ultimo;

Um Mtodo uma sub-rotina, um bloco de cdigo que pertence a uma classe e tem por finalidade realizar uma tarefa e/ou corresponder a uma ao do objeto. Esse cdigo executado por um objeto, ao receber uma mensagem, e determina seu comportamento, sendo anlogo s funes e procedimentos da programao estruturada (similar s funes em C e sub-rotinas em Pascal). Exemplo de mtodo: correr, pegar, etc. Numa classe escrita para realizar clculos matemticos, os mtodos poderiam ser somar, subtrair, dividir, etc. Alm disso, um papel fundamental dos mesmos o fato de evitar a reescrita de cdigo para uma mesma funo toda vez que se deseja cham-la. Exemplo de mtodos em uma classe OperacoesMatematicas:

/*OperacoesMatematicas.java*/

public class OperacoesMatematicas{ public int return } public int return } public int return } public int return } } somar( int num1, int num2 ){ num1 + num2; subtrair( int num1, int num2 ){ num1 - num2; multiplicar( int num1, int num2 ){ num1 * num2; dividir( int num1, int num2 ){ num1 / num2;

importante destacar que a programao orientada a objetos prev que atributos e mtodos podem ter regras de acesso ou visibilidade diferentes. Mas ento, como controlar o acesso de atributos e mtodos em uma classe? Isso simples: atravs das palavras reservadas private, public e protected, cujos significados quando qualificando mtodos e atributos (private e public podem tambm qualificar classes) so descritos abaixo:

Modificador de Acesso

Descrio

public

Os atributos e mtodos so sempre acessveis em todos os mtodos de todas as classes. Este o nvel menos rgido de encapsulamento, que equivale a no encapsular.

private

Os atributos e mtodos so acessveis somente nos mtodos (todos) da prpria classe. Este o nvel mais rgido de encapsulamento.

protected

Os atributos e mtodos so acessveis nos mtodos da prpria classe e suas subclasses (ver o captulo sobre Herana).

Nada especificado, equivale package ou friendly ou default

Os atributos e mtodos so acessveis somente nos mtodos das classes que a pertencem ao "package" em que foram criados. Este modo de acesso tambm chamado de "friendly".

Conceitos de Orientao a Objetos


5. 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 interpretada como uma estrutura 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. No mundo real frequentemente percebemos vrios objetos de um mesmo tipo. Por exemplo, seu carro um dos muitos carros existentes no mundo. Usando a terminologia OO (Orientada a Objetos), dizemos que um carro em particular uma instncia da classe de objetos conhecida como carros. O estado de cada carro independente e pode ser diferente do estado dos outros carros. Cada carro pode ter uma cor diferente, por exemplo.

Possveis instncias (objetos) da classe Lampada:

lampadaDaSala lampadaDoQuarto lampadaDaCozinha Comumente feita uma grande confuso entre classes e objetos. importante lembrar que a classe define as caractersticas comuns e que os objetos so instncias dessas classes, com estado prprio.

Outro exemplo simples seria:

A definio de um mtodo compreende especificao (a sua assinatura) e implementao (o seu corpo). H situaes em que possvel afirmar que uma classe deve ter um mtodo com determinada especificao, mas nada pode se afirmar sobre seu comportamento. Para esses casos, possvel definir que a classe tem esse mtodo como abstrato (em Java a palavra reservada para isso abstract). A classe que tem pelo menos um mtodo abstrato no pode ser instanciada e tambm precisa ser declarada como abstrata. A definio desse mtodo dever ser completada em uma classe derivada dessa que contm o mtodo abstrato, usando o mecanismo de redefinio de mtodos (ver Captulo sobre Polimorfismo). importante notar que uma classe pode ser declarada como abstrata mesmo sem ter nenhum mtodo abstrato, ou seja, nesse caso protege-se a classe de ser instanciada mesmo j tendo todos os seus mtodos com o comportamento definido.

Conceitos de Orientao a Objetos


6. Mensagem Um objeto por si s no significa muito em um sistema. Para ter algum sentido e valor esses objetos precisam interagir e comunicar-se entre si. Como j foi dito, os objetos se comunicam por meio de mensagens. Quando um objeto A quer se comunicar com um objeto B enviada uma mensagem de A para B.

Enviar uma mensagem significa executar um mtodo. Ento, se A envia uma mensagem para B, podemos entender como o objeto A executando um mtodo do objeto B. As mensagens so compostas por trs partes:

Objeto a quem a mensagem endereada Nome do mtodo a ser chamado Parmetros que o mtodo recebe

Conceitos de Orientao a Objetos


7. Encapsulamento Encapsulamento vem de encapsular, cpsula, que em programao orientada a objetos significa separar o programa em partes, de forma mais isolada possvel. A ideia tornar o software mais flexvel, fcil de modificar, de criar novas implementaes e proteger partes desse cdigo com uma espcie de cpsula, onde s o que deseja pode ser visto por outros softwares. Para exemplificar, podemos pensar em uma dona de casa (usurio) utilizando um liquidificador (sistema). O usurio no necessita conhecer detalhes do funcionamento interno do sistema para poder utiliz-lo, precisa apenas conhecer a interface, no caso, os botes que controlam o liquidificador. Uma grande vantagem do encapsulamento que toda parte encapsulada pode ser modificada sem que os usurios da classe em questo sejam afetados. No exemplo do liquidificador, um tcnico poderia substituir o motor do equipamento por um outro totalmente diferente, sem que a dona de casa seja afetada, afinal, ela continuar somente tendo que pressionar o boto. O encapsulamento protege o acesso direto (referncia) aos atributos de uma instncia fora da classe onde estes foram declarados. Esta proteo consiste em se usar modificadores de acesso mais restritivos sobre os atributos definidos na classe. Depois devem ser criados mtodos para manipular de forma indireta os atributos da classe. Encapsular atributos tambm auxilia a garantir que o estado de um objeto (a situao em que ele se encontra) e seu comportamento se mantenham coesos. Por exemplo, no caso de uma classe chamada Semaforo poderamos ter um mtodo de acesso chamado lerCor() e um modificador chamado proximaCor(). O estado do objeto preservado atravs dos mtodos a cada mudana, pois os usurios da classe no podem simplesmente alterar as cores de um semforo aleatoriamente e, por exemplo, fazer a seguinte troca de cores: vermelho-amarelo-vermelho. H um comportamento pr-estabelecido que diz como as mudanas de estado, associada s cores do semforo, devem acontecer. Por exemplo, se o semforo est vermelho, a prxima cor ser a verde. comum usar o padro get<nomeDoAtributo> para o mtodo que retorna o valor atual do atributo e set<nomeDoAtributo> para o mtodo que modifica o valor de um atributo do objeto.

Dois conceitos que esto intrinsicamente ligados a Encapsulamento so Acoplamento e Coeso:

- Acoplamento Refere-se ao nvel em que uma classe conhece e usa os membros de outra classe, ou seja, uma medida de interdependncia entre mdulos (classes, objetos). Quanto menos acoplamento melhor, pois reduz o impacto de uma alterao.

- Coeso Refere-se responsabilidade da classe, ou seja, cada classe deve ter sua responsabilidade bem definida, com atributos e mtodos relacionados apenas ao cumprimento dessa funcionalidade. Normalmente, classes com muitas responsabilidades no so desejveis.

Apenas para consolidar, um bom software deve ter Alta Coeso e Baixo Acoplamento.

Conceitos de Orientao a Objetos


8. Abstrao Abstrao a habilidade e a capacidade de se modelar conceitos, entidades, elementos, problemas e caractersticas do mundo real, de um domnio do problema em questo, levando-se em conta apenas os detalhes importantes para a resoluo do problema e desprezando coisas que no tm importncia no contexto. Se pensarmos no conceito de conta corrente bancria e abstrairmos este conceito, podemos identificar detalhes comuns, como o nmero da conta, nmero da agncia e saldo, e operaes como dbito em conta, depsito e extrato da conta. Basicamente essas so as caractersticas de conta corrente para todos os bancos, apesar de um ou outro banco ter especificidade, como uma poltica de descontos de taxas. Basicamente, a abstrao um processo mental atravs do qual nos concentramos nos aspectos relevantes de um conjunto de objetos desconsiderando as suas diferenas. Como exemplo, reparem que a abstrao pode ser feita nas figuras a seguir, ou seja, o que se pode ver nessas figuras:

Conceitos de Orientao a Objetos


9. Herana Herana um mecanismo da OO que permite criar novas classes a partir de classes previamente estabelecidas, aproveitando-se das caractersticas existentes na classe a ser extendida. Este mecanismo muito interessante pois promove um grande reuso e reaproveitamento de cdigo existente. Com a herana possvel criar classes derivadas (subclasses) a partir de classes bases (superclasses). As subclasses so mais especializadas do que as suas superclasses que so mais genricas. As subclasses herdam todas as caractersticas de suas superclasses, como suas variveis e mtodos. Existe uma viso simplista de orientao a objetos onde dito que ela uma maneira de organizar melhor o seu cdigo. Essa viso facilmente desmentida pelos conceitos de encapsulamento, interfaces, packages e outros. O conceito de herana, fundamental para programao orientada a objetos, um dos fatores de sucesso desta como muito mais que uma simples maneira de organizar melhor seu cdigo. Por exemplo, se voc vai a um restaurante e pede o prato de frutos do mar, natural que voc aceite uma lagosta com catupiry ou ento um fil de badejo. Mas se o garom lhe serve uma salada de tomates isto no se encaixaria no pedido. Por outro lado, se o seu pedido for peixe, uma lagosta com catupiry, embora muito saborosa, no serviria mais, assim como a salada. Note que peixe e lagosta so especializaes de frutos do mar. Generalizao e Especializao so ferramentas para lidar com complexidade, elas so abstraes. Os sistemas do mundo real apresentam uma complexidade muito maior do que ordenar um prato listado em um cardpio. O uso de generalizao e especializao permite controlar a quantidade de detalhes presente nos seus modelos do mundo real, capturar as caractersticas essenciais dos objetos e tratar os detalhes de forma muito mais organizada e gradual. Na herana, as classes filhas passam a atender pelos mesmos mtodos e atributos public da classe pai, sendo que as classes filhas podem acrescentar mtodos, atributos e at redefinir mtodos herdados. Por isso que se diz que as classes do tipo subclasses garantem pelo menos o comportamento das superclasses, podendo acrescentar mais caractersticas. Os atributos encapsulados (private) da classe pai no so acessveis diretamente na classe filha a no ser que sejam qualificados como protected ou public. Voltando para um exemplo real, imagine que dentro de uma organizao empresarial, o sistema de RH tenha que trabalhar com os diferentes nveis hierrquicos da empresa, desde o funcionrio de baixo escalo at o seu presidente. Todos so funcionrios da empresa, porm, cada um com um cargo diferente. Mesmo a secretria, o pessoal da limpeza, o diretor e o presidente possuem um nmero de identificao, alm de salrio e outras caractersticas em comum.

Essas caractersticas em comum podem ser reunidas em um tipo de classe em comum, e cada nvel da hierarquia ser tratado como um novo tipo, mas aproveitando-se dos tipos j criados, atravs da herana.

Os subtipos, alm de herdarem todas as caractersticas de seus supertipos, tambm podem adicionar mais caractersticas, seja na forma de variveis e/ou mtodos adicionais, bem como reescrever mtodos j existentes na superclasse (polimorfismo). A herana permite vrios nveis na hierarquia de classes, podendo criar tantos subtipos quanto necessrio, at se chegar ao nvel de especializao desejado. Podemos tratar subtipos como se fossem seus supertipos, por exemplo, o sistema de RH pode tratar uma instncia de Presidente como se fosse um objeto do tipo Funcionrio, em determinada funcionalidade. Porm no possvel tratar um supertipo como se fosse um subtipo, a no ser que o objeto em questo seja realmente do subtipo desejado e a linguagem suporte este tipo de tratamento, seja por meio de converso de tipos ou outro mecanismo. Algumas linguagens de programao permitem herana mltipla, ou seja, uma classe pode estender caractersticas de vrias classes ao mesmo tempo. o caso do C++. Outras linguagens no permitem herana mltipla, por se tratar de algo perigoso se no usada corretamente. o caso do Java. Na Orientao a Objetos as palavras classe base, supertipo, superclasse, classe pai e classe me so sinnimos, bem como as palavras classe

derivada, subtipo, subclasse e classe filha tambm so sinnimos. importante notar que a relao de Generalizao ou Herana traz o conceito de um(a). Por exemplo, Humano um Mamfero e Mamfero um Animal. Contudo, esse no o nico tipo de relao possvel entre duas ou mais classes. O captulo sobre UML possui uma breve descrio sobre outros tipos de relaes entre classes, como Associao, Agregao, Composio, Realizao e Dependncia.

Conceitos de Orientao a Objetos


10. Polimorfismo Na programao orientada a objetos, o polimorfismo permite que referncias de tipos de classes mais abstratas representem o comportamento das classes concretas que referenciam. Assim, possvel tratar vrios tipos de maneira homognea, atravs de uma interface do tipo mais abstrato. O termo polimorfismo originrio do grego e significa "muitas formas" (poli = muitas, morphos = formas). Existem trs tipos de polimorfismo que a linguagem pode ter, classificados em Universal e Ad-Hoc (atente para o fato de que nem toda linguagem orientada a objeto tem implementado todos os tipos de polimorfismo):

Universal:

o Incluso: um ponteiro para classe me pode apontar para uma instncia de uma classe filha (exemplo em Java: "List lista = new LinkedList();" (tipo de polimorfismo mais bsico que existe). Ver redefinio de mtodos nos prximos pargrafos.

o Paramtrico: se restringe ao uso de templates (C++, por exemplo) e generics (Java).

Ad-Hoc:

o Sobrecarga: duas funes/mtodos com o mesmo nome, mas assinaturas diferentes.

O conceito de Polimorfismo tratar coisas diferentes (polimorfas) de forma homognea. Desse jeito, espera-se que um mesmo mtodo possa tratar, da mesma maneira, um conjunto de classes diferentes. O polimorfismo importante pois possibilita que a semntica de uma interface seja efetivamente separada da implementao que a representa. Mas note que no exatamente o polimorfismo que permite a separao da semntica de uma interface com a implementao. O polimorfismo permite que diferentes implementaes sejam tratadas de forma homognea. Esse conceito mais amplo pois se aplica, inclusive, a linguagens que no sejam orientadas a objeto. Em resumo, o polimorfismo o princpio pelo qual duas ou mais classes derivadas de uma mesma superclasse podem invocar mtodos que tm a mesma identificao (assinatura) mas comportamentos distintos, especializados para cada classe derivada, usando para tanto uma referncia a um objeto do tipo da superclasse. A deciso sobre qual mtodo que deve ser selecionado, de acordo com o tipo da classe derivada, tomada em tempo de execuo, atravs do mecanismo de ligao tardia.

1. abstract class Animal { 2. abstract void emiteSom(); 3. } 4. 5. class Gato extends Animal { 6. void emiteSom() { 7. System.out.println("miauuuuuuu!!!!"); } 8. } 9. 10. class Cachorro extends Animal { 11. void emiteSom() { 12. System.out.println("auauauauauauau!!"); } 13. }

1. public static void main(String[] args) { 2. Animal a; 3. Gato g = new Gato(); 4. Chachorro c = new Cachorro(); 5. a = g; 6. a.som(); // vai ecoar um miado 7. a = c;

8. 9. }

a.som(); // vai ecoar um latido

No caso de polimorfismo, necessrio que os mtodos tenham exatamente a mesma identificao, sendo utilizado o mecanismo de redefinio de mtodos. Esse mecanismo de redefinio no deve ser confundido com o mecanismo de sobrecarga de mtodos. importante observar que, quando o polimorfismo est sendo utilizado, o comportamento o que ser adorado por um mtodo s ser definido durante a execuo.

Redefinio de mtodos Um dos mecanismos fundamentais na programao orientada a objetos o conceito de redefinio (ou sobrescrita ou, no termo em ingls, overriding) de mtodos em classes derivadas. A redefinio ocorre quando um mtodo cuja assinatura j tenha sido especificada recebe uma nova definio (ou seja, um novo corpo) em uma classe derivada. O mecanismo de redefinio, juntamente com o conceito de ligao tardia, a chave para a utilizao do polimorfismo.

Sobrecarga de mtodos

Na programao orientada a objetos, um mtodo aplicado a um objeto selecionado para execuo atravs da sua assinatura e da verificao a qual classe o objeto pertence. Atravs do mecanismo de sobrecarga (overloading), dois mtodos de uma mesma classe podem ter o mesmo nome, desde que suas listas de parmetros sejam diferentes, constituindo assim uma assinatura diferente. Tal situao no gera conflito, pois o compilador capaz de detectar qual mtodo deve ser escolhido a partir da anlise dos tipos de argumentos do mtodo.

Um exemplo do uso de sobrecarga em Java encontrado nos mtodos abs(), max() e min() da classe Math, que tm implementaes alternativas para quatro tipos de argumentos distintos.

Ligao tardia

Quando o mtodo a ser invocado definido durante a compilao do programa, o mecanismo de ligao prematura (early binding) utilizado.

Para a utilizao de polimorfismo, a linguagem de programao orientada a objetos deve suportar o conceito de ligao tardia (late binding), em que a definio do mtodo que ser efetivamente invocado s ocorre durante a execuo do programa. O mecanismo de ligao tardia tambm conhecido pelos termos dynamic binding ou run-time binding.

Em Java, todas as determinaes de mtodos a executar ocorrem atravs de ligao tardia exceto em dois casos:

o mtodos declarados como final no podem ser redefinidos e portanto no so passveis de invocao polimrfica da parte de seus descendentes; e

o mtodos declarados como private so implicitamente finais.

Conceitos de Orientao a Objetos


11. O bsico sobre UML A UML (Unified Modeling Language) uma linguagem para especificao, documentao, visualizao e desenvolvimento de sistemas orientados a objetos. Sintetiza os principais mtodos existentes, sendo considerada uma das linguagens mais expressivas para modelagem de sistemas orientados a objetos. Por meio de seus diagramas possvel representar sistemas de softwares sob diversas perspectivas de visualizao. Isso facilita a comunicao de todas as pessoas envolvidas no processo de desenvolvimento de um sistema - gerentes, coordenadores, analistas, desenvolvedores - por apresentar um vocabulrio de fcil entendimento. Em resumo, UML um modo de padronizar as formas de modelagem. A linguagem UML define diferentes tipos de diagramas com propsitos diferentes. O objetivo aqui no detalhar cada um deles, mas apenas list-los para referncia futura. Dessa forma, pode-se considerar:

Diagramas Estruturais

Diagramas Comportamentais

Diagramas de Interao

Diagrama de classes

Diagrama de casos de uso

Diagrama de sequncia

Diagrama de objetos

Diagrama de transio de estados

Diagrama de interatividade

Diagrama de componentes

Diagrama de atividade

Diagrama de colaborao ou comunicao

Diagrama de implantao

Diagrama de tempo

Diagrama de pacotes

Diagrama de estrutura

Com relao ao Diagrama de Classes vale ressaltar algumas de suas caractersticas, uma vez que algumas de suas notaes so base para a representao e documentao de classes em uma Programao Orientada a Objetos. Resumidamente, o Diagrama de Classes um diagrama estrutural esttico que descreve a organizao de um sistema atravs das classes desse sistema, seus atributos e mtodos, bem como as relaes entre as classes.

Em UML a representao de uma classe feita por caixas constitudas por trs partes: A parte mais no topo traz o nome da classe A parte do meio traz os atributos da classe A parte de baixo traz os mtodos da classe

A UML tambm prov mecanismos para trazer mais informaes sobre os atributos e mtodos. Por exemplo, para especificar a visibilidade dos atributos e mtodos tem-se a seguinte notao: + # ~ / Sublinhado Public Private Protected Package Derived Static

Pelo exemplo anteriormente citado, possvel entender como uma classe representada. No entanto, um diagrama de classes para um sistema precisa trazer tambm qual a relao entre suas classes e objetos. Para isso, uma linha conectando duas classes representa uma relao entre duas classes ou, em outras palavras, uma instncia de uma associao. Associao Representa uma famlia de links. Associaes so normalmente representadas por uma linha cheia com suas pontas ligadas s classes referenciadas. Nessas pontas pode-se ou no ter uma seta simples aberta para indicar se a associao unidirecional ou mesmo bidirecional. possvel dar nome a essa associao, bem como indicar a multiplicidade da relao, a visibilidade, dentre outras propriedades.

Agregao uma variante da relao de Associao Tem um(a), sendo um pouco mais especfica. um tipo de associao que representa a relao Parte-Todo ou Parte de. Agregao pode ocorrer quando uma classe uma coleo ou um recipiente (container) de outras classes, mas somente quando o ciclo de vida

das classe contidas no tem uma forte dependncia com o ciclo de vida das classes que as contm. Em UML graficamente representada por um diamante vazado.

Composio uma variante mais forte da relao de Associao Possui um(a), sendo mais especfica que a Agregao. Diferentemente da Agregao, em Composio os ciclos de vida das classes contidas e das que as contm so bem fortes. Dessa forma, normalmente quando um container destrudo, cada instncia dos objetos contidos so tambm destrudos. Em UML graficamente representada por um diamante preenchido/pintado.

Generalizao / Herana

Esse tipo de relao est descrito no captulo sobre Herana. Em UML graficamente representada por um tringulo vazado do lado da super-classe. Existem outros tipos de relaes entre classes/objetos, como Realizao, Dependncia, dentre outros, que podem ser melhor analisados nas referncias para estudos mais avanados sobre OO e UML. Da mesma forma, outros tipos de diagramas comumente utilizados na modelagem de sistemas podem ser pesquisados como estudo complementar a esse material.

Conceitos de Orientao a Objetos


12. Extras 12.1. Referncias Bibliogrficas [1] Programao Orientada a Objetos - http://apostilaria.com/1822/apostila-deprogramacao-orientada-a-objetos

[2] Carmo, Daniel Destro, Orientao a Objetos http://apostilaria.com/1817/curso-basico-orientacao-a-objetos-gratis-pdf

[3] Falbo, R. A.; Anlise de Sistemas - http://www.inf.ufes.br/~falbo

[4] Cesta, A. A.; Rubira, C. M. F.; Tutorial: A Linguagem de Programao Java - http://www.ic.unicamp.br/~cmrubira/aacesta/java/javatut9.html

[5] Ricarte, I. L. M.; Programao Orientada a Objetos, Uma abordagem com Java - http://www.dca.fee.unicamp.br/cursos/PooJava/

[6] Wikipedia - http://pt.wikipedia.org/wiki/Encapsulamento

[7] Wikipedia - http://en.wikipedia.org/wiki/Unified_Modeling_Language

[8]

Wikibooks

http://pt.wikibooks.org/wiki/Programa%C3%A7%C3%A3o_Orientada_a_Objetos/Atrib utos_e_m%C3%A9todos

Conceitos de Orientao a Objetos


12. Extras 12.2. Referncias para Aprofundamento

Anlise e Projetos de Sistemas de Informao Autores: Raul Sidnei Wazlawick UML Guia do Usurio Autores: Grady Booch

Design Patterns: Elements of Reusable Object-Oriented Software Autores: Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides

Head First Design Patterns Autores: Elisabeth Freeman, Eric Freeman, Bert Bates, Kathy Sierra