Aprendiendo Java. Tutoriales y dudas

En inglés:

En español:

A medida que repaso las bases me surgen dudas, como siempre cuestionando la programación orientada a objetos.

En el de guru 99 leo que la poo permite encapsular datos y acciones y que eso permite reutilizar código y trabajar en grupo.

Pero es que me consta que en C ya se modularizaba hace décadas. Por ejemplo recuerdo haber visto piezas de código donde se llamaba a archivos externos que tenían datos o bien se utilizaban en el archivo actual, así que eso es indiferente.

En cuanto a la herencia, Quake 1 está escrito en C y hace algo parecido usando eficientemente programación orientada a datos. El otro día en el post del código de doom 3 puse un enlace a reviews de código y el que lo analizó subrayó esto, a carmack le daba igual que no fuera c++, no lo limitaba. No repetía código inútilmente.

Utilizar subrutinas o llamadas a rutinas externas daría abstracción, sin la Abstracción de la p.o.o, o lo entiendo mal?

Luego, el ejemplo que pone de un banco uniendo datos y operaciones en poo. Me resulta mal ejemplo por contraintuitivo, debería estar separado. Por un lado los datos del cliente, y por otro lado qué hacer con ellos; lo harían funciones sepadadas que consultarían esos datos.

En cambio propone en el ejemplo juntarlo en un sólo objeto o subrutina por lo de unir datos y acciones de la poo. Lo primero que me hace pensar es en datos redundantes en distintos objetos por no consultarlos por separado.

@anon81644913

1 me gusta

@Uzu ya es casualidad que este fuera el de los tutoriales de Java que te comenté antes :xd:. Que por cierto, creo que se explica bien.

No voy a ver el vídeo, pero te parece un mal ejemplo lo del banco porque seguramente lo sea; hay que entender que el ddd mostrenco que tendrá típicamente un banco no se puede describir en un vídeo para principiantes, y que la poo pura casi que ni existe en la realidad.

Siendo evidente que hay que tener una actitud crítica ante lo que te cuentan, tampoco me rallaría demasiado, aprende un poco a hacer funcionar las cosas de la manera que sea y, poco a poco, leyendo, realizando y participando en proyectos más grandes, te irás haciendo una opinión de cómo deben ser las cosas en según qué contextos y necesidades.

Pd: java puta mierda, lenguaje feo con ganas, qué asco le tengo :joy:

¿Cómo pronuncias Java?

lo que he dicho es del segundo enlace, escrito, “para 7 dias” en vez de “en 14 minutos”

Pues Java, obviamente.

Luego si puedo lo leo porque ahora mismo acabo de salir de currar y llevo un dolor de almendra impresionante.

Un saludo.

1 me gusta

kotlin funciona sobre maquina virtual java, por lo que tienes sus ventajas, y además interactúa con java y sus bibliotecas. pero su sintaxis es mucho menos verbose y con tipado estilo pascal, nombre antes que tipo separado con :

google translator:

  • Los métodos en Kotlin se denominan “divertidos” (esto también hace que la programación sea más divertida desde el principio).
  • Si un método no devuelve nada, no es necesario especificar el tipo de retorno (en Java: “void”).
  • Kotlin tiene inferencia de tipo, por lo que no es necesario indicar que “nombre” es del tipo “Cadena”. Simplemente use “val”.
  • Esto también hace que esta variable sea inmutable. Si desea cambiar la variable “nombre”, debe usar “var”. De esta manera, Kotlin te hace pensar desde el principio, al escribir código, sobre tus variables / campos, etc.
  • Para crear una nueva instancia, no se necesita la palabra clave “nueva”.
  • Kotlin y Java son interoperables. Kotlin está utilizando la clase de Java Person sin ningún problema.
  • Los captadores y definidores del código Java se convertirán automáticamente en propiedades, lo que significa que “getName ()” no está disponible en Kotlin, pero la propiedad “name” en Person sí

