2009-02-20 17 views
5

He leído todos los libros sobre por qué crear una clase y cosas como "buscar los nombres en sus requisitos", pero no parece ser suficiente. Mis clases me parecen desordenadas. Me gustaría saber si hay algún tipo de métrica o algo con lo que pueda comparar mis clases y ver si está bien diseñado. Si no, ¿quién es el gurú de OO más respetado en el que puedo obtener los consejos de diseño de clase adecuados?Diseño de clases adecuadas

+0

+1, me gustaría saber también – krebstar

Respuesta

2

si está familiarizado con el diseño de la base de datos, en concreto el concepto de normalización, entonces la respuesta es fácil: una clase centrada en los datos debe representar una entidad en la tercera forma normal

si eso no es útil, intentar esto en su lugar:

  • una clase es una colección de elementos de datos y los métodos que operan sobre ellas
  • una clase debe tener una responsabilidad singular, es decir, debe representar una cosa en su modelo; si representa más de una cosa, debería ser más de una clase.
  • todos los elementos de datos en una clase deben estar lógicamente asociados/relacionados entre sí; si no lo son, dividirlo en dos o más clases
  • todos los métodos en una clase debe operar sólo en sus parámetros de entrada y los elementos de datos de la clase - véase la Law of Demeter

eso es lo más lejos que puedo ir con consejos abstractos generales (sin escribir un largo ensayo); Puede publicar una de sus clases para la crítica si necesita asesoramiento específico

+0

@ [Celebrus]: gracias –

0

creo que el diseño de objetos es tanto arte como ciencia. Se necesita tiempo y práctica para comprender cómo diseñar clases limpias &. Quizás si puede dar un ejemplo de una clase simple que haya diseñado que no le satisfaga, los usuarios pueden criticar y dar consejos. No estoy seguro de que haya respuestas generales fuera de lo que ya ha leído en los textos.

+0

también, ¿qué idioma estás utilizando? aunque OOD es un idioma neutral, usar características específicas del idioma en su clase puede hacerlo más limpio. – Jason

0

El gurú de OO más respetado que conozco personalmente es StackOverflow. Pon tus nombres de clase aquí y creo que obtendrás una buena cantidad de comentarios.

+0

¿Bueno o impío? – orbfish

0

Las clases se utilizan generalmente para modelar conceptos del dominio del problema. Una vez que tenga un problema bien definido (también conocido como el conjunto de casos de uso), podrá identificar a todos los participantes. Un subconjunto de participantes será intrínseco al sistema que está diseñando. Comience con una gran caja negra como su sistema. Siga descomponiéndolo a medida que tenga más información. Cuando tienes un nivel en el que ya no se pueden desglosar (en conceptos en tu dominio problemático), comienzas a obtener tus clases.

Pero esta es una visión subjetiva de un no gurú. Sugeriría una pizca de sal en el menú.

4

Crear clases que comiencen limpias y se vuelvan complicadas es una parte central de OO, es cuando se refactoriza. Muchos desarrolladores intentan saltar al diseño de clase perfecto desde el principio, en mi experiencia eso simplemente no es posible, en su lugar, tropiezas, resuelves el problema y luego refactorizas. Puede cosechar, las clases base y las interfaces a medida que surge el diseño.

+0

si no sabes cómo diseñar una buena clase en primer lugar, es probable que tampoco sepas cómo refactorizar una clase para hacerlo mejor ... ;-) –

+0

Eso es cierto, pero su punto es cierto también, y fue extrañado en otros lugares. – orbfish

0

Métricas? No es que confieras en ellos.

¿Están sus clases haciendo el trabajo de hacer que el programa funcione y mantenerlo mantenible a través de múltiples revisiones?

En caso afirmativo, lo está haciendo bien.

Si no, pregúntese por qué no, y luego cambie lo que no funciona.

2

Trate de centrarse en el comportamiento en lugar de la estructura. Los objetos son entidades "vivientes" con comportamiento y responsabilidades. Usted les dice que hagan cosas. Eche un vistazo al enfoque de la tarjeta CRC para ayudarlo a modelar de esta manera.

Cuestiones relacionadas