2010-05-08 15 views
7

Actualmente estoy leyendo Análisis y Diseño Orientado a Objetos de Head First. Los estados de libros que escribir grandes de software (es decir, software que está bien diseñado, bien programados, de fácil mantenimiento, reutilización, y se extienden) que tiene que hacer tres cosas:Escribiendo Great Software

  1. En primer lugar, asegúrese de que el software hace todo lo que el cliente quiere que haga
  2. Una vez que se haya completado el paso 1, se aplican los principios y técnicas orientadas a objetos para eliminar cualquier código duplicado que podría haber deslizado en
  3. Una vez que los pasos 1 y 2 se completa, a continuación, aplicar patrones de diseño para asegurarse el software es mantenible y reutilizable en los próximos años.

Mi pregunta es, ¿sigues estos pasos, y en este orden, cuando desarrollas un gran software? Si no es así, ¿qué pasos suele seguir para garantizar que estén bien diseñados, bien codificados, fáciles de mantener, reutilizar y ampliar?

+0

Yo la mayoría de la gente no hace 1) y luego hago tanto de 2 y 3 hasta que el jefe patea un ** por no cumplir el plazo! –

+0

Me suscribo a la filosofía de la artesanía del software. Todo lo que quiero hacer es codificar lo mejor que pueda, y no tengo la intención de entrar en la administración. Así que estoy triste de escuchar esto. – Anthony

Respuesta

1

He leído este libro. Creo que hay una mala interpretación en todas partes.

  1. En primer lugar, asegúrese de que el software hace todo lo que el cliente quiere que haga

    El libro está diciendo a asegurarse de que entiende las necesidades de los clientes antes de iniciar un diseño.

  2. Una vez que se haya completado el paso 1, se aplican los principios y técnicas orientadas a objetos para eliminar cualquier código duplicado que podría haber deslizado en

    El libro dice que el diseño de los principios OO

  3. Una vez que los pasos 1 y 2 están completos, luego aplique patrones de diseño para asegurarse de que el software sea mantenible y reutilizable en los próximos años.

    Usar patrón de diseño.

+0

+1 Muchas gracias por su respuesta jrm82. Su paso uno anterior tiene más sentido para mí, pero en el capítulo 1 página 14, el libro dice: "Una vez que funcione su software, puede buscar cualquier código duplicado que pueda haber ingresado y asegurarse de estar usando buenas técnicas de programación OO. ". Supuse que cuando dijeron "el software funciona" querían decir literalmente, es decir, compilado y en ejecución. En segundo lugar, ¿no debería el paso 3 llegar antes que el 2? Quiero decir, ¿deberías hacer el OO dentro del patrón? – Anthony

2

No estoy de acuerdo con el n. ° 1 porque la mayoría de los grandes softwares necesitan varias repeticiones importantes para ser verdaderamente geniales. El único otro modo para lograr realmente el n. ° 1 (en el primer intento) es copiar otro software que ya es excelente. Pero para llegar a algo nuevo y único (como lo hice con ClipMate en 1991), haces tu mejor esfuerzo y luego lo lanzas al mundo para ver qué dicen los clientes al respecto. A través de ciclos repetidos de volver a evaluar el producto como resultado de la interacción e interacción de los clientes, finalmente se logra un excelente software.

+0

No significa que no deba invertir el mayor esfuerzo en ello. Creo que el objetivo de la lista es que muchos ingenieros inviertan demasiado tiempo en hacer que su código sea más complejo que resolver el problema para el que está escrito. – Puppy

+0

Espera, ¿estás diciendo que la * única * forma de hacer que el software haga lo que el cliente necesita es copiar alguna otra pieza de software excelente? Lógicamente, esto sugeriría que el gran software * nunca * existió (y no estoy diciendo que estés equivocado allí), ya que no se puede crear un gran software sin copiar el ya gran software. – MusiGenesis

+0

@DeadMG, sin duda, estoy de acuerdo. Lo que quiero decir es no poner demasiado énfasis en lo que los clientes quieren, o más bien, creer que quieren. –

9

La orientación a los objetos no es algo que se atornille como una idea de último momento: se comienza con el análisis y diseño de OO y se procede a una implementación de OO. Sospecho que es posible que haya leído mal o malinterpretado el libro. De manera similar con los patrones de diseño, no son complementos.

+0

+1 Siempre comience desde una sólida base teórica, esto _siempre_ produce los mejores resultados concretos. –

+0

