48
Curso: "Programación Java SE" 2013 “POO: Polimorfismo con Clase Abstracta e Interface” Módulo 5 / parte 2 © Todos los logos y marcas utilizados en este documento, están registrados y pertenecen a sus respectivos dueños. AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 1

5 2 Workshop Poo Clase Abstracta e Interface

Embed Size (px)

Citation preview

Page 1: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

“POO: Polimorfismo con Clase Abstracta e Interface”

Módulo 5 / parte 2

© Todos los logos y marcas utilizados en este documento, están registrados y pertenecen a sus respectivos dueños.

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 1

Page 2: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013 Introducción En la programación orientada a objetos, el polimorfismo se refiere a la capacidad de un lenguaje de programación para procesar los objetos de manera diferente en función de su tipo de datos de referencia, sea ésta su interfaz o la clase que pertenece. Más específicamente, es la capacidad de redefinir los métodos de clases derivadas.

En sí la palabra polimorfismo refiere a “muchas formas” y aplicado a la POO es la capacidad de poder tomar varias clases que tiene operaciones iguales y poder invocar a cualquier instancia el mismo método común.

Ventajas: Poder hacer un diseño genérico que se apliquen a varios objetos que tienen operaciones comunes.

Otra forma de decirlo es la capacidad del lenguaje de responder a un mismo mensaje de diferentes maneras. Adecuándose a la situación actual.

En Java NO sólo se presenta en la Herencia (mediante jerarquía), sobrecarga de métodos y sobre-escrituras de métodos y atributos que vimos recientemente, sino que también están presentes en las implementaciones de Interfaces. Polimorfismo es considerado fundamental para cualquier lenguaje de programación orientado a objetos (LPOO).

Las herencias de clases definen el "qué son" y las de interfaces agrupan clases que definen el "qué hacen", es decir las interfaces describen algunas de las características de una clase. Cuando agrupamos por herencia hay una relación de parentesco, pero con las interfaces agrupamos objetos que "hacen cosas similares" como una interfaz "imprimible" que todos nuestros objetos debieran de implementar para poder pasar por la impresora (les estamos diciendo de alguna forma que deben cumplir con un "contrato de implementación" para poder ser "imprimibles").

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 2

Page 3: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013 Objetivo El objetivo de esta práctica de laboratorio es exponer los conceptos que hay detrás del polimorfismo implementando clases abstractas e interfaces.

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 3

Page 4: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013 Ejercicio 1: Crear una aplicación para un catálogo de productos usando clase abstracta.

Algunas veces, una clase que se ha definido representa un concepto abstracto y como tal, no debe ser ejemplarizado.

Es decir cuando se desarrolla una jerarquía de clases en que algún comportamiento está presente en todas ellas pero se materializa de distintas formas para cada una.

Por ejemplo, la comida en la vida real. ¿Has visto algún ejemplar de comida? No. Lo que has visto son ejemplares de manzanas, pan, y chocolate. Comida representa un concepto abstracto de cosas que son comestibles. No tiene sentido que exista un ejemplar de comida.

Por ejemplo, la clase Number del paquete java.lang representa el concepto abstracto de número.

Otros ejemplos: Clase Elementos del Formulario, Figuras Geométricas, Personas, Mamíferos, Automóviles etc.

El modificador abstract declara que la clase es una clase abstracta.

Una clase abstracta puede contener métodos abstractos, estos son métodos que no tienen implementación y sólo se deben implementar en las clases hijas (sub-clases).

Una clase abstracta está diseñada para ser una superclase y no puede ejemplarizarse.

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 4

Page 5: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

1. Abrir Netbeans IDE 2. Crear un proyecto Netbeans: Java Application

• Seleccionar File desde el menú superior y seleccionar New Project. • Observar que aparece la ventana de dialogo New Project. • Seleccionar Java bajo Categories, y Seleccionar Java Application bajo la sección

Projects. • Clic Next.

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 5

Page 6: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

• Bajo el panel Name and Location, para el Nombre del Proyecto (Project Name), ingrese ProyectoCatalogoUsandoClaseAbstracta. Este es el nombre que se le dará al proyecto.

• Para el campo Create Main Class, ingresar EjemploCatalogo. (Figura de abajo) Esto es para generar la clase autónoma EjemploCatalogo.java, que contendrá el método main(..) que será generado por Netbeans.

• Clic Finish.

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 6

Page 7: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

• Observe que el proyecto ProyectoCatalogoUsandoClaseAbstracta y ha sido creado bajo la pestaña Projects de NetBeans IDE y además ha generado automáticamente la clase EjemploCatalogo.java la cual es desplegada en el editor de código del IDE.

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 7

Page 8: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

3. Creando la clase java Producto: • Clic derecho en el proyecto ProyectoCatalogoUsandoClaseAbstracta y seleccionamos

New->Java Class.

• Observe que aparece la ventana para crear una clase Java: New Java Class • Para el nombre de la case (Class Name), ingrese Producto • Para el nombre del paquete (Packages), ingrese dominio • Clic Finish.

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 8

Page 9: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

• Observe que se crea la clase Producto.java y es desplegada en el editor de código del IDE.

• Modifique la clase Producto.java como se muestra en el Código de abajo, poner especial atención en el modificador abstract de la clase, en el método abstracto getPrecioVenta y en el atributo precio con sus respectivos métodos getter/setter y el constructor.

