[Pesquisa] Qual foi sua maior dificuldade em POO?

Se a duvida é especificamente para os iniciantes de POO, acho que o mais complicado eh o polimorfismo mesmo.

Mas acho que a grande dificuldade que vejo em OO, tanto por experiencia propria, como observando codigo dos outros, é a de definir a responsabilidade dos objetos, até onde deve ir a responsabilidade de um e a partir de que momento outro deve assumir.

Pra isso nao existe formula magica, nem nenhum exemplo de bichinhos que ajude, é caso a caso e experiencia pra se descobrir.

Verdade, eu mesma tinha muita dificudade compolimorfismo, principalmente pqquando eu ia pesquisar o que era não achava nada que me explicasse isso tão claramente, e cada vez me confundia.

Minha maior dificuldade com POO foi, e continua sendo até hoje, acreditar que ela não foi criada apenas para tornar extremamente complexa a atividade de programar, numa tentativa de elitizar a profissão e valorizar os salários.
Se as linguagens já tinham feito uma grande parte do “serviço”, ao se distanciar anos-luz de qualquer linguagem humana para se tornarem um emaranhado de palavras sem nexo e símbolos quase hieróglifos, a POO foi a pá de cal.
Para provar, estão aí a dificuldade de aprendizado, divergências conceituais, aplicações equivocadas, enfim, uma torre de babel…
E ainda por cima criou-se um clima de radicalização e opressão, onde POO é o único caminho, e o resto é blasfêmia, quando é óbvio que uma grande parte dos problemas seria resolvido de forma mais rápida e clara sem ela.
Somos obrigados a matar formigas com mísseis Tomahawk.
É isso, foi só um desabafo…

Concordo plenamente que OO tornou-se uma opressão: parece que só OO tem valor, o resto é blasfêmia como o nosso amigo disse acima, eu acho que OO veio trazer “algum” benefício, não tudo isso que andam alardeando por aí, não gosto de MVC também, não acho que esse seja o caminho para as aplicações tomarem um bom rumo, existe coisa melhor que o conceito que nos está sendo empurrado que é o MVC, coisa de escritor de livro dos EUA, metodologia dos EUA que não deveríamos “amar” tanto por aqui.

[quote=adriano_si]Fala cara… acho que todos entendemos seu ponto de vista, porém o desaconselho de Herança não é somente para o Java… Enfim, não vale discutir algo que tem material de montão explicando sobre… O que você vê por aí de uma “pilha de código Procedural em Java” é uma realidade também não somente do Java… Dá pra fazer em qualquer linguagem, código macarrônico e despadronizado… Não generalize a tecnologia por causa do “que você viu”… Já ví muito código escroto em PHP e poderia generalizar que o mesmo não presta… Porém trabalho com o mesmo usando o Zend Framework e sua forma de organização trabalhando fortemente com padrões e Orientação a Objetos… enfim…

A reusabilidade é bem presente em Java sim (Plataforma e Linguagem), mas p quem entende a mesma e aplica os conceitos de forma correta… se você nunca viu um Sistema assim, então realmente não conseguirei lhe convencer (e nem é meu objetivo), mas só queria que não generalizasse uma plataforma ou linguagem só pelo “que você viu”…

Quanto a linguagens e plataformas brasileiras… Eu concordo totalmente com você… Já expus isso algumas vezes no fórum, quando discutimos Inglês X Português… Temos uma gama de profissionais (inclusive aqui no Fórum) com gabarito e conhecimento pra desenvolver uma plataforma e linguagem de Software nacional, e a mesma seria uma das melhores que o mundo já viu, pois nos destacamos do resto do mundo pela criatividade, não a toa temos representantes como commiters em vários projetos gringos e brasileiros trabalhando mundo a fora fazendo a diferença…

Porém tem alguns pontos que gostaria de destacar e que é real aqui em nosso país:

1 - Investimento: quem tá afim de investir tempo e dinheiro no Desenvolvimento de uma oplataforma de Software puramente brasileira e começar a colocar a mesma no mercado ??? Quem está disposto a pagar esses puta profissionais (que também precisam por comida na mesa) pra desenvolver uma linguagem brasileira ??? As nossas universidades, onde a maioria dos professores tá é afim de realizar Projetos para rechearem seus Currículos ??? As Startups que precisam matar um Dragão todos os dias pra poder sobreviver ??? Ou as próprias estrangeiras que estão presentes aqui e são as maiores do País ???

