Escolar Documentos
Profissional Documentos
Cultura Documentos
A computao atualmente parte do dia-a-dia da Sociedade. Em termos de hardware e software a evoluo constante e tem atingido altos nveis. Pode-se dizer que para boa parte dos problemas do mundo real que precisam ser mapeados em sistemas computacionais, mais precisamente em softwares, j possuem as tecnologias de hardware e software necessrios. Assim o problema neste caso deixa de ser onde o sistema executar e passa a ser como resolver o problema de maneira mais eficiente, ou seja, como representar o problema do mundo real para o mundo computacional capturando todas as caractersticas necessrias e que execute a melhor soluo possvel. E quando comea-se a falar em metodologias, tecnologias e tcnicas de desenvolvimento de software. O que est dominando atualmente o mercado justamente a Orientao a Objetos (OO). A tcnica da orientao a objeto est entre as melhores maneiras conhecidas para se desenvolver Sistemas de Informao Automatizados grandes ou complexos. Aprender a racionar orientado a objetos, bem como a utilizar corretamente as suas tcnicas no fcil, mas pode-se afirmar que essencial para qualquer profissional da rea atualmente. A Orientao a Objeto um paradigma de anlise, projeto e programao de sistemas de informao automatizados baseado na composio e interao entre diversas unidades de software chamadas objetos.
Mas o que Objeto? De acordo com o dicionrio: - Objeto: 1. Tudo que se oferece aos nossos sentidos ou nossa alma. 2. Coisa material: Havia na estante vrios objetos. 3. Tudo que constitui a matria de cincias ou artes. 4. Assunto, matria. 5. Fim a que se mira ou que se tem em vista.
A figura acima destaca uma srie de objetos. Objetos podem ser no s coisas concretas como tambm coisas inanimadas, como por exemplo uma matrcula, as disciplinas de um curso, os horrios de aula. Na programao orientada a objetos, implementa-se um conjunto de classes que definem os objetos presentes no software. Cada classe possui um comportamento (definidos pelos mtodos) e estados possveis (valores dos atributos) de seus objetos, assim como o relacionamento com outros objetos. Simula (a 1. Linguagem OO conhecida), Smalltalk (a 1. Linguagem OO a ganhar destaque), Perl, Python, PHP, Java, C++ e C# so algumas das linguagens de programao mais importantes com suporte a orientao a objetos.
[...] H alguns anos, Alan Kay, um dos pais do paradigma da orientao a objetos, formulou a chamada "analogia biolgica". Nessa analogia ele imaginou como seria um sistema de software que funcionasse como um ser vivo, no qual cada "clula" interagiria com outras clulas atravs do envio de mensagens para realizao do objetivo comum.
De uma forma mais geral, Kay pensou em como construir um sistema de software a partir de agentes autnomos que interagem entre si. Ele ento estabeleceu os seguintes princpios da orientao a objetos:[1] (a) Qualquer coisa um objeto; (b) Objetos realizam tarefas atravs da requisio de servios a outros objetos; (c) Cada objeto pertence a uma determinada classe. Uma classe agrupa objetos similares; (d) A classe um repositrio para comportamento associado ao objeto; (e) Classes so organizadas em hierarquias. [...]
Origem: Livro: Anlise Orientada a Objetos, Prof. Dr. Malcon A. Tafner, Prof. Carlos H. Correa
OS BENEFCIOS DA ORIENTAO A OBJETOS A tcnica de anlise e programao orientada a objetos est se tornando cada vez mais popular entre os desenvolvedores de sistema. Essa popularidade no fruto do acaso, ou da moda, e sim das vantagens que os desenvolvedores passam a usufruir quando adotam essa metodologia. A principal vantagem da orientao a objetos consiste em reunir em uma mesma estrutura os dados e os processos que so executados sobre esses dados, permitindo assim um maior grau de organizao e simplicidade do programa. A partir do momento em que um desenvolvedor cria um objeto para realizar uma tarefa complexa, os outros desenvolvedores s precisam acessar esse objeto para realizar essa mesma tarefa, sem precisar saber como elas so realizadas. Se algum muda a maneira como esse objeto realiza internamente essa tarefa, os outros desenvolvedores no precisam alterar os seus programas para continuar acessando o novo comportamento, e isso representa um ganho real de produtividade.
O procedimento de manuteno restrito ao objeto reduz custo, tempo e assegura a certeza de uma manuteno eficaz, visto que as variveis controladas estavam restritas aos objetos modificados, e mais em nenhuma outra parte do sistema. Uma estrutura eficaz de objetos, uma vez criada, permitir incluir mdulos adicionais no sistema que reutilizem as funcionalidades j desenvolvidas sem necessidade de reprogramao. Reutilizar no duplicar cdigo e alterar. Significa que o mesmo cdigo pode ser usado por sistemas diferentes, reduzindo o custo de desenvolvimento e o risco de cometer erros de programao, ao mesmo tempo que no ser necessrio alterar trechos, o que poderia introduzir novos erros no cdigo. Por exemplo, uma empresa desenvolve um sistema educacional que tenha sua funcionalidade de cobrana baseada em objetos. A mesma empresa pode desenvolver um sistema imobilirio e reutilizar objetos de cobrana , incluindo-os no novo sistema. Se o autor do sistema educacional fizer aperfeioamentos ou correes nos objetos de cobrana, essas alteraes tero sido realizadas de uma vez em todos os sistemas da empresa. Dentro de uma viso orientada a objetos, quando precisamos criar um sistema de informaes, precisamos, antes de tudo, identificar quais so os objetos necessrios para operacionalizar esse sistema. Uma vez definidos os objetos necessrios, e antes mesmo de partir para a criao destes, podemos partir para a reutilizao de objetos j existentes, ou seja, verificar em outros sistemas se j no existem objetos que realizam as tarefas desejadas. Se existirem objetos que podem ser reutilizados , estes podem ser includos no novo sistema sem a necessidade e o custo de criao. Outra opo tambm pode ser a transformao de objetos semelhantes, ou seja, objetos cujas caractersticas so bastante semelhantes podem, com pequenas modificaes, serem teis ao novo sistema. Para a mudana de um sistema, vlida a mesma proposta de flexibilidade, podendo-se adaptar, excluir, ou mesmo incluir novos objetos rapidamente, com a mesma garantia de ter atingido todo o universo necessrio dentro do sistema para assegurar a eficcia da modificao. O desenvolvimento orientado a objetos um mtodo de desenvolvimento cujo objetivo proporcionar o mximo possvel de reutilizao. tambm um mtodo que simplifica a montagem de novos sistemas, uma vez que esse mtodo trata do manuseio de objetos pr-prontos.
ENTRE AS
TCNICAS ESTRUTURADA
DAS
ORIENTADA
A E
TCNICAS ESTRUTURADA
Origem: Manual de Referncia Tcnicas e Projeto de Sistemas, Prof. M.Sc. Gerson Pesente Fockin, Escola Tcnica federal de Palmas, Curso Tcnico em Informtica (lab.etfto.gov.br/~focking/manual_referencia.doc)
At o incio da dcada de 70, o computador era utilizado somente por grandes empresas. Neste perodo, com a queda do preo dos computadores e a consequente proliferao do uso destes, cresceu a demanda por software. As tcnicas de desenvolvimento de software utilizadas at ento no eram suficientes para contornar os problemas existentes no desenvolvimento de sistemas, principalmente quando desenvolvidos em grande escala, como ento se exigia. Na verdade, pouco se possua de tcnicas que estivessem realmente sendo aplicadas. Foi neste contexto que surgiu a programao estruturada, seguida pelo conceito de desenvolvimento estruturado de sistemas. Esta modelagem tentava oferecer solues para os problemas ligados ao desenvolvimento de sistemas, ao pregar a aplicao dos seguintes princpios:
1 - Princpio da Abstrao: para resolver um problema, o analista deveria analis-lo separadamente dos demais, ou seja, abstrair os detalhes; 2 - Princpio da Formalidade: o analista deveria seguir um caminho rigoroso e metdico para solucionar um problema; 3 - Princpio de "dividir para conquistar": o analista deveria dividir o problema em partes menores, independentes e com possibilidade de serem mais simples de entender e solucionar; 4 - Princpio da Disposio Hierrquica: o analista deveria organizar os componentes da soluo do problema na forma de uma rvore com estrutura hierrquica. O sistema seria entendido e construdo nvel a nvel, onde cada novo nvel acrescentaria mais detalhes. Estas tcnicas tiveram uma rpida disseminao, sendo hoje conhecidas pela grande maioria dos que trabalham na rea. Estamos agora numa situao semelhante quela que se apresentava na dcada de 70. A disseminao do uso do computador se tornou muito grande e a todo instante surgem novas tecnologias de hardware, que impulsionam os preos para baixo e nos abrem horizontes para novas aplicaes, assim como novas perspectivas para aplicaes atuais. As novas aplicaes se caracterizam por: Grande interao com o usurio; Uso de interfaces grficas (GUI) como o Windows; Necessidade permanente de alterao e expanso, dada a velocidade de mudanas na tecnologia de hardware; Interao com outros sistemas, possibilitando a troca de dados entre estes; Portabilidade para diversas plataformas e sistemas operacionais.
As tcnicas oferecidas pela programao estruturada superavam com certa dificuldade as complexidades envolvidas no desenvolvimento deste tipo de sistemas. Demandava-se novas tcnicas. Foi neste contexto que retornou-se a programao orientada a objetos. Esta metodologia no recente, mas somente agora vislumbrou-se sua potencialidade. Isto porque a orientao a objetos, devido as suas caractersticas, reduz as dificuldades de desenvolvimento: A linguagem do analista e do usurio passam a ser semelhantes, por se referirem a objetos do mundo real; Pode-se utilizar um mesmo objeto em diferentes sistemas, aumentando a produtividade do processo de desenvolvimento; Se a biblioteca de objetos for independente do sistema operacional utilizado, ao se mudar a plataforma ou o sistema operacional, basta recompilar o programa.
A metodologia de objetos vem oferecer uma soluo alternativa para o desenvolvimento de sistemas, e significa uma grande evoluo desde a programao estruturada. uma evoluo porque apesar da metodologia de orientao a objetos tambm utilizar os mesmos princpios da programao estruturada (abstrao, hierarquizao, decomposio) acrescenta novos princpios, como objetos, classes, herana, etc. [...]
Uma vez que, atualmente, a Orientao a Objetos tem tomado o espao antes ocupado pelo paradigma estruturado no desenvolvimento de sistemas, interessante fazer uma comparao entre os paradigmas que fundamentam estas abordagens: Estruturado: adota uma viso de desenvolvimento baseada em um modelo entradaprocessamento-sada. No paradigma estruturado, os dados so considerados separadamente das funes que os transformam e a decomposio funcional usada intensamente. Orientado a Objetos: pressupe que o mundo composto por objetos, onde um objeto uma entidade que combina estrutura de dados e comportamento funcional. No paradigma orientado a objetos, os sistemas so estruturados a partir dos objetos que existem no domnio do problema, isto , os sistemas so modelados como um nmero de objetos que interagem.
Em funo do paradigma que os rege, mtodos de anlise e projeto de sistemas so classificados em mtodos estruturados e mtodos orientados a objetos. Mtodos Estruturados Fazem clara distino entre funes e dados. Funes, a princpio, so ativas e tm comportamento, enquanto dados so repositrios passivos de informao, afetados por funes. Esta diviso tem origem na arquitetura de hardware de von Neumann, onde a separao entre programa e dados fortemente enfatizada. Os mtodos orientados a funes conduzem o desenvolvimento de software estruturando as aplicaes segundo a tica das funes (aes) que o sistema dever realizar. O sistema decomposto em funes, e os dados so transportados entre elas. Esta a filosofia da proposta original da Anlise Estruturada [DeMarco78] [Gane79], cuja ferramenta bsica de modelagem so os diagramas de fluxo de dados (DFDs). Os mtodos orientados a dados, por sua vez, enfatizam a identificao e estruturao dos dados, subjulgando a anlise das funes para um segundo plano. Esses mtodos tm origem no projeto de bancos de dados e, geralmente, tm no modelo de Entidades e Relacionamentos (ER) [Chen79] sua principal ferramenta. A nfase nas funes, geralmente, leva a sistemas com muita redundncia e, conseqentemente, inconsistentes e difceis de serem integrados. Por outro lado, a nfase nos dados est fundamentada em dois fatores significativos: Dados possuem existncia prpria nas organizaes independentemente dos processos que os manipulam. Dados so muito mais estveis que as funes em uma organizao. A menos que haja grandes mudanas nos negcios de uma empresa, os dados tendem a se manter estveis.
Assim, possvel desenvolver modelos de dados sem redundncia, sem inconsistncia e fceis de integrar. Entretanto, uma vez que o modelo de dados deve representar a realidade, e o conhecimento da realidade, muitas vezes, passa pelo conhecimento das funes, ele deve ser construdo de forma iterativa, no podendo ser considerado um produto acabado. A Anlise Essencial [Pompilho95] procurou conciliar as abordagens orientadas a dados e a funes em um nico mtodo, utilizando modelos para dados, funes e controles (DFDs e Modelo ER e Diagramas de Transio de Estados, respectivamente) como ferramentas para a modelagem de sistemas. Um sistema desenvolvido usando um mtodo estruturado, frequentemente, difcil de ser mantido. A princpio, o problema principal advm do fato de todas as funes terem de conhecer como os dados esto armazenados, isto , a estrutura dos dados. Alm disso, mudanas na
estrutura dos dados quase sempre acarretam modificaes em todas as funes relacionadas a essa estrutura. Em suma, a interpretao dos dados apenas implcita, provida pelos programas que lem ou escrevem dados. Diferentes programas podem dar diferentes interpretaes aos dados e, portanto, necessrio conhecer como eles foram projetados para poder interpret-los corretamente [Snyder93]. Mtodos Orientados a Objetos Os mtodos orientados a objetos partem de um ponto de vista distinto e intermedirio, onde se pressupe que o mundo real povoado por objetos, onde um objeto uma entidade que combina estrutura de dados e comportamento funcional. Mtodos orientados a objetos estruturam os sistemas a partir dos objetos que existem no domnio do problema. A orientao a objetos oferece um nmero de conceitos bastante apropriados para a modelagem de sistemas. Utilizando a orientao a objetos como base, os sistemas so modelados como um nmero de objetos que interagem. Os modelos baseados em objetos so teis para a compreenso de problemas, para a comunicao com os especialistas e usurios das aplicaes, e para a realizao das tarefas ao longo do ciclo de desenvolvimento de software. Os principais objetivos da orientao a objetos so: Diminuir a distncia conceitual entre o mundo real (domnio do problema) e o modelo abstrato de soluo (domnio da soluo); Trabalhar com noes intuitivas (objetos e aes) durante todo o ciclo de vida, atrasando, ao mximo, a introduo de conceitos de implementao.
Normalmente, esta uma maneira mais natural para descrever sistemas, j que os objetos so geralmente bastante estveis. Alteraes que por ventura venham a ocorrer, geralmente, afetam um ou alguns poucos objetos [Jacobson92]. Eduard Yourdon [Yourdon94] d um bom resumo do que pode ser considerado um produto orientado a objeto: Um sistema construdo usando um mtodo orientado a objetos aquele cujos componentes so partes encapsuladas de dados e funes, que podem herdar atributos e comportamento de outros componentes da mesma natureza, e cujos componentes comunicam-se entre si por meio de mensagens. Mtodos orientados a objetos utilizam uma perspectiva mais humana de observao da realidade, incluindo objetos, classificao e compreenso hierrquica. So benefcios esperados com o uso da orientao a objetos: 1. Capacidade de enfrentar novos domnios de aplicao; 2. Melhoria da interao entre analistas e especialistas; 3. Aumento da consistncia interna dos resultados da anlise; 4. Uso de uma representao bsica consistente para a anlise e projeto; 5. Alterabilidade, legibilidade e extensibilidade; 6. Possibilidade de ciclos de desenvolvimento variados; 7. Apoio reutilizao. importante enfatizar, no entanto, que a orientao a objetos no mgica, isto , ela no uma nova tbua de salvao para eliminar os problemas de produtividade e qualidade que tm atormentado a indstria de software ao longo das ltimas dcadas. Se praticada cuidadosamente, combinada com vrias outras tcnicas de Engenharia de Software tais como, uso de mtricas, reutilizao, testes, e garantia da qualidade - a orientao a objetos pode ajudar a levar a melhorias substanciais no desempenho de uma organizao de software [Yourdon94]. Portanto, imprescindvel, para grandes projetos, a definio de um processo de desenvolvimento que garanta o uso consistente dessas tcnicas e que seja apoiado por ferramentas computacionais, tais como ferramentas CASE e Ambientes de Desenvolvimento de Software.
PROGRAMAO ORIENTADA
Origem: Notas de Aula, Introduo Programao Orientada a Objetos, prof. Ulysses de Oliveira, 2002 Com breves adaptaes.
Na tabela abaixo est apresentada uma comparao de algumas caractersticas que diferenciam as programaes algortmicas (procedimental ou estruturada) e a orientada a objeto. Programao Algortmica (Procedimental) nfase: construo de algoritmos; Utiliza abordagem de refinamentos sucessivos; Subproblemas so codificados como unidades denominadas procedimentos, subrotinas ou funes; Unidades de programa podem ser agrupadas em mdulos; Programa resultante consiste de uma coleo de unidades que se comunicam entre si; Viso Top-down; Forte uso de Decomposio Funcional; O sistema composto por dados e funes, tratados separadamente, mas que podem interagir. Programao OO Metodologia desenvolvida objetivando suprir deficincias encontradas em programao algortmica; Encapsulamento: combinao de dados (atributos) e funes (mtodos) numa nica entidade de programa; Objeto: entidade de encapsulamento; Um programa no paradigma OO consiste de vrios objetos que se comunicam (isto , trocam mensagens) utilizando seus mtodos constituintes; Viso de Objetos cooperativos; As caractersticas de comportamento e informaes so modeladas de maneira fortemente relacionadas; O sistema composto por objetos, que contm dados e funes (isto , esto reunidos em um s elemento).
Problemas: Programas muito grandes tornam-se muito complexos e difceis de entender e manter; Dificuldade em modelar muitos problemas da vida real com enfoque em algoritmos; mais fcil simular o funcionamento de sistemas complexos com enfoque em suas partes constituintes do que em termos dos algoritmos utilizados pelo sistema. Exemplo: um automvel melhor entendido em termos de direo, freios, etc. do que em termos dos algoritmos que o fazem funcionar; Linguagens procedimentais no oferecem facilidades para criao de novos tipos de dados que funcionem como os tipos de dados primitivos. Ocultao de Informao: Mtodos que fazem parte de um objeto provem (usualmente) a nica forma de acesso aos seus dados; Campos de um objeto no podem ser acessados diretamente, apenas indiretamente por meio de seus mtodos constituintes; Previne alteraes acidentais de dados e facilita a manuteno e depurao dos programas.
O mundo real extremamente complexo. Tal complexidade pode ser percebida a medida que analisamos os detalhes de tal mundo, mesmo que nos concentremos em algum objeto em particular. Essa caracterstica transferida para o mundo computacional, quando da criao de uma soluo computadorizada para um problema do mundo real. Alguns dos elementos fundamentais na gerao desta complexidade so: A complexidade do prprio domnio do problema; A dificuldade no gerenciamento do processo de desenvolvimento do sistema necessrio; O leque de variadas solues que podem ser encontradas no projeto do sistema.
O paradigma orientado a objeto procura administrar essa complexidade atravs de uma srie de conceitos, tais como abstrao, encapsulamento, modularizao e hierarquia. Os principais conceitos associados Orientao a Objetos so abaixo definidos.
2.1 ABSTRAO
Uma das principais formas do ser humano lidar com a complexidade atravs do uso de abstraes. As pessoas tipicamente tentam compreender o mundo, construindo modelos mentais de partes dele. Tais modelos so uma viso simplificada de algo, onde apenas elementos relevantes so considerados. Modelos mentais, portanto, so mais simples do que os complexos sistemas que eles modelam. Consideremos, por exemplo, um mapa como um modelo do territrio que ele representa. Um mapa til porque abstrai apenas aquelas caractersticas do territrio que se deseja modelar. Se um mapa inclusse todos os detalhes do territrio, provavelmente teria o mesmo tamanho do territrio e, portanto, no serviria a seu propsito. Da mesma forma que um mapa precisa ser significativamente menor que o territrio que mapeia, incluindo apenas informaes cuidadosamente selecionadas, um modelo mental abstrai apenas as caractersticas relevantes de um sistema para seu entendimento. Assim, podemos definir abstrao como sendo o princpio de ignorar aspectos no relevantes de um assunto, segundo a perspectiva de um observador, tornando possvel uma concentrao maior nos aspectos principais do mesmo. De fato, a abstrao consiste na seleo que um observador faz de alguns aspectos de um assunto, em detrimento de outros que no demonstram ser relevantes para o propsito em questo, isto , a abstrao aplicada de acordo com o interesse do observador, e por isso de um mesmo objeto pode-se ter diferentes vises, como demonstra a figura 1 abaixo. S devem ser mapeados os objetos que so relevantes ao problema, bem como as caractersticas (propriedades e comportamento) desses objetos que forem necessrios.
Figura 4.1 - A abstrao enfoca as caractersticas essenciais de um objeto [Booch94]. No que tange ao desenvolvimento de software, duas formas adicionais de abstrao tm grande importncia: a abstrao de dados e a abstrao de procedimentos. Abstrao de Dados Consiste em definir um tipo de dado conforme as operaes aplicveis aos objetos deste tipo. Os objetos s podem ser modificados e observados atravs dessas operaes [Coad92]. Exemplo: Um tipo de dado pilha pode ser definido atravs das operaes empilhar, isto , colocar um elemento no topo da pilha, e desempilhar, ou seja, retirar o elemento que est no topo da pilha. Um objeto do tipo pilha s pode ser modificado e observado atravs dessas duas operaes. Abstrao de Procedimentos Segundo esse princpio, uma operao com um efeito bem definido pode ser tratada por seus usurios como uma entidade nica, mesmo que a operao seja realmente conseguida atravs de alguma sequncia de operaes de nvel mais baixo. Exemplo: Seja a operao calcular-salrio-lquido de um objeto do tipo funcionrio. Essa operao pode ser tratada por seus usurios como uma entidade nica, mesmo que ela seja, na realidade, construda como uma sequncia de operaes de nvel mais baixo, tais como: calcular-INSS, calcular-IR, calcular-anunio, etc.
2.2 ENCAPSULAMENTO
No mundo real, um objeto pode interagir com outro sem conhecer seu funcionamento interno. Uma pessoa, por exemplo, geralmente utiliza uma televiso sem saber efetivamente qual a sua estrutura interna ou como seus mecanismos internos so ativados. Para utiliz-la, basta saber realizar algumas operaes bsicas, tais como ligar/desligar a TV, mudar de um canal para outro, regular volume, cor, etc. Como estas operaes produzem seus resultados, mostrando um programa na tela, no interessa ao telespectador.
O encapsulamento consiste na separao dos aspectos externos de um objeto, acessveis por outros objetos, de seus detalhes internos de implementao, que ficam ocultos dos demais objetos [Rumbaugh94]. A interface de comunicao de um objeto deve ser definida de forma a revelar o menos possvel sobre o seu funcionamento interno. Os usurios tem conhecimento apenas das operaes que podem ser realizadas e precisam estar cientes apenas do QUE as operaes fazem, e no COMO elas esto implementadas. [Booch94]
Figura 4.2 - O encapsulamento oculta os detalhes de implementao de um objeto [Booch94]. Abstrao x Encapsulamento Abstrao e Encapsulamento so conceitos complementares: enquanto a abstrao enfoca o comportamento observvel de um objeto (o que se deve mapear), o encapsulamento enfoca a implementao que origina esse comportamento (como realizar a abstrao). Encapsulamento frequentemente conseguido atravs do ocultamento de informao, isto , escondendo detalhes que no contribuem para suas caractersticas essenciais. Tipicamente, em um sistema orientado a objetos, a estrutura de um objeto, e a implementao de seus mtodos, so encapsuladas [Booch94]. Por exemplo, para usar um carro, uma pessoa no precisa conhecer sua estrutura interna (motor, caixa de marcha, etc...), nem tampouco como se d a implementao de seus mtodos. Sabe-se que necessrio ligar o carro, mas no preciso saber como esta operao implementada. Assim, sobre carros, um motorista precisa conhecer apenas as operaes que permitem utiliz-lo, a que chamamos de interface do objeto, o que inclui a ativao de operaes, tais como ligar, mudar as marchas, acelerar, frear, etc..., e no como essas operaes so de fato implementadas. Encapsulamento serve para separar a interface contratual de uma abstrao e sua implementao. Os usurios tm conhecimento apenas das operaes que podem ser requisitadas e precisam estar cientes apenas do que as operaes realizam e no como elas esto implementadas. A principal motivao para o encapsulamento facilitar a reutilizao de objetos e garantir estabilidade aos sistemas. Um encapsulamento bem feito pode servir de base para a localizao de decises de projeto que necessitam ser alteradas. Uma operao pode ter sido implementada de maneira ineficiente e, portanto, pode ser necessrio escolher um novo algoritmo. Se a operao est encapsulada, apenas o objeto que a define precisa ser modificado, garantindo estabilidade ao sistema.
2.4 HIERARQUIA
O conceito de Herana na Orientao a Objetos lembra o conceito de herana gentica, na qual um elemento descendente herda as caractersticas de um elemento ancestral. Abstrao um princpio importantssimo, mas em todas as aplicaes, exceto aquelas mais triviais, deparamo-nos com um nmero de abstraes maior do que conseguimos compreender em um dado momento. O encapsulamento ajuda a gerenciar esta complexidade atravs do ocultamento da viso interna de nossas abstraes. Modularidade auxilia tambm, dando-nos um meio de agrupar logicamente abstraes relacionadas. Entretanto, isto ainda no o bastante. Um conjunto de abstraes freqentemente forma uma hierarquia e, pela identificao dessas hierarquias, possvel simplificar significativamente o entendimento sobre um problema [Booch94]. Em suma, hierarquia uma forma de arrumar as abstraes.
2.5 OBJETO
O mundo real povoado por elementos que interagem entre si, onde cada um deles desempenha um papel especfico. A esses elementos, chamamos objetos. Objetos podem ser coisas concretas ou abstratas, tais como um carro, uma reserva de passagem area, uma organizao, uma planta de engenharia, um componente de uma planta de engenharia, etc. Os objetos podem ser (Pressman, 2002): Entidades externas: (isto , outros sistemas, dispositivos, pessoas) que produzem ou consomem informao para ser usada atravs de um sistema baseado em computador; Coisas: (isto , relatrios, displays, sinais, letras) que so partes do domnio da informao para o problema; Ocorrncias ou eventos (isto , uma transferncia de propriedade ou o aspecto dos movimentos de robs) que ocorrem dentro do contexto da operao do sistema; Papis (isto , gerente, engenheiro, vendedor) executados por pessoas que interagem com o sistema; Unidades organizacionais (isto , divises, grupos, times) que so relevantes para a aplicao; Locais (isto , cho de fbrica, locais de carga) que estabelecem o contexto do problema e as funes gerais do sistema; Estruturas (isto , sensores, computadores, veculos) que definem uma classe de objetos ou, no extremo, classes relacionadas de objetos.
Do ponto de vista da modelagem de sistemas, um objeto uma entidade que incorpora uma abstrao relevante no contexto de uma aplicao. Um objeto possui um estado (informao),
exibe um comportamento bem definido, expresso por um nmero de operaes para examinar ou alterar seu estado, e tem identidade nica. Ou seja, um objeto algo que precisamos representar computacionalmente e que tem propriedades prprias, um comportamento especfico e uma identidade nica.
Figura 4.3 - Um objeto possui estado, exibe algum comportamento bem definido e possui identidade prpria [Booch94]. Estado - O estado de um objeto compreende o conjunto de suas propriedades, associadas a seus valores correntes. Propriedades de objetos so geralmente referenciadas como atributos e, portanto, o estado de um objeto diz respeito aos seus atributos e aos valores a eles associados. Comportamento - A abstrao incorporada por um objeto caracterizada por um conjunto de servios ou operaes, que outros objetos, ditos clientes, podem requisitar. Operaes so usadas para recuperar ou manipular a informao de estado de um objeto e referem-se apenas s estruturas de dados do prprio objeto, no devendo acessar diretamente estruturas de outros objetos. A comunicao entre objetos d-se por meio de troca de mensagens. Para acessar a informao de estado de um objeto, necessrio enviar uma mensagem para ele. Uma mensagem consiste do nome de uma operao e os argumentos requeridos. Assim, o comportamento de um objeto representa como este objeto reage s mensagens a ele enviadas. Em outras palavras, o conjunto de mensagens a que um objeto pode responder representa o seu comportamento. Um objeto , pois, uma entidade que tem seu estado representado por um conjunto de atributos (uma estrutura de informao) e seu comportamento representado por um conjunto de operaes. Identidade - Cada objeto tem uma identidade prpria, que lhe inerente. Todos os objetos tm existncia prpria, ou seja, dois objetos so distintos mesmo se seu estado e comportamento forem iguais. A identidade de um objeto transcende os valores correntes de suas variveis de estado (atributos). Identificar um objeto diretamente geralmente mais eficiente que design-lo pela sua descrio [Snyder93]. No mundo real, um objeto limita-se a existir, mas, no que se refere ao mundo computacional, cada objeto dispe de um identificador nico pelo qual pode ser referenciado inequivocamente [Rumbaugh94].
O problema da classificao um problema relacionado com encontrar semelhanas. A classificao ajuda a identificar generalizaes, especializaes e hierarquia de agregaes entre as classes. Classificao um processo interativo e incremental, difcil de ser executado porque um determinado conjunto de objetos pode ser classificado igualmente, de vrias maneiras.
Figura 4.4 - Classificao o meio pelo qual ordenamos conhecimento [Booch94]. Alguns autores utilizam os conceitos de classe e tipo indistintamente. Entretanto, um tipo e uma classe no so a mesma coisa. Um tipo definido por um conjunto de operaes, isto , pelas manipulaes que podemos fazer com o tipo. Uma classe mais do que isso. Podemos tambm olhar para dentro de uma classe, por exemplo, para ver sua estrutura de informao. Assim, uma classe melhor conceituada como uma implementao especfica de um tipo [Jacobson92].
As mensagens so o meio de comunicao entre objetos e so responsveis pela ativao de todo e qualquer processamento. Dessa forma, possvel garantir que clientes no sero afetados por alteraes nas implementaes de um objeto que no alterem o comportamento esperado de seus servios. Uma mensagem estimula a ocorrncia de algum comportamento no objeto receptor da mesma. O comportamento estabelecido quando uma operao executada. O formato normalmente considerado na emisso de uma mensagem : Mensagem: [destino, mtodo, parmetros], onde:
Destino: o objeto receptor Mtodo: a operao que deve ser realizada Parmetros: As informaes necessrias execuo do mtodo Resumindo: Mensagem: Mecanismo para disparar um mtodo de uma classe diferente da corrente, isto , so o meio atravs do qual os objetos interagem; Mtodo: Uma ao a ser realizada.
Figura 4.5 - Uma subclasse herda estrutura e comportamento de suas superclasses [Booch94]. Muitas vezes alguns objetos no se enquadram satisfatoriamente s propriedades descritas em uma classe, tipicamente porque: Alm das propriedades descritas na classe, esses objetos possuem outras ainda no descritas; Algumas das propriedades descritas para a classe no so adequadas aos novos objetos, sendo necessrio, portanto, redefini-las ou mesmo cancel-las. Vale ressaltar que o cancelamento de propriedades, contudo, um indicador de que a hierarquia no est modelada adequadamente.
Atravs do mecanismo de herana, tais problemas podem ser contornados. A herana define o relacionamento entre classes, no qual uma classe compartilha a estrutura, o comportamento e o relacionamento definidos em uma ou mais outras classes. A classe que herda caractersticas chamada subclasse e a que fornece as caractersticas, superclasse. Desta forma, a herana representa uma hierarquia de abstraes na qual uma subclasse herda de uma ou mais superclasses. Tipicamente, uma subclasse aumenta ou redefine caractersticas das superclasses. Assim, se uma classe B herda de uma classe A, todas as caractersticas descritas em A tornam-se automaticamente parte de B, que ainda livre para acrescentar novas caractersticas para seus propsitos especficos. A generalizao permite abstrair, a partir de um conjunto de classes, uma classe mais geral contendo todas as caractersticas comuns. A especializao a operao inversa e portanto, permite especializar uma classe em um nmero de subclasses, explicitando as diferenas entre as novas subclasses. Deste modo possvel compor a hierarquia de classes. Esses tipos de relacionamento so conhecidos tambm como relacionamentos um tipo de, onde um objeto da subclasse tambm um tipo de objeto da superclasse. Neste caso uma instncia da subclasse dita uma instncia indireta da superclasse. Quando uma subclasse herda caractersticas de uma nica superclasse, tem-se herana simples. Quando uma classe definida a partir de duas ou mais superclasses, tem-se herana mltipla. importante observar, no entanto, que na herana mltipla podem ocorrer dois problemas: coliso de nomes herdados a partir de diferentes superclasses e a possibilidade de herana repetida. A figura 4.6 ilustra estes dois casos.
Figura 4.6 - (a) Coliso de nomes. (b) Herana repetida. No primeiro caso, a classe C herda das classes A e B. Entretanto ambas possuem uma caracterstica com nome x. Assim, como ser a caracterstica x em C, igual definida na classe A ou igual da classe B? No segundo caso, a classe D herda das classes B e C, que por sua vez herdam da classe A. Assim, temos um caso de herana repetida, j que, indiretamente, a classe D herda duas vezes da classe A. O resultado lquido da herana que desenvolvedores podem evitar a codificao de redundncias atravs da localizao de cada operao no nvel apropriado na hierarquia de classes. Resumindo os conceitos complementares de hierarquia, herana, generalizao e especializao: Hierarquia: Mecanismo para organizao de classes que se relacionam de maneira estruturada e ordenada, em nveis; Herana: Mecanismo que permite que uma subclasse herde caractersticas de sua superclasse; Generalizao: Mecanismo que permite extrair conceitos comuns de vrias classes, posicionando-os em um local comum e compartilhado, a superclasse; Especializao: Mecanismo que permite especializar um conceito comum, refinando caractersticas, atravs de adio e/ou modificao de itens, criando diferentes subclasses.
A composio um tipo ainda mais forte de agregao; Na agregao um objeto-parte pode continuar existindo mesmo com a excluso do objetotodo. Exemplo: carro e motor. Ao se excluir o objeto-todo, basta excluir o(s) relacionamento(s) dele com o(s) objeto(s)parte;
Na composio um objeto-parte no continua existindo se o objeto-todo for excludo. Exemplo: nota fiscal e item de nota fiscal. Ao se excluir o objeto-todo, deve-se excluir o(s) objetos(s)-parte a ele associado(s).
Uma classe concreta no pode conter operaes abstratas porque seno seus objetos teriam operaes indefinidas. Analogamente, toda classe que possuir uma operao genrica no pode ter instncias diretas e, portanto, obrigatoriamente uma classe abstrata. OBSERVAO: Apesar de se encontrar classes/operaes abstratas como sinnimos de classes/operaes genricas h uma diferena a ser considerada: Classes/operaes genricas referem-se a habilidade de parametrizar uma classe/operao com tipos de dados diferentes.
2.10 INTERFACES
Origem: Orientao a objetos Parte I. Introduo da linguagem Java, Classes, Interfaces, Objetos (Herana, Encapsulamento e Polimorfismo). Autor: Rafael Cardoso Pereira. Artigo em site da DevMedia (http://www.devmedia.com.br)
As interfaces so estruturas muito parecidas com as classes, porm com um propsito diferente. Uma interface no possui atributos e sim somente operaes. O fato aqui que as operaes no so como nas classes, ou seja, em uma interface estas operaes no possuem implementao. Uma interface ser utilizada para definir comportamentos que outros elementos, as classes, podem desejar implementar. Imagine ento que queremos definir um tipo de comportamento que poder ser implementado por mais de uma classe em nosso sistema, ento este comportamento colocaremos em uma interface. A classe obrigatoriamente dever possuir estas operaes da interface implementadas nela, sendo que a implementao ficar na classe e no na interface.
2.11 SOBRECARGA
Em sistemas orientados a objetos, operaes distintas de classes distintas, ou at de uma mesma classe, podem ter o mesmo nome. Neste caso, temos um nome de operao sobrecarregado. No caso de mtodos com o mesmo nome dentro de uma mesma classe as assinaturas dos mtodos devem ser diferentes.
2.12 POLIMORFISMO
O polimorfismo est ligado a seguinte afirmao: uma interface, mltiplos mtodos. O polimorfismo uma poderosa ferramenta para o desenvolvimento de sistemas flexveis. Polimorfismo significa a habilidade de tomar vrias formas. No contexto da orientao a objetos, o polimorfismo est intrinsecamente ligado comunicao entre objetos. De fato, polimorfismo pode ser melhor caracterizado, neste contexto, como o fato de um objeto emissor de uma mensagem no precisar conhecer a classe do objeto receptor. Assim, uma mensagem pode ser interpretada de diferentes maneiras, dependendo da classe do objeto receptor, ou seja, o objeto receptor que determina a interpretao da mensagem, e no o objeto emissor. O emissor precisa saber apenas que o receptor pode realizar certo comportamento, mas no a que classe ele pertence e, portanto, que operao efetivamente executada. Um objeto sabe qual a sua classe, e, portanto, a correta implementao da operao requisitada. A mensagem associada ao mtodo a ser realmente executado, atravs da identificao da operao e da classe do objeto receptor.
Frequentemente, o polimorfismo caracterizado como o fato de uma operao poder ser implementada de diferentes maneiras em diferentes classes. Todavia, isto apenas uma consequncia do que foi dito anteriormente e no polimorfismo em si. A maioria dos autores no diferencia sobrecarga e polimorfismo, tratando ambos os casos como polimorfismo. Neste texto, entretanto, preferimos utilizar polimorfismo com uma semntica mais rgida: polimorfismo limitado a uma hierarquia de classes. Uma operao ser dita polimrfica se ela existir, com a mesma assinatura, em uma cadeia de superclasses-subclasses. Uma operao polimrfica tem uma nica semntica e os mtodos que a implementam conservam essa semntica e, por conseguinte, a sua interface (assinatura). Na sobrecarga de operador, as operaes no tm necessariamente a mesma semntica e no h necessidade de se preservar a assinatura. Ao contrrio, se as operaes sobrecarregadas forem da mesma classe, elas devero ter assinaturas diferentes. Na prtica as operaes sobrecarregadas so, normalmente, uma coincidncia na escolha de nomes de operao. De um outro ponto de vista, o polimorfismo pode ser considerado uma caracterstica dos objetos, refletindo a capacidade deles mudarem de classe em tempo de execuo. O polimorfismo extremamente til quando deseja-se executar alguma operao em um objeto, mas no se sabe, a priori, qual ser exatamente a sua classe em tempo de execuo.
2.14 RESUMO
Origem: Introduo Programao Orientada a Objetos, prof. Daniel Merli Lamosa, maio de 2002, slides
Algumas Caractersticas conceituais: Identidade: 2 objetos so distintos mesmo que todos os valores de seus atributos sejam iguais; Classificao: Objetos com a mesma estrutura de dados (atributos) e mesmo comportamento (operaes) so agrupados em uma classe; Polimorfismo: A mesma operao pode atuar de modos diversos em classes diferentes; Herana: Compartilhamento de atributos e operaes entre classes com base em um relacionamento hierrquico.
Algumas Caractersticas da tecnologia orientada a objetos: Abstrao: Concentrao nos aspectos essenciais, prprios, de uma entidade e em ignorar suas propriedades acidentais;
Encapsulamento: Separao dos aspectos externos de um objeto, acessveis por outros, dos detalhes internos da implementao que ficam ocultos dos demais; Combinao de Dados e Comportamento: Polimorfismo dos objetos; Compartilhamento: Compartilhar a estrutura comum (classes) por diversas subclasses sem redundncias (Herana); nfase na Estrutura de Objetos: Especificar o objeto e no como ele utilizado; Sinergia: Seguir todas as caractersticas simultaneamente.
Origem: Orientao a objetos Partes I e II. Introduo da linguagem Java, Classes, Interfaces, Objetos(Herana, Encapsulamento e Polimorfismo). Autor: Rafael Cardoso Pereira. Artigo em site da DevMedia (http://www.devmedia.com.br).