package dominio; /** * @author Andrés Guzmán */ public abstract class Producto { private int precio; public Producto(int precio) { this.precio = precio; } public int getPrecio() { return precio; } abstract public double getPrecioVenta(); }

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 9

Page 10: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

4. Creando la clase java Electronico:

• Clic derecho en el proyecto ProyectoCatalogoUsandoClaseAbstracta y seleccionamos New->Java Class.

• Observe que aparece la ventana para crear una clase Java: New Java Class • Para el nombre de la case (Class Name), ingrese Electronico • Para el nombre del paquete (Packages), ingrese dominio • Clic Finish.

• Observe que se crea la clase Electronico.java y es desplegada en el editor de código del IDE.

• Modifique la clase Electronico.java como se muestra en el Código de abajo, poner especial atención en el modificador abstract de la clase, el extends de Producto y en el atributo fabricante con sus respectivos métodos getter/setter y en el constructor.

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 10

Page 11: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013 package dominio; /** * @author Andrés Guzmán */ public abstract class Electronico extends Producto { private String fabricante; public Electronico(int precio, String fabricante) { super(precio); this.fabricante = fabricante; } public String getFabricante() { return fabricante; } }

5. Creando la clase java IPhone: • Clic derecho en el proyecto ProyectoCatalogoUsandoClaseAbstracta y seleccionamos

New->Java Class. • Observe que aparece la ventana para crear una clase Java: New Java Class • Para el nombre de la case (Class Name), ingrese IPhone • Para el nombre del paquete (Packages), ingrese dominio • Clic Finish.

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 11

Page 12: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

• Observe que se crea la clase IPhone.java y es desplegada en el editor de código del IDE. • Modifique la clase IPhone.java como se muestra en el Código de abajo, poner especial

atención en el extends de Electronico, en el método que sobre-escribe/implementa getPrecioVenta() y en sus atributos con sus respectivos métodos getter/setter y en el constructor.

package dominio; /** * * @author Andrés Guzmán */ public class IPhone extends Electronico { private String modelo; private String color; public IPhone(int precio, String fabricante, String modelo, String color) { super(precio, fabricante); this.modelo = modelo; this.color = color; } @Override public double getPrecioVenta() { return getPrecio() * 0.9; } public String getModelo() { return modelo; } public String getColor() { return color; } }

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 12

Page 13: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

6. Creando la clase java TvLcd: • Clic derecho en el proyecto ProyectoCatalogoUsandoClaseAbstracta y seleccionamos

New->Java Class. • Observe que aparece la ventana para crear una clase Java: New Java Class • Para el nombre de la case (Class Name), ingrese TvLcd • Para el nombre del paquete (Packages), ingrese dominio • Clic Finish.

• Observe que se crea la clase TvLcd.java y es desplegada en el editor de código del IDE.

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 13

Page 14: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

• Modifique la clase TvLcd.java como se muestra en el Código de abajo, poner especial atención en el extends de Electronico, en el método que sobre-escribe/implementa getPrecioVenta() y en sus atributos con sus respectivos métodos getter/setter y en el constructor.

package dominio; /** * @author Andrés Guzmán */ public class TvLcd extends Electronico { private int pulgada; public TvLcd(int precio, String fabricante, int pulgada) { super(precio, fabricante); this.pulgada = pulgada; } @Override public double getPrecioVenta() { return getPrecio() * 0.8; } public int getPulgada() { return pulgada; } }

7. Creando la clase java Libro:

• Clic derecho en el proyecto ProyectoCatalogoUsandoClaseAbstracta y seleccionamos New->Java Class.

• Observe que aparece la ventana para crear una clase Java: New Java Class • Para el nombre de la case (Class Name), ingrese Libro • Para el nombre del paquete (Packages), ingrese dominio • Clic Finish.

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 14

Page 15: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

• Observe que se crea la clase Libro.java y es desplegada en el editor de código del IDE.

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 15

Page 16: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

• Modifique la clase Libro.java como se muestra en el Código de abajo, poner especial atención en el extends de Producto, en el método que sobre-escribe/implementa getPrecioVenta() y en sus atributos con sus respectivos métodos getter/setter y en el constructor.

package dominio; import java.util.Date; /** * * @author Andrés Guzmán */ public class Libro extends Producto { private Date fechaPublicacion = new Date(); private String autor; private String titulo; private String editorial; public Libro(int precio, String autor, String titulo, String editorial) { super(precio); this.autor = autor; this.titulo = titulo; this.editorial = editorial; } public Date getFechaPublicacion() { return fechaPublicacion; } public String getAutor() { return autor; } public String getTitulo() { return titulo; } public String getEditorial() { return editorial; } @Override public double getPrecioVenta() { return getPrecio() * 0.95; } }

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 16

Page 17: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

8. Creando la clase java Comics: • Clic derecho en el proyecto ProyectoCatalogoUsandoClaseAbstracta y seleccionamos

New->Java Class. • Observe que aparece la ventana para crear una clase Java: New Java Class • Para el nombre de la case (Class Name), ingrese Comics • Para el nombre del paquete (Packages), ingrese dominio • Clic Finish.

