03 java poo_parte_2

24
Prof. Renny Batista Lenguaje Java 1 Programación Orientada a Objetos II Programación Orientada a Objetos II

Upload: instituto-universitario-de-tecnologia-antonio-jose-de-sucre

Post on 12-Jun-2015

1.257 views

Category:

Education


1 download

DESCRIPTION

Introducción al lenguaje de programación Java

TRANSCRIPT

Page 1: 03 java poo_parte_2

Prof. Renny Batista Lenguaje Java 1

Programación Orientada a Objetos IIProgramación Orientada a Objetos II

Page 2: 03 java poo_parte_2

Prof. Renny Batista Lenguaje Java 2

Herencia

¿Qué es la Herencia?Es la capacidad de crear clases que adquieran de manera automática los miembros (atributos y métodos) de otras clases que ya existen, pudiendo al mismo tiempo añadir atributos y métodos propios.

Clase PadreSuperclaseClase base

Clase PadreSuperclaseClase base

Clase HijaSubclase

Clase derivada

Clase HijaSubclase

Clase derivada

Page 3: 03 java poo_parte_2

Prof. Renny Batista Lenguaje Java 3

Herencia

Ejemplo:

class Vehiculo {

public int velocidad;

public int ruedas;

public void parar() {

velocidad = 0;

}

public void acelerar (int kmh) {

velocidad = velocidad + kmh;

}

}

class Carro extends Vehiculo {

public int ruedas=4;

public int gasolina;

public void repostar (int litros) {

gasolina+=litros;

}

}

public class Principal {

public static void main(String[] args) {

Carro objcarro = new Carro();

objcarro.acelerar(80); //Método heredado

objcarro.repostar(12); //Método subclase

}

}

Superclase Subclase

Page 4: 03 java poo_parte_2

Prof. Renny Batista Lenguaje Java 4

Herencia

Ventajas de la Herencia

Reutilización de código: En aquellos casos dónde se necesite crear una clase que, además de otros propios, deba incluir lo métodos definidos en otra, la herencia evita tener que reescribir todos esos métodos en la nueva clase.

Mantenimiento de aplicaciones existentes: Usando la herencia, sitenemos una clase con una determinada funcionalidad y tenemos lanecesidad de ampliar dicha funcionalidad, no necesitamos modificar la clase existente, sino que podemos crear una clase que herede de la primera, adquiriendo toda su funcionalidad y añadiendo sólo las nuevas.

Java proporciona gran cantidad de clases (bibliotecas) al programador, en el API (Aplication Programming Interface) Java.

Page 5: 03 java poo_parte_2

Prof. Renny Batista Lenguaje Java 5

Herencia

Reglas de la herencia

En Java no esta permitida la herencia múltiple, es decir, una subclase no puede heredar más de una clase.

Si es posible la herencia multinivel, es decir, “A” puede ser heredada por “B”y “C” puede heredar “B”.

Una clase puede ser heredada por varias clases.

Por defecto, todas las clases derivan de java.lang.Object , a no ser que se especifique otra clase padre.

Page 6: 03 java poo_parte_2

Prof. Renny Batista Lenguaje Java 6

Herencia

Reglas de la herencia

Clase AClase A

Clase BClase B

Clase CClase C

Clase AClase A Clase BClase B

Clase CClase C

Clase AClase A

Clase BClase BClase CClase C

Page 7: 03 java poo_parte_2

Prof. Renny Batista Lenguaje Java 7

Constructores

Constructores y HerenciaEl constructor de una clase hija puede llamar al constructor de su clase padre mediante el operador: “super”.Como norma universal, cada vez que en Java se crea un objeto de una clase, antes de ejecutarse el constructor de dicha clase se ejecutará primero el de su superclase.

public class Hija extends Padre {public Hija() {

super();System.out.println("Constructor de Hija");

}}

public class Padre {public Padre() {

System.out.println("Constructor de Padre");}

}

public class Principal {public static void main(String[] args ){

Hija objhija = new Hija();}

}

Page 8: 03 java poo_parte_2

Prof. Renny Batista Lenguaje Java 8

Clases finales

Si queremos evitar que una clase sea heredada por otra, deberá ser declarada con el modificador final delante de class.

Si otra clase intenta heredar de una clase final se producirá un error de compilación.

public class ClaseB extends ClaseA {// Esta clase no compilará

}

public final class ClaseA {..

}

Page 9: 03 java poo_parte_2

Prof. Renny Batista Lenguaje Java 9

Sobreescritura de métodos

Cuando una clase hereda de otra, el comportamiento de los métodos que hereda no siempre se ajusta a las necesidades de la nueva clase. En estos casos, la subclase puede optar por volver a reescribir el método heredado, es lo que se conoce como sobreescritura de un método.

