Cuando es la programación orientada a objetos más adecuado para?[cerrado]

StackOverflow https://stackoverflow.com/questions/6703

  •  08-06-2019
  •  | 
  •  

Pregunta

Desde que empecé a estudiar la programación orientada a objetos, con frecuencia de lectura de artículos/blogs diciendo funciones son mejores, o no todos los problemas deben ser modelados como objetos.Desde el personal de programación de aventuras, cuando crees que un problema es mejor resuelto por la programación orientada a objetos?

¿Fue útil?

Solución

No hay ninguna regla dura y rápida.Un problema es solucionado de mejor manera con la programación orientada a objetos cuando son mejores en la resolución de problemas y el pensamiento en una OO mentalidad.La Orientación a objetos es sólo otra herramienta que ha llegado a lo largo a través tratando de hacer de la informática una mejor herramienta para resolver problemas.

Sin embargo, puede permitir una mejor reutilización de código, y también puede conducir a código más limpio.Pero muy a menudo estas muy elogiado cualidades son, en el relity, de muy poco valor real.La aplicación de técnicas de OO a un funcional existente de la aplicación podría causar un montón de problemas.La habilidad está en el aprendizaje de diferentes técnicas y aplicar la más adecuada para el problema en cuestión.

OO es a menudo citado como un Nirvana-como solución para el desarrollo de software, sin embargo, hay muchas veces cuando no es apropiado para ser aplicado a la cuestión.Se puede, a menudo, lleva a una sobre-ingeniería de un problema para llegar a la perfecta solución, cuando a menudo no es realmente necesario.

En esencia, la programación orientada a objetos no es realmente de Programación Orientada a Objeto, pero el Objeto de asignación de Pensamiento Orientado a un lenguaje de programación capaz de soportar Técnicas de OO.Técnicas de OO puede ser apoyado por los idiomas que no son inherentemente OO, y hay técnicas que se pueden utilizar dentro de los lenguajes funcionales para tomar ventaja de los beneficios.

Como un ejemplo, yo he sido el desarrollo de software OO por 20 años, por lo que tienden a pensar en OO términos a la hora de resolver problemas, independientemente de la lengua que estoy escribiendo en.Actualmente estoy implementando polimorfismo usando Perl 5.6, que no admite de forma nativa ella.Me han elegido para hacer esto, ya que hará el mantenimiento y extensión del código de un simple tarea de configuración, en lugar de un problema de desarrollo.

No estoy seguro si esto es claro.Hay personas que son difíciles en el OO de la corte, y hay personas que son difíciles en el Funcional de la corte.Y luego están las personas que han probado ambos y tratar de tomar lo mejor de cada uno.Tampoco es perfecto, pero ambos tienen muy buenas características que usted puede utilizar no importa el idioma.

Si usted está tratando de aprender programación orientada a objetos, no sólo se concentran en la programación orientada a objetos, pero trate de utilizar Orientada a Objetos Análisis y general OO principios a todo el espectro de la solución de problemas.

Otros consejos

Yo soy uno de los viejos tiempos, pero también se han programado programación orientada a objetos para un largo tiempo.Personalmente, estoy en contra del uso de la programación orientada a objetos sólo para usar.Yo prefiero objetos tengan razones específicas por las existentes, que modelo de algo concreto, y que tengan sentido.

El problema que tengo con muchos de los más nuevos a los desarrolladores es que ellos no tienen el concepto de que los recursos que se consumen con el código que ellos crean.Cuando se trata con una gran cantidad de datos y el acceso a bases de datos de la "perfecta" modelo de objeto puede ser la peor cosa que usted puede hacer para rendimiento y recursos.

Mi conclusión es que si que tiene sentido como un objeto, entonces el programa como un objeto, siempre y cuando se considere el rendimiento y los efectos de los recursos de la implementación de su modelo de objetos.

Creo que se adapta mejor cuando usted está modelando algo coherente con el estado y las acciones asociadas a los estados.Supongo que es una especie de vaga, pero no estoy seguro de que no hay una respuesta perfecta aquí.

La cosa acerca de la programación orientada a objetos es la que permite encapsular y el resumen de los datos y la información de distancia, lo cual es una verdadera bendición en la construcción de un gran sistema.Usted puede hacer lo mismo con otros paradigmas, pero parece programación orientada a objetos es especialmente útil en esta categoría.

También depende del idioma que está utilizando.Si es un idioma con una rica programación orientada a objetos de apoyo, usted probablemente debería utilizar para su ventaja.Si no, entonces usted puede necesitar para encontrar otros mecanismos para ayudar a romper el problema en otros más pequeños, fácilmente comprobables piezas.

