Introduo Existem no mercado muitos livros e outras referncias bibliogrficas apresentando os conceitos da Tecnologia de Objetos e os benefcios de sua utilizao. Alm disso, a grande maioria dos softwares comerciais, especialmente os do ambiente Windows, j incorporam caractersticas orientadas a objetos. Porm, ainda percebe-se muito ceticismo na comunidade de profissionais de desenvolvimento de sistemas organizacionais. Em parte pela falta de cultura na utilizao de metodologias, e muitas vezes por no acreditarem que possvel aplicar os conceitos OO em suas empresas. So comuns casos em que se aplica anlise baseada em objetos para especificao do sistema, mas a implementao feita em um ambiente que no suporta a orientao a objetos. Em outros casos, parte-se de uma definio tradicional de sistema e o software construdo com uso de algum mecanismo de orientao a objetos, porm sem respeitar uma arquitetura verdadeiramente orientada a objetos. Em ambas as situaes, no se obtm todos os benefcios associados Tecnologia de Objetos, e as iniciativas acabam sendo consideradas frustrantes ou pouco vantajosas. A fim de se alcanar tais benefcios, necessria a aplicao da orientao a objetos em todo o ciclo de desenvolvimento do sistema. Para tanto, obviamente, preciso um completo entendimento da tecnologia e a obteno de respostas para questes no abordadas pela bibliografia disponvel. Programao Orientada a Objetos Programao orientada a objetos (POO) uma metodologia de programao adequada ao desenvolvimento de sistemas de grande porte, provendo modularidade e reusabilidade. A POO introduz uma abordagem na qual o programador visualiza seu programa em execuo como uma coleo de objetos cooperantes que se comunicam atravs de mensagens. Cada um dos objetos instncia de uma classe e todas as classes formam uma hierarquia de classes unidas via relacionamento de herana. Existem alguns aspectos importantes na definio de POO: Usa objetos, e no funes ou procedimentos como seu bloco lgico fundamental de construo de programas Objetos comunicam-se atravs de mensagens Cada objeto instncia de uma classe Classes esto relacionadas com as outras via mecanismos de herana Programao orientada a objetos d nfase estrutura de dados, adicionando funcionalidade ou capacidade de processamento a estas estruturas. Em linguagens tradicionais, a importncia maior atribuda a processos, e sua implementao em subprogramas. Em uma linguagem como Pascal, procedimentos ativos agem sobre dados passivos que foram passados a eles. Em linguagens orientadas a objetos, ao invs de passar dados a procedimentos, requisita-se que objetos realizem operaes neles prprios. Alguns aspectos so fundamentais na definio de programao orientada a objetos, que sero devidamente investigados neste trabalho: Abstrao de dados Objetos Mensagens Classes Herana PolimorfismoObjetos Na viso de uma linguagem imperativa tradicional (Pascal, C, COBOL, etc.), os objetos aparecem como uma nica entidade autnoma que combina a representao da informao (estruturas de dados) e sua manipulao (procedimentos), uma vez que possuem capacidade de processamento e armazenam um estado local. Pode-se dizer que um objeto composto de: Propriedades: so as informaes, estruturas de dados que representam o estado interno do objeto. Em geral, no so acessveis aos demais objetos. Comportamento: conjunto de operaes, chamados de mtodos, que agem sobre as propriedades. Os mtodos so ativados (disparados) quando o objeto recebe uma mensagem solicitando sua execuo. Embora no seja obrigatrio, em geral uma mensagem recebe o mesmo nome do mtodo que ela dispara. O conjunto de mensagens que um objeto est apto a receber est definido na sua interface. Identidade: uma propriedade que diferencia um objeto de outro; ou seja, seu nome. Enquanto que os conceitos de dados e procedimentos so freqentemente tratados separadamente nas linguagens de programao tradicionais, em POO eles so reunidos em uma nica entidade: o objeto. A figura 1.1 apresenta uma visualizao para um objeto.Figura 1.1. Representao para um objeto No mundo real no difcil a identificao de objetos (em termos de sistemas, objetos so todas as entidades que podem ser modeladas, no apenas os nossos conhecidos objetos inanimados). Como exemplo, em uma empresa pode-se identificar claramente objetos da classe empregado. Um empregado possui uma identidade prpria, seu nome: Jos da Silva. Possui tambm propriedades como: endereo, idade, dependentes, salrio, cargo, entre outras. O comportamento pode ser determinado por operaes como: aumentar salrio, listar dependentes e alterar cargo. As propriedades somente podem ser manipuladas atravs das operaes definidas na interface do objeto, de modo que a forma de armazenamento das propriedades e a implementao das operaes so desconhecidas pelas outras entidades externas (encapsulamento de informaes).Figura 1.2. O objeto "Empregado" Benefcios proporcionados pelos objetos: Uma vez que objetos utilizam o princpio da abstrao de dados, o encapsulamento de informao proporciona dois benefcios principais para o desenvolvimento de sistemas: Modularidade: o cdigo fonte para um objeto pode ser escrito e mantido independentemente da cdigo fonte de outros objetos. Alm disso, um objeto pode ser facilmente migrado para outros sistemas. Ocultamento de informao: um objeto tem uma interface pblica que os outros objetos podem utilizar para estabelecer comunicao com ele. Mas, o objeto mantm informaes e mtodos privados que podem ser alterados a qualquer hora sem afetar os outros objetos que dependem dele. Ou seja, no necessrio saber como o objeto implementado para poder utiliz-lo.Mensagens Um objeto sozinho no muito til e geralmente ele aparece como um componente de um grande programa que contem muitos outros objetos. Atravs da interao destes objetos pode-se obter uma grande funcionalidade e comportamentos mais complexos. Objetos de software interagem e comunicam-se com os outros atravs de mensagens. Quando o objeto A deseja que o objeto B execute um de seus mtodos, o objeto A envia uma mensagem ao objeto B. Algumas vezes o objeto receptor precisa de mais informao para que ele saiba exatamente o que deve fazer; esta informao transmitida juntamente com a mensagem atravs de parmetros. Uma mensagem formada por trs componentes bsicos: o objeto a quem a mensagem endereada (receptor) o nome do mtodo que se deseja executar os parmetros (se existirem) necessrios ao mtodoClasse " a definio dos atributos e funes de um tipo de objeto. Cada objeto individual ento criado com base no que est definido na classe. Por exemplo, homo sapiens um classe de mamfero; cada ser humano individual um objeto dessa classe." Objetos de estrutura e comportamento idnticos so descritos como pertencendo a uma classe, de tal forma que a descrio de suas propriedades pode ser feita de uma s vez, de forma concisa, independente do nmero de objetos idnticos em termos de estrutura e comportamento que possam existir em uma aplicao. A noo de um objeto equivalente ao conceito de uma varivel em programao convencional, pois especifica uma rea de armazenamento, enquanto que a classe vista como um tipo abstrato de dados, uma vez que representa a definio de um tipo. Cada objeto criado a partir de uma classe denominado de instncia dessa classe. Uma classe prov toda a informao necessria para construir e utilizar objetos de um tipo, cada instncia pertence a uma classe e uma classe pode possuir mltiplas instncias. Devido ao fato de todas as instncias de uma classe compartilharem as mesmas operaes, qualquer diferena de respostas a mensagens aceitas por elas, determinada pelos valores das variveis de instncia.Figura 2. Relacionamento entre classes e objetos A Figura 2. ilustra o relacionamento entre classes e objetos. Cada objeto instanciado a partir de uma classe possui as propriedades e comportamento definidos na classe, da mesma maneira que uma varivel incorpora as caractersticas do seu tipo. A existncia de classes proporciona um ganho em reusabilidade. pois o cdigo das operaes e a especificao da estrutura de um nmero potencialmente infinito de objetos esto definidos em um nico local, a classe. Cada vez que um novo objeto instanciado ou que uma mensagem enviada, a definio da classe reutilizada. Caso no existissem classes, para cada novo objeto criado, seria preciso uma definio completa do objeto.Metaclasses Uma metaclasse uma classe de classes. Pode- se julgar conveniente que, em uma linguagem ou ambiente, classes tambm possam ser manipuladas como objetos. Por exemplo, uma classe pode conter variveis contendo informaes teis, como: o nmero de objetos que tenham sido instanciados da classe at certo instante; um valor mdio de determinada propriedade, calculado sobre os valores especficos desta propriedade nas instncias (por exemplo, mdia de idade de empregados).Benefcios proporcionados pelas classes: O maior benefcio proporcionado pela utilizao das classes a reusabilidade de cdigo, uma vez que todos os objetos instanciados a partir dela incorporam as suas propriedades e seu comportamento.Mtodos Um mtodo implementa algum aspecto do comportamento do objeto. Comportamento a forma como um objeto age e reage, em termos das suas trocas de estado e troca de mensagens. Um mtodo uma funo ou procedimento que definido na classe e tipicamente pode acessar o estado interno de um objeto da classe para realizar alguma operao. Pode ser pensado como sendo um procedimento cujo primeiro parmetro o objeto no qual deve trabalhar. Este objeto chamado receptor. Abaixo apresentada uma notao possvel para o envio de uma mensagem (invocao do mtodo) Construtores so usados para criar e inicializar objetos novos. Tipicamente, a inicializao baseada em valores passados como parmetros para o construtor. Destrutores so usados para destruir objetos. Quando um destrutor invocado, as aes definidas pelo usurio so executadas, e ento a rea de memria alocada para o objeto liberada. Em algumas linguagens, como C++, o construtor chamado automaticamente quando um objeto declarado. Em outras, como Object Pascal, necessrio chamar explicitamente o construtor antes de poder utiliz-lo. Um exemplo de utilizao de construtores e destrutores seria gerenciar a quantidade de objetos de uma determinada classe que j foram criados at o momento. No construtor pode-se colocar cdigo para incrementar uma varivel e no destrutor o cdigo para decrement-la. Herana O conceito de herana fundamental na tcnica de orientao a objetos. A herana permite criar um novo tipo de objeto - uma nova classe - a partir de outra j existente. A nova classe mantm os atributos e a funcionalidade da classe da qual deriva; por isso, dizemos que ela "herda" as caractersticas daquela classe. Ao mesmo tempo, ela pode receber atributos e funes especiais no encontrados na classe original. Voltando ao exemplo da janela de um programa Windows, esse tipo de objeto poderia se chamar Janela. Ao criarmos um tipo de objeto para funcionar como caixa de dilogo uma janela com atributos especiais, como a exibio de botes e opes. O novo tipo poderia se chamar JanelaDilogo e herdaria as caractersticas da classe Janela, recebendo tambm os atributos exclusivos de uma caixa de dilogo.Uma das vantagens da herana a facilidade de localizar erros de programao. Por exemplo, caso um objeto derivado de outro apresente um erro de funcionamento; se o objeto original funcionava corretamente, claro que o erro est na parte do cdigo que implementa as novas caractersticas do objeto derivado. A herana permite, tambm, reaproveitar o cdigo escrito anteriormente, adaptando-o s novas necessidades.Isso muito importante porque os custos de desenvolvimento de software so muitos elevados. A mo-de-obra altamente especializada cara; o processo demorado e sujeito a ocorrncias inesperadas.Polimorfismo Polimorfismo refere-se capacidade de dois ou mais objetos responderem mesma mensagem, cada um a seu prprio modo. A utilizao da herana torna-se fcil com o polimorfismo. Desde que no necessrio escrever um mtodo com nome diferente para responder a cada mensagem, o cdigo mais fcil de entender. Por exemplo, sem polimorfismo, para inserir um novo empregado, seria necessrio o seguinte cdigo: Colaborador1.InsereColaborador Gerente1.InsereGerente Presidente1.InserePresidente Neste caso, Colaborador1, Gerente1 e Presidente1 so objetos das respectivamente das classes Colaborador, Gerente e Presidente. Com o polimorfismo, no necessrio ter um mtodo diferente para cada tipo de objeto. Pode-se simplesmente escrever o seguinte: Colaborador.Insere Gerente.Insere Presidente.Insere Neste exemplo, os trs diferente empregados tm trs diferentes mtodos para ser inseridos, embora o tenha sido utilizado o mtodo com o mesmo nome. No cdigo para esses empregados, seria necessrio escrever trs mtodos diferentes: um para cada tipo de empregado. O mais importante a ser observado que as trs rotinas compartilham o mesmo nome. Outra forma simples de polimorfismo permite a existncia de vrios mtodos com o mesmo nome, definidos na mesma classe, que se diferenciam pelo tipo ou nmero de parmetros suportados. Isto conhecido como polimorfismo paramtrico, ou sobrecarga de operadores ("overloading"). Neste caso, uma mensagem poderia ser enviada a um objeto com parmetros de tipos diferentes (uma vez inteiro, outra real, por exemplo), ou com nmero varivel de parmetros. O nome da mensagem seria o mesmo, porm o mtodo invocado seria escolhido de acordo com os parmetros enviados.Benefcios proporcionados pelo polimorfismo Legibilidade do cdigo: a utilizao do mesmo nome de mtodo para vrios objetos torna o cdigo de mais fcil leitura e assimilao, facilitando muito a expanso e manuteno dos sistemas. Cdigo de menor tamanho: o cdigo mais claro torna-se tambm mais enxuto e elegante. Pode-se resolver os mesmos problemas da programao convencional com um cdigo de tamanho reduzido. Relaes entre Objeto, Classe e Herana Objetos, classes e o mecanismo de herana permitem a definio de hierarquias de abstraes, que facilitam o entendimento e o gerenciamento da complexidade dos sistemas estudados. Isto porque classes agrupam objetos com caractersticas iguais, enquanto herana estrutura classes semelhantes. A capacidade em classificar objetos e classes concede grande poder de modelagem conceitual e classificao, podendo expressar relaes entre comportamentos, tais como classificao/instanciao, generalizao/especializao e agregao/composio. Facilita a compreenso humana do domnio estudado e tambm o desenvolvimento de programas que o satisfaa. Pode-se dizer que a grande vantagem do paradigma de objetos a possibilidade de expressar diretamente este poder de modelagem conceitual numa linguagem de programao orientada a objetos. Assim, o modelo conceitual proposto durante a etapa de anlise no se perde nas etapas de projeto e implementao. O que em geral ocorre a sua extenso.Classificao/Instanciao A capacidade de classificar objetos (em classes) permite expressar relaes do tipo classificao/instanciao. O relacionamento feito a partir da observao de diversos fenmenos para categorizao dos mesmos em grupos (classes), com base no conjunto de propriedades comuns a todos. Por exemplo, dois computadores, IBM PC e Machintosh, podem ser classificados como instncias (objetos, modelos, ou espcimes) da classe (categoria) Microcomputador (Figura 3). A relao inversa a de instanciao de uma publicao (IBM PC, por exemplo) a partir da classe Microcomputador.Figura 3. Relao de classificao/instanciao Generalizao/Especializao Este tipo de relao ocorre quando, a partir a observao de duas classes, abstramos delas uma classe mais genrica. Por exemplo, as classes Microcomputador e Mainframe podem ser considerados casos especiais da classe Computador. Esta classe considerada uma generalizao das duas primeiras, que so chamadas de especializaes da classe Computador (Figura 4). A idia da generalizao/especializao a base para a classificao das espcies nas cincias naturais. Do ponto de vista de propriedades, o pressuposto que as subclasses tenham todas as propriedades das classes de quem elas so especializaes. Deve haver pelo menos uma propriedade que diferencie duas classes especializadas (subclasses) a partir da mesma classe genrica (superclasse). Este o tipo de relao utilizado com o mecanismo de herana.Figura 4. Relao de generalizao/especializaoComposio/Decomposio A relao de composio (ou agregao)/decomposio permite que objetos sejam compostos pela agregao de outros objetos ou componentes. Neste relacionamento, so determinados que instncias (objetos) de uma classe so compostas por instncias de outras classes. Essa operao denominada decomposio e a relao inversa, a formao de uma nova classe como um agregado de classes preexistentes, denominada composio. Por exemplo, instncias da classe Microcomputador so compostas por, entre outras, instncias das classes Teclado e Vdeo (Figura 5).Figura 5. Relao de composio/decomposioA linguagem de programao SmallTalk Smalltalk o nico sistema de desenvolvimento de software orientado a objeto, construdos a partir de uma hierarquia de objeto inteiramente consistente. A classe objeto a super-classe de todos os outros e define os protocolos comuns a todos os objetos no sistema. Define o comportamento default para a apresentao, cpia, comparao e inspeo de objetos. Tem a capacidade de manter as relaes entre os objetos e transmitir as mensagens de um ascendentes para os seus descendentes. A Smalltalk projetada para que cada componente do sistema esteja acessvel ao usurio (exceto o ncleo) e possa ser apresentado para observao e manipulao. fcil modificar qualquer coisa que promove erros em Smalltalk, mas isto tambm a torna flexvel e altamente personalizada. A interface do usurio reflete as tentativas de criar uma linguagem visual para cada objeto. Foi o primeiro ambiente que exigiu uma interao direta com o usurio utilizando um dispositivo indicador (mouse) e ainda coloca nas mos do desenvolvedor de software um maior controle do que qualquer outro software disponvel no mercado.Avaliao da POO A grande vantagem do paradigma de objetos o seu carter unificador: trata todas as etapas do desenvolvimento de sistemas e ambientes sob uma nica abordagem. Nesse sentido, podemos ter anlise, projeto, programao, banco de dados e ambientes orientados a objetos, eliminando as diferenas de "impedncia" entre eles.Vantagens da POO A POO tem alcanado tanta popularidade devido s vantagens que ela traz. Entre elas podemos citar: Reusabilidade de cdigo Escalabilidade de aplicaes Mantenabilidade Apropriao A reusabilidade de cdigo , sem dvida, reconhecida como a maior vantagem da utilizao de POO, pois permite que programas sejam escritos mais rapidamente. Todas as empresas sofrem de deficincia em seus sistemas informatizados para obter maior agilidade e prestar melhores servios a seus clientes. Um levantamento feito na AT&T, a gigante das telecomunicaes nos EUA, identificou uma deficincia da ordem de bilhes de linhas de cdigo. Uma vez que a demanda est sempre aumentando, procura-se maneiras de desenvolver sistemas mais rapidamente, o que est gerando uma srie de novas metodologias e tcnicas de construo de sistemas (por exemplo, ferramentas CASE). A POO, atravs da reusabilidade de cdigo, traz uma contribuio imensa nesta rea, possibilitando o desenvolvimento de novos sistemas utilizando-se muito cdigo j existente. A maior contribuio para reusabilidade de cdigo apresentada pela herana. Escalabilidade pode ser vista como a capacidade de uma aplicao crescer facilmente sem aumentar demasiadamente a sua complexidade ou comprometer o seu desempenho. A POO adequada ao desenvolvimento de grandes sistemas uma vez que pode-se construir e ampliar um sistema agrupando objetos e fazendo-os trocar mensagens entre si. Esta viso de sistema uniforme, seja para pequenos ou grandes sistemas (logicamente, deve-se guardar as devidas propores). O encapsulamento proporciona ocultamento e proteo da informao. Acessos a objetos somente podem ser realizados atravs das mensagens que ele est habilitado a receber. Nenhum objeto pode manipular diretamente o estado interno de outro objeto. De modo que, se houver necessidade de alterar as propriedades de um objeto ou a implementao de algum mtodo, os outros objetos no sofrero nenhum impacto, desde que a interface permanea idntica. Isto diminui em grande parte os esforos despendidos em manuteno. Alm disso, para utilizar um objeto, o programador no necessita conhecer a fundo a sua implementao. O polimorfismo torna o programa mais enxuto, claro e fcil de compreender. Sem polimorfismo, seriam necessrias listas enormes de mtodos com nomes diferentes mas comportamento similar. Na programao, a escolha de um entre os vrios mtodos seria realizada por estruturas de mltipla escolha (case) muito grandes. Em termos de manuteno, isto significa que o programa ser mais facilmente entendido e alterado. A herana tambm torna a manuteno mais fcil. Se uma aplicao precisa de alguma funcionalidade adicional, no necessrio alterar o cdigo atual. Simplesmente cria-se uma nova gerao de uma classe, herdando o comportamento antigo e adiciona-se novo comportamento ou redefine-se o comportamento antigo.Desvantagens da POO Apesar de das inmeras vantagens, a POO tem tambm algumas desvantagens, que incluem: Apropriao Fragilidade Linearidade de desenvolvimento A apropriao apresentada tanto como uma vantagem como uma desvantagem, porque a POO nem sempre soluciona os problemas elegantemente. Enquanto que a mente humana parece classificar objetos em categorias (classes) e agrupar essas classes em relacionamentos de herana, o que ela realmente faz no to simples. Em vez disso, objetos com caractersticas mais ou menos similares, e no precisamente definidas, so reunidos em uma classificao. A POO requer definies precisas de classes; definies flexveis e imprecisas no so suportadas. Na mente humana, essas classificaes podem mudar com o tempo. Os critrios para classificar objetos podem mudar significativamente. A apropriao utilizada na POO torna-a muito rgida para trabalhar com situaes dinmicas e imprecisas. Alm disso, algumas vezes no possvel decompor problemas do mundo real em uma hierarquia de classes. Negcios e pessoas tm freqentemente regras de operaes sobre objetos que desafiam uma hierarquia limpa e uma decomposio orientada a objetos. O paradigma de objetos no trata bem de problemas que requerem limites nebulosos e regras dinmicas para a classificao de objetos. Isto leva ao prximo problema com POO: fragilidade. Desde que uma hierarquia orientada a objetos requer definies precisas, se os relacionamentos fundamentais entre as classes chave mudam, o projeto original orientada a objetos perdido. Torna-se necessrio reanalisar os relacionamentos entre os objetos principais e reprojetar uma nove hierarquia de classes. Se existir uma falha fundamental na hierarquia de classes, o problema no facilmente consertado. A mente humana adapta-se continuamente, e geralmente adequadamente, a situaes novas. Ela encontra maneiras de classificar objetos no ambiente automaticamente. Enquanto a nossa mente tem essa capacidade, os ambientes POO no so to bem equipados. Em virtude dessa fragilidade, a POO requer anlise e projeto frontal para assegurar que a soluo adequada. Com isto existe uma tendncia em criar uma abordagem linear de desenvolvimento, em vez de cclica. Infelizmente, alguns problemas so "perversos", o que significa que no se sabe como resolver um problema at efetivamente resolv-lo. Tais problemas desafiam at mesmo os melhores projetistas e analistas de sistemas. Utilizar a abordagem de Desenvolvimento Rpido de Aplicaes (RAD - Rapid Application Development, utilizada pelo Delphi, SQL-Windows e outros ambientes de desenvolvimento para Windows adequados prototipagem) com ciclos entre o projeto do prottipo, construo e realimentao do usurio algumas vezes uma boa maneira de resolver problemas "perversos". Entretanto, a POO necessita de um projeto cuidadoso da hierarquia de classes, o que pode elevar os custos da sua utilizao em um ambiente RAD.
Leia mais em: http://www.webartigos.com/artigos/programacao-orientada-a-objeto- poo/20199/#ixzz32BZBbWOC