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
Respuesta
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
@ [Celebrus]: gracias –
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.
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
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.
¿Bueno o impío? – orbfish
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ú.
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.
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 ... ;-) –
Eso es cierto, pero su punto es cierto también, y fue extrañado en otros lugares. – orbfish
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.
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.
- 1. Tetris: diseño de clases
- 2. Aho-Corasick y subseries adecuadas
- 3. Seleccione columnas adecuadas de la instrucción JOIN
- 4. Plantillas T4: ¿adecuadas para generar código C++?
- 5. ¿Cómo el rastrillo recursivo? - o alternativas adecuadas
- 6. ¿para qué son adecuadas las tuplas?
- 7. Buenas prácticas de VB.NET y clases de diseño
- 8. Organización de clases con el patrón de diseño del repositorio
- 9. C++ Diseño de memoria de herencia múltiple con "Clases vacías"
- 10. Almacenamiento y recuperación de contraseñas adecuadas para cuentas de servicio?
- 11. ASP.NET MVC 4 - Modelos anidados - ¿Cómo configurar asociaciones adecuadas?
- 12. Elegir qué clases usar en un diseño OOP de php
- 13. C++, el diseño de clases y las responsabilidades
- 14. ¿Cómo clasificaría este tipo de diseño para las clases?
- 15. ¿Las pruebas unitarias son adecuadas para el desarrollo de BPM?
- 16. Recomendaciones de diseño de diseño de programas Java?
- 17. ¿Cuál es un buen patrón de diseño en C# para las clases que necesitan hacer referencia a otras clases?
- 18. Diseño de patrón "Fachada"
- 19. clases desacoplamiento de dominio de las clases Django Modelo
- 20. diseño de diseño de Android
- 21. Diseño de clase Python - División de clases grandes en múltiples para funcionalidad de grupo
- 22. ¿Son Java Beans como mal diseño de clases de almacenamiento de datos?
- 23. Diseño de código compartido
- 24. ¿Cabeceras HTTP adecuadas para las respuestas de éxito/fracaso de inicio de sesión?
- 25. Encontrar las herramientas adecuadas para programar un proyecto de interfaz de usuario de estilo futurista
- 26. Consulta sobre el diseño del juego de aventuras de texto basado en clases.
- 27. ¿Son las Statemachines de Windows Workflow Foundation adecuadas para escenarios de alto rendimiento?
- 28. Conferencias de video de diseño de diseño
- 29. Asesoramiento de diseño en Getter o Const para cadenas en clases: ¿qué están haciendo otros?
- 30. Nuevos patrones de diseño/estrategias de diseño
+1, me gustaría saber también – krebstar