2 - Aceitação no mercado: quem quer usar uma plataforma brasileira ??? apesar de termos alguns casos de sucesso como o Lua, temos ainda muita resistência ao que é produzido aqui no País, justamente por causa desse pensamento ainda pouco de pesquisador e empreendedor. Ainda reforço, nem o próprio empresariado brasileiro faria isso… Se fizessem, seriam alguns gatos pingados que pensam como nós… Fica inviável, fica insuportável manter algo assim…

Aqui mesmo dentro do Brasil temos isso… Aqui no Pará, temos uma gama de profissionais fantásticos, alguns hoje estão em BH, SP, RS, EUA, EUROPA, etc…

Teve um caso que um amigão aqui desceu o preço da concultoria de R$ 200,00 pra R$ 100,00/h só porque descobriu que o cara que fez o trabalho pra ele era um paraense que estava trabalhando em SP… Aí contratou uma outra consultoria de caras de SP, pagou R$ 250,00/h pra nova consultoria avaliar o trabalho e dizer que o mesmo tinha sido bem realizado e que nada precisava ser mexido…

Enfim, falta confiança de nosso empresariado em nós mesmos… Aqui ainda se tem muito o pensamento do “CHIQUE”, tudo que vem de fora é mais Chique, o que se faz aqui não presta… [/quote]

