Aprendí Python y ahora quiero aprender un lenguaje OOP. ¿Debo aprender Java o C ++?

Quildreen ya lo dijo:

Python es un lenguaje capaz de expresar mejor los conceptos de OO que Java y C ++. El código idiomático en Java y C ++ es más procesal.

Pero veamos por qué estoy tan de acuerdo con eso. En Python, todo es un objeto. Aunque quizás sea una ligera exageración, es cierto que puedes tratar casi todo de manera consistente. Si define una clase, puede hacer objetos con ella. La clase misma también es un objeto. La clase base fundamental, objeto, también es un objeto. Funciones? Objetos. Valores primitivos? No exactamente; los tipos incorporados son … objetos.

También diría que el hecho de que Python no te obligue a envolver todo en un objeto es un beneficio para OOP, no un inconveniente . Exploremos eso en el contexto de …


Java Aunque a menudo se promociona como una especie de lenguaje OOP global, final, creo que es un hash absoluto de varias cosas importantes:

  • Las primitivas son fundamentalmente diferentes de los objetos. No tienen lugar en la jerarquía de clases, no puede tener referencias a ellos, se comportan generalmente de maneras muy extrañas. El autoboxing es una solución muy pragmática , pero no es realmente transparente y debes ser consciente de ello. (Por ejemplo, una matriz de enteros es algo muy diferente de una matriz de entradas).
  • Muchos más elementos léxicos no se representan como objetos, porque no son tipos de primera clase. Aunque puede “reflexionar” y obtener acceso a clases y métodos, no son una parte natural del lenguaje de la misma manera.
  • Poner todo en una ‘clase’ hace daño a OOP. No todo es lógicamente parte de una clase, pero Java no ofrece ninguna forma de expresar este hecho; en cambio, sobrecarga la palabra ‘clase’ para significar “a veces una clase en el sentido OOP, y a veces una especie de espacio de nombres para métodos estáticos”. La clase de matemáticas es el ejemplo más obvio, pero cada vez que veo un método estático, me encuentro al menos considerando si debería ser una función simple y antigua.
    Al obligarlo a poner todo en una ‘clase’, Java diluye el diseño OOP

C ++ … oh, C ++. De hecho, creo que puede expresar conceptos OOP como Python. Los tipos primitivos no son objetos, pero puedes trabajar con ellos sin preocuparte demasiado por ello. (¿Cómo podría saber si algo es un typedef para un tipo entero primitivo, o una clase sin métodos públicos, excepto constructores, y un grupo de operadores sobrecargados?) Las clases y funciones no son tipos de primera clase, pero al menos puede pase funciones, si está dispuesto a vivir con la migraña de los punteros de función.

Pero C ++, ese famoso pulpo de agregar patas a un perro, es un lenguaje enorme y extenso con una enorme cantidad de características, que se agrega explícitamente en lugar de emerger naturalmente. Considere el lenguaje de plantilla, que se dice que es Turing completo, y muy poderoso siempre que no le importe los mensajes de error que hacen que sus ojos sangren. Considere la increíble cantidad de legado en el idioma. RAII es realmente una buena idea, pero lea Exceptional C ++ y más Exceptional C ++ y dígame si cree que alguna vez diseñará una aplicación segura de excepción.

Tengo la impresión de que las empresas y grupos que usan C ++ y se mantienen cuerdos lo hacen delineando fuertemente qué partes del lenguaje se les permite usar y cuáles son verboten.

En principio, no me gusta C ++ de la forma en que hago Java, pero no puedo imaginar querer trabajar en él, excepto posiblemente escribir pequeñas extensiones para lenguajes de nivel superior, donde preferiría mantener mi lógica; y luego solo usaría C ++ como C con un montón de conveniencias poderosas como clases, y no importa todas esas locuras.

Python es un lenguaje capaz de expresar mejor los conceptos de OO que Java y C ++. El código idiomático en Java y C ++ es más procesal.

Sin embargo, si quieres aprender OO, te recomendaría un dialecto Smalltalk. Leer algo como “Squeak by Example” o “Smalltalk by Example” mientras trabaja con Smalltalk le dará una muy buena visión de qué es OO, cómo es aplicable para resolver problemas de programación y qué tipo de herramientas le gustaría tener para trabajando con aplicaciones OO. No conozco ningún otro idioma que se acerque a Smalltalk (y sus dialectos: Self, Newspeak, etc.) en lo que respecta a estas preocupaciones.