• Observe que se crea la clase Comics.java y es desplegada en el editor de código del IDE.

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 17

Page 18: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

• Modifique la clase Comics.java como se muestra en el Código de abajo, poner especial atención en el extends de Libro, en el método que sobre-escribe/implementa getPrecioVenta() y en sus atributos con sus respectivos métodos getter/setter y en el constructor.

package dominio; /** * * @author Andrés Guzmán */ public class Comics extends Libro { private String personaje; public Comics(int precio, String autor, String titulo, String editorial, String personaje) { super(precio, autor, titulo, editorial); this.personaje = personaje; } public String getPersonaje() { return personaje; } @Override public double getPrecioVenta() { return this.getPrecio() * 0.85; } }

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 18

Page 19: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

9. Modificar el contenido generado por el IDE en la clase EjemploCatalogo.java. • Modifique la clase EjemploCatalogo.java como se muestra en el Código de abajo, poner

especial atención en los comentarios resaltados con negrita.

import dominio.Comics; import dominio.Electronico; import dominio.IPhone; import dominio.Libro; import dominio.Producto; import dominio.TvLcd; public class EjemploCatalogo { public static void main(String[] args) { // Creamos un arreglo de 6 Productos Producto[] productos = new Producto[6]; // Creamos 6 objetos del tipo Producto (clase abstracta) // y las asignamos al arreglo productos[0] = new IPhone(299000, "Apple", "3G", "Negro"); productos[1] = new IPhone(399000, "Apple", "4G", "Blanco"); productos[2] = new TvLcd(340000, "Sony", 40); productos[3] = new Libro(18000, "Eric Gamma", "Elementos reusables POO", "Alguna..."); productos[4] = new Libro(14000, "Martin Fowler", "UML Gota a Gota", "Alguna..."); productos[5] = new Comics(5000, "Pepo", "Condorito", "Alguna...", "Condorito"); for (Producto producto : productos) { System.out.print("Tipo de: " + producto.getClass().getName()); System.out.print(" - "); System.out.print("Precio: " + producto.getPrecio()); System.out.print(" - "); System.out.print("Precio final: " + producto.getPrecioVenta()); // Para los Electronicos ============ if (producto instanceof Electronico) { System.out.print(" - "); System.out.print("Fabricante: " + ((Electronico) producto).getFabricante()); // Para los IPhone ============ if (producto instanceof IPhone) { System.out.print(" - "); System.out.print("Modelo: " + ((IPhone) producto).getModelo()); System.out.print(" - "); System.out.print("Color: " + ((IPhone) producto).getColor()); } // Para los LCD ============ if (producto instanceof TvLcd) { System.out.print(" - "); System.out.print("Pulgadas: " + ((TvLcd) producto).getPulgada()); } } // Para los Libros ============ if (producto instanceof Libro) { System.out.print(" - ");

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 19

Page 20: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013 System.out.print("Titulo: " + ((Libro) producto).getTitulo()); System.out.print(" - "); System.out.print("Autor: " + ((Libro) producto).getAutor()); // Para los Comics ============ if (producto instanceof Comics) { System.out.print(" - "); System.out.print("Personaje: " + ((Comics) producto).getPersonaje()); } } System.out.println(); } } }

10. Construir y ejecutar el programa

• Clic derecho del mouse sobre el proyecto ProyectoCatalogoUsandoClaseAbstracta y seleccionar Run

• Observe el resultado en la salida de consola (Tab Output):

run: Tipo de: dominio.IPhone - Precio: 299000 - Precio final: 269100.0 - Fabricante: Apple - Modelo: 3G - Color: Negro Tipo de: dominio.IPhone - Precio: 399000 - Precio final: 359100.0 - Fabricante: Apple - Modelo: 4G - Color: Blanco Tipo de: dominio.TvLcd - Precio: 340000 - Precio final: 272000.0 - Fabricante: Sony - Pulgadas: 40 Tipo de: dominio.Libro - Precio: 18000 - Precio final: 17100.0 - Titulo: Elementos reusables POO - Autor: Eric Gamma Tipo de: dominio.Libro - Precio: 14000 - Precio final: 13300.0 - Titulo: UML Gota a Gota - Autor: Martin Fowler Tipo de: dominio.Comics - Precio: 5000 - Precio final: 4250.0 - Titulo: Condorito - Autor: Pepo - Personaje: Condorito BUILD SUCCESSFUL (total time: 2 seconds)

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 20

Page 21: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013 Ejercicio 2: Crear una aplicación para un catálogo de productos usando interfaces.

Un interface es una colección de definiciones de métodos (sin implementaciones) y de valores constantes.

Interfaz es como una clase abstracta pero no permite que ninguno de sus métodos esté implementado. Se declaran sustituyendo class por interface.

Los interfaces se utilizan para definir un protocolo de comportamiento que puede ser implementado por cualquier clase del árbol de clases.

Capturar similitudes entre clases no relacionadas sin forzar una relación entre ellas.

Declarar métodos que una o varias clases necesitan implementar.

En Java, un interface es un tipo de dato de referencia, y por tanto, puede utilizarse en muchos de los sitios donde se pueda utilizar cualquier tipo (como en un argumento de métodos y una declaración de variables, llamado control de tipo)

Las herencias de clases definen el "qué son" y las de interfaces agrupan clases que definen el "qué hacen", es decir las interfaces describen algunas de las características de una clase.

Cuando agrupamos por herencia hay una relación de parentesco, pero con las interfaces agrupamos objetos que "hacen cosas similares" como una interfaz "imprimible" que todos nuestros objetos debieran de implementar para poder pasar por la impresora (les estamos diciendo de alguna forma que deben cumplir con un "contrato de implementación" para poder ser "imprimibles").

Por convención, los nombres de interfaces empiezan con una letra mayúscula al igual que las clases. Frecuentemente los nombres de interfaces terminan en "able" o "ible".

Una declaración de interface puede tener otros dos componentes: el especificador de acceso public y una lista de "superinterfaces".

Una interface sirve para establecer un 'protocolo' entre clases.

Todos los métodos que declara una interface son siempre public o default.

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 21

Page 22: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

1. Abrir Netbeans IDE 2. Crear un proyecto Netbeans: Java Application

• Seleccionar File desde el menú superior y seleccionar New Project. • Observar que aparece la ventana de dialogo New Project. • Seleccionar Java bajo Categories, y Seleccionar Java Application bajo la sección

Projects. • Clic Next.

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 22

Page 23: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

• Bajo el panel Name and Location, para el Nombre del Proyecto (Project Name), ingrese ProyectoCatalogoUsandoInterface. Este es el nombre que se le dará al proyecto.

• Para el campo Create Main Class, ingresar EjemploCatalogo. (Figura de abajo) Esto es para generar la clase autónoma EjemploCatalogo.java, que contendrá el método main(..) que será generado por Netbeans.

• Clic Finish • Observe que el proyecto ProyectoCatalogoUsandoInterface y ha sido creado bajo la

pestaña Projects de NetBeans IDE y además ha generado automáticamente la clase EjemploCatalogo.java la cual es desplegada en el editor de código del IDE.

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 23

Page 24: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

3. Creando la interface java IProducto: • Clic derecho en el proyecto ProyectoCatalogoUsandoInterface y seleccionamos New-

>Java Interface.

• Observe que aparece la ventana para crear una clase Java: New Java Inteface • Para el nombre de la case (Class Name), ingrese IProducto • Para el nombre del paquete (Packages), ingrese dominio • Clic Finish.

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 24

Page 25: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

• Observe que se crea la interface IProducto.java y es desplegada en el editor de código del IDE.

4. Modifique la interface IProducto.java como se muestra en el Código de abajo, poner especial atención en la palabra reservada interface, en los método sin declarar de la interface getPrecioVenta() y getPrecio().

package dominio; /** * * @author Andrés Guzmán */ public interface IProducto { //Métodos sin implementar de la interface, las clase que la implementan deben implementar éstos métodos public int getPrecio(); public double getPrecioVenta(); }

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 25

Page 26: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

5. Creando la interface java IElectronico: • Clic derecho en el proyecto ProyectoCatalogoUsandoInterface y seleccionamos New-

>Java Interface.

• Observe que aparece la ventana para crear una clase Java: New Java Inteface • Para el nombre de la case (Class Name), ingrese IElectronico • Para el nombre del paquete (Packages), ingrese dominio • Clic Finish. • Observe que se crea la interface IElectronico.java y es desplegada en el editor de código

del IDE.

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 26

Page 27: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

6. Modifique la interface IElectronico.java como se muestra en el Código de abajo, poner especial atención en la palabra reservada interface, en los método sin declarar de la interface getFabricante (), observe que también hereda de la interface IProducto (una interface puede heredar de otra interface, como en las clases, en éste caso para reutilizar comportamientos).

package dominio; /** * * @author Andrés Guzmán */ public interface IElectronico extends IProducto { public String getFabricante(); }

7. Creando la interface java ILibro: • Clic derecho en el proyecto ProyectoCatalogoUsandoInterface y seleccionamos New-

>Java Interface.

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 27

Page 28: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

• Observe que aparece la ventana para crear una clase Java: New Java Inteface • Para el nombre de la case (Class Name), ingrese ILibro • Para el nombre del paquete (Packages), ingrese dominio • Clic Finish. • Observe que se crea la interface ILibro.java y es desplegada en el editor de código del

IDE. 8. Modifique la interface ILibro.java como se muestra en el Código de abajo, poner especial

atención en la palabra reservada interface, en los métodos sin declarar de la interface, y note que además hereda de la interface IProducto.

package dominio; import java.util.Date; /** * * @author Andrés Guzmán */ public interface ILibro extends IProducto{ public Date getFechaPublicacion(); public String getAutor(); public String getTitulo(); public String getEditorial(); }

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 28

Page 29: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

9. Creando la clase java Producto: • Clic derecho en el proyecto ProyectoCatalogoUsandoInterface y seleccionamos New-

>Java Class.

• Observe que aparece la ventana para crear una clase Java: New Java Class • Para el nombre de la case (Class Name), ingrese Producto • Para el nombre del paquete (Packages), ingrese dominio • Clic Finish. • Observe que se crea la clase Producto.java y es desplegada en el editor de código del

IDE. • Modifique la clase Producto.java como se muestra en el Código de abajo, poner especial

atención en la implementación de la interface IProducto.

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 29

Page 30: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013 package dominio; /** * * @author Andrés Guzmán */ public class Producto implements IProducto{ private int precio; public Producto(int precio) { this.precio = precio; } public int getPrecio() { return precio; } // Implementa el método de la interfaz IProducto public double getPrecioVenta(){ return 0; } }

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 30

Page 31: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

11. Creando la clase java Electronico: • Clic derecho en el proyecto ProyectoCatalogoUsandoInterface y seleccionamos New-

>Java Class. • Observe que aparece la ventana para crear una clase Java: New Java Class • Para el nombre de la case (Class Name), ingrese Electronico • Para el nombre del paquete (Packages), ingrese dominio • Clic Finish. • Observe que se crea la clase Electronico.java y es desplegada en el editor de código del

IDE. • Modifique la clase Electronico.java como se muestra en el Código de abajo, poner

especial atención en la implementación (implements) de la interface IElectronico, el extends de Producto y en el atributo fabricante con sus respectivos métodos getter/setter y en el constructor.

package dominio; /** * * @author Andrés Guzmán */ public class Electronico extends Producto implements IElectronico{ private String fabricante; public Electronico(int precio, String fabricante) { super(precio); this.fabricante = fabricante; } public String getFabricante() { return fabricante; } }

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 31

Page 32: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

12. Creando la clase java IPhone: • Clic derecho en el proyecto ProyectoCatalogoUsandoInterface y seleccionamos New-

>Java Class. • Observe que aparece la ventana para crear una clase Java: New Java Class • Para el nombre de la case (Class Name), ingrese IPhone • Para el nombre del paquete (Packages), ingrese dominio • Clic Finish. • Observe que se crea la clase IPhone.java y es desplegada en el editor de código del IDE. • Modifique la clase IPhone.java como se muestra en el Código de abajo, poner especial

atención en el extends de Electronico, en el método que sobre-escribe/implementa getPrecioVenta() y en sus atributos con sus respectivos métodos getter/setter y en el constructor.

package dominio; /** * * @author Andrés Guzmán */ public class IPhone extends Electronico { private String modelo; private String color; public IPhone(int precio, String fabricante, String modelo, String color) { super(precio, fabricante); this.modelo = modelo; this.color = color; } @Override public double getPrecioVenta() { return getPrecio() * 0.9; } public String getModelo() { return modelo; } public String getColor() { return color; } }

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 32

Page 33: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

13. Creando la clase java TvLcd: • Clic derecho en el proyecto ProyectoCatalogoUsandoInterface y seleccionamos New-

>Java Class. • Observe que aparece la ventana para crear una clase Java: New Java Class • Para el nombre de la case (Class Name), ingrese TvLcd • Para el nombre del paquete (Packages), ingrese dominio • Clic Finish. • Observe que se crea la clase TvLcd.java y es desplegada en el editor de código del IDE. • Modifique la clase TvLcd.java como se muestra en el Código de abajo, poner especial

atención en el extends de Electronico, en el método que sobre-escribe/implementa getPrecioVenta() y en sus atributos con sus respectivos métodos getter/setter y en el constructor.

package dominio; /** * @author Andrés Guzmán */ public class TvLcd extends Electronico { private int pulgada; public TvLcd(int precio, String fabricante, int pulgada) { super(precio, fabricante); this.pulgada = pulgada; } @Override public double getPrecioVenta() { return getPrecio() * 0.8; } public int getPulgada() { return pulgada; } }

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 33

Page 34: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

14. Creando la clase java Libro: • Clic derecho en el proyecto ProyectoCatalogoUsandoInterface y seleccionamos New-

>Java Class. • Observe que aparece la ventana para crear una clase Java: New Java Class • Para el nombre de la case (Class Name), ingrese Libro • Para el nombre del paquete (Packages), ingrese dominio • Clic Finish. • Observe que se crea la clase Libro.java y es desplegada en el editor de código del IDE. • Modifique la clase Libro.java como se muestra en el Código de abajo, poner especial

atención en la implementación de la interface (implements) ILibro, en el extends de Producto, en el método que sobre-escribe/implementa getPrecioVenta() y en sus atributos con sus respectivos métodos getter/setter y en el constructor.

package dominio; import java.util.Date; /** * @author Andrés Guzmán */ public class Libro extends Producto implements ILibro { private Date fechaPublicacion = new Date(); private String autor; private String titulo; private String editorial; public Libro(int precio, String autor, String titulo, String editorial) { super(precio); this.autor = autor; this.titulo = titulo; this.editorial = editorial; } public Date getFechaPublicacion() { return fechaPublicacion; } public String getAutor() { return autor; } public String getTitulo() { return titulo; } public String getEditorial() { return editorial; } @Override public double getPrecioVenta() { return getPrecio() * 0.95; } }

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 34

Page 35: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

15. Creando la clase java Comics: • Clic derecho en el proyecto ProyectoCatalogoUsandoInterface y seleccionamos New-

>Java Class. • Observe que aparece la ventana para crear una clase Java: New Java Class • Para el nombre de la case (Class Name), ingrese Comics • Para el nombre del paquete (Packages), ingrese dominio • Clic Finish. • Observe que se crea la clase Comics.java y es desplegada en el editor de código del IDE. • Modifique la clase Comics.java como se muestra en el Código de abajo, poner especial

atención en el extends de Libro, en el método que sobre-escribe/implementa getPrecioVenta() y en sus atributos con sus respectivos métodos getter/setter y en el constructor.

package dominio; /** * * @author Andrés Guzmán */ public class Comics extends Libro { private String personaje; public Comics(int precio, String autor, String titulo, String editorial, String personaje) { super(precio, autor, titulo, editorial); this.personaje = personaje; } public String getPersonaje() { return personaje; } @Override public double getPrecioVenta() { return this.getPrecio() * 0.85; } }

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 35

Page 36: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

16. Modificar el contenido generado por el IDE en la clase EjemploCatalogo.java. • Modifique la clase EjemploCatalogo.java como se muestra en el Código de abajo, poner

especial atención en los comentarios resaltados con negrita.

import dominio.Comics; import dominio.IElectronico; import dominio.ILibro; import dominio.IPhone; import dominio.IProducto; import dominio.Libro; import dominio.TvLcd; public class EjemploCatalogo { public static void main(String[] args) { // Creamos un arreglo de 6 Productos del tipo de la interface IProducto IProducto[] productos = new IProducto[6]; // Creamos 6 objetos del tipo IProducto (De la interface) // y las asignamos al arreglo productos[0] = new IPhone(299000, "Apple", "3G", "Negro"); productos[1] = new IPhone(399000, "Apple", "4G", "Blanco"); productos[2] = new TvLcd(340000, "Sony", 40); productos[3] = new Libro(18000, "Eric Gamma", "Elementos reusables POO", "Alguna..."); productos[4] = new Libro(14000, "Martin Fowler", "UML Gota a Gota", "Alguna..."); productos[5] = new Comics(5000, "Pepo", "Condorito", "Alguna...", "Condorito"); for (IProducto producto : productos) { System.out.print("Tipo de: " + producto.getClass().getName()); System.out.print(" - "); System.out.print("Precio: " + producto.getPrecio()); System.out.print(" - "); System.out.print("Precio final: " + producto.getPrecioVenta()); // Para los Electronicos ============ if (producto instanceof IElectronico) { System.out.print(" - "); System.out.print("Fabricante: " + ((IElectronico) producto).getFabricante()); // Para los IPhone ============ if (producto instanceof IPhone) { System.out.print(" - "); System.out.print("Modelo: " + ((IPhone) producto).getModelo()); System.out.print(" - "); System.out.print("Color: " + ((IPhone) producto).getColor()); } // Para los LCD ============ if (producto instanceof TvLcd) { System.out.print(" - "); System.out.print("Pulgadas: " + ((TvLcd) producto).getPulgada()); } } // Para los Libros ============ if (producto instanceof ILibro) {

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 36

Page 37: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013 System.out.print(" - "); System.out.print("Titulo: " + ((ILibro) producto).getTitulo()); System.out.print(" - "); System.out.print("Autor: " + ((ILibro) producto).getAutor()); // Para los Comics ============ if (producto instanceof Comics) { System.out.print(" - "); System.out.print("Personaje: " + ((Comics) producto).getPersonaje()); } } System.out.println(); } } }

17. Construir y ejecutar el programa

• Clic derecho del mouse sobre el proyecto ProyectoCatalogoUsandoInterface y seleccionar Run

• Observe el resultado en la salida de consola (Tab Output):

run: Tipo de: dominio.IPhone - Precio: 299000 - Precio final: 269100.0 - Fabricante: Apple - Modelo: 3G - Color: Negro Tipo de: dominio.IPhone - Precio: 399000 - Precio final: 359100.0 - Fabricante: Apple - Modelo: 4G - Color: Blanco Tipo de: dominio.TvLcd - Precio: 340000 - Precio final: 272000.0 - Fabricante: Sony - Pulgadas: 40 Tipo de: dominio.Libro - Precio: 18000 - Precio final: 17100.0 - Titulo: Elementos reusables POO - Autor: Eric Gamma Tipo de: dominio.Libro - Precio: 14000 - Precio final: 13300.0 - Titulo: UML Gota a Gota - Autor: Martin Fowler Tipo de: dominio.Comics - Precio: 5000 - Precio final: 4250.0 - Titulo: Condorito - Autor: Pepo - Personaje: Condorito BUILD SUCCESSFUL (total time: 0 seconds)

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 37

Page 38: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013 Ejercicio 2: Crear un programa de Imprenta usando interfaces.

Contexto, el problema y la solución Por ejemplo una clase “Hoja” que tendría toda la información base para cualquier documento

que quiera imprimirse. Por defecto la hoja sabe imprimirse, y en caso de necesitar modificar el comportamiento, sobre-escribiremos el método imprime en la clase concreta (Currículum, contrato o Informe).

Ahora bien, el diseño se nos complicaría si queremos poder imprimir cosas que no necesariamente son Hojas, como un Libro, una revista, una etiqueta, un pendón, incluso una polera, etc.

¿Qué hacemos? ¿Creamos tantas impresoras como temas distintos enfrentemos?

Siguiendo el problema anterior, ahora tenemos varios tipos de elementos que no necesariamente son simples “hojas”.

Hasta ahora veníamos bien, pero si entendimos todo lo expuesto anteriormente, no podemos modificar la herencia para que un “Libro sea hijo de Hoja” (incorrecto), o que la “Impresora ahora controle libros y que todo herede de Libro” (incorrecto), o todas las variantes que se nos ocurran… el problema es que la herencia no cubre estos casos, la herencia solo se aplica cuando hay parentesco, si no lo hay, no sirve…

… a menos que usemos las interfaces!

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 38

Page 39: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

1. Abrir Netbeans IDE 2. Crear un proyecto Netbeans: Java Application

• Seleccionar File desde el menú superior y seleccionar New Project. • Observar que aparece la ventana de dialogo New Project. • Seleccionar Java bajo Categories, y Seleccionar Java Application bajo la sección

Projects. • Clic Next.

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 39

Page 40: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

• Bajo el panel Name and Location, para el Nombre del Proyecto (Project Name), ingrese ProyectoImprenta. Este es el nombre que se le dará al proyecto.

• Para el campo Create Main Class, ingresar EjemploImprenta. (Figura de abajo) Esto es para generar la clase autónoma EjemploCatalogo.java.

• Clic Finish • Observe que el proyecto EjemploImprenta y ha sido creado bajo la pestaña Projects de

NetBeans IDE.

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 40

Page 41: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

3. Creando la interface java Imprimible: • Clic derecho en el proyecto ProyectoImprenta y seleccionamos New->Java Interface. • Observe que aparece la ventana para crear una clase Java: New Java Inteface • Para el nombre de la case (Class Name), ingrese Imprimible • Para el nombre del paquete (Packages), ingrese dominio • Clic Finish. • Observe que se crea la interface Imprimible.java y es desplegada en el editor de código

del IDE. 4. Modifique la interface Imprimible.java como se muestra en el Código de abajo, poner especial

atención en la palabra reservada interface, en el método imprimir() sin declarar de la interface.

package dominio; /** * * @author Andrés Guzmán F */ public interface Imprimible { public String imprimir(); }

5. Creando la clase java abstracta Hoja: • Clic derecho en el proyecto ProyectoImprenta y seleccionamos New->Java Class. • Observe que aparece la ventana para crear una clase Java: New Java Class • Para el nombre de la case (Class Name), ingrese Hoja • Para el nombre del paquete (Packages), ingrese dominio • Clic Finish. • Observe que se crea la clase Hoja.java y es desplegada en el editor de código del IDE. • Modifique la clase Hoja.java como se muestra en el Código de abajo, poner especial

atención en el modificador abstract y en el método abstracto, cualquier objeto del tipo hoja deberá heredar de Hoja, tales como Informe, Currículo, Fotografía, Página etc.

package dominio; /** * @author Andrés Guzmán F */ public abstract class Hoja { protected String contenido; public Hoja(String contenido) { this.contenido = contenido; } public abstract String imprimir(); }

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 41

Page 42: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

6. Creando la clase java Informe: • Clic derecho en el proyecto ProyectoImprenta y seleccionamos New->Java Class. • Observe que aparece la ventana para crear una clase Java: New Java Class • Para el nombre de la case (Class Name), ingrese Informe • Para el nombre del paquete (Packages), ingrese dominio • Clic Finish. • Observe que se crea la clase Informe.java y es desplegada en el editor de código del IDE. • Modifique la clase Informe.java como se muestra en el Código de abajo, poner especial

atención en la implementación (implements) de la interface Imprimible, y en el extends de Hoja (Es un tipo de Hoja y además debe cumplir el contrato de la interfaz Imprimible).

• Observe que implementa el método imprimir() de la Interfaz Imprimible

package dominio; /** * * @author Andrés Guzmán F */ public class Informe extends Hoja implements Imprimible { private String revisor; private String autor; public Informe(String contenido, String revisor, String autor) { super(contenido); this.revisor = revisor; this.autor = autor; } @Override public String imprimir() { return "Informe escrito por: " + autor + " Revisado por: " + revisor + "\n" + contenido; } }

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 42

Page 43: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

7. Creando la clase java Curriculo: • Clic derecho en el proyecto ProyectoImprenta y seleccionamos New->Java Class. • Observe que aparece la ventana para crear una clase Java: New Java Class • Para el nombre de la case (Class Name), ingrese Curriculo • Para el nombre del paquete (Packages), ingrese dominio • Clic Finish. • Observe que se crea la clase Curriculo.java y es desplegada en el editor de código del

IDE. • Modifique la clase Curriculo.java como se muestra en el Código de abajo, poner especial

atención en la implementación (implements) de la interface Imprimible, y en el extends de Hoja (Es un tipo de Hoja y además debe cumplir el contrato de la interfaz Imprimible).

• Observe que implementa el método imprimir() de la Interfaz Imprimible

package dominio; import java.util.ArrayList; import java.util.List; /** * @author Andrés Guzmán F */ public class Curriculo extends Hoja implements Imprimible { private String persona; private String carrera; private List<String> experiencias = new ArrayList<String>(); public Curriculo(String contenido, String persona, String carrera) { super(contenido); this.persona = persona; this.carrera = carrera; } public void addExperiencia(String exp) { experiencias.add(exp); } @Override public String imprimir() { StringBuilder str = new StringBuilder(); str.append("Nombre: ").append(persona).append("\n").append("Resumen: ").append(contenido).append("\n").append("Profesión: ").append(carrera).append("\n").append("Experiencias: "); for (String exp : experiencias) { str.append(exp).append("\n"); } return str.toString(); } }

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 43

Page 44: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

8. Creando la clase java Libro: • Clic derecho en el proyecto ProyectoImprenta y seleccionamos New->Java Class. • Observe que aparece la ventana para crear una clase Java: New Java Class • Para el nombre de la case (Class Name), ingrese Libro • Para el nombre del paquete (Packages), ingrese dominio • Clic Finish. • Observe que se crea la clase Libro.java y es desplegada en el editor de código del IDE. • Modifique la clase Libro.java como se muestra en el Código de abajo, poner especial

atención en la implementación (implements) de la interface Imprimible. • Observe que el libro está compuesto (atributo List) por Paginas que a su vez éstas

también son imprimibles, atributo paginas.

package dominio; /** * @author Andrés Guzmán F */ import java.util.ArrayList; import java.util.List; public class Libro implements Imprimible { private String autor; private String titulo; private List<Imprimible> paginas = new ArrayList<Imprimible>(); public Libro(String autor, String titulo) { this.autor = autor; this.titulo = titulo; } public void addPagina(Imprimible pagina) { paginas.add(pagina); } @Override public String imprimir() { StringBuilder sb = new StringBuilder(); sb.append("Titulo: ").append(titulo).append("\n").append("Autor: ").append(autor).append("\n"); for (Imprimible pagina : paginas) { sb.append(pagina.imprimir()).append("\n"); } return sb.toString(); } }

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 44

Page 45: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

9. Creando la clase java Pagina: • Clic derecho en el proyecto ProyectoImprenta y seleccionamos New->Java Class. • Observe que aparece la ventana para crear una clase Java: New Java Class • Para el nombre de la case (Class Name), ingrese Pagina • Para el nombre del paquete (Packages), ingrese dominio • Clic Finish. • Observe que se crea la clase Pagina.java y es desplegada en el editor de código del IDE. • Modifique la clase Pagina.java como se muestra en el Código de abajo, poner especial

atención en la implementación (implements) de la interface Imprimible, y en el extends de Hoja (Es un tipo de Hoja y además debe cumplir el contrato de la interfaz Imprimible) y un componente de la clase Libro.

• Observe que implementa el método imprimir() de la Interfaz Imprimible package dominio; /** * * @author Andrés Guzmán F */ public class Pagina extends Hoja implements Imprimible { public Pagina(String contenido) { super(contenido); } @Override public String imprimir() { return contenido; } }

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 45

Page 46: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

10. Modificar el contenido generado por el IDE en la clase EjemploImprenta.java. • Modifique la clase EjemploImprenta.java como se muestra en el Código de abajo, y

estudie el código.

import dominio.Curriculo; import dominio.Imprimible; import dominio.Informe; import dominio.Libro; import dominio.Pagina; /** * * @author Andrés Guzmán F */ public class EjemploImprenta { public void imprimir(Imprimible imprimible) { System.out.println(imprimible.imprimir()); } public static void main(String[] args) { EjemploImprenta imp = new EjemploImprenta(); Imprimible cv = new Curriculo("Resumen de Curriculum", "John Doe", "Analista"); Imprimible informe = new Informe("Estudio de suelo", "Bill", "Linus"); Libro libro = new Libro("Erich Gamma", "Patrones de diseños: Elem. Reusables POO"); libro.addPagina(new Pagina("Patrón Singleton")); libro.addPagina(new Pagina("Patrón Observador")); libro.addPagina(new Pagina("Patrón Factory")); libro.addPagina(new Pagina("Patrón Decorator")); libro.addPagina(new Pagina("Patrón Fascade")); ((Curriculo) cv).addExperiencia(new String("Oracle")); ((Curriculo) cv).addExperiencia(new String("EJB3")); ((Curriculo) cv).addExperiencia(new String("Spring Framework")); ((Curriculo) cv).addExperiencia(new String("ESB")); ((Curriculo) cv).addExperiencia(new String("Struts 2")); imp.imprimir(cv); imp.imprimir(informe); imp.imprimir(libro); } }

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 46

Page 47: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013

11. Construir y ejecutar el programa • Clic derecho del mouse sobre el proyecto ProyectoImprenta y seleccionar Run • Observe el resultado en la salida de consola (Tab Output):

run: Nombre: John Doe Resumen: Resumen de Curriculum Profesión: Analista Experiencias: Oracle EJB3 Spring Framework ESB Struts 2 Informe escrito por: Linus Revisado por: Bill Estudio de suelo Titulo: Patrones de diseños: Elem. Reusables POO Autor: Erich Gamma Patrón Singleton Patrón Observador Patrón Factory Patrón Decorator Patrón Fascade BUILD SUCCESSFUL (total time: 0 seconds)

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 47

Page 48: 5 2 Workshop Poo Clase Abstracta e Interface

Curso: "Programación Java SE" 2013 Resumen

En esta práctica de laboratorio vimos y estudiamos a profundidad con diversos ejemplos los conceptos que hay detrás del polimorfismo implementado con clases abstractas e interfaces.

Envía tus consultas a los foros! Aquí es cuando debes sacarte todas las dudas haciendo consultas en los foros correspondientes

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Abstracta e Interface 48