2010-01-27 28 views
17

Creo que la programación orientada a objetos está sobrevalorada, sin embargo, quiero aprender este paradigma. He intentado hacer esto en PHP 5 y C++ con QT 4. Desafortunadamente, tiendo a programar de forma estructurada, no uso mucha herencia ni instancias múltiples. Creo que tengo que aprender un lenguaje orientado a objetos puros que me obliga a usar las características anteriores.Buscando un lenguaje orientado a objetos puros

Creo que la mejor opción es probablemente aprender Ruby. ¿Podría confirmar o nombrar una mejor alternativa?

Trabajo principalmente en un x86-64 Linux.

+3

"Lamentablemente, tiendo a programar de forma estructurada," - ¿Cómo es la programación orientada a objetos no la programación estructurada? – PatrikAkerstrand

+2

@Machine, ¿Has visto un código Java del programador "nuevo en programación"? –

+4

@Aiden Bell - ¿Has visto algún código de programador 'nuevo en programación'? :) – willcodejavaforfood

Respuesta

32

La programación orientada a objetos no se trata de sintaxis. Es un paradigma de programación.

Un lenguaje puede obligar a utilizar los objetos (si todo es un objeto, por ejemplo) pero usando uno de esos idiomas no va a "forzar" a aprender programación orientada a objetos.

No utilizar gran parte de la herencia ni varias instancias

usted tiene que aprender cuando y por qué utiliza estas técnicas (resumen de los datos, encapsulación, polimorfismo y la herencia) a pensar en objetos. Obtenga una buena referencia en programación orientada a objetos y use cualquier lenguaje (que admita OOP) con el que se sienta más cómodo para aplicar esas técnicas.

+1

"" Inventé el término orientado a objetos, y puedo decirle que C++ no era lo que tenía en mente "-> https://www.youtube.com/watch?v=oKg1hTOQXoY&t=634s –

7

Pruebe Java o C# en Mono.

Justificación:

  1. Respeto Smalltalk, y uno sin duda debería conocer sus conceptos programación orientada a objetos para entender mejor, pero el aprendizaje de la lengua en sí es mi humilde opinión poco práctico.

  2. Si bien Java y C# podrían no ser "absolutamente puros" en cuanto a OOP (p. Ej., Incorporaron algunos de los enfoques de programación funcional), están inherentemente basados ​​en OOP, son mainstream (así tienen comunidades mucho más grandes) y son más fáciles de aprender que Smalltalk en mi humilde opinión.

+0

¿No sería eso C#? –

+5

Mono es un marco, no es un lenguaje. Supongo que te refieres a C#. –

+0

Java no es un lenguaje orientado a objetos "puro" ... Tiene tipos básicos fuera de la jerarquía de clases. – fortran

7

Para un lenguaje orientado a objetos puro, mira Smalltalk. Estoy leyendo esto en este momento.

Espero que esto ayude.

20

Si quiere un lenguaje OO puro, intente Smalltalk. Todo es un objeto en Smalltalk. Este no es el caso de Java, donde los tipos primitivos (int, float) no son objetos por sí mismos.

Si need't ser un lenguaje orientado a objetos 'puro', Java es una buena opción porque es más convencional.

+2

Yap, Smalltalk es tan estricto OO como las cosas pueden llegar. Por lo que recuerdo, no hay operadores ni comandos excepto 'self' (equivalente a' this' en otros idiomas) y creo que algo que apunta a los miembros de la clase "estáticos". Todo lo demás es un objeto, y realmente todo lo demás. Esto va tan lejos como que los bloques de código son objetos, a los cuales se aplican los métodos/mensajes 'If' y' ElseIf'. También debe replantearse al hacer aritmética porque no existen reglas de precedencia del operador, ya que '+' y '*' son métodos aplicados a un objeto numérico y, por lo tanto, se evalúan en el orden de aparición. – herzmeister

+0