Eso es lo que pensé. Nunca he leído el libro de Head Start, pero no puedo creer que aboguen por arrojar lo que sea que haya, * luego * haciendo que esté orientado a objetos, y * luego * hacer que las cosas de OOP se ajusten a los patrones de diseño. – MusiGenesis

+0

+1 Gracias por la respuesta Neil. Debería haber mencionado que recién comencé a leer el capítulo 1 y que esta es la primera vez que leo alguno de los libros de Head First. Sin embargo, después de volver a leer los 3 pasos mencionados anteriormente, no pude evitar publicar esta pregunta porque no podía imaginarme escribir un programa que cumpliera todos los requisitos de los clientes primero, después de lo cual modificaría el código para mejorarlo al incluir el diseño adecuado. patrones después! Ahora, para ser justos, como ya he dicho, solo estoy en el capítulo 1, y el libro está dirigido a principiantes, por lo que sospecho que más adelante en el libro podrán revisar estos pasos. – Anthony

1

Normalmente comenzaría con un diseño orientado a objetos. Tendría que ser un muy rápido sucio/truco para no necesitar # 2 y # 3. El problema es no sobredosis.

+0

+1 Por lo que he leído hasta ahora, el enfoque del libro es OOD. Creo que, como principiantes, esperan que produzcamos códigos duplicados aquí y allá, supongo que es allí donde entra la etapa 2. – Anthony

1

Si lo estoy interpretando correctamente, suena un poco ridículo. Pero quizás la intención sea correcta: 1) se puede parafrasear como "mantenerse enfocado", centrándose especialmente en las necesidades del negocio. Eso no significa ignorar todas las necesidades de codificación, pero obtener el equilibrio correcto. Hay muchos cambios de código y refactorizaciones que sin duda mejoran la calidad del código, pero estos deben ponderarse en función del tiempo empleado, los riesgos y los retrasos causados ​​al proyecto. Como desarrollador, es muy fácil (sobre) priorizar los cambios de código por encima de las necesidades del negocio.

La aplicación de los principios de OO posteriormente parece poco práctica; si no ha utilizado los principios de OO, ¿cómo fue que el software que hace lo que el cliente quiere construir en primer lugar? Tal vez es insinuación de refactorización continua, KISS, y reducir el diseño inicial a favor de un ciclo de desarrollo iterativo.

Hay un elemento de verdad en 3) - el reconocimiento de patrones después de que el software está construido y refactorización para aislar elementos repetidos comunes, pero creo que en esto como consecuencia natrual de un ciclo de desarrollo iterativo.

+0

+1 Sí, definitivamente tenían la intención de concentrarse en lo que el cliente quiere ante todo y entregar todo lo que desea, de lo contrario, el software no sería "excelente". Pero debo admitir que dejar el patrón de diseño para el paso 3 me preocupaba, pero para ser justos, solo estoy en el capítulo 1 y sospecho que se harán mejoras a esta lista para que los lectores se beneficien mientras el lector avanza hasta el capítulo 10. – Anthony

1

Lo primero y más importante de los grandes software debe hacer todo lo que el cliente necesita y al menos la mayoría de lo que el cliente quiere que haga. Estos no son la misma cosa. También es mejor comenzar con algo pequeño y simple, y evolucionarlo en lugar de tratar de construir todo en una aplicación descomunal.

En cuanto a los otros dos puntos, parecen un poco confusos. Evitar la duplicación es un principio de diseño, pero solo uno de muchos. ¿Por qué seleccionarlo para una consideración especial?En lugar de (decir) Programación de interfaces? O Dígale que no pregunte? O Evite las ventanas rotas?

Hmmmm ...

Cuando empecé a escribir esta respuesta tenía la intención de decir que no creo que se pueda adaptar técnicas OO o patrones de diseño. Pero habiéndolo pensado un poco más, se me ocurrió que este no es el caso. Es bastante común en la práctica de TDD para la implementación inicial, lo más simple que hace que el código pase la prueba, que sea completamente de procedimiento. Pero una vez que el código pasa sus pruebas, hay un ciclo de refactorización que aplica patrones de diseño y produce una implementación más objetada.

+0

¿Por qué una solución OO no sería lo más simple? –

+0

+1 Gracias por la útil respuesta APC. El libro está dirigido a principiantes a OOAD, pero sospecho que más tarde lo revisarían como una experiencia de aprendizaje para el lector, pero no puedo estar seguro hasta que lo termine. – Anthony

1

El excelente software se basa en un buen diseño y una programación limpia con un patrón de diseño aprobado (MVC, componente de proceso ...).