Como se tornar bom em análise e design orientado a objetos (OOAD)?

26

Tornar-se um bom analisador e designer pode beneficiar muito um desenvolvedor. Mas há definitivamente obstáculos para isso. Nem todo mundo está interessado no OOAD, e nem toda pessoa que está interessada conhece o caminho. Um bom OOAD deve conhecer vários idiomas OOAD? Ou deveria ter falhado em projetos? Como alguém pode se tornar um bom OOAD?

Saeed Neamati
fonte

Respostas:

34

Pessoas que não estão interessadas estão criando seus próprios obstáculos. Não posso me preocupar com isso.

Para quem não conhece o caminho, sugiro:

  • Acho que toda linguagem OO que aprendi me torna um desenvolvedor OO melhor. Muito pode ser trazido de cada idioma para outros, desde que você encontre a comunidade.
  • Você aprende mais com o fracasso do que com o sucesso, mas tenta fazer isso no seu próprio tempo. Profissionalmente, confie nas pessoas com mais experiência, pelo menos uma parte do tempo - mas não tenha medo de perguntar "Por quê?".
  • Aprenda todos os cinco princípios do SOLID e entenda por que eles existem. Nenhum deles é regra, mas são boas diretrizes quando você está perdido.
  • O Desenvolvimento Orientado a Testes melhorou mais minhas habilidades de projeto OO do que qualquer outra coisa que eu já aprendi.
  • Você não será o seu melhor até passar da subengenharia para a superengenharia e depois encontrar o equilíbrio correto (mais próximo deste último).
  • Na verdade, não se esqueça, você nunca será tão bom quanto será dois anos depois.
  • Leia muitos livros e blogs, mas não tome nada como evangelho. Esse setor ainda não encontrou e pode nunca encontrar um caminho perfeito.
  • Por todos os meios, aprenda padrões de design, mas não procure lugares para usá-los, basta usá-los como um facilitador da comunicação.

Espero que algo disso tenha ajudado.

pdr
fonte
1
Boa lista @pdr. +1
Saeed Neamati
5
+1 "ainda não encontrou e pode nunca encontrar um caminho perfeito".
ocodo 26/07
1
+1 "O desenvolvimento orientado a testes melhorou mais minhas habilidades de design de OO do que qualquer outra coisa que eu já aprendi."
Kevin cline
1
SOLID
Mudassir
Obrigado, eu tenho uma pergunta para discussão do SOLID programmers.stackexchange.com/questions/155852/…
LCJ
5

Penso que, para apreciar completamente o modelo OO, você deve ter experiência em falhar miseravelmente com técnicas de programação não OO. Você pode entender o OO por dentro e por fora, mas para apreciá-lo e respeitá-lo, ele deve ser uma ferramenta nova e brilhante que substitui a antiga ferramenta enferrujada que não fazia bem o trabalho.

Autodidata por 7 anos, antes de finalmente aprender OO em Java em nível universitário. Antes disso, eu constantemente desenvolvia esses projetos e eles ficavam tão grandes que eu esquecia o que diabos estava acontecendo. Eles seriam volumosos, desorganizados e exigiriam muita manutenção para fazer pequenas alterações. Basicamente, eu continuava me acostumando com o meu código e começando de novo constantemente.

Demorei um pouco para tirar minha cabeça do design linear que eu havia adotado, mas depois que entendi completamente o modelo OO, era como Eureka! Consegui codificar projetos muito mais complexos por conta própria e minha produtividade disparou rapidamente depois de aprender conceitos como herança. Não estou perdendo tempo reescrevendo código ou recomeçando, porque objetivamente tudo faz sentido e é apenas intuitivo.

É minha opinião que todo programador deve conhecer o maior número possível de idiomas. Isso os tornará um veterano mais experiente, independentemente de ser OO ou não. Depois de entender o OO, você pode usar essas técnicas e aplicá-las em todos os lugares em que forem implementadas.

IMHO, se você não entende, ou não deseja aprender OO, você estará inadequadamente equipado no campo de batalha da vida. Mais e mais empresas estão usando idiomas OO mais recentes. Não vejo motivo para não conhecer o modelo OO hoje em dia.

Dependendo de como a pessoa aprende, depende de como ela deseja aprender o modelo. Pessoalmente, aprendo melhor quando alguém me ensina e, portanto, ir às aulas para Java I e Java II realmente fez uma grande diferença para mim. Eu recomendaria pegar disciplinas eletivas de engenharia de software na faculdade ou simplesmente entrar on-line e procurar tutoriais de OO se você não tiver acesso aos cursos da faculdade ou quiser aprender no seu tempo livre.

Quando penso em como isso me foi descrito, eu digo; uma maçã é uma maçã e uma laranja é uma laranja. Sim, ambos caem das árvores, mas são dois frutos totalmente diferentes e aí está a sua harmonia.

Styler
fonte
1
Você quis dizer falhar miseravelmente com a programação funcional ou falhar miseravelmente com a programação procedural?
Andrew Grimm
Falhar miseravelmente com a programação funcional, mas não falhar no domínio. Quero dizer, falhar na implementação bem-sucedida devido a suas limitações.
Styler
Então você definitivamente quis dizer programação funcional, não programação processual?
Andrew Grimm
Programação não OO.
Styler
2
Definitivamente, eu sugeriria editar isso, já que não OO! = Funcional por qualquer extensão da imaginação. As coisas podem até ser ambas.
Magus
0

Sempre existem obstáculos para os interessados ​​ou não, mas o contexto e a gravidade podem variar.

Não é necessário que você precise aprender vários idiomas para os conceitos de OO; comece com um idioma que você goste; ao longo de um período de tempo, você terá uma posição forte no idioma; poste isso para explorar algumas coisas que você fez já e tente executar o mesmo em um idioma diferente. A experiência em um idioma ajuda a mudar para novos, uma vez que você teria uma referência para avaliar.

Qualquer projeto é uma experiência de aprendizagem, e não seu sucesso, o importante é como você adaptou os recursos para seu melhor uso; ocasionalmente, é bom ler o código de outros e descobrir como e por que ele foi feito. Se você conseguir um mentor, isso seria ótimo. Sempre saiba o motivo Por que isso foi escolhido , Que tal fazê-lo de alguma outra maneira. Tente trabalhar em seu próprio modelo de lógica e design e ateste-o ao seu mentor / sênior. Dessa forma, você melhoraria suas habilidades, talvez no início elas fossem direto para o caixote do lixo, mas então você tentou e aprendeu o que fez de errado. Iterativamente, você ficaria cada vez melhor.

V4Vendetta
fonte