Debate sobre OOP

desu

lol todo lo que dice este pibe esta mal... no sera forero?

suerte que hace ya tiempo que aprendí que oop = poop

1 respuesta
eondev

#1 A mi me ha saltado también en el timeline de youtube y ha ido directo a > No recomendarme más este canal xd

1 respuesta
desu

#2 Has hecho bien porque ha soltado en 10 minutos mas gilipolleces que las que se sueltan en este hilo.

1 respuesta
Kaledros

#3 ¿Cómo cuales? Lo digo sin segundas y con curiosidad genuina.

1 respuesta
desu

#4 Es un video muy largo y me da pereza transcribirlo, pero si puede crear un debate interesante lo hago. Si no entiendes mi respuesta pregúntame por algo concreto. 4 puntos.

Ese video habla de como se hace la oop en java y los benficios que te puede aportar.
No habla de la oop en general.

Básicamente la oop es una manera de hacer cosas.
Pero puedes hacer las mismas cosas de otras maneras. No?
Las cosas que haces no definen la manera.

Habla de 4 principios, encapsulacion, abstraccion, herencia, polimorfismo
Estos 3: encapsulacion, abstraccion, polimorfismo. Los puedes tener sin OOP. (la reflection es un patron @Wei-Yu )
La herencia no estoy seguro de que significa la verdad, yo lo entiendo como algo muy característico de OO pero desconozco si se puede interpretar a nivel mas general.

Si en lugar de hacer ese video con ese tono, para mi pedante, te hubiese hecho el video hablando de como conseguir esos 4 principios en oop, (hacer algo de una manera) no me parecería una mierda. Sobretodo cuando lo ve tanta gente, 40k. Calidad pajeet de medium, no hace ningún favor a la comunidad.

Todo esto claro, es mi opinion. Sin entrar al contenido del video que ha soltado un par de perlas.

1 respuesta
Kaledros

#5 Vale, entonces estamos de acuerdo.

Por lo que he visto del vídeo (un 75%, no he podido soportarlo más) no me parece pedante, más bien va dirigido a gente que o se acaba de sacar la FP o aún está estudiando. Cualquiera que no sea un junior no va a sacar de ese vídeo nada que no sepa ya. Es un vídeo sobre programación que no interesará a nadie más, que no profundiza en nada y que repite lo que otros han dicho millones de veces.

Quicir, gilipolleces no son, pero es un gasto de tiempo inútil.

Y lo de la herencia... bueno, sólo lo he visto en OOP, no sé si en otros lenguajes existe algo similar.

1 respuesta
desu

#6 Cuando habla de getters y setters por ejemplo. No se como estara el famoso debate pero si tienes una clase y la llenas de getters y setters para que coño has hecho la "clase"? No viola sus principios?

Luego la mutacion de estado. Utilizar OOP no te garantiza en ningun momento que no haya condiciones de carrera o que se haga un uso inadecuado de clases. Si ademas tienes setters estas exponiendo los campos a todo el modulo directamente xd.

El polimorfismo lo he comentado mil veces. Otros lenguajes tienen polimorfismo de otras formas y con otros pros/cons.

Luego creo dice que la encapsulacion te permite tener TDD. lol Tambien podia haber hablado un poco de DDD y soltar un par de siglas mas que quedan bien.

1 respuesta
Kaledros

#7 Odio profundamente responder citando así porque parece que estoy flipándome y DEMOLIENDO tus argumentos con LOGIC and FACTS, pero es que me es más cómodo. Insisto, no leas esto con acritud.

si tienes una clase y la llenas de getters y setters para que coño has hecho la "clase"? No viola sus principios?

Porque no sabes que existe una cosa llamada Lombok. El boilerplate en los beans es un coñazo, pero esta librería es un regalo a la humanidad.

Utilizar OOP no te garantiza en ningun momento que no haya condiciones de carrera

Cierto, te lo garantiza synchronized, por ejemplo.

Luego creo dice que la encapsulacion te permite tener TDD

No me gusta nada el TDD. Pero nada. Me parece muy poco práctico, inútil para proyectos grandes y que complica más que soluciona.

1 respuesta
desu

#8 Si tienes getters y setters estas exponiendo tus fields privados xd por tanto no te sirve para encapsular el codigo y controlar quien puede acceder a estos campos. Deberías entonces hablar a nivel de visibilidad de modulo / package para demostrar estos principios.

