2010-05-08 11 views
10

Siendo un desarrollador central por un par de años, aplicaciones de codificación viendo los diagramas de clase, diagramas de secuencia, decidí mejorarme, dando el siguiente paso de diseño. Como soy un desarrollador OO, estoy interesado en mejorar mis habilidades de diseño.¿Cómo construir habilidades orientadas a objetos?

Por ejemplo, tuve dificultades para diseñar un conversor de divisas.

Mis preguntas al SO:

  • Es por experiencia las habilidades de diseño se pueden adquirir?
  • ¿Aprenderá libros/blog/material sobre internet, etc. ayuda?
  • ¿Es que uno necesita el dominio conocimiento de la aplicación siendo desarrollado?
  • Conociendo patrones de diseño, principios?
  • Estudiando el libro 'Code Complete'?
  • ¿Necesita tener habilidades para resolver problemas?

En resumen, dado un problema, solo quiero resolverlo en modo orientado a objetos?

+5

En resumen, mi respuesta es sí a todas sus preguntas –

+1

Anthony Forloney: +1. Tal vez, excepto para 'Code Complete' solamente. – Roman

+2

@Roman, de acuerdo, sin embargo creo que * Code Complete * es algo que debe leerse si quiere mejorar sus habilidades. Es por eso que le di un 'Sí' :) –

Respuesta

0

Para numerar sus puntos - Creo que 2 - 6 son geniales y creo que cualquier persona que escriba código debería leer el código completo, incluso si no es OO. Pero lamentablemente parece que el punto 1 es el más importante.

Creo que es un problema en nuestra profesión. Aprendemos en el trabajo en lugar de estudiar un gran código. Entonces, esencialmente todo el mundo está reinventando la rueda en términos de aprendizaje.

2

Creo que esto es algo incorrecto, porque algunos problemas simplemente no necesitan una solución orientada a objetos. La solución debe coincidir con el problema, no al revés.

Sin embargo, no hay ninguna solución para ser un mejor diseñador orientado a objetos. La mejor manera, en mi opinión, sería escribir un programa complejo, luego mantenerlo sólidamente durante unos años.

+1

Esto es básicamente incorrecto: los problemas no tienen "necesidades". Las soluciones se crean usando conceptos, herramientas e ideas. Tienes que querer OO, luego encontrarás CÓMO se aplica al problema en cuestión (muy mal, para un grupo muy pequeño de problemas). No se preocupe, sin embargo, está en buena compañía aquí en SO, donde la mayoría de la gente piensa que la uña solo está pidiendo el martillo. –

+0

¿De qué otra forma pondrías un clavo? – Puppy

+1

Tacón de un zapato de mujer, la mayoría del tiempo. O una pistola de clavos. –

1
  • ¿Es por experiencia que se pueden adquirir las habilidades de diseño?

Experiencia y capacidad innata: algunas personas simplemente no pueden hacerlo.

  • Will learning books/blog/material over internet etc help?

Por supuesto. Pero no te convertirán en un dios OO.

  • ¿Es que uno necesita el conocimiento del dominio de la aplicación que se está desarrollando?

O lo necesita, o necesita acceso a alguien que lo tiene.

  • Conocer patrones de diseño, principios?

Conocer cuáles son los patrones de diseño sería un buen comienzo, son solo formas comunes de hacer las cosas, nada mágico.

  • Estudiando 'Code Complete' book?

Lo hojeé una vez en la librería.

  • ¿Necesita tener habilidades para resolver problemas?

Obviamente sí, lo hubiera pensado.

+0

"inate [sic] ability" - ¿así que crees que es algo genético? ¿El gen orientado a objetos? –

+0

@yar No lo sé. Sé que algunas personas pueden y algunas personas (aparentemente igual de brillantes) no pueden. –

+0

Suena razonable. Lo atribuiría a la pasión (interés) más que a nada, pero su observación es correcta. –

3

Es bastante obvio que si quieres aprender algo, tienes que practicar. Si desea aprender a ser un mejor programador, la práctica de la programación le ayudará. Y si quiere aprender cómo ser un mejor programador OO, obviamente, la práctica de OOP lo ayudará más. Las habilidades para resolver problemas y el conocimiento del dominio son cosas que todo buen programador debe tener, no solo para OOP. Y hay muchos buenos libros por ahí, probablemente te ayudarán si no eres el tipo de persona que "no se enfoca en algo para salir de un libro".

