Vamos a crear la clase librio.
Entonces modelo new lleba class libro bien.
Pero el libro bueno no es una hoja.
Por lo tanto, no podemos heredar.
Un libro contiene hojas, así que sería en la página.
Entonces, bueno, eso sería importante.
Podríamos crear, por ejemplo, la clase página para el libro.
Bueno, imagina que un libro puede tener muchas páginas.
Es una hoja.
Ahí dice que si se fijan, entonces implementamos el método imprimir.
Que le dé a imprimir cada página del libro.
Bien.
El constructor.
Y acá se imprime contenido perfecto.
Ahora sí que si volvemos al libro, entonces el libro va a tener una lista de páginas, pero que son
del tipo genérico hoja y lo dejamos siempre como privat.
Vamos a importar.
Pero también tiene un autor
y un nombre o título libro también podría tener un género, por ejemplo, de drama, de acción, de
aventura, de terror, lo que sea.
Y el género pudiera ser incluso un en un un enumerar con las distintas constante los distintos tipos
de posible, con la lista de los géneros que queremos incluir.
Entonces, bueno, podríamos agregar esa enumeras por.
New Yaba Class En un género se fijan y así empezamos a completar nuestro libro
y así lo que queramos.
Bien, y con eso estamos molesto, para qué más vamos a crear el constructor?
Por ejemplo, que pase el autor, el título y el género y la página le agregamos con el método ad hoc.
Va a retornar un tiz para que se pueda encadenar ad página hoja recuerdan que es el tipo hoja o página,
pero mejor que sea lo más genérico posible
página.
Entonces agregamos una página Ratón 10 y allí tenemos el libro.
Entonces faltaría el método imprimir public, pero por ahora no lo estamos escribiendo de ninguna clase
de equilibrio.
No hereda de hoja como lo hace, por ejemplo, el informe que si hereda y los escribe acá no porque
no es una hoja, entonces bueno, vamos a implementar este método string imprimir.
Listo.
Bueno, de hecho, si colocamos solamente modo ejemplo, no necesita que lo haga, se coloco hover right.
Esta anotación marca error.
Se fijan por qué no estamos escribiendo ningún método 3V clase.
El tren Builder se ve,
comenzamos con el título,
se ve.
Punto happen diss título.
Un salto línea, el autor,
un salto línea, bajamos el género
bien y un Ford, un Ford para mostrar la página.
Entonces, por cada página hoja pág.
Página 2, punto 10, punto páginas.
Entonces, por cada una.
Punto.
Append, le agregamos pág. punto imprimir.
Por acá tenemos el método.
Recuerden que cada página también trae método imprimir.
Por acá tenemos página querea de hoja y los Oric vive acá tiene que imprimir.
Bien, qué faltaría un salto línea
y listo.
Y acá un ratón es Trumbull Builder punto 3 trenca.
Ven?
Hoy tenemos el libro.
Podríamos tener ya transceptor.
Entonces nos vamos a ejemplo imprenta.
Vamos a crear un libro debajo de curriculo.
Perfecto.
Iba a tener el autor.
Bueno, va a ser un libro de programación.
El tema de género por acá en género tenemos drama, acción, aventura, terror, ciencia ficción.
Y podríamos agregar, por ejemplo, programación.
Vamos a agregar un libro de patrones diseño.
Entonces, el autor Erich Gamma.
Luego tenemos el título nombre, patrones, diseños,
punto, elementos, vamos a colocar elementos revisables o de la programación orientada objeto perfecto
género, la constante o en un punto programación.
Bien, vamos a bajar acá para que no sea tan extenso.
Bajamos.
Podríamos importar de forma estática género entonces por acá.
Import static.
Género.
Asterisco.
Ven?
Quitamos género.
Entonces sería como una constante propia clase.
Ven.
Vamos a agregar páginas al libro contenido, libro, punto, agregar página.
Bien, pero acá recibe un tipo hoja.
Entonces creó la instancia de página, que al final una página es una hoja porque extiende de acá el
contenido del tipo string.
Por ejemplo, patrón singleton.
Bajamos.
Punto.
Porque podemos encadenar métodos a página.
Otro patrón.
Por ejemplo observador.
New página.
Patrón.
Observador.
Otra más
patrón factory o fábrica.
Una fábrica objeto
podría ser también compositor o composite compositor.
Todo lo que es recursividad.
Árboles, todo se pueden alimentar con composite.
Qué más
fachada o cesad.
Y así podríamos tener muchos patrones.
Pero con esto está bien.
Me faltó agregar a Patrón patrón y acá también patrón singleton, servador, factory, composite, compositor
y fachada.
Y estamos listo.
Ahora veamos qué pasa si quiero imprimir libros, por ejemplo, imprimir libro.
Obviamente marcó un error porque no cumple el contrato, no implementa o no entiende de la clase hoja,
porque en realidad no es una hoja.
Un libro no está diseñado para ser una hoja y no tiene ningún sentido tampoco.
Por lo tanto, la herencia acá, como vimos, no se aplica.
No podemos imprimir el libro.
Entonces justamente la solución sería interfases y que cualquier objeto que se quiera imprimir o quiera
pasar por la impresora independientes están o no relacionados entre sí de forma jerarquía.
Bueno, tienes que implementar esta interfaz y es lo que vamos a hacer ahora.
Entonces vamos a modificar nuestro diseño para que cualquier cosa que pase por impresora sea del tipo
de la interfaz imprimible.
Entonces, modelo, vamos a crear una clase, una interfaz ya class.
Marcamos interfaz imprimible perfecto con el método imprimir no se public del tipo String imprimir.
Recuerden, no tiene cuerpo, no tiene implementación.
Un método de la interfaz tiene que ser siempre público o dificulto eso por ahí ya lo aplique siempre,
ya que una interfaz siempre expone métodos públicos o default para que puedan ser utilizados por la
demás clases.
No tiene sentido una interfaz con un método Privat, por ejemplo, porque no lo vas a poner a los demás
objeto para que lo puedan utilizar.
Queda como encapsulado.
Se fijan?
La idea de interfaz es siempre la interfaz pública y en vez de class utilizamos la palabra clave interface,
pues el public o default dentro del package.
Qué más?
Nombre de clase.
Perdón.
Nombre.
Interfaces.
Comienza con mayúscula.
Palabra compuesta.
La que sigue comienza con mayúscula.
Y así al final es muy parecido a una clase abstracta de que son métodos sin implementar.
Pero bueno.
Es decir, no puede tener ningún método con implementación.
A diferencia de una clase tracta una clase abstracta.
Así puede tener métodos implementados.
También puede tener atributos común y corriente.
Una interfaz no, pero que sí puede tener una interfaz.
Son constantes atributo que sean static y final.
Bueno, después vamos a ser un ejemplo.
Por ahora lo dejamos así, imprimible.
Ahora tengo que modificar nuestro código.
Bueno, qué se va a imprimir?
Bueno, lo primero ahora es modificar.
Ejemplo imprenta la imprenta para que todo pase en imprimir.
Cualquier objeto que pase por acá, sea del tipo de interfaz imprimible, se fijan imprimirla ahora
tomar carrot, porque por el momento ninguna cumple el contrato, ninguna implementa la interfaz.
Está bien, entonces el siguiente paso es modificar informe, libro y curriculo para que sean imprimible
y página también.
Vamos en orden, partamos por curriculo por acá.
Curriculo.
Herida de hoja está perfecto, pero también implemento palabra clave para implementar interfaces y imprimible
y podría implementar más de un interfaz separador coma.
Se fijan a que agregamos el implementas imprimible.
Vayamos a la clase ejemplo.
Currículum de namarca error se puede imprimir.
Cumple contrato, vamos a informe.
Implementé imprimiría también cumple contrato.
Nos vamos a ejemplo.
Y ya no marcarlas, perfecto.
Por ejemplo, informe o curriculum, estas orcs viviendo el imprimir, pero tanto de imprimible, de
interfaz como de hoja, no se cumple el contrato.
Ahora faltaría, por ejemplo, libro.
Libro no es soja.
Por lo tanto no haría nada, solamente implementa Implementas imprimible nada más llega.
Tenemos el método.
Acá vamos a colocar el love right.
Me comió el públic por alguna razón.
Perfecto.
Ahí lo tenemos.
Entonces cumple contrato y faltaría página.
Página.
Idea de hoja.
Pero también se puede imprimir.
También puede pasar por la impresora la idea que se imprime a cada página del libro.
Entonces, simplement imprimible cumple contrato.
Y libro ahora registra hoja se dejan.
Que se imprimen.
Pero hoja del tipo de clase abstracta.
Pero cada página es del tipo hoja.
Pero también es del tipo de su interfaz porque la implementa.
Página puede ser del tipo página, del tipo hoja y del tipo imprimible.
Pero vamos a usar el tipo imprimible, que es el tipo más genérico.
Entonces, en vez de hoja imprimiría.
De acá también los amos del tipo más genérico posible.
Ya tenemos el ejemplo.
Ahora todo se puede imprimir, tanto un currículum como un libro, como un informe o cualquier objeto
independiente se está o no relacionado.
Si cumple con el contrato con interfaz va a poder pasar por la impresora.
Entonces vamos a levantar.
Ya nos falta un detalle importante en libro.
Acá faltó crear la instancia del ArrayList.
Se fijan, claro, porque acá lanzan un po intercepten cuando agregamos página.
Entonces calibro dis punto páginas igual new ArrayList.
No hay que olvidarse de un detalle importante.
Ahora sí que si volvemos a ejemplo y levantamos.
Si tenemos puesto imprime todo, se imprime el currículum, se imprime el informe con el estudio y el
libro.
El título autor, género y la página o contenido del libro.
Todo utilizando interfases.
Nada más.
Nos vemos en la siguiente clase.