¿Es Java crucial para comprender completamente la POO?

Absolutamente no. Ni siquiera es un lenguaje particularmente bueno para entender la POO. Java lleva demasiado equipaje que ofusca los conceptos y técnicas de OOP, algo de lo que intenté advertir a las universidades.

La forma más simple y pura de entender la POO es aprender Smalltalk. Es el principal idioma de OOP en el mundo. Fue el primer idioma en popularizar OOP, comenzando con la famosa portada de BYTE de 1981:

Smalltalk fue tan bueno que sirvió como arquetipo para casi todos los lenguajes modernos de OOP como Objective-C, Ruby, Java, Python, Perl, PHP, Groovy, Scala, Dart, CLOS, etc. Pero todos estos lenguajes son “impuros ”Desde el punto de vista de OOP.

Como siempre digo: Smalltalk está bien hecho.

Para obtener más información, lea Cómo aprender Smalltalk puede mejorar sus habilidades como programador.

Y vea mi respuesta a ¿Qué hace que un lenguaje de programación sea “genial”? Smalltalk es realmente muy, muy bueno.

Java no es realmente muy especial, mucho menos crucial, cuando se trata de programación orientada a objetos. Muchos otros idiomas, tanto antiguos como nuevos, tienen características similares disponibles. Si su objetivo es aprender OOP en su forma más pura, entonces Java no es lo suficientemente POO; El idioma que está buscando es Smalltalk. Si su objetivo es convertirse en un desarrollador de Python, aprenda Python, incluso si su versión de OOP es realmente dudosa en algunos aspectos.

En cuanto a los recursos, podría ser una persona aburrida, pero acabo de leer la referencia del lenguaje Python mientras codifico un proyecto menor.

Creo que cualquiera que haya salido al mundo afirmando tener una gran experiencia en OO, pero que no conocía Java, no sería tomado en serio.

Java fue el lenguaje correcto en 1997. Para las aplicaciones comerciales, fue un gran avance en el estándar OO del día, que era C ++. Es relativamente difícil escribir código con errores, y está claro. No es perfecto Después de 20 años, es largo en el diente. Se han agregado relativamente pocas características desde JDK 1.2 (aunque lejos de ninguna). El modelo de objetos es comprensible e implementa todos los conceptos críticos esbozados por Alan Kay, et al.

También es rápido. Python es muchas cosas, pero no rápido. El modelo de objetos de Python es subóptimo en mi experiencia, para la enseñanza, el aprendizaje y el desarrollo. Es popular por muchas razones, pero no necesariamente las razones correctas. De los lenguajes relacionados, prefiero Ruby para OO y Perl para expresividad / velocidad. He escrito bastante Python (1, 2 y 3), pero nunca me encontré con un proyecto grande y decidí que Python era la herramienta ideal. Si estaba trabajando en un problema de aprendizaje automático y quería una biblioteca, scikit-learn sería, y para la expresión matemática, lo mismo se aplica a numpy, pero esas no son cosas en las que estoy trabajando en este momento.

Lo más crítico que Java agrega a OO y que Python falta es la escritura estática y fuerte. No estoy diciendo que escribir más pesado sea mejor, pero debes entender qué hace, cómo funciona y cuáles son sus consecuencias. La otra cara también es cierta; ¡Necesitas entender la escritura dinámica y débil! Java no es más suficiente para OO que Python.

No temas tener más conocimiento y aprender nuevos idiomas. Eventualmente, aprender un nuevo idioma no se convierte en un gran problema, o incluso trivial.

Terminaré acordando con Ivan Milosavljević: cuando esté listo, avance a través del Object Thinking de Dave West. No es un tratamiento ligero y no es donde comienzas, pero Dave es uno de los grandes “grandes pensadores” en OO. Él me ha influenciado mucho a mí y a mi trabajo, y más allá de eso, explorar los fundamentos intelectuales y los fundamentos de OO es simplemente divertido.

Aunque OOP es un paradigma general, cada lenguaje de programación tiene algunas características diferentes de OOP. NO necesita aprender todas estas características de OOP en estos idiomas; en su lugar, manténgase en el idioma que usa actualmente.

Si está interesado en los modelos OOP, hay algunas alternativas interesantes:

  • Lua: Lua presenta una interesante OOP basada en prototipos, como la de JavaScript, emulada con la tabla Lua.
  • Perl: Perl tiene tres sistemas OO más, desde hash bendecido hasta los objetos de adentro hacia afuera hasta Moose. Puede saber cómo se emula OO en un idioma.
  • C: ¿Es C un lenguaje OO? Definitivamente, ver el libro OOC [1].
  • R: R tiene tres sistemas OO, S3, S4, RC.