Cuando miramos hacia atrás en nuestra experiencia con Java y cómo usamos Kotlin hoy, podemos concluir lo siguiente:

  • El código es más conciso, es simplemente menos código para escribir y mantener.
  • El código es más seguro, ya que le hace pensar en (im) mutabilidad, nulabilidad, etc. mientras escribe código.
  • Lo anterior también acelera el desarrollo. Es más fácil hacer cosas complejas.
  • La compatibilidad con IDE es excelente (estamos usando Android Studio).
  • La comunidad es grande y está creciendo. Las bibliotecas existentes admiten o migran a Kotlin, Internet está repleto de blogs, videos, presentaciones y, por supuesto, preguntas / respuestas de StackOverflow.
  • Kotlin está listo para la producción. Lo estamos haciendo y también grandes empresas como Square, Pinterest, Trello y Google.

Y ahora que Google ha anunciado que es compatible con el desarrollo de Kotlin para Android, casi no hay razón para no buscar en el nuevo lenguaje y comenzar a usarlo.

No sabría decirte si se acerca a java en herencia polimorfismo y cosas así en produndidad pero la ventaja de java es que corre en máquina virtual principalmente.

Dices kotlin?

Funciona precisamente con la misma JVM, interactúa con todo lo que tiene java.

Es como la versión buena de Java y google lo ha puesto como segundo lenguaje oficial de Android.

Solo comparaba java con c++

El tema es tener los datos que se han cargado y el codigo que trabajará sobre estos datos en el mismo sitio, es una manera intuitiva de organizar las cosas. Si tienes los datos por un lado y las funciones por otro pues ya estás renunciando a esa agrupación a cambio quizás de tener codigo más reutilizable o más optimizado.

No me extrañaria que en C se pudieran imitar algunos conceptos de OOP de la misma manera que con lenguajes orientados a objetos puedes imitar conceptos de lenguajes funcionales. Pero por mucho que puedas clavar clavos con una llave inglesa, si tienes un martillo usas el martillo.

El ejemplo me ha parecido bastante canónico, no son los datos del cliente, son los datos de la cuenta junto con las operaciones que se pueden hacer en una cuenta, esa es justo la idea. El cliente tendria su propio objeto que se relacionaria con las cuentas de algun modo. No se a que te refieres con lo de datos redundantes, cada cuenta y cada cliente serian únicos.

Ok, entonces se refiere a datos como plantilla genérica en ese ejemplo, y luego instanciar por cliente

En C o Pascal o QBasic sería una subrutina o función que incluiría sus propias variables y procedimientos y funciones anidadas, que a su vez llamarían a datos del cliente externas en otro archivo, ya que la “plantilla” serían funciones que consultan datos del cliente, anidadas dentro de la función o subrutina.

Viene a ser lo mismo.

Kotlin es más bonito, pero llega unos cuantos años tarde en mi opinión. Hay varios lenguajes que ya le han comido la tostada a Java antes. Y la verdad que después de estar varios años programando en Python volver a Java o sus derivados como Kotlin o Scala se me hace impensable. Aunque hay cosas concretas en las que Java es más consistente y estable, por ejemplo, para el tema de montar una API Rest con llamadas asíncronas de forma completamente securizada. Por eso se sigue usando hoy en día bastante Spring Boot con Spring Security y Spring Batch. Yo mismo he programado un motor en Python para procesamiento de correos usando PLN, pero a la hora de montarle una api rest con flask pues es un poco castaña. Me sale más a cuenta montar un sring boot con spring security y batch, y llamar a mi motor mediante un call al sistema recogiendo luego su salida. Puede parecer más rudimentario pero es más seguro y estable.

Un saludo.

1 me gusta

Esto me huele a DDD, a un aggregate root gordo pero que no se puede separar por el propio modelado del negocio del banco. No es para principiantes. Asumirlo de momento y ya le sacarás punta más adelante.

Con Python la sensación que me da es que va muy atrasado en la adopción de asyncio, en otros lados async/await ya se está volviendo lo normal y en Python me encuentro muchas librerias que son de naturaleza asíncrona pero aun no lo usan.

1 me gusta

Correcto, y eso me está dando más de un quebradero de cabeza ahora y es una pena porque cojea bastante en ese aspecto.

Usas Python 2 o 3?

El 3. El 2 ya lo he dejado en deprecated, y es mejor no arrastrar vicios del 2 como sucede con los prints, por ejemplo.

Si hay bibliotecas asíncronas para el 3, nada te impide utilizarlas, no?

Cambiando de tema, ¿usas el chequeo de tipos en editor del 3.5?