Concordo com o que vc disse, porem no Brasil de vez em quando surgem aguns movimentos interessantes: A linguagem Joiner da empresa Tuxon (http://pt.wikipedia.org/wiki/Joiner_%28linguagem_de_programa%C3%A7%C3%A3o%29 ) fêz um certo sucesso e foi criada por brasileiros, conheci pessoas que trabalharam com ela e gostavam; me parece que foi comprada por uma empresa americana pra variar rsrsrsrs.

Outro “problema” relacionado ao que foi dito é aquele que quando surge alguem ou alguma coisa que tem relevancia no Brasil aparece alguem de fora e compra a idéia ou até mesmo o criador da idéia e incorpora a seus produtos; e parece fazer parte do processo ninguem ficar sabendo disto.

Bem…sobre o tópico minhas dificuldades foram as corriqueiras: Polimorfismo, Herança e etc…, a idéia dos bichinhos tambem achei bacana no começo depois tive que aprender com bastante leitura e questionamentos que a coisa não éra bem assim mas acredito que ainda é uma boa idéia para se começar a aprender (parabéns Vini). Uma grande dificuldade que tive tambem foi a de entender as razões dos vários tipos de diagramas para representar a parte estatica e a parte dinamica do sistema.

flws

Daí adriano_si tudo bele?,

O desaconselho da Herança é um grande erro, desaconselham porque não entenderam a herança,
a herança te dá muita produtividade e diminui grandemente a complexidade dos sistemas, não tem que
ser desaconselhada em nenhuma linguagem, tem que ser usada porque é um GRANDE benefício, faça uma
analogia com a vida real, imagine se grande parte das coisas que você precisasse na vida vc pudesse pegar
PRONTA e funcionando do teu pai (ancestral), tipo assim o carro, o imóvel, quanto temos que ralar pra conseguir
essas coisas caras da vida? entendeu, isso é a herança na programação, vc usa os métodos prontos do repositório
do ancestral, isso sim é reusabilidade de código.

Orientação à objetos é facílimo. O que demorou mais tempo para eu aprender foi que nem tudo é um objeto, e OO assim como no Java é uma burrice que leva muitos programadores a cometerem barbaridades (vide frameworks, ORM, etc).

Se desenvolvedores Java descobrissem que nem tudo precisa ser um objeto as nossas vidas seriam muito melhores.

Opa… blz galera, vejo que a discussão rendeu…

Bom, primeiro, gostaria que refletissem com uma leitura:

http://alexandrebm.com/composicao-em-ruby-com-forwardable

Só pra não ficar na cabeça que o conceito é um preconceito de quem usa Java… Vamos lá… Conceitos surgem e desaparecem, se renovam, se modificam, geram conflitos e muitas vezes até guerra. Porém, conceitos nascem com um Objetivo de ajudar toda e qualquer pessoa a ter sua vida facilitada. Ví que a Orientação a Objetos gerou uma certa polêmica aqui, aparecendo inclusive declarações inflamadas sobre o uso ou não da mesma. Vou dar o “MEU”, repito “MEU” ponto de vista sobre a questão.

Para mim que tenho 5 anos de carreira, 2 em Java, confesso que ainda to aprendendo bastante coisas e não é qualquer coisitasinha dita em algum Blog ou Fórum que me convence de determinados temas. OO foi um deles, percebo que quando um Framework, Linguagem ou até mesmo ferramenta, surge no mercado, quer dizer que das 2 uma:

1 - Ou o que tem hoje não satisfaz completamente a necessidade;

2 - Ou o criador quer melhorar a idéia para atender as suas necessidades;

Por isso o termo reinventar a roda é tão bem aceito no meio da comunidade… Não precisamos reinventar a roda, mas precisamos aperfeiçoá-la.

A roda de hoje com certeza não é a mesma da idade da pedra, ela ganhou formas, espessuras e até tamanhos diferentes para atenderem às mais diversas necessidades.

Vejo que a OO foi mais uma dessas tentativas, de pessoas com muita experiência no mercado que apanhavam bonito para padronizar e manter seus códigos e Projetos de acordo com esse padrão. É a verdade absoluta do mercado ??? Não sei, mas é o que se aproxima de algo que veio pra facilitar e ajudar a manter o foco.

Quando alguém diz “Prefira composição à Herança”, ele não está dizendo pra nunca se usar Herança, mas sim que a maioria dos Problemas que hoje são resolvidos com Herança, seriam mais facilmente resolvidos com Composição, enquanto voxê resolve algo com Herança e reaproveita código, eu posso fazer uma composição e reaproveitar um Objeto… enfim, possibilidades e mais possibilidades… Não sei sua experiência de mercado e se a Herança realmente resolve os seus problemas, mas no meu caso, o conceito de “preferir composição à Herança” tem resolvido os meus…

Espero ter ajudado no meu ponto de vista.

Já você Longino, sua afirmação está certíssima, nem tudo pode ser um Objeto, para algumas coisas precisamos fazer chover pra transformar o Conceito em um modelo OO. À propósito (é curiosidade mesmo) você trabalha no comércio ???

Abs []

Não, não trabalho.

Área Acadêmica ???

Olás

Acompanhei os tópicos, juntando o que li/aprendi aqui com minha experiência, vejam este caso de quando usar INTERFACE ou HERANÇA.

Vamos pegar com base aquele exemplo dos aniamais do ViniGodoy (muito bom por sinal, parabéns!).

Imaginem que temos o seguinte grupo de animais domésticos
cachorro
gato
porco da índia

Agora, pegamos duas ações (métodos) relacionadas a eles: “fazerBarulho()” e “dormir()”.

dormir()

Todos dormem da mesma forma, então neste caso HERANÇA é melhor que INTERFACE pois podemos implementar “dormir()” na classe mãe tendo o REAPROVEITAMENTO DO CÓDIGO em todas suas classes filhas.

fazerBarulho()

Cada aniamal faz o seu (latir, miar, grunir). Usar herança aqui vai resultar em sempre ter que sobrescrever o método nas classes filhas e, além de não reaproveitar o código, ainda temos o efeito colateral do acoplamento.
Neste caso, INTERFACE é melhor que HERANÇA pois podemos garantir que todo animal implementará o método mas de forma desacoplada, podendo inclusive ter mais interfaces associadas futuramente.

Aí vem a questão:
Concordam que para implementar esses dois métodos da melhor maneira no nosso design, precisaríamos utilizar INTERFACE E HERANÇA?

abs

[quote=pgnt]Aí vem a questão:
Concordam que para implementar esses dois métodos da melhor maneira no nosso design, precisaríamos utilizar INTERFACE E HERANÇA?

abs[/quote]

em Java, Bastaria a Herança com uma classe Abstrata… Mas nesse caso… em um outro exemplo talvez as 2 fossem realmente válidas…

Abs []

A maior dificuldade que tive no começo foi em saber aplicar os conceitos de POO em projetos reais.

Aprender a encapsular ao invés de switch-case, alta coesão, baixo acoplamento, deixar entidades menos anêmicas, isolar responsabilidade em classes, etc… et.c… etc…

adriano_si, bem observado, uma classe abstrata resolveria. Estava tentando pensar em algum caso que envolvesse interface… talvez um método “brincar()” que pudesse ser alterado em tempo de execução por ex… mas a idéia no geral é trazer que dependendo do caso uma coisa pode ser melhor que outra ou, o uso das duas chega a ser necessário para o melhor design.
abs

Quando eu nao estou em casa eu tenho dificuldade em poo, mas eh soh tomar uma laxante. :slight_smile:

//Daniel

KKKKKKKKKKKK!

flws

Polimorfismo com certeza, só consegui entender quando precisei utilizar na prática!