Estos lenguajes muestran que el sistema OO de Java (o C #) no es todo el mundo.

Notas al pie

[1] https://www.cs.rit.edu/~ats/book

No.

El truco es que OOP es un tema vago. Por ejemplo, Java hace POO de manera diferente que C ++ o Python. En un LISP puede escribir su propio sistema OOP.

Si realmente lo necesita, vaya a “Patrones de diseño” de Gamma et al. El famoso libro “pandilla de cuatro”. Python es un vehículo tan bueno como cualquier otro para practicar esos patrones. Además, y lo que es mucho más importante, intente seguir el código de otras personas.

En mi experiencia, pocos de esos patrones encuentran su camino en el software. Adaptador y Fábrica son los dos principales, pero hay muchos otros que pocas personas recordarían pero que solo usan.

Definitivamente no.

Java es solo un ejemplo de un lenguaje OOP. Ciertamente, no es el único, y en mi opinión, ni siquiera el mejor. Hay muchos otros lenguajes de programación que admiten OOP. Por varias razones, Java se ha convertido en un lenguaje popular para la programación de enseñanza en general, y OOP en particular, en muchas escuelas, colegios y universidades. Pero eso definitivamente no lo convierte en el único camino a seguir.

Python es una buena forma de aprender OOP. Algunos otros lenguajes de programación que puede estudiar para este propósito son: Smalltalk, Python, Ruby, C # y JavaScript.

No.

Primero, simplemente comenzaría a aprender programación en general. Solo comienza a codificar al hombre. Nada peor que alguien poniendo OOP primero sin mucha experiencia en codificación. He visto personas así y tienen un millón de clases diferentes con unas pocas líneas cada una.

Una vez que sienta que es competente en Python, un recurso realmente bueno es simplemente tomar una biblioteca de código abierto que conozca bien funcionalmente y eche un vistazo a cómo lo hicieron.

Aprender Python, pero creo que realmente tengo un buen presentimiento sobre OOP, la respuesta sobre Java es No. Pero esta es simplemente mi opinión. Una generación ligeramente anterior podría apuntar a Smalltalk-80 (o ahora Squeak). Creo que si realmente quieres entender la POO, aprende Simula 67 (otros colegas también respaldan esto; también supone la apreciación de otros idiomas como alguna versión de LISP).

El mejor recurso para aprender OOP que conozco es el libro de David West “Object thinking”. Recomiendo leerlo al menos dos veces para comprender completamente lo que está escrito en su interior.

More Interesting

Dada la potencia computacional suficiente, ¿serían los objetivos de la mecánica del continuo tan complicados de lograr? Es decir, ¿sería matemáticamente más sencillo modelar sistemas de forma discreta que continua?

¿Es posible construir una máquina de Turing omnipotente?

¿Hay ejemplos fractales que usen entradas aleatorias externas de alguna manera en las iteraciones?

¿Están algunas de las máquinas en 'On Computable Numbers' (A. Turing 1936) buggy?

¿Quiénes son los mejores profesores que trabajan en algoritmos de aproximación?

Si se resuelve el problema P vs. NP, ¿se vuelve obsoleto el software criptográfico moderno? ¿Si es así, cómo?

¿Cuáles son algunas aplicaciones del mundo real de min-cut en la teoría de grafos?

¿No fue [math] flag [B] [/ math] modificado por thread [math] B [/ math] antes de [math] read_ {B} (flag [A] == false) [/ math]? ¿Por qué es una contradicción?

¿Por qué es necesaria una variable de control en un experimento?

¿Qué nivel de matemática se requiere para comprender y desarrollar algoritmos?

¿Cómo convertiría estos datos matemáticos a la función por partes?

¿Cómo debo aprender programación competitiva cuando soy malo en matemáticas?

¿Cuáles son algunas aplicaciones interesantes y menos conocidas de la ciencia de datos (aprendizaje automático, gráficos aleatorios, altas dimensiones, etc.) al comercio electrónico?

¿Cuál es el significado del teorema de Valiant?

¿Se pueden programar las computadoras con 0,1 y 2? ¿Qué tal 0,1,2 y 3? ¿O son todos los programas manipulaciones de 0 y 1? Nuevos detalles añadidos para explicar.