You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: es/01-default-static-interface-methods.md
+11-9Lines changed: 11 additions & 9 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,11 +1,11 @@
1
1
Métodos Estáticos y por defecto en Interfaces
2
2
--------
3
3
4
-
Todos entendemos que deberíamos programar con interfaces. Los interfaces dan al cliente un contrato que deberían usar sin preocuparse en los detalles de la implementación (p.e. las clases). Por lo tanto, fomentan **[el bajo acoplamiento](https://en.wikipedia.org/wiki/Loose_coupling)**. Diseñar interfaces limpios es uno de los aspectgos más importantos en el diseño de APIs. Uno de los principios SOLID **[Segregación de interfaces](https://en.wikipedia.org/wiki/Interface_segregation_principle)** habla sobre diseñar interfaces específicos para el cliente más pequeños en vez de un interfaz más genérico. El diseño de interfaces es la clave para tener APIs limpios y efectivos para nuestas librerías y aplicaciones.
4
+
Todos entendemos que deberíamos programar con interfaces. Los interfaces dan al cliente un contrato que deberían usar sin preocuparse en los detalles de la implementación (p.e. las clases). Por lo tanto, fomentan **[el bajo acoplamiento](https://en.wikipedia.org/wiki/Loose_coupling)**. Diseñar interfaces limpios es uno de los aspectos más importantes en el diseño de APIs. Uno de los principios SOLID **[Segregación de interfaces](https://en.wikipedia.org/wiki/Interface_segregation_principle)** habla sobre diseñar interfaces específicos para el cliente más pequeños en vez de un interfaz más genérico. El diseño de interfaces es la clave para tener APIs limpios y efectivos para nuestas librerías y aplicaciones.
5
5
6
6
> El código de esta sección está en [ch01 package](https://github.com/shekhargulati/java8-the-missing-tutorial/tree/master/code/src/main/java/com/shekhargulati/java8_tutorial/ch01).
7
7
8
-
Si has diseñado algún API, con el tiempo, habrás sentido la necesidad de añadirle nuevos métodos. Una vez que se publica el API se hace imposible añadir métodos a un interfaz sin romper las implementaciones existentes. Para aclarar este punto vamos a suponer que estamos desarrollando un API sencillo de una calculadora `Calculator` que soporta las operaciones de sumar `add`, restar `subtract`, dividir `divide` y multiplicar `multiply`. Podemos escribir el interfaz `Calculator`como se muestra abajo. ***Para hacerlo sencillo usaremos enteros.***
8
+
Si has diseñado algún API, con el tiempo, habrás sentido la necesidad de añadirle nuevos métodos. Una vez que se publica el API se hace imposible añadir métodos a un interfaz sin romper las implementaciones existentes. Para aclarar este punto vamos a suponer que estamos desarrollando un API sencillo de una calculadora `Calculator` que soporta las operaciones de sumar `add`, restar `subtract`, dividir `divide` y multiplicar `multiply`. Podemos escribir el interfaz `Calculator`como se muestra debajo. ***Para hacerlo sencillo usaremos enteros.***
9
9
10
10
```java
11
11
publicinterfaceCalculator {
@@ -20,7 +20,7 @@ public interface Calculator {
20
20
}
21
21
```
22
22
23
-
Para respaldar este interfaz `Calculator`desarrollaste la implementación de `BasicCalculator` como se muestra abajo.
23
+
Para respaldar este interfaz `Calculator`se desarrolló la implementación de `BasicCalculator` como se muestra abajo.
24
24
25
25
```java
26
26
publicclassBasicCalculatorimplementsCalculator {
@@ -52,7 +52,7 @@ public class BasicCalculator implements Calculator {
52
52
53
53
## Métodos de Factoría Estáticos
54
54
55
-
El API calculadora resultó ser muy útil y fácil de usar. Los usuarios sólo tienen que crear una instancia de `BasicCalculator` y ya pueden usar el API. Comienzas a ver código como el que se muestra abajo.
55
+
El API calculadora resultó ser muy útil y fácil de usar. Los usuarios sólo tienen que crear una instancia de `BasicCalculator` y ya pueden usar el API. Basta con usar código como el que se muestra debajo.
56
56
57
57
```java
58
58
Calculator calculator =newBasicCalculator();
@@ -72,7 +72,7 @@ class BasicCalculator implements Calculator {
72
72
}
73
73
```
74
74
75
-
Luego, escribiremos una clase factoría que nos facilite la instancia de `Calculator` como se muestra abajo.
75
+
Luego, escribiremos una clase factoría que nos facilite la instancia de `Calculator` como se muestra debajo.
76
76
77
77
```java
78
78
publicabstractclassCalculatorFactory {
@@ -111,7 +111,7 @@ public interface Calculator {
111
111
112
112
## La Evolución del API con el tiempo
113
113
114
-
Algunos de los consumidores decidieron o bien, ampliar el API `Calculator` añadiendo métodos como resto `remainder`, o escribit su propia implementación del interfaz `Calculator`. Tras hablar con tus usuarios sacaste la conclusión de que a la mayoría de ellos les gustaría tener un método `remainder` en el interfaz `Calculator`. Parecía un cambio muy simple al API por lo que añadiste un método nuevo.
114
+
Algunos de los consumidores decidieron o bien, ampliar el API `Calculator` añadiendo métodos como `remainder`, o escribir su propia implementación del interfaz `Calculator`. Tras hablar con tus usuarios sacaste la conclusión de que a la mayoría de ellos les gustaría tener un método `remainder` en el interfaz `Calculator`. Parecía un cambio muy simple al API por lo que añadiste un método nuevo.
115
115
116
116
```java
117
117
publicinterfaceCalculator {
@@ -156,7 +156,9 @@ default int remainder(int number, int divisor) {
156
156
157
157
## Herencia múltiple
158
158
159
-
Una clase puede extender sólo una clase pero puede implementar múltiples interfaces. Ahora que es posible tener implementación de métodos en interfaces Java tiene herencia múltiple de comportamiento. Java ya tenía herencia múltiple a nivel de tipo y ahora tambén a nivel de comportamiento. Existen tres reglas de resolución que ayudan a decidir que método será elegido:
159
+
Una clase puede extender sólo una clase pero puede implementar múltiples interfaces. Ahora que es posible tener implementación de métodos en interfaces Java conseguimos herencia múltiple de comportamiento. Java ya tenía herencia múltiple a nivel de tipo con las interfaces y ahora también a nivel de comportamiento.
160
+
161
+
Existen tres reglas de resolución que ayudan a decidir que método será elegido:
160
162
161
163
**Regla 1: Los métodos declarados en las clases tendrán preferencia sobre los definidos en las interfaces.**
162
164
@@ -167,7 +169,7 @@ interface A {
167
169
}
168
170
}
169
171
170
-
classAppimplementsA{
172
+
classAppimplementsA{
171
173
172
174
@Override
173
175
publicvoiddoSth() {
@@ -209,7 +211,7 @@ class App implements C, B, A {
209
211
210
212
Esto imprimirá `Dentro de C`.
211
213
212
-
**Regla 3: Sino, la clase tiene que llamar explicitamente a la implementación que desea**
214
+
**Regla 3: Si no, la clase tiene que llamar explícitamente a la implementación que desea**
0 commit comments