Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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.
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()
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:
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.
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.
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).
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".
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.
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.
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.
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
- 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.
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.
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.
Ad-Hoc:
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. }
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
Diagramas Estruturais
Diagramas Comportamentais
Diagramas de Interao
Diagrama de classes
Diagrama de sequncia
Diagrama de objetos
Diagrama de interatividade
Diagrama de componentes
Diagrama de atividade
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.
[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/
[8]
Wikibooks
http://pt.wikibooks.org/wiki/Programa%C3%A7%C3%A3o_Orientada_a_Objetos/Atrib utos_e_m%C3%A9todos
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