Entonces, como se ha dicho, Python es OO en el sentido clásico, y con un sistema de tipo fuerte que lo acompaña. Para divertirse, busque el paquete de código en la biblioteca estándar. Puede hacer objetos de intérprete de Python en tiempo de ejecución. Literalmente, todo lo que usa en Python es un objeto.

Ahora, algunas personas afirman que Python rompe la encapsulación, pero en su mayoría Python tiene la filosofía de que el usuario final es un adulto que puede cuidarse a sí mismo. Con ese fin, a diferencia de Java, Python supone que todo es público, pero ofrece herramientas para crear miembros privados.

Para responder a la pregunta inicial: si desea profundizar en Python, C ++ le permitirá comenzar a comprender la fuente Python y las extensiones C.

Java le dará un paradigma ligeramente diferente y un nuevo objetivo de desarrollo.

Entonces, realmente, elige.

Como se mencionó en otras respuestas, Python es el lenguaje OOP en sí mismo, por lo tanto, si su objetivo es conocer algo del lenguaje OOP, ya se ha logrado.
Otra pregunta es qué vas a hacer con el idioma recién estudiado. Si va a desarrollar aplicaciones del lado del servidor o hará algún desarrollo de Android, entonces Java debería ser su elección. Por otro lado, si desea planear profundizar aún más su dominio de Python, entonces C ++ le servirá más porque le permitirá vincular fácilmente algunas partes críticas de su aplicación Python al código nativo y eficiente que puede mejorar significativamente su aplicación. rendimiento (como lo hicieron en el caso de Dropbox, por ejemplo).

Nunca estudies nada por el simple hecho de estudiar. Estudio para usar.

En caso de que no lo supiera, python es un OOPS (secuencia de programación orientada a objetos). Le sugiero que avance más hacia la parte orientada a objetos de Python, ya que se asegurará de que comprende los conceptos centrales de objeto o programación (ya que ya está familiarizado con él). El próximo idioma que desea aprender depende completamente de lo que desea lograr. Java es bueno para el desarrollo de aplicaciones, mientras que C ++ abre las puertas al desarrollo de software y SO (principalmente). Si te quedas con Python, puedes seguir adelante y explorar la ciencia de datos en mayor medida. La decisión es tuya. Espero que esto ayude.

Hey hombre. Python en sí está orientado a objetos.

Sin embargo, si prefiere aprender algo de diseño clásico orientado a objetos. Recomendaré Java. Java está diseñado para estar totalmente orientado a objetos, excepto para algunos tipos primarios. ¡Incluso la función principal está envuelta en una clase! Por otro lado, C ++ es compatible con C, lo que significa que está menos orientado a objetos en comparación con Java.

Realmente depende de tus intereses y de lo que intentas lograr con tu nueva “espada”.

Si desea crear cualquier aplicación con latencia extremadamente baja, como el sistema de comercio de alta frecuencia o el marcapasos, le sugeriría C ++, ya que es un lenguaje de programación de bajo nivel o más bien la única opción entre las opciones que mencionó.

Como lo popular de Ben con gran poder viene una gran responsabilidad. Se debe tener mucho cuidado al tratar con C ++. La recolección de basura es un dolor que hace llorar a los grandes programadores. Otra ventaja es que puede C ++ es que puede escribir enlaces que podrían usarse con sus aplicaciones Python. Lo mismo se puede hacer con Java, pero con C ++ es más una norma.

Si la latencia no es realmente una preocupación y el tiempo de los programadores es más valioso, entonces sugiero que Java sea la mejor opción

Si está saliendo de Python y quiere comprender bien la POO, debe sumergirse en Java. Java y C ++ son muy similares sintácticamente, pero Java será más indulgente que C ++, lo cual es realmente bueno si está comenzando. En Java, no tiene que preocuparse por la administración de memoria (liberar memoria asignada en el montón), y no tiene que preocuparse por usar punteros (esta sería una de las cosas más difíciles de aprender en C ++). También he encontrado que la documentación para las bibliotecas Java es mucho más fácil de entender que C ++ STL (Biblioteca de plantillas estándar). También depende de lo que esté buscando obtener de su experiencia de aprendizaje. Considero que Java es excelente para el desarrollo rápido de grandes aplicaciones de back-end, proyectos de investigación de tamaño medio, etc. C ++ también funciona bien aquí, pero como dije antes, hay algunas cosas tediosas como punteros que vienen junto con él que requieren para saber más sobre cómo se refleja exactamente lo que está escribiendo en el código en los niveles inferiores de su computadora. Supongo que la respuesta final es una o ambas, pero Java le permitirá centrarse más en los conceptos de OOP y no escupirle vagos errores de Falla de segmentación cuando solo intenta escribir una clase simple. Buena suerte 🙂

