[Pesquisa] Qual foi sua maior dificuldade em POO?

A minha maior dificuldade é saber pra qual lado aquele diamante que representa a Agregacao e a Composicao tem de estar apontado no Diagrama. Para o Todo ou para a Parte? Outra também é como montar um Modelo de Dominio, ou como outros autores preferem, o Modelo de Classes de Análise/Projeto da melhor maneira possível.

O MER em seu nivel Conceitual possui regras mais claras de como você abstrai, generaliza e classifica abstrações. Além disso com a Normalização voce atinge uma segurança confortável para o seu modelo. Ele acaba sendo modificado apenas diante de mudanças de requisitos. Acredito que em essencia na O.O. o processo tenha suas semelhanças, mas o resultado é diferente. Ajustar a granularidade e o reúso não é tarefa trivial e ao meu ver exige um tato do profissional quase que esotérico. De qualquer forma preciso ler mais sobre DDD, Craig Lairman e Rumbaugh et al.

Threads, e leitor de qualquer coisa (arquivo, teclado, rede)

Compreender os conceitos, pois estava abituado com programação procedural.

Oi,

Colocar em pratica, achava mais comodo continuar da forma procedural. :roll:

Resumindo, todos tiveram sérias dificuldades com o Java, porque é difícil mesmo, foi planejado para ser difícil de entender,
porque os projetistas dessa linguagem que nos foi imposta pelos norte-americanos eram fracos, isso mesmo fracos, nem entenderam a herança, tanto que o próprio treinamento da Caelum (um dos melhores que já vi para Java) prega que você esqueça a herança e prefira a composição, contrariando o que dizem os livros sobre o assunto, onde está escrito que os 3 pilares da OO são: Herança, Polimorfismo e Encapsulamento, portanto como não entenderam a herança e não conseguiram implementá-la então mandam esquecer, ridículo!!! , mas falando um pouco da praticidade de programar no paradigma OO como está sendo ensinado e colocado na prática, pelo que tenho visto (trabalho em uma instituição financeira de grande porte), acho que o que está sendo produzido com essa linguagem (sem herança)
não fica longe de montanhas de código estruturado que tínhamos ou temos em aplicações mais antigas (no legado), não é estruturado mas a quantidade produzida tá muito alta, com pouca reusabilidade que é o que os evangelistas de Java pregam, mas então eu pergunto: porque temos que aceitar, como vaquinhas de presépio essas linguagens impostas por empresas estrangeiras, não venham me dizer que não é a realidade, que não temos condições de produzir uma linguagem coerente, nacional, não venham dizer que é nacionalismo, porque é melhor ser nacionalista do que ser vaquinha de presépio e aceitar resignado tudo que te empurram goela-abaixo, será que não temos condições de construir linguagens? claro que temos pessoal, acordem, eu mesmo já desenvolvi várias IDEs, mas não tenho a influência, o dinheiro para torná-las famosas, mas fica aqui o apelo para menos conformismo e mais inovação!!!

ps. não sou contra nenhuma em particular, nem contra o Java, sou contra a forma como vem sendo implementado!

 veja: (do manual "Material do Treinamento Java e Orientação a Objetos" FJ11 da Caelum)

… James Gosling, um dos criadores do Java, é um crítico do mau uso da herança. Nesta entrevista ele discute a possibilidade de se utilizar apenas interfaces e composição, eliminando a necessidade da herança:
http://www.artima.com/intv/gosling3P.html

[quote=gadriano] Resumindo, todos tiveram sérias dificuldades com o Java, porque é difícil mesmo, foi planejado para ser difícil de entender,
porque os projetistas dessa linguagem que nos foi imposta pelos norte-americanos eram fracos, isso mesmo fracos, nem entenderam a herança, tanto que o próprio treinamento da Caelum (um dos melhores que já vi para Java) prega que você esqueça a herança e prefira a composição, contrariando o que dizem os livros sobre o assunto, onde está escrito que os 3 pilares da OO são: Herança, Polimorfismo e Encapsulamento, portanto como não entenderam a herança e não conseguiram implementá-la então mandam esquecer, ridículo!!! , mas falando um pouco da praticidade de programar no paradigma OO como está sendo ensinado e colocado na prática, pelo que tenho visto (trabalho em uma instituição financeira de grande porte), acho que o que está sendo produzido com essa linguagem (sem herança)
não fica longe de montanhas de código estruturado que tínhamos ou temos em aplicações mais antigas (no legado), não é estruturado mas a quantidade produzida tá muito alta, com pouca reusabilidade que é o que os evangelistas de Java pregam, mas então eu pergunto: porque temos que aceitar, como vaquinhas de presépio essas linguagens impostas por empresas estrangeiras, não venham me dizer que não é a realidade, que não temos condições de produzir uma linguagem coerente, nacional, não venham dizer que é nacionalismo, porque é melhor ser nacionalista do que ser vaquinha de presépio e aceitar resignado tudo que te empurram goela-abaixo, será que não temos condições de construir linguagens? claro que temos pessoal, acordem, eu mesmo já desenvolvi várias IDEs, mas não tenho a influência, o dinheiro para torná-las famosas, mas fica aqui o apelo para menos conformismo e mais inovação!!!

ps. não sou contra nenhuma em particular, nem contra o Java, sou contra a forma como vem sendo implementado!

 veja: (do manual "Material do Treinamento Java e Orientação a Objetos" FJ11 da Caelum)

… James Gosling, um dos criadores do Java, é um crítico do mau uso da herança. Nesta entrevista ele discute a possibilidade de se utilizar apenas interfaces e composição, eliminando a necessidade da herança:
http://www.artima.com/intv/gosling3P.html

[/quote]

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…

Abs [] e sucesso.

[EDIT] - desculpa Naanda, não contribuí nada com o tópico e olha que entrei aqui pra responder qual foi minha dificuldade… heueheueh

Bom, minha maior dificuldade, foi realmente entender o PORQUE de se usar Interfaces… Entendi só quando a Katty me explicou no [Use a Cabeça, Java!]

O meu maior problema até hoje é a bendita sobrescrita.

Recursividade não é conceito OO…

¬¬’

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