Estoy vendido a la programación orientada a objetos.

En cualquier momento usted puede definir un concepto para un problema, probablemente puede ser envuelto en un objeto.

El problema con la programación orientada a objetos es que algunas personas abusado de él y su código es aún más difícil de entender.Si usted tiene cuidado acerca de lo que pongas en los objetos y lo que usted pone en servicios (clases estáticas) usted se beneficiará del uso de objetos.

Simplemente no poner algo que no pertenecen a un objeto en el objeto porque necesita su objeto de hacer algo nuevo que no había pensado inicialmente, refactorizar y encontrar la mejor manera de agregar esa funcionalidad.

Hay 5 criterios si usted debe de favorecer Orientado a Objetos más orientado a Objetos,Funcional o código de Procedimiento.Recuerde que todos estos estilos están disponibles en todos los idiomas, son estilos.Todos estos están escritos en un estilo de "estoy a favor de OO en esta situación?"

El sistema es muy complejo y tiene más de aproximadamente 9k LOC (Sólo un nivel arbitrario).-- A medida que los sistemas se vuelven más complejos, los beneficios obtenidos por encapsular la complejidad de subir un poco.Con OO, en contraposición a otras técnicas, se tiende a encapsular más y más de la complejidad, que es muy valioso en este nivel.Objeto de Base o de procedimiento debe ser favorecida antes de esto.(Esto no es apología de un particular lenguaje de la mente. OO C se ajusta a estas características de más de OO C++ en mi mente, una lengua con una notoria reputación de fugas abstracciones y una capacidad para comer, tiendas, incluso con 1 mediocre/obstinado programador para el almuerzo).

El código no es de las operaciones sobre los datos (es decir,Base de datos o math/base de análisis).Base de datos de código a menudo es más fácil representar mediante procedimiento estilo.La base de análisis de código a menudo es más fácil representar en un estilo funcional.

El modelo es una simulación de algo (OO destaca en las simulaciones).

Estás haciendo algo para que el objeto en función del subtipo de despacho de la OO es valioso (aka, usted necesita para enviar un mensaje a todos los objetos de un cierto tipo y varios subtipos y obtener una adecuada, pero diferentes, la reacción de todos ellos).

Su aplicación no es multiproceso, especialmente en un no-trabajador de la tarea del tipo de método de código base.OO es bastante problemática en los programas que se multiproceso y requieren diferentes hilos para hacer diferentes tareas.Si su programa está estructurado con uno o dos de los principales hilos y muchos subprocesos de trabajo haciendo la misma cosa, el embrollo en el flujo de control de la OO programas son más fáciles de manejar, como todos los subprocesos de trabajo serán aislados en lo que tocan y que puede ser considerada como una monolítica de la sección de código.Considerar cualquier otro paradigma de la realidad.Funcional destaca en el multithreading (la falta de efectos secundarios es una gran bendición), y el objeto de la programación basada en puede dar favores con algunos de la encapsulación de la OO, sin embargo, con más de trazabilidad código de procedimientos en las secciones críticas de su código base.Procedimiento de curso sobresale en esta arena.

Algunos lugares donde OO no es tan bueno son donde usted está tratando con los "Sets" de datos en SQL.OO tiende a hacer un conjunto de operaciones basadas en la más difícil porque no está realmente diseñado de manera óptima tomar la intersección de dos conjuntos o la superconjunto de los dos conjuntos.

También, hay momentos en que un enfoque funcional, tendría más sentido como el de este ejemplo, tomado de MSDN:

Considere, por ejemplo, la escritura de un programa para convertir un documento XML en una forma diferente de datos.Mientras que sin duda, sería posible escribir un programa de C# que se analiza a través del documento XML y aplicar una variedad de sentencias if para determinar qué acciones tomar en diferentes puntos del documento, podría decirse que un enfoque superior es escribir la transformación como un eXtensible Stylesheet Language Transformación (XSLT) del programa.No es de extrañar, XSLT tiene una gran racha de funcionalismo dentro de ella

Me ayudan a pensar de un determinado problema en términos de las 'cosas'.

Si el problema puede ser considerado como que tiene uno o más 'cosas', donde cada 'cosa' tiene una serie de atributos o piezas de información que se refieren a su estado, y un número de operaciones que se pueden realizar sobre ella - a continuación, la programación orientada a objetos es probablemente el camino a seguir!

La clave para el aprendizaje de la Programación Orientada a Objetos está aprendiendo acerca de un Patrón de Diseño.Al aprender acerca de los patrones de diseño se puede ver mejor cuando las clases son necesarios y cuándo no lo son.Como cualquier otra cosa, utilizado en la programación de la utilización de clases y otras características de la programación orientada a objetos idiomas depende de su diseño y de los requisitos.Como los algoritmos de los patrones de Diseño son un nivel más alto concepto.

Un Patrón de Diseño juega papel similar a la de los algoritmos para los lenguajes de programación tradicionales.Un patrón de diseño que se explica cómo crear y combinar objetos para realizar una tarea útil.Como el mejor de los algoritmos de los mejores patrones de diseño son lo suficientemente generales como para ser de aplicación a una variedad de problemas comunes.

En mi opinión es más una cuestión acerca de usted como persona.Ciertas personas piensan mejor en términos funcionales y otros prefieren las clases y los objetos.Yo diría que la programación orientada a objetos es más adecuado cuando coincide con su interna (subjetiva) de los modelos mentales del mundo.

Orientado a objetos de código y el código de procedimiento diferentes puntos de extensibilidad.Objeto soluciones orientadas a facilitar la adición de nuevas clases sin necesidad de modificar las funciones existentes (véase la Abierto-Cerrado de Principio), mientras que el código de procedimiento permite agregar funciones sin necesidad de modificar sus estructuras de datos.Muy a menudo diferentes partes de un sistema que requieren diferentes enfoques, dependiendo del tipo de cambio que se espera.

OO permite lógica ligada a un objeto para ser colocado dentro de un solo lugar (la clase o el objeto), por lo que puede ser disociada y más fácil de depurar y mantener.

Lo que he observado, es que cada aplicación es una combinación de OO y el código de procedimiento, donde el código de procedimiento es el pegamento que une a todos los objetos juntos (al menos, el código en su función principal).El más usted puede convertir su código de procedimientos en OO, más fácil será mantener yor código.

¿Por qué la programación orientada a objetos se utiliza para la programación:

  1. Su flexibilidad – programación orientada a objetos es muy flexible en términos de uso de las implementaciones.
  2. Puede reducir sus códigos fuente en más de un 99,9% – puede parecer que estoy exagerando, pero es cierto.
  3. Es mucho más fácil en la implementación de la seguridad – todos sabemos que la seguridad es una de las exigencias vitales cuando se trata de desarrollo web.El uso de la programación orientada a objetos puede facilitar las implementaciones de seguridad en sus proyectos web.
  4. Esto hace que la codificación más organizada – todos sabemos que un Programa de Limpieza es una Codificación Limpia.El uso de la programación orientada a objetos en lugar de los procedimientos de que hace las cosas más organizado y sistematizado (obviamente).
  5. Ayuda a tu equipo a trabajar unos con otros con facilidad – sé que algunos de ustedes han tenido/tienen experimentado equipo de proyectos y algunos de ustedes sabe que es importante contar con el mismo método, implementaciones, algoritmo etc, etc, etc

Depende del problema:el paradigma de la programación orientada a objetos es útil en el diseño distribuido de sistemas o marco con una gran cantidad de entidades residentes durante las acciones del usuario (ejemplo:aplicación web).

Pero si usted tiene un problema de matemáticas que se prefiere un lenguaje funcional (LISP);para una interpretación crítica de los sistemas utilizará ADA o C, etc, etc.

El lenguaje de programación orientada a objetos es útil porque también uso probabily el recolector de elementos no utilizados (uso automático de la memoria) en la ejecución del programa:usted programa en C un montón de tiempo que usted debe depurar y corregir manualmente un problema de memoria.

Programación orientada a objetos es útil cuando se tienen las cosas.Un zócalo, un botón, un archivo.Si al final de una clase en la er es casi siempre una función que simula ser una clase.TestRunner más que probable debe ser una función que se ejecuta pruebas(y probablemente el nombre de ejecutar pruebas).

Personalmente, creo que la programación orientada a objetos es prácticamente una necesidad para cualquier aplicación.No me puedo imaginar tener un programa de más de 100 mil líneas de código sin utilizar programación orientada a objetos, se trataría de un mantenimiento y diseño de pesadilla.

Yo digo que cuando la programación orientada a objetos es malo.

Cuando el arquitecto escribe realmente complicada, no documentado de la programación orientada a objetos.Deja a la mitad de camino a través del proyecto.Y muchas de las piezas de código que se utiliza a través de diversos proyectos tiene código que falta.Gracias a dios por .NET Reflector.

Y la organización no se estaba ejecutando Visual Source Safe o la Subversión.

Y me siento.2 páginas de código de inicio de sesión es más bien ridículo, incluso si es cutely OOPed....

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