Python tiene algunas características de un lenguaje de programación orientado a objetos. Si eres un principiante, te recomendaría ir a Java. Al principio, la programación en C ++ podría sentirse como caminar en un campo minado. Puede tomarse un tiempo para acostumbrarse a esos conceptos. Si te gusta la programación de sistemas o algo en lo que el rendimiento es crítico, C ++ es para ti.

Pero si quieres aprender conceptos de POO, entonces comienza desde Java. Es mucho más fácil ya que vienes desde Python. En Java, no necesita preocuparse mucho por la asignación y liberación de memoria (como no “borrar” las asignadas con “nuevo” en C ++ puede causar pérdidas de memoria).

O hay otra opción. Prueba Ruby. Es similar a Python: escrito dinámicamente y un lenguaje de script.

“Aprendí Python”

¿Qué quieres decir con eso?

Que Tú

  1. han desarrollado una gran cantidad de software escrito en Python o
  2. ¿Acabas de terminar un tutorial?

No es lo mismo.

Hasta que hagas 1, déjame decirte: no aprendiste Python.

De acuerdo con el primer párrafo de la respuesta de Quildreen Motta, y también con el segundo donde dice que si quieres OO, quieres Smalltalk (o dialecto; o al menos OO o CLOS de Racket), pero te gustaría recomendar que también pruebes las funciones OO de Python, porque el entorno te resultará más familiar, por lo que quizás sea menos confuso al principio (o tal vez la versión pura de Smalltalk sea menos confusa; esto es algo que tienes que ver por ti mismo).

Necesita al menos los capítulos 6 y 8 de este libro – Programación en Python 3: una introducción completa al lenguaje Python. Pruébelo por un momento, luego lea los libros recomendados por Quildreen Motta, luego pruébelo por un momento …

Si haces esta pregunta, entonces no aprendiste Python en absoluto. FYI, Python es completamente OOP.

En primer lugar, Python ya es un lenguaje de programación orientado a objetos.

Para no responder a su pregunta, recomendaría Java debido a sus sólidos conceptos sobre OOP y OOD, también es el lenguaje principal de OOP.

C ++ tiene conceptos orientados a objetos muy básicos y funcionales y será un buen punto de partida, pero utilizará principalmente Java para propósitos de OOP en su vida de desarrollo.

Creo que deberías aprender Java. Tiene muchas ventajas. Aquí hay una respuesta que escribí hace un momento sobre una pregunta similar:

“Creo que Java es mejor. Java es básicamente una versión de C ++ pero sin las características más peligrosas como punteros. Java también contiene matrices que conocen su propia longitud y una superclase general. Si no ha codificado antes, esto significa que Java tiene una forma de hacer que las cosas sean más genéricas y menos propensas a errores. También tiene portabilidad (lo llaman “Escribir una vez. Ejecutar en cualquier lugar”) “.

Bueno, bravo! Python en sí es una OOP . Pero si me pide que elija entre Java y C ++, elegiría C ++ porque creo que después de aprender C ++, abordaría cualquier otra OOP en poco tiempo.

Entonces, ve por C ++.

Puedes probar el lenguaje de programación Ruby. En el aspecto técnico, es similar a Python, limpio y claro, y fácil de aprender.

Puedes comenzar Ruby desde aquí: Aprende Ruby de la manera difícil

Python es un lenguaje OOP.

Java sería mi elección para ti.
Dado que ya conoce los conceptos básicos de programación, solo revise los conceptos de OOP y puede comenzar con JAVA.

Todo lo mejor (y)

Java. La tipificación estática y el polimorfismo contribuyen en gran medida al aprendizaje de la POO.

Lo mismo vale para C #, si no te importa tratar con el diablo.