Você está na página 1de 6

PROGRAMAO ORIENTADA A OBJETO - POO

PROGRAMAO ORIENTADA A OBJETO


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