19 votos

Es OO diseño de la fuerza en la semántica o la encapsulación?

El diseño orientado a objetos (OOD) combina datos y sus métodos. Esto, según lo que puedo ver, tiene dos grandes cosas: proporciona la encapsulación (así que no me importa lo que los datos que hay, sólo cómo puedo obtener los valores que yo quiero) y la semántica (se refiere a los datos, junto con los nombres, y sus métodos de siempre utilizan los datos como se pensaba originalmente).

Entonces, ¿dónde INUNDACIÓN de la fuerza de la mentira? En contraste, la programación funcional de los atributos de la riqueza de los verbos en lugar de los nombres, y por lo tanto la encapsulación y la semántica son proporcionados por los métodos en lugar de las estructuras de datos.

Yo trabajo con un sistema que está en el funcional extremo del espectro, y continuamente largo de la semántica y de la encapsulación de la OO. Pero puedo ver que OO es la encapsulación puede ser una barrera a la extensión flexible de un objeto. Así que, de momento, puedo ver la semántica como la fuerza mayor.

O es la encapsulación de la clave para todos los que vale la pena código?

Edit: me refiero específicamente el tipo de encapsulación OO proporciona aquí. changeColor(door,blue) hace door.changeColor(blue).

9voto

Tony the Pony Puntos 13235

La encapsulación y el resultado de la abstracción son claramente los principales puntos fuertes de la OO. Las "cosas" predicado qué "acciones" puede ser invocada en ellos, por lo que los sustantivos toman una mayor importancia semántica de los verbos.

En última instancia, es difícil imaginar el diseño de un sistema complejo de manera coherente y fácil de mantener la forma sin cierto nivel de encapsulación.

6voto

Ken Puntos 275

Como Lisp programador, cuyo objeto sistema podría decirse que proporciona ninguno de estos, yo digo: ninguno de los de arriba.

jwz: "la pseudo-modelo de objetos de Smalltalk pierde y que las funciones genéricas (convenientemente limitado por el no-externo-anula la regla) ganar".

Creo que las cualidades deseables que usted y otras personas de la lista de aquí (encapsulación, modularidad, etc.) no son tan inherentes en OO como usted piensa. A menudo son proporcionados junto con Java-estilo OO, pero no meramente la consecuencia de la misma.

4voto

peterchen Puntos 21792

Aislamiento de la Complejidad es la OMI el principal objetivo de cualquier diseño: encapsular la funcionalidad detrás de una interfaz que es más sencillo el uso de la funcionalidad de la misma.

OO proporciona varios mecanismos para que los dos oyu mencionar:

La encapsulación permite diseñar una superficie que es independiente de la implementación real. (parafraseando, "los medios más Simples diferente").

La semántica permite a las entidades de modelo que representan elementos del dominio del problema, por lo que son más fáciles de entender.


Cualquier proyecto de alcanzar cierto tamaño se convierte en un ejercicio en la gestión de la complejidad. Yo apuesto a una afirmación de que a través de los años, la programación ha desnatada a lo largo de los límites de la complejidad que#cinco aprendido a manejar.

No he incursionado en la programación funcional durante años, pero en mi entender puede ser mejor descrito por un matemático del significado de las palabras poderosas, elgant, amd hermoso. "Bella" y "elegante", en este contexto, tratar de describir una brillante visión de la verdad o de la correspondiente estructura de un sistema complejo, mirándolo desde un punto de vista donde es sorprendentemente simple. se acepta la complejidad como un hecho dado, y trata de navegar por ella.

La flexibilidad que usted menciona es en mi entendimiento la capacidad de cambiar el punto de VISTA de acuerdo a sus necesidades, pero que va en contra de la encapsulación: ¿qué es un inútil detalle a partir de una posición puede ser la única relevante en la otra.

OO, OTOH, es el reductionists enfoque: cambiamos de punto de VISTA yendo a un nivel más alto. En la "vieja OO", hay una sola jerarquía de POVs, las interfaces son - en este modelo, una forma de modelo diferentes POVs.

Si puede decirse así, la fuerza de la OO se adapta mejor a la "gente normal".

4voto

Brian Puntos 82719

Alguna forma de modularidad es la clave para cualquier diseño escalable. Las limitaciones de los seres humanos, impide que las personas "grokking" demasiada información a la vez, así que tenemos que dividir los problemas en partes manejables, cohesionada en trozos, con el fin de brindar una base para la comprensión de un gran proyecto, así como una manera de subdividir las asignaciones de trabajo de un gran proyecto entre muchas personas.

Cómo elegir la más efectiva "división"/"repartición" de un gran proyecto para cumplir con los objetivos anteriormente mencionados? La experiencia ha demostrado que OO es el gran ganador aquí, y creo que mucha gente estaría de acuerdo en que dos de los principales atributos de la OO que la hace buena en esto son:

  • Encapsulado: cada clase encapsula un "secreto" - un conjunto de específico de la implementación de los supuestos-que-son-probablemente-a-tener-a-cambio en el tiempo acerca de su aplicación - y expone una interfaz que es independiente de estos supuestos; capas de tales encapsulado abstracciones hace que sea posible para crear un diseño robusto en el que los componentes/implementaciones se pueden intercambiar fácilmente en la cara de los cambios previstos.
  • Sustantivo-centric: en la mayoría de los dominios, los seres humanos parecen mejor en la primera descomposición de un modelo de dominio por pensar acerca de los sustantivos/datos de un dominio, seguido por la identificación de los verbos de apoyo que están asociados con cada sustantivo.

Con respecto a la programación funcional (FP) versus OO, he blogueado acerca de esto, pero en breve creo que la FP es más acerca de la aplicación de las técnicas, mientras que OO es más acerca de la estructura del programa y el diseño, y por lo tanto los dos son complementarios, con OO ser más dominante en la 'gran final' de la escala y la FP ser más dominante en la 'pequeña' final. Que es, en un gran proyecto, la estructura de alto nivel es mejor descrito por el OO de diseño de clase, pero muchos de los de nivel de módulo detalles (las implementaciones, y los detalles de las formas de las interfaces de los módulos) son la mejor forma por FP influencias.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X