Reglas a la hora de sobre escribir un método:

Cuando se sobrescribe un método de una subclase, éste debe tener el mismo formato que el método de la superclase que sobrescribe.(igual nombre, iguales parámetros e igual tipo de devolución).

El método sobrescrito puede tener un modificador menos restrictivo que el de la superclase. Por ejemplo, el método de la superclase puede ser protected y la versión sobrescrita en la subclase puede ser public, pero nunca uno mas restrictivo.

Page 10: 03 java poo_parte_2

Prof. Renny Batista Lenguaje Java 10

Sobreescritura de métodos

public class Primera {public void imprimir (String mensaje){

System.out.println(mensaje);}

}

public class Segunda extends Primera {// Se mantiene el formato original del métodopublic void imprimir (String mensaje){

// nuevo código de imprimirSystem.out.print(“El mensaje es: ”);System.out.println(mensaje);

}}

Page 11: 03 java poo_parte_2

Prof. Renny Batista Lenguaje Java 11

Clases abstractas

Es una clase en la que alguno de sus métodos está declarado pero no estádefinido, es decir, se especifica su nombre, parámetros y tipo de devolución pero no incluye código. A este tipo de métodos se les conoce como métodos abstractos.Un método se define como abstracto porque en ese momento no se conocecomo ha de ser su implementación; serán las subclases de la clase abstracta las responsables de darle “cuerpo” mediante la sobrescritura del mismo.

Sintaxis para la creación de una clase abstracta:

public abstract class nombre_Clase {

public abstract tipo nombre_metodo(argumentos);..// otros métodos

}

Page 12: 03 java poo_parte_2

Prof. Renny Batista Lenguaje Java 12

Clases abstractas

Sobre la creación y utilización de clases abstractas hay que tener en cuenta los siguientes aspectos:

Una clase abstracta puede tener métodos abstractos y no abstractos.

No es posible crear objetos de una clase abstracta, al haber métodos que no estén definidos en la clase, no está permitido crear objetos de ella.

Las subclases de una clase abstracta están obligadas a sobrescribir todos los métodos abstractos que heredan. En caso de que no interese sobrescribir alguno de esos métodos, la subclase deberá ser declara también abstracta.

Una clase abstracta puede tener constructores.

Page 13: 03 java poo_parte_2

Prof. Renny Batista Lenguaje Java 13

Clases abstractas

* Clase/método abstracta/o

Crear en Java las siguientes clases:

Page 14: 03 java poo_parte_2

Prof. Renny Batista Lenguaje Java 14

Clases abstractas

//Figura.javapublic abstract class Figura {

private String color;public Figura(String color){

this.color=color;}public String obtenerColor(){

return color;}public abstract double area();

}

//Circulo.javapublic class Circulo extends Figura{

private int radio; public Circulo(int radio, String color){

super(color);this.radio = radio;

}public double area(){

return Math.PI*radio*radio;}public int obtenerRadio(){

return radio;}

}

Implementa y sobrescribe el método

abstracto area()

Page 15: 03 java poo_parte_2

Prof. Renny Batista Lenguaje Java 15

Clases abstractas

//Triangulo.javapublic class Triangulo extends Figura{

private int base; private int altura;public Triangulo(int base,int altura,String color){

super(color);this.base = base;this.altura = altura;

}public double area(){

return (base*altura)/2;}public int obtenerBase(){

return base;}public int obtenerAltura(){

return altura;}

}

Page 16: 03 java poo_parte_2

Prof. Renny Batista Lenguaje Java 16

Polimorfismo

Se define como la posibilidad de utilizar una misma expresión para invocar a diferentes versiones de un mismo método. En Java, es posible asignar un objeto de una clase a una variable de su superclase. Es aplicable, incluso, cuando la superclase es una clase abstracta.

Ejemplo:

A partir de aquí, puede utilizarse está variable para invocar a aquellos métodos del objeto que también estén definidos o declarados en la superclase, pero no a aquellos que sólo existan en la clase a la que pertenece el objeto.

Figura objFig;objFig = new Triangulo(5,7,”verde”);

objFig.obtenerColor(); //invoca al método de TrianguloobjFig.area(); //invoca al método area de Triangulo

objFig.obtenerBase(); //genera un error de compilación

objFig.obtenerAltura(); // genera un error de compilación

Page 17: 03 java poo_parte_2

Prof. Renny Batista Lenguaje Java 17

Polimorfismo

Java permite apuntar a un objeto con una variable definida como tipo de clase padre.