@michas Smalltalk también le enseñará el patrón MVC, y no le presentará la locura de los sistemas de clases C++/PHP. Puedes probar Ruby, y te ayudará a aprender (especialmente las partes de metaprogramación), pero si quieres saber cómo diseñar OO, las bibliotecas de Smalltalk son casi tan buenas como las que obtendrás. –

+0

Creo que los juicios de POO "puros" son generalmente sin sentido, producidos a partir de un pensamiento limitado. Nunca se ha inventado nada llamado OPP (programación pura de objetos), y en Java, no se pueden usar primitivas u operadores sin envolverlos en objetos. Adelante, inténtalo. Es un objeto "orientado". –

5

Una gran cantidad de personas están sugiriendo Smalltalk, así que voy a ser diferente y sugerir Eiffel. ;)

Un buen lenguaje para aprender los principios de OO, también tiene cosas claras como DBC (Design By Contract).

+0

Eiffel no es un lenguaje de programación. –

+1

@ RogerF.Gay: Ok, podrías explicar de qué se trata? – FrustratedWithFormsDesigner

6

El problema no es el idioma. Independientemente del idioma que use, podría codificar todo en una clase, o usar métodos de nivel de clase, y terminar escribiendo código estructurado. Si bien un lenguaje de OO puro lo hará más difícil, califiqué a muchos estudiantes que intentan calzar la programación estructurada en Java y C#.

Mi sugerencia sería buscar algunos buenos ejemplos de programación OO, y observar cómo OO se presta a ciertos patrones de diseño que realmente muestran el poder de OO para hacer las mismas cosas, pero con menos código de programación estructurada eso es mucho más legible para otros programadores.

+0

Buenas sugerencias, pero sugiero * primero * hablar con colegas o amigos: generalmente es más divertido y un mejor uso del tiempo (probablemente limitado). – NVRAM

+0

Doh. Por supuesto, me olvidé de hablar con compañeros de trabajo. Esa es casi siempre la primera paso al hacer algo nuevo, y fue una de esas cosas tan obvias que lo olvidé. –

7

El problema no es realmente el idioma, pero la forma en que lo utilice.

No utilizamos las características de OO porque son elegantes, pero porque ganamos el tiempo (incluido el largo plazo del curso) con ellas.

¿Puedo sugerir teniendo su código revisado por un compañero programador? ¿Y lo discuten? ¿Y puedes revisar el suyo? Creo que la retroalimentación te ayudaría mucho más que leer o escribir código solo, donde no tienes que confrontar o discutir cosas en un código concreto.

1

probar el sistema Common Lisp Object (CLOS). No es una POO "pura" como Smalltalk pero la jerarquía de tipos en lisp es al menos completa (que es más de lo que se puede decir de Java), y la mayoría de los otros lenguajes, incluso OO, no tienen métodos genéricos, multidispatch, método combinaciones, esp: antes,: después y: alrededor. objetos de clase de tiempo de ejecución, o instancia de reinicialización, todo lo que proporciona CLOS.

4

que sugieren pitón. Pasa el criterio "todo es un objeto => lenguaje OO puro" mencionado por algunos otros para elegir Smalltalk. Las funciones e incluso el valor nulo de Python (None) son todos objetos.

Es más OO que Java (Java tiene int y Integer). Y, lo que es más importante, es mucho más popular que Smalltalk, por lo que es más probable que pueda obtener ayuda con él.

Python también lo hace el polimorfismo sin herencia ("pato-escribir") y la programación funcional, ambos de los cuales son cada vez más comunes en los idiomas "principales".

2

creo que es mejor si se sigue haciendo lo que estás haciendo y poco a poco intenta trabajar OO en su estilo de programación en lenguajes multiparadigma. OO es una gran manera de modelar algunas cosas, pero no es el final de toda la programación. OO es ideal donde necesita flexibilidad. El procedimiento es un paradigma perfectamente bueno para partes de su código donde desea una solución simple a un problema simple y no necesita mucha abstracción.