Aademas segun la oop si tienes un objeto animal que tiene una velocidad a la que camina, p.e,
no deberias tener un metodo setVelocity sino que deberias tener un metodo usando el lenguaje "Ubiquitous" y decir move()/run()/walk(), e internamente el metodo move te adaptara la velocidad.

Los getters/setters en los beans se usaba por temas de meta, lo he leido por la maniana en algun lado de hecho. Librerias que scanean tu codigo para gener objetos, spring, jackson/gson, beans...

Ademas se utilizan "hoy en día" para poder usarlos en los maps/filters y hacer programación declarativa.

list.stream().filter(Animal::isDuck).map(Animal::getName).collect()

1 respuesta
Kaledros

#9 Si tu clase es un animal o una entidad que hace cosas pues sí. Si es un DAO o cualquier otro tipo de bean ya no.

JuAn4k4

Si haces oo bien, no deberían poder usar tus objetos mal, de ahi a la encapsulacion. Puedes tener getters que te devuelvan copias del estado, y setters que uses como datos. Pero la gente siempre lo hace mal.

La gente ha usado siempre POJOs en java, que no son más que structs y punto. Crud a db con hibernate y listo

1 respuesta
HeXaN

A mí me hace gracia eso de "es que si creas el objeto correctamente no lo pueden usar mal". Pero hijo de puta, no lo quieras usar mal en primer momento.

desu

#11 Ya bueno, pero si la gente no sabe usar mi código que se le va a hacer? En su día estuve dándole al tema... Te pongo este ejemplo basado en https://fsharpforfunandprofit.com/posts/13-ways-of-looking-at-a-turtle/ Cogi un objeto que tiene estado y lo alteraba, primero oop mutable, luego separe el estado y lo hice funcional, luego hice un "monad".

No se como lo harías tu o a si te refieres a algo diferente.

Pille Scala para probar porque es algo mas potente.. y se asemeja a java/kotlin. Quizas lo utilice muy mal xdd Asi se veria la api.

spoiler
1 respuesta
JuAn4k4

#13 he dicho que no pueden usarlo mal, aunque no sepsn o lo hagan a propósito mal

lo único que hace a oop ser oop, es la encapsulacion, vamos una caja negra. Si abres la caja, eso es el coño de la bernarda.

Lo demas, son chorradas especificas del lenguaje

1 respuesta
eXtreM3
#14JuAn4k4:

lo único que hace a oop ser oop, es la encapsulacion, vamos una caja negra. Si abres la caja, eso es el coño de la bernarda.

Joder esta me la voy a imprimir y la voy a colgar en el tablón de la oficina.

eisenfaust

alguien ha tomado demasiada fp kool aid

r2d2rigo

Leer con entonacion de "el milenarismo va a llegar":

COMPOSITION OVER INHERITAAAAAAAAAAANCE

2
7 días después
varuk

El futuro es la Programación Funcional. Me lo ha dicho el @Bilkoff

eisenfaust

java ya es lo suficientemente lento, no hace falta joderlo mas aun con idioms funcionales

B

@desu es que nunca has oído hablar de los patrones Singleton o Builder ? Esos, y más, te ayudan a tener inmutabilidad en los objetos. Si te refieres a los principios SOLID, éstos no hacen ninguna referencia a la inmutabilidad, eso es una característica que tú estableces si la quieres o no (que además ayuda a evitar los problemas de condiciones de carrera).

1 respuesta
Ranthas

Ya me jodería conocer la programación funcional gracias a Java.

1 1 respuesta
Kaledros

#21 Yo la descubrí con Java, no entendí una puta mierda y me tuve que mirar un curso que usaba ML para entenderla de una vez por todas.

desu

#20 Los patrones de diseño solo son ruido en lenguajes pobremente diseñados. No voy a hacer más respecto a esto, y respecto a paradigmas de programación tampoco. Alguna cosa que he dicho en este hilo esta mal. Si quieres hablamos por MP.

1 respuesta
eisenfaust

#23 que lenguajes consideras bien dise;ados

1 respuesta
Wei-Yu

moon, pony y julia pre 0.7

1 respuesta
eisenfaust

#25 pony tiene mis dies. julia solo impresiona a los que no conocen dylan / common lisp

desu

#24 No lo se, soy un ignorante y seria necio responder ahora mismo.

Usuarios habituales