Sólo se puede acceder a las partes del objeto que pertenecen a la clase Figura; las partes específicas de la clase Triangulo no se ven. Este efecto se consigue porque, para el compilador, objFig es sólo una variable de tipo Figura, no Triangulo.En Java hay una clase que es la clase padre de todas las demás: java.lang.Object. Un método de esta clase (por ejemplo: toString() que convierte cualquier elemento de Java a cadena de caracteres), puede ser utilizada por todos.

Figura objFig;

objFig = new Triangulo(5,7,”verde”);

Page 18: 03 java poo_parte_2

Prof. Renny Batista Lenguaje Java 18

Polimorfismo

De lo anterior podemos observar que la misma instrucción objFig.area()permite llamar a distintos métodos area(), dependiendo del objeto almacenado en la variable objFig.

Figura objFig; objFig = new Triangulo(5,7,”verde”);objFig.obtenerColor(); //método color de TrianguloobjFig.area(); //método area de Triangulo

objFig = new Circulo(10,”azul”);objFig.obtenerColor(); //método color de circuloobjFig.area(); //método area de circulo

Page 19: 03 java poo_parte_2

Prof. Renny Batista Lenguaje Java 19

Interfaces

Es un conjunto de métodos abstractos y de constantes públicos definidos en un archivo .java. Una interfaz es similar a una clase abstracta llevada al límite, en la que todos sus métodos son abstractos.La finalidad de una interfaz es la de definir el formato que deben de tener determinados métodos que han de implementar ciertas clases.

public void click(){

}

public void click(){

}

public void click(){

}

public void click();

Interfaz

ClaseA ClaseB ClaseC

Page 20: 03 java poo_parte_2

Prof. Renny Batista Lenguaje Java 20

Interfaces

Una interfaz se define mediante la palabra interface, utilizando la siguiente sintaxis:

Ejemplo:

public interface Nombre_interfaz {Tipo metodo1(argumentos);Tipo metodo2(argumentos);..

}

public interface Operaciones {public void rotar();public String serializar();

}

Page 21: 03 java poo_parte_2

Prof. Renny Batista Lenguaje Java 21

Interfaces

A la hora de crear una interfaz hay que tener en cuenta las siguientes consideraciones:

Todos los métodos definidos en una interfaz son públicos y abstractos, aunque no se indique explícitamente (abstract).

En una interfaz es posible definir constantes. Ejemplo: public static final int valor_maximo = 100;

Una interfaz no es una clase. Las interfaces tan sólo pueden contener: métodos abstractos y constantes. No pueden contener métodos con códigos, constructores o variables, y por supuesto no es posible crear objetos de una interfaz

Page 22: 03 java poo_parte_2

Prof. Renny Batista Lenguaje Java 22

Implementación de una interfaz

En la definición de una clase, se utiliza la palabra implements para indicar que interfaz se ha de implementar

Ejemplo:

public class MiClase implements MiInterfaz {..

}

public class Triangulo implements Operaciones {public void rotar(){}

public String serializar(){}

}

Page 23: 03 java poo_parte_2

Prof. Renny Batista Lenguaje Java 23

Implementación de una interfaz

A la hora de implementar una interfaz hay que tener en cuenta lo siguiente:Cuando una clase implementa una interfaz, esta obligada a definir el código (implementar) de todos los métodos existentes en la misma. De no ser así la clase debe declararse como abstracta.

Una clase puede implementar más de una interfaz. En cuyo caso debe implementar los métodos existentes en todas las interfaces.public class MiClase implements Interface1, Interface2 {

}

Una clase puede heredar otra clase e implementar al mismo tiempo una o varias interfacespublic class ClaseB extends ClaseA implements Interface1, Interface2 {

}

Una interfaz puede heredar de otras interfaces. public interface MiInterfaz extends Interface1, Interface2 {

}

Page 24: 03 java poo_parte_2

Prof. Renny Batista Lenguaje Java 24

Interfaces en el J2SE

java.lang.Runnable. Contiene un método para ser implementado por aquellas aplicaciones que van a funcionar en modo multitarea.

java.util.Enumeration. Proporciona métodos que son implementados por objetos utilizados para recorrer colecciones.

java.awt.event.WindowListener. Proporciona métodos que deben ser implementados por las clases que van a gestionar los eventos (clases manejadoras) producidos en la ventana, dentro de una aplicación basada en entorno gráfico.

java.sql.Connection. Interfaz implementada por los objetos utilizados para manejar conexiones a bases de datos.

java.io.serializable. Esta interfaz requiere que el contenido de los objetos tengan que ser trasferidos a algún dispositivo del almacenamiento, por ejemplo un archivo de disco.