Here es una lista de libros de programación. De esta lista, "Patrones de diseño" y "Refactorización" parecen estar muy enfocados en OOP (no leí "Head first design patterns", quizás sí). Y el libro del que más aprendí (OOP, conceptos funcionales y otros), creo, es "Estructura e interpretación de programas informáticos".

7

Tiene que hacer un mal diseño de OO antes de poder hacer un buen diseño de OO.

Un proyecto fantástico sería tomar su conversor de divisas y mover lentamente el código para usar los conceptos OO. OO es un proceso creativo: no hay respuestas incorrectas, pero sí existen peores y mejores. Básicamente, cuando su código retiene la funcionalidad y se hace más corto/más fácil de leer, es mejor. Cuando gana flexibilidad sin agregar más código, eso también es mejor. Pero es un proceso creativo. Utiliza un sistema de control de versiones como GIT para poder "deshacer" fácilmente, probar cosas y HACER ERRORES. El diseño de OO es un proceso.

  • Es por experiencia las habilidades de diseño se pueden adquirir?

Sí.

  • Will aprendizaje libros/blo/etc material sobre Internet ayuda?

Sí.

  • ¿Es que necesita el conocimiento del dominio de la aplicación que se está una desarrollada?

Sí, pero creo que el conocimiento del dominio demasiado bien puede arruinar un buen diseño.Al trabajar con programadores de aerolíneas, noté que las abstracciones conocidas e incuestionables ("ticket", "reserva") inhibían el buen diseño de OO. Su modelo OO es no el modelo del mundo real. Es un modelo para tu programa.

  • patrones Conociendo diseño, principios?

Sí, más es mejor, siempre.

  • El estudio de 'código completo' libro?

Muchas personas dicen que es un gran libro. Pero, ¿has leído a Italo Calvino? ¿O Jorge Luis Borges? Todo tipo de libros pueden ayudar.

  • necesidad de disponer de resolución de problemas habilidades?

No. obtener habilidades para resolver problemas mediante la aplicación OO (o cualquier otro paradigma).

0

Además, puede utilizar la unidad probando, como herramienta para mejorar el diseño de la clase.

1

Le sugiero que aprenda Smalltalk. SÍ ... Sé que está un poco desactualizado, pero creo que este es el único entorno para experimentar, apreciar y 'divertirse' con Object Orientation.

En Smalltalk todo lo del IDE es un objeto. Puede pensar en objetos sin perder tiempo con detalles tales como archivos de encabezado/fuente, compilación, etc.

Descargar una copia de Squeak Smalltalk (http://www.squeak.org/) y empieza a practicar

2

El mayor desafío en el diseño orientado a objetos no está aprendiendo las técnicas de implementación, que vienen de forma natural con el tiempo y la experiencia. El mayor desafío es comprender el dominio del problema lo suficientemente bien como para que pueda abstraerlo claramente con un modelo de objetos. Este es uno de los puntos que abordó en su pregunta y creo que es sin duda uno de los más críticos. Si el problema no se entiende bien, corre el riesgo de implementar una solución para el problema equivocado. Además, es fácil quedar atrapado en la belleza de la abstracción y la arquitectura por sí mismo, perdiendo de vista la tarea original.

1

Intente aprender y captar realmente el significado de "abstracción". Me refiero a la abstracción como un concepto general, al menos en lo que se refiere a la informática y la ingeniería de software. Desde la abstracción sigue la orientación del objeto. Dado que, la abstracción se trata de separar los conceptos en un sistema de la implementación, por ejemplo, cualquier representación lógica de un sistema o aplicación es una abstracción. Cualquier modelado de una aplicación/sistema es una abstracción. Entonces, entre muchas formas de modelar una aplicación/sistema/problema, a uno se le llama el modo orientado a objetos. Entonces, abstracción primero. Una vez que obtenga el punto de abstracción, verá que, entre muchas formas de modelar cosas, el modelado orientado a objetos es superior, en la mayoría de los casos. Así es como obtienes el punto de OO.

Entonces, desde la abstracción sigue los principios fundamentales de la orientación a objetos: tipos de datos abstractos, la ocultación de información, etc., y mecanismos para alcanzarlos como encapsulación, herencia, etc.

Cuestiones relacionadas