A dificuldade maior que vejo é parar de pensar que OO é sobre interface, herança, polimorfismo, sobrecarga, sobreescrita, associação, agregação, composição, construtores, métodos e etc, e passar a pensar que é sobre inteligência dos objetos (dados operarem sobre eles mesmos, encapsulados) e colaboração entre objetos, enquanto encapsulados (orquestração, passagem de mensagens).
Curioso, o que vc quer parar de pensar é o que a maioria das pessoas acha difícil de entender. Isso comprova a minha tese que os textos introdutorios de OO são uma pessima influencia para aprender o paradigma. Porque focam apenas no primeiro aspecto. Pode ver qualquer exemplo de Gato, Cachorro e BichoDeQuatroPatas.
Primeira vez que concordo 100% com o que o mochuara fala. [size=7]dá uma olhada no G1.com.br se teve algum outro terremoto no mundo, ou se tem frente fria vindo para Cuiabá[/size]
Gatinhos e Cachorinhos não ensinam OO, ensinam herança.
Primeira vez que concordo 100% com o que o mochuara fala. [size=7]dá uma olhada no G1.com.br se teve algum outro terremoto no mundo, ou se tem frente fria vindo para Cuiabá[/size]
Gatinhos e Cachorinhos não ensinam OO, ensinam herança.[/quote]
:lol: :lol: :lol:
[quote=ViniGodoy]Faz tanto tempo que já quase não lembro.
Mas lembro-me que tive um pouco de dificuldade de entender o polimorfismo. E também que OO ficou muito mais clara quando comecei a associar código à objetos de verdade.
Uma técnica que tenho usado com meus alunos, e que tem ajudado muito é usar uma analogia simples. Eu ponho no powerpoint a figura de 4 bichinhos. Um gatinho, uma galinha, um porco e um cachorrinho. Peço para um aluno escolher um deles.
E então digo para a turma. “Esse aluno está apontando para um Animal”.
Peço então para outro aluno pedir uma característica no animal, para eles descobrirem que animal é esse. Quase institivamente, o aluno pergunta “Que barulho o animal faz?”
O aluno que está apontando então faz algum som, dependendo do bicho que escolheu como “Au! Au!”.
Todo mundo dá risada e acha que foi muito fácil, muito lógico. Então mostro isso em código:
[code]//Temos 4 animais na transparência
//Se são animais, todas essas classes “extends animal”.
Cachorro cachorro = new Cachorro();
Gato gato = new Gato();
Porco porco = new Porco();
Galinha galinha = new Galinha();
//A é uma variável que irá apontar para um animal
Animal a;
//Nossa colega, decidiu apontar para um cachorro.
a = cachorro;
//E então perguntamos. Que barulho o animal faz?
a.barulho();
//A resposta: Au au!
[/code]
A maioria, depois dessa brincadeira simples, tem os olhos iluminados e sorrisos bobos na face. Só tomara que não estejam é rindo da minha cada. :lol: [/quote]
Cara muito boa esta comparação, estou começando agora em Java e muitas vezes me pergunto como associar as ações ao objeto.
Tirando o “polimorfismo” como a maioria disse, é fácil.
Quase tão fácil quanto programação visual.
Quando comecei(em 2002), sem dúvida a maior dificuldade era o famoso “programar para interfaces”, que exigia um nível de abstração punk(para quem é novato em OO).Na linguagem java, o uso do this me deixou louco no início.
[quote=lina]Oi,
Acho que não tive dificuldades em OO.
Comecei lendo livros e mais livros. Depois estudei a API e fui programando…
Geralmente em minhas aulas, procuro transformar o JAVA em realidade. Ou seja, descrever situações existentes no JAVA que encontramos dia a dia.
A última foi explicar Serialização.
Tchauzin!
[/quote]
Uma boa leitura é insubstituível mesmo. Resolver problemas do mundo real obriga os alunos a trabalharem mais a lógica, e consequentemente terão mais domínio nos algoritmos.
Obg ramilani12 , até pensei em fz uma enquete , mas eu queria pegar os assuntos mesmo já que o que
eu julguei ser difícil pra mim, pode ter sido fácil para outros e vice-versa;
Aquela velha história de quem programa não testa ’
Um livro ótimo sobre OO é o do Grady Booch, Object Oriented Analysis and Design - with Applications. Não sei se o livro já passou por alguma revisão, pois ele estaria um pouco desatualizado para os padrões de hoje. Mas os desenhos do livro são realmente ótimos!
Ele detalha muitos conceitos importantes como interfaces, encapsulamento, abstração, gerenciamento da complexidade, divisão em subsistemas, etc. Coisas que são mais fundamentais no entendimento da OO do que muita coisa que a gente vê na faculdade. E o detalhe, a abordagem é muito didática.
Curioso, o que vc quer parar de pensar é o que a maioria das pessoas acha difícil de entender. Isso comprova a minha tese que os textos introdutorios de OO são uma pessima influencia para aprender o paradigma. Porque focam apenas no primeiro aspecto. Pode ver qualquer exemplo de Gato, Cachorro e BichoDeQuatroPatas.[/quote]
kkkkkkkkkkkkkk o meu professor era 10 pra ensinar essas coisas , lembro de uma pérola em sala de aula assim:
professor: "- A herança dar-se quando uma classe derivada herda as características de sua classe base, exemplo bar e bordel , um bordel tem tudo qe um bar tem e um pouco mais, depois de bordel alguém me dá um exemplo? "
colega de sala: " Big Brother Brasil !! tem td qe um bar e um bordel tem e um pouquinho mais "
kkkkkkkkkkkkkk
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…
¬¬’