Este documento compara Scala y Java, destacando las similitudes y diferencias entre los dos lenguajes. Explica que ambos son orientados a objetos pero Scala también admite programación funcional. Luego describe algunas características específicas de cada lenguaje como el uso de objetos inmutables en Scala versus la mutabilidad en Java, y el paso implícito de valores en Scala frente al paso explícito en Java. Finalmente, aborda temas como el uso de estructuras funcionales para organizar el código en Scala y patrones de diseño
6. Scala Java
Orientación a Objetos y Programación
Funcional
Orientación a Objetos y tiene Lambdas
Trabajaremos con Objetos inmutables
7. Scala Java
Orientación a Objetos y Programación
Funcional
Orientación a Objetos y tiene Lambdas
Trabajaremos con Objetos inmutables Se usan y “abusa” de la mutabilidad de objetos
8. Scala Java
Orientación a Objetos y Programación
Funcional
Orientación a Objetos y tiene Lambdas
Trabajaremos con Objetos inmutables Se usan y “abusa” de la mutabilidad de objetos
Hay que evitar los efectos de Lado
9. Scala Java
Orientación a Objetos y Programación
Funcional
Orientación a Objetos y tiene Lambdas
Trabajaremos con Objetos inmutables Se usan y “abusa” de la mutabilidad de objetos
Hay que evitar los efectos de Lado Es muy común modificar estados internos
10. Scala Java
Orientación a Objetos y Programación
Funcional
Orientación a Objetos y tiene Lambdas
Trabajaremos con Objetos inmutables Se usan y “abusa” de la mutabilidad de objetos
Hay que evitar los efectos de Lado Es muy común modificar estados internos
Se trabaja con Valores de forma implícita
11. Scala Java
Orientación a Objetos y Programación
Funcional
Orientación a Objetos y tiene Lambdas
Trabajaremos con Objetos inmutables Se usan y “abusa” de la mutabilidad de objetos
Hay que evitar los efectos de Lado Es muy común modificar estados internos
Se trabaja con Valores de forma implícita Todos los valores se pasan de forma explícita
12. Scala Java
Orientación a Objetos y Programación
Funcional
Orientación a Objetos y tiene Lambdas
Trabajaremos con Objetos inmutables Se usan y “abusa” de la mutabilidad de objetos
Hay que evitar los efectos de Lado Es muy común modificar estados internos
Se trabaja con Valores de forma implícita Todos los valores se pasan de forma explícita
Para “ordenar” el código se utilizan estructuras
funcionales
13. Scala Java
Orientación a Objetos y Programación
Funcional
Orientación a Objetos y tiene Lambdas
Trabajaremos con Objetos inmutables Se usan y “abusa” de la mutabilidad de objetos
Hay que evitar los efectos de Lado Es muy común modificar estados internos
Se trabaja con Valores de forma implícita Todos los valores se pasan de forma explícita
Para “ordenar” el código se utilizan estructuras
funcionales
Para “ordenar” el código se utilizan Patrones de
diseño orientados a objetos
14. Scala Java
Orientación a Objetos y Programación
Funcional
Orientación a Objetos y tiene Lambdas
Trabajaremos con Objetos inmutables Se usan y “abusa” de la mutabilidad de objetos
Hay que evitar los efectos de Lado Es muy común modificar estados internos
Se trabaja con Valores de forma implícita Todos los valores se pasan de forma explícita
Para “ordenar” el código se utilizan estructuras
funcionales
Para “ordenar” el código se utilizan Patrones de
diseño orientados a objetos
Es mejor inyectar dependencias por función
15. Scala Java
Orientación a Objetos y Programación
Funcional
Orientación a Objetos y tiene Lambdas
Trabajaremos con Objetos inmutables Se usan y “abusa” de la mutabilidad de objetos
Hay que evitar los efectos de Lado Es muy común modificar estados internos
Se trabaja con Valores de forma implícita Todos los valores se pasan de forma explícita
Para “ordenar” el código se utilizan estructuras
funcionales
Para “ordenar” el código se utilizan Patrones de
diseño orientados a objetos
Es mejor inyectar dependencias por función Se inyectan dependencias por constructor
42. EVITAR INTRODUCIR EFECTOS DE LADO EN LAMBDAS
Para resolver el mismo problema en Scala al principio se modela así .
43. EVITAR INTRODUCIR EFECTOS DE LADO EN LAMBDAS
Al final utilizando este enfoque “malo” seguiremos teniendo efectos de lado , nos estamos fijando en la
lista completa y no en la acción a realizar con cada elemento
44. EVITAR INTRODUCIR EFECTOS DE LADO EN LAMBDAS
Si eliminamos del todo el efecto de lado el código es más legible , pero aun así ¿tenemos un problema?
49. La interfaz es un contrato que hace que todas las clases que la implementen
implementen los métodos de la interfaz . Normalmente en un Lenguaje Orientado a
Objetos Utilizaremos las interfaces para clasificar objetos polimórficos del mismo tipo.
USA TRAITS NO COMO INTERFACES
50. La interfaz es un contrato que hace que todas las clases que la implementen
implementen los métodos de la interfaz . Normalmente en un Lenguaje Orientado a
Objetos Utilizaremos las interfaces para clasificar objetos polimórficos del mismo tipo.
USA TRAITS NO COMO INTERFACES
Al clasificar objetos del mismo tipo podemos llamar directamente a la interfaz sin preocuparnos de
las implementaciones.
51. USA TRAITS NO COMO INTERFACES
Al resolver el mismo problema en Scala tendemos a crear una Interfaz con un Trait
52. USA TRAITS NO COMO INTERFACES
A Implementar ese Trait de esta forma
54. Para que no nos suceda lo anterior vamos a pensar en un Trait de forma diferente ,
vamos a verlo como un elemento que cumple unas leyes (un contrato) pero tendrá
partes implementadas por defecto y la clasificación se hará con las partes no
implementadas.
USA TRAITS NO COMO INTERFACES
55. Para que no nos suceda lo anterior vamos a pensar en un Trait de forma diferente ,
vamos a verlo como un elemento que cumple unas leyes (un contrato) pero tendrá
partes implementadas por defecto y la clasificación se hará con las partes no
implementadas.
USA TRAITS NO COMO INTERFACES
56. Vamos a modificar el trait de la siguiente manera ….
USA TRAITS NO COMO INTERFACES
57. Y ahora vamos a rellenar aquellas leyes que serán diferentes para cada Implementación
USA TRAITS NO COMO INTERFACES
58. ¿Y si queremos otra implementación?
USA TRAITS NO INTERFACES
60. ¿ Que hemos ganado al hacer esto?
USA TRAITS NO COMO INTERFACES
Ahora cada vez que nos venga un tipo nuevo sólo tendremos que implementar aquello que lo hace
realmente diferente al resto
62. Una vez que hemos aprendido que a no utilizar los traits como Interfaces uno puede
decir “ Pero si eso mismo que has hecho antes se puede hacer con Java 1.8¡¡¡¡¡”
PREFERIMOS TYPE CLASSES A FACTORIAS ….
63. La implementación del HiddenElements sería esta
PREFERIMOS TYPE CLASSES A FACTORIAS ….
64. Al igual que se hizo con los traits tendremos una nueva implementación de Coffee
PREFERIMOS TYPE CLASSES A FACTORIAS ….
65. También tendremos una implementación de ingredients
PREFERIMOS TYPE CLASSES A FACTORIAS ….
66. Por último también tenemos la clase Query (Aunque para nuestro caso no nos importa)
PREFERIMOS TYPE CLASSES A FACTORIAS ….
67. En un momento dado se queremos una abstracción total de la implementación de las
tablas así que utilizaremos una factoría.
PREFERIMOS TYPE CLASSES A FACTORIAS ….
68. Por último cada vez que se quiere insertar realizaremos esto.
PREFERIMOS TYPE CLASSES A FACTORIAS ….
69. Por último cada vez que se quiere insertar realizaremos esto.
PREFERIMOS TYPE CLASSES A FACTORIAS ….
70. En la implementación de Java tenemos un efecto de Lado en tiempo de ejecución , es
decir , si el tipo de Objeto no está en la factoría el error lo detectaremos en tiempo de
ejecución .Para evitar esto en Scala podemos utilizar Type Classes
PREFERIMOS TYPE CLASSES A FACTORIAS ….
71. Para poder implementar una Type Class primero deberemos tener un Trait que será el
que marque el contrato , es decir , debemos tener las partes comunes a todos que s
implementarán en función de aquellas que son realmente diferenciadoras.
PREFERIMOS TYPE CLASSES A FACTORIAS ….
72. Debemos de tener las distintas implementaciones y estás deben poder ser llamadas en
tiempo de compilación.
PREFERIMOS TYPE CLASSES A FACTORIAS ….
73. Tendremos que disponer de una sintaxis que será como llamaremos a los métodos
PREFERIMOS TYPE CLASSES A FACTORIAS ….
74. Ahora para poder utilizar nuestra type class sólo deberemos crear una insrtancia
PREFERIMOS TYPE CLASSES A FACTORIAS ….
75. Ahora para poder utilizar nuestra type class sólo deberemos crear una insrtancia
PREFERIMOS TYPE CLASSES A FACTORIAS ….
76. Ahora todos los objetos que están en la typeClass se podrán beneficiar de esa sintaxis
PREFERIMOS TYPE CLASSES A FACTORIAS ….
77. Ahora todos los objetos que están en la typeClass se podrán beneficiar de esa sintaxis
PREFERIMOS TYPE CLASSES A FACTORIAS ….
Y los que no están implementados no se podrán beneficiar de esa sintaxis
98. APLICANDO CAKE PATTERN
Al utilizar el Cake Pattern podemos introducir una serie de problemas ocultos.
Al manejar traits y no implementaciones si nos confundimos en un nombre será complejo darse cuenta
99. USAR PATRONES NO FUNCIONALES…..
Al utilizar el Cake Pattern podemos introducir una serie de problemas ocultos.
Al manejar traits y no implementaciones si nos confundimos en un nombre será complejo darse cuenta
100. USAR PATRONES NO FUNCIONALES…..
Al utilizar el Cake Pattern podemos introducir una serie de problemas ocultos.
Sin darnos cuenta estamos rompiendo la ley de Demeter
101. USAR PATRONES NO FUNCIONALES…..
Al utilizar el Cake Pattern podemos introducir una serie de problemas ocultos.
Sin darnos cuenta estamos rompiendo la ley de Demeter
102. USAR PATRONES NO FUNCIONALES…..
Al utilizar el Cake Pattern podemos introducir una serie de problemas ocultos.
Podemos hacer sistemas de mucha profundidad que a la hora de hacer cambios necesitemos mucho
tiempo para recomponer los sistemas.
103. USAR PATRONES NO FUNCIONALES…..
Al utilizar el Cake Pattern podemos introducir una serie de problemas ocultos.
Podemos hacer sistemas de mucha profundidad que a la hora de hacer cambios necesitemos mucho
tiempo para recomponer los sistemas.
104. USAR PATRONES NO FUNCIONALES…..
Al utilizar el Cake Pattern podemos introducir una serie de problemas ocultos.
Si hubiéramos utilizado la sintaxis tradicional “JAVERA” estos tres problemas nos los podíamos ahorrar
***
105. USAR PATRONES NO FUNCIONALES…..
Al utilizar el Cake Pattern podemos introducir una serie de problemas ocultos.
Si hubiéramos utilizado la sintaxis tradicional “JAVERA” estos tres problemas nos los podíamos ahorrar
106. USAR PATRONES NO FUNCIONALES…..
Al utilizar el Cake Pattern podemos introducir una serie de problemas ocultos.
Si hubiéramos utilizado la sintaxis tradicional “JAVERA” estos tres problemas nos los podíamos ahorrar