Aprender un idioma OO "puro" le dará una idea de cómo para usar las características OO, pero como no se verá obligado a elegir qué paradigma usar para una determinada pieza de código, no lo hará darle una buena sensación cuando para usarlos.Creo que una forma mucho mejor de aprender OO práctico, a diferencia de OO como religión, es aprender un lenguaje multiparadigma como D, Python o Ruby (o seguir con C++ y PHP, aunque las características de OO de estos lenguajes son muy "atornilladas"). en "), lea sobre los patrones de diseño para comprender el" por qué "de OO, y gradualmente intente integrar más diseño de OO en sus programas, con la capacidad de comparar los resultados con lo que habría escrito de forma procedimental en el mismo idioma. La versión OO a menudo será mejor, pero no siempre.

1

Le sugiero que tome un enfoque similar al ágil y simplemente escriba el código de la manera que considere natural para usted. Luego intenta volver a factorizarlo al paradigma OO. Recomiendo mucho el clásico de Marin Fowler sobre el tema (refactorización) y luego una buena profundización en Design Patterns de Gang-of-four (muy conocido, inconfundible), entonces quizás "Refactoring to Patterns" de Joshua Kerievsky y nuevamente PoEAA de Fowler, pueden llegar muy lejos en la comprensión y pensando en OO.

Esto está en contraste con el enfoque Up-Front-Deisng de tratar de hacer OO después de leer cosas sobre conceptos de OO. No es necesario mencionar que un buen conocimiento teórico está bien pagado al probar el enfoque de tipo ágil, pero el espíritu es refactorizarse en OO en lugar de pivotar desde cualquier cosa que estés haciendo ahora a OO.

-2

Veo muchas sugerencias aquí para aprender idiomas que francamente no se pueden comercializar. Como joven, puede que no te importe y tengas este entusiasmo por aprender (sé por qué he estado allí), pero en el futuro, cuando llegue el momento de poner comida sobre la mesa, te arrepentirás de haber perdido el tiempo con estos idiomas. Ada es honestamente mi idioma favorito y me encantaría programar para una carrera, pero ella no paga las cuentas así que tuve que romper con ella. :(

+0

Triste y tonto. –

2

Lea el artículo Design Principles Behind Smalltalk de Daniel HH Ingalls, que implementó Smalltalk. Se dicta la verdadera esencia de la programación orientada a objetos.

0

programación orientada a objetos tiene muy poco que ver con lo que el lenguaje que utiliza y mucho La programación orientada a objetos depende de cómo se planean las cosas y cómo se estructura el código. Se puede usar un lenguaje como Java, que te obliga a usar algunas características orientadas a objetos, pero si simplemente te sientas y ponga todo su código en el método main() que no ha hecho ninguna programación orientada a objetos.

Mi sugerencia no es aprender un idioma diferente, sino estudiar el paradigma de la programación orientada a objetos en sí misma y las diversas formas en que se planifica e implementa un programa utilizando análisis y diseño orientados a objetos. Aprenda sobre la abstracción, la encapsulación, la herencia y el polimorfismo para comenzar. Siéntete bien con UML. Luego estudie los patrones de diseño que se usan en la programación orientada a objetos.

Asegúrate de hacer todas estas cosas antes de codificar. El mayor shock que puede enfrentar es cuánto tiempo debe pensar antes de codificar algo. Dedicar el tiempo para planificar su programa de una manera orientada a objetos es muy difícil para las personas acostumbradas a simplemente sentarse y codificar de una manera orientada a procesos. Si se toma el tiempo de planear lo que va a hacer de antemano (por supuesto, no se vuelva loco ya que la programación se trata de pequeñas iteraciones), descubrirá que puede crear código mucho mejor la primera vez, por cada vez más complejo Tareas.

Cuestiones relacionadas