Qual a vantagem de se utilizar Orientação a Objetos? Como e quando utiliza-se polimorfismo?
Aceito sugestão diversas a respeito deste tema,
Marcelo Pita
Curtidas 0
Melhor post
Anthony Accioly
31/03/2011
Sendo extremamente pragmático, a vantagem é $$$ hehehe (ok, agora voltando para o mundo acadêmico que é o que importa).As principais vantagens são:Menor gap Semântico - http://pt.wikipedia.org/wiki/Fosso_semântico. É mais fácil pensar em objetos do que em funções / procedimentos pois objetos estão mais próximos ao mundo real.Maior reaproveitamento de código: Componentes bem modularizados com funções bem definidas servindo a propósitos claros e delimitados (alta coesão) podem ser reaproveitados, significando menos código (e conseqüentemente, menor custo de manutenção). A orientação a objetos trás vários recursos para produzir componentes independentes intercambiáveis (encapsulamento, interfaces, etc), promovendo o baixo acoplamento.
---
Quanto ao polimorfismo, o conceito é que você pode pode ter vários facetas mostrandoapenas aquilo que seja necessário (nível de abstração / especialização) em determinado momento. Também é possível pensar do lado oposto, que cada faceta pode especializar alguma de suas funções, mudando o comportamento mais abstrato:
Explico com um exemplo: Eu sou uma pessoa (duh!)Também sou um programador, que é um tipo de pessoa (geralmente cheio de neuroses). Em orientação a objetos eu poderia, por exemplo, me programar comoPessoa p = new Programador("Anthony Accioly", ...);Ou seja, eu sou uma Pessoa que é um Programador. Quando eu vou no supermercado não preciso expor minha faceta de programador, afinal ela não é útil na situação (pelo contrário, confundiria as pessoas). Assim, estou representando uma faceta mais genérica do que sou.
Por outro lado, em um fórum como o da DeMedia, eu posso discutir sobre orientação a objetos. Em outros fóruns eu poderia ter uma ação genérica de pessoa (tipo, comentários do Youtube), porém, aqui preciso fazer comentários mais especializados.Então voltando ao tipo pessoa, vamos pensar que ela tem um método "falar()" que retorna um monte de abobrinhas. O programador, que é um tipo especializado de pessoa, pode "sobrescrever" o método "falar()" para retornar abobrinhas técnicas. Se ele quiser, o resto do mundo pode continuar o vendo como uma Pessoa, porém, ao interagir com seu método "comentar()" o programador tem uma função própria mais especializada. Deu para ilustrar o conceito?
---
Quanto ao polimorfismo, o conceito é que você pode pode ter vários facetas mostrandoapenas aquilo que seja necessário (nível de abstração / especialização) em determinado momento. Também é possível pensar do lado oposto, que cada faceta pode especializar alguma de suas funções, mudando o comportamento mais abstrato:
Explico com um exemplo: Eu sou uma pessoa (duh!)Também sou um programador, que é um tipo de pessoa (geralmente cheio de neuroses). Em orientação a objetos eu poderia, por exemplo, me programar comoPessoa p = new Programador("Anthony Accioly", ...);Ou seja, eu sou uma Pessoa que é um Programador. Quando eu vou no supermercado não preciso expor minha faceta de programador, afinal ela não é útil na situação (pelo contrário, confundiria as pessoas). Assim, estou representando uma faceta mais genérica do que sou.
Por outro lado, em um fórum como o da DeMedia, eu posso discutir sobre orientação a objetos. Em outros fóruns eu poderia ter uma ação genérica de pessoa (tipo, comentários do Youtube), porém, aqui preciso fazer comentários mais especializados.Então voltando ao tipo pessoa, vamos pensar que ela tem um método "falar()" que retorna um monte de abobrinhas. O programador, que é um tipo especializado de pessoa, pode "sobrescrever" o método "falar()" para retornar abobrinhas técnicas. Se ele quiser, o resto do mundo pode continuar o vendo como uma Pessoa, porém, ao interagir com seu método "comentar()" o programador tem uma função própria mais especializada. Deu para ilustrar o conceito?
GOSTEI 1
Mais Respostas
Teí Sistemas
31/03/2011
A maior vantagem da orientação a objetos é a facilidade de manutenção do sistema (quando OO é aplicado corretamente). Mais tem como desvantagem um maior tempo para desenvolvimento. Levantar um sistema orientado a objetos dá um pouco mais de trabalho que um procedural.
Deixando claro que esta é minha opinião de acordo com minha experiência. Fiquem livres para concordar ou discordar.
Deixando claro que esta é minha opinião de acordo com minha experiência. Fiquem livres para concordar ou discordar.
GOSTEI 0