Pregunta

Soy un gran fan de los principios de diseño de software, tales como SOLID y SECO . ¿Qué otros principios existen para el diseño de software orientado a objetos?

Nota. No estoy en busca de respuestas como "comentar su código", sino que busca OO principios de diseño como los discutidos por tío Bob .

¿Fue útil?

Solución

Una lista bastante completa de Wikipedia:

http://en.wikipedia.org/wiki/List_of_software_development_philosophies

  • el desarrollo ágil de software
  • Proceso Unificado Ágil (AUP)
  • Desarrollo Dirigido por Comportamiento (BDD)
  • Gran Diseño Up Front (BDUF)
  • La ley de Brooks
  • catedral y el bazar
  • Código y fijar
  • metodología de diseño Construccionista (CDM)
  • codificación vaquero
  • Crystal Clear
  • El desarrollo del diseño impulsado (D3)
  • No te repitas (DRY) o una vez y sólo una vez (OAOO), un solo punto de la Verdad (SPOT)
  • Sistemas Dinámicos Método de Desarrollo (DSDM)
  • Extreme Programming (XP)
  • Feature Driven Development
  • Hollywood Principio
  • El desarrollo iterativo e incremental
  • Diseño conjunto de aplicaciones, también conocido como JAD "desarrollo conjunto de aplicaciones"
  • Kaizen
  • Kanban
  • principio KISS (Keep It Simple, Stupid)
  • Lean Software Development
  • Marco
  • Soluciones de Microsoft (MSF)
  • arquitectura basada en modelos (MDA)
  • El código abierto
  • Proceso Unificado Abrir
  • rápido y sucio
  • Rational Unified Process (RUP)
  • Scrum
  • Smart (desarrollo ágil)
  • separación de las preocupaciones (SoC)
  • modelización orientada a servicios
  • Software Artesanía
  • Software de seguridad del sistema
  • modelo espiral
  • Desarrollo de las pruebas (TDD)
  • Proceso Unificado (UP)
  • V-Model
  • modelo de cascada
  • Rueda y modelo de habla
  • Peor es mejor (al estilo de Nueva Jersey, en contraste con el enfoque MIT)
  • Xtreme
  • Usted no va a la necesite (YAGNI)
  • Cero Uno Infinito

Otros consejos

alta cohesión - ¿Cómo se centró son las responsabilidades de los módulos está diseñando .

bajo acoplamiento -. El grado en que los módulos se basan en otros módulos

Elegimos composición sobre la herencia, es uno.

Muchas personas, especialmente los nuevos en OO comenzarán a extender las clases cuando todo lo que realmente necesita es usar la composición. Realmente si usted debe preguntar a su auto, es la nueva clase B de Clase A? Si no es así, entonces no debe extenderse.

Por ejemplo, digamos que tengo una clase Person, una clase Car, y me gustaría hacer una nueva clase llamada una clase DrivenCar. Una implementación ingenua sería decir (vamos a suponer que tenemos la herencia múltiple)

class DrivenCar extends Person, Car  { ... }

Es la DrivenCar un tipo de persona? No por lo que no debería ser extender persona. Es un coche del DrivenCar? Sí así que tiene sentido extender

El uso de la composición implmentation se vería

class DrivenCar extends Car {
    private Person driver;
}

El GRASP patrones. Sí, parecen más bien trivial. Más como destilación a cualidades fundamentales que demuestran otros patrones, más implicadas.

Interfaz. La mayoría de los patrones de diseño se basan en la separación de la interfaz y la implementación.

Cuando se espera que su API para crecer, utilice la clase abstracta en lugar de la interfaz. Adición de un nuevo método en la interfaz requiere cambiar todas las clases que implementan.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top