2008-09-10 17 views
8

Mi pregunta es simple; ¿Es posible sobre orientar objetos a su código?¿Es posible over OO?

¿Cuánto es demasiado? ¿En qué punto está renunciando a la legibilidad y el mantenimiento por el bien de OO?

Soy una gran persona OO pero a veces me pregunto si soy complicar mi código ....

Pensamientos?

+0

Buena pregunta, pero es un poco demasiado vaga para una respuesta razonable sin discusión. Esta es la razón por la cual la respuesta principal es un simple 'Sí'. –

+0

"orientación del objeto" no es uso correcto. "orientar el objeto" es correcto. "orientar" no es una palabra. –

+0

El exceso de diseño es la raíz de todo mal – Jonathan

Respuesta

28

es posible a través de su código-orientar objeto

+5

Me encanta que esta haya sido la respuesta aceptada. – mmcdole

2

Si encuentra que el tiempo necesario para aplicar plenamente OO en su proyecto está provocando innecesariamente incumplimiento de plazos, entonces sí.

Tiene que haber una solución de compromiso entre el software de la liberación y la fidelidad OO completa. La forma de decidir depende de la persona, el equipo, el proyecto y la organización que ejecuta el proyecto.

2

Sí, por supuesto que hay :-) técnicas orientadas a objetos son una herramienta ... si se utiliza la herramienta equivocada para un determinado puesto de trabajo, se le complica más las cosas (piensa cuchara cuando todo lo que necesita es un cuchillo) .

Para mí, juzgo "cuánto" por el tamaño y el alcance del proyecto. Si es un proyecto pequeño, a veces agrega demasiada complejidad. Si el proyecto es grande, aún asumirá esta complejidad, pero se amortizará por su facilidad de mantenimiento, extensibilidad, etc.

+0

Mejor aún, piense en el cuchillo cuando necesite una cuchara :-) –

+0

o mejor aún, un cuchillo de carnicero cuando esté tratando de untar mantequilla. – UnkwnTech

+0

no es irónico cuando intentas reducir la complejidad usando objetos que acabas haciendo las cosas más complejas. Creo que la letra se cortó del álbum :) – gbjbaanb

1

Sí, definitivamente es posible, común. Una vez trabajé con un tipo que creó una estructura de datos para enlazar a una lista desplegable, por lo que podría permitir a los usuarios seleccionar un género. Es cierto que sería útil si la lista de posibles géneros fuera a cambiar, pero no tienen aún (no vivimos en California)

2

Mi consejo es no pensar demasiado en ella. Eso generalmente resulta en un exceso o defecto de ALGO (si no OO). La regla práctica que suelo usar es esta: si hace que el problema sea más fácil de entender, uso un objeto. Si otro paradigma hace que sea más fácil entender lo que sería si usara un objeto, lo uso.

Esa estrategia aún no me falles.

0

supongo que es posible, pero es difícil de responder a sus en términos abstractos (sin doble sentido). Da un ejemplo de más de OO.

0

Creo que hay ocasiones en que el diseño de OO se puede llevar al extremo e incluso en proyectos muy grandes hace que el código sea menos legible y mantenible. Por ejemplo, puede haber uso en una clase de base de calzado, y clases de tenis para niños, zapatos de vestir, etc. Pero he leído/revisado el código de la gente donde parecía que iban a crear clases por debajo de eso para NikeSneakers y ReebokSneakers. Ciertamente hay diferencias entre los dos, pero para tener un código fácil de leer, creo que es importante, a veces, expandir una clase para adaptarla a las diferencias en lugar de crear nuevas clases para niños para manejar las diferencias.

3

Si piensa que más objetos están más orientados a objetos, entonces sí.

Cuando se hace un diseño orientado a objetos, hay un par de fuerzas que hay que equilibrar. La mayoría del diseño de OO se trata de reducir y manejar la complejidad. Entonces, si obtiene soluciones muy complejas, no está haciendo demasiado OO pero lo está haciendo mal.

1

Sí, del mismo modo que uno puede sobrenormalizar un diseño de base de datos.

Este parece ser uno de esos debates puristas vs. pragmáticos que nunca terminarán. <: S

1

Muchas personas intentan diseñar su código para una máxima flexibilidad y reutilización sin considerar qué tan probable será. En cambio, divide tus clases según el programa que estás escribiendo. Si tiene exactamente una instancia de un objeto en particular, podría considerar fusionarla en el objeto contenedor.

0

Sí, y es fácil. El código no es mejor simplemente porque está orientado a objetos, más de lo que es mejor simplemente porque es modular, funcional, genérico, generativo, basado en flujo de datos o orientado a aspectos o cualquier otra cosa.

El código bueno es un buen código porque está bien diseñado en su paradigma de programación.

El buen diseño requiere cuidado.

Tener cuidado lleva su tiempo.

Un ejemplo para su caso: he visto piezas terribles de Java en el que, en el nombre de ser "orientado a objetos", cada clase implementa alguna de las interfaces, incluso cuando no hay otra clase jamás poner en práctica esa interfaz . A veces es un truco, pero en otros es realmente gratuito.

En cualquier paradigma o frase idiomática que escriba el código, ir demasiado lejos, participar demasiado de algo bueno, puede hacer que el código sea más complicado que el problema. Algunas personas dirán, cuando se llegue a ese punto, que el código ni siquiera está realmente, por ejemplo, orientado a objetos.

Se supone que el código orientado a objetos está mejor organizado con el propósito de ser más simple, más directo, o más fácil de entender y digerir en porciones razonablemente independientes. El uso de los mecanismos de codificación orientada a objetos antitéticamente a este objetivo no no resultado orientado a objetos diseño.

0

Creo que la respuesta es sí, pero dependiendo del dominio al que te refieres, podría ser REALMENTE sí, o menos, sí. Si está creando aplicaciones .Net o Java de alto nivel, entonces creo que esto es lo último, ya que OO está básicamente integrado en el lenguaje. Por otro lado, si está trabajando en aplicaciones integradas, entonces los peligros y la probabilidad de que esté superando los OO son altos. No hay nada peor que ver a una persona de muy alto nivel entrar en un proyecto incrustado y complicar las cosas que ellos piensan que son feas, pero que son las formas más simples y rápidas de hacer las cosas.

1

Creo que su pregunta debería decir: "¿Puede usted sobre Arquitectura su aplicación?"

Y, por supuesto, la respuesta es todavía. OO es solo un acercamiento al diseño. Si dedica su tiempo a crear complejidad innecesaria en un sistema porque "Rocas de polimorfismo". Entonces sí, tal vez estás superando a OOing.

La misma respuesta de XP es que Independientemente del enfoque que prefiera (OO, procedimiento, etc.) el diseño solo debe ser tan complejo como sea demostrablemente necesario.

1

Sí, puedes. Como ejemplo, si se encuentra creando Interfaces o clases abstractas antes de tener dos subtipos para ellas, entonces lo está haciendo en exceso. Veo este tipo de pensamiento a menudo cuando los desarrolladores (sobre) diseñan desde el principio. Utilizo técnicas de desarrollo y refactorización basadas en pruebas para evitar este comportamiento.

1

¿es posible sobre orientar objetos a su código?

No. Pero es posible complicar demasiado su código. Por ejemplo, puede usar patrones de diseño por el uso de patrones de diseño. Pero no puedes sobre orientar objetos a tu código. Su código está orientado a objetos o no lo es. Del mismo modo que su código está bien diseñado o no lo está.

+0

En un lenguaje de múltiples paradigmas, donde la definición exacta de código OO es borrosa, ¿qué pasa si algunos subproblemas se resuelven mejor por procedimientos y otros con un estilo OO? – dsimcha

0

Creo que cualquier cosa puede ser "exagerada". Esto es cierto con casi todas las mejores prácticas que puedo pensar. He visto cadenas de herencia tan complejas que el código era prácticamente inmanejable.