Aplicaciones de Escritorio Introducción a la Programación Orientada a Objetos con Java Disertantes: Ing. Rasjido, Jose. AdeS Montenegro, Cristian. Escuela de Informática 2013 - UNPA UACO Agenda Clases y Paquetes. Modificadores de Acceso. Encapsulación. Sobrecarga de Métodos. Herencia. Clases Abstractas. Polimorfismo. Interfaces. Escuela de Informática 2013 - UNPA UACO Clases Un programa Java puede ser considerado como un conjunto de objetos que interactúan entre si, para cumplir un propósito específico. Una clase es una plantilla a partir de la cual se instancian objetos, cuyo estado y comportamiento esta determinado por los atributos y métodos definidos en la clase. Escuela de Informática 2013 - UNPA UACO Clases Una clase contiene las declaraciones de los atributos y de los métodos, y colectivamente se los denomina miembros de la clase. int x, y, diametro; character tipo; double elasticidad; Declaraciones de atributos Declaraciones de métodos Escuela de Informática 2013 - UNPA UACO Empaquetado de Clases Los paquetes son un mecanismo utilizado por Java, que permite organizar las clases de una manera estructurada y jerárquica. En Java, este mecanismo se referencia mediante la palabra package. package nombre_paquete; public class MiClase { // Contenido de la clase. Escuela de Informática 2013 - UNPA UACO } Empaquetado de Clases Ventajas. Permiten organizar las clases de manera estructurada. Evitan conflicto de nombre. Escuela de Informática 2013 - UNPA UACO Empaquetado de Clases Importar clase. import nombre_clase; Importar varias clases. import nombre_paquete.*; import java.util.*; Escuela de Informática 2013 - UNPA UACO Agenda Clases y Paquetes. Modificadores de Acceso. Encapsulación. Sobrecarga de Métodos. Herencia. Clases Abstractas. Polimorfismo. Interfaces. Escuela de Informática 2013 - UNPA UACO Modificadores de Acceso En Java existen cuatro modificadores de acceso que, ordenados de menor a mayor visibilidad, son: private. Los atributos o métodos están restringidos al interior de la clase. No se aplica en clases. protected. Los atributos o métodos protegidos de una clase solo pueden ser utilizados por otras clases pertenecientes al mismo paquete. No se aplica en clases. Escuela de Informática 2013 - UNPA UACO Modificadores de Acceso public. El modificador public ofrece el máximo nivel de visibilidad. Los atributos, métodos o clases asociados a este modificador pueden ser visibles desde cualquier clase, independientemente del paquete en el que se encuentren. (ninguno). Si algún elemento (clase, método o atributo) no posee modificador de acceso, únicamente las clases del mismo paquete tendrán acceso a los mismos. Escuela de Informática 2013 - UNPA UACO Modificadores de Acceso Aplicabilidad de los modificadores de acceso sobre los distintos componentes de una clase: private (default) protected public Clase NO SI NO SI Método SI SI SI SI Atributo SI SI SI SI Variable local NO NO NO NO Escuela de Informática 2013 - UNPA UACO Agenda Clases y Paquetes. Modificadores de Acceso. Encapsulación. Sobrecarga de Métodos. Herencia. Clases Abstractas. Polimorfismo. Interfaces. Escuela de Informática 2013 - UNPA UACO Encapsulación El comportamiento de una clase esta determinado por los métodos públicos de la misma, mientras que las características de los objetos de las clases están determinadas por los atributos de la clase, los cuales suelen tener acceso privado. La idea de la encapsulación es mantener los atributos de los objetos como privados y proporcionar acceso a los mismos a través de métodos públicos. Escuela de Informática 2013 - UNPA UACO Encapsulación Esta filosofía de programación proporciona dos beneficios importantes: Protección de datos “sensibles”. Facilidad y flexibilidad en el mantenimiento de las aplicaciones Escuela de Informática 2013 - UNPA UACO Encapsulación Protección de datos. Supongamos que desarrollamos la clase sin aplicar el concepto de encapsulación. public class Rectangulo { public int alto, ancho; // Métodos de la clase. } Entonces, no podríamos impedir al que hace uso de la clase hacer esto: Rectangulo r = new Rectangulo(); r.alto = -5; Escuela de Informática 2013 - UNPA UACO Encapsulación La encapsulación permite el acceso controlado a los atributos, entonces lo correcto sería: public class Rectangulo { private int alto, ancho; public void setAlto (int alto) { if (alto > 0) this.alto = alto; } public int getAlto() { return this.alto; } public void setAncho (int ancho) { if (ancho > 0) this.ancho = ancho; } public int getAncho() { return this.ancho; } Escuela de Informática 2013 - UNPA UACO } Encapsulación La creación de objetos Rectangulo y asignación de valores a los atributos, sería: Rectangulo r = new Rectangulo(); r.setAlto(3); r.setAncho(6); Escuela de Informática 2013 - UNPA UACO Encapsulación Facilidad en el mantenimiento. Si una vez creada la clase se desea cambiar el criterio sobre los posibles valores que pueden tomar los atributos, entonces solo se modifican los métodos de acceso necesarios y se libera una nueva versión de la clase. Escuela de Informática 2013 - UNPA UACO Encapsulación Por ejemplo, si se decide que el valor del atributo alto no puede ser inferior a 2, entonces el método setAlto() quedaría: public void setAlto(int alto) { if (alto > 1) this.alto = alto; } Los detalles de la implementación quedan ocultos, por lo que el código que hace uso de esta clase no tendrá que modificarse. Escuela de Informática 2013 - UNPA UACO Encapsulación Clases de encapsulación (JavaBeans). La finalidad de las clases JavaBeans es la encapsulación de una serie de datos asociado a una entidad (empleado, libro, producto, etc.), para facilitar el tratamiento de los mismos. Escuela de Informática 2013 - UNPA UACO Encapsulación public class Empleado { private String nombre, dni; public Empleado (String nombre, String dni) { this.nombre = nombre; this.dni = dni; } public void setNombre(String n) { nombre = n; } public String getNombre() { Ejemplo de return nombre; } public void setDni(String n) { dni = n; } public String getDni() { return dni; } Escuela de Informática 2013 - UNPA UACO } clase JavaBean Agenda Clases y Paquetes. Modificadores de Acceso. Encapsulación. Sobrecarga de Métodos. Herencia. Clases Abstractas. Polimorfismo. Interfaces. Escuela de Informática 2013 - UNPA UACO Sobrecarga de Métodos La sobrecarga de métodos permite tener en una misma clase varios métodos con el mismo nombre. Es imprescindible que se cumpla que: cada versión del método debe distinguirse de las otras en el número o tipo de parámetros. Escuela de Informática 2013 - UNPA UACO Sobrecarga de Métodos Ejemplos válidos de sobrecarga: public void calculo(int k) {..} public void calculo(String s) {..} public long calculo(int k, boolean b) {..} Ejemplos no válidos de sobrecarga: public void calculo(int k) {..} public int calculo(int k) {..} public void calculo(int n) {..} Escuela de Informática 2013 - UNPA UACO Agenda Clases y Paquetes. Modificadores de Acceso. Encapsulación. Sobrecarga de Métodos. Herencia. Clases Abstractas. Polimorfismo. Interfaces. Escuela de Informática 2013 - UNPA UACO Herencia La herencia representa uno de los conceptos más importantes y potentes de la Programación Orientada a Objetos. 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 además añadir nuevos atributos y métodos. Escuela de Informática 2013 - UNPA UACO Herencia Principales ventajas de la herencia. Reutilización de código. Mantenimiento de aplicaciones existentes. Escuela de Informática 2013 - UNPA UACO Herencia Nomenclatura. En POO, la clase que va a ser heredada se la llama superclase o clase base, mientras que a la hereda se la conoce como subclase o clase derivada. SUPER CLASE SUB CLASE Escuela de Informática 2013 - UNPA UACO Herencia Nociones básicas. En JAVA no está permitida la herencia múltiple, es decir, una subclase no puede heredar más de una clase. Si es necesario una herencia multinivel, entonces A puede ser heredada por B y C puede heredar B. Una clase puede ser heredada por varias clases. La herencia entre dos clases establece una relación de tipo “es un”. Escuela de Informática 2013 - UNPA UACO Herencia Relación “es un” VEHÍCULO COCHE Un coche “es un” vehículo. Escuela de Informática 2013 - UNPA UACO Herencia Creación de herencia en Java (extends). public class subclase extends superclase { // Código de la subclase. } Todas las clases de Java heredan alguna clase. Si no se especifica extends, entonces implícitamente se heredará de Object. Escuela de Informática 2013 - UNPA UACO Herencia Ejemplo: VEHÍCULO COCHE public class vehiculo { private float alto, largo, ancho; // getters y setters públicos // resto de la clase } public class coche extends vehiculo { private int ruedas; private String tipoMotor; // resto de la clase. } Escuela de Informática 2013 - UNPA UACO Herencia Constructores. Cada vez que se cree un objeto de una clase, antes de ejecutarse el constructor de dicha clase se ejecutará primero el de su superclase. Todos los constructores incluyen implícitamente el método super(), con el objetivo de invocar el constructor de la superclase. Escuela de Informática 2013 - UNPA UACO Herencia Constructores. Si el constructor de la superclase requiere argumentos, entonces: public class coche extends vehiculo { private int ruedas; private String tipoMotor; public coche(float alt, float lar, float anc, int rue, String tm) { super(alt, lar, anc); ruedas = rue; tipoMotor = tm; } Escuela de Informática 2013 - UNPA UACO } Herencia Métodos y atributos protegidos. Para que un elemento solo pueda ser accedido por las clases derivadas u otras clases de otros paquetes, entonces utilizamos el modificador protected. public class Persona { private String fecha_nacimiento; public Persona(String f) { fecha_nacimiento = f; } protected int getEdad() { //Implementación del método. } Escuela de Informática 2013 - UNPA UACO } Herencia Clases finales. Para evitar que una clase pueda ser heredada por otra, entonces deberá ser declarada con el modificador final delante de class. public final class ClaseA { . . } Escuela de Informática 2013 - UNPA UACO Herencia Sobreescritura de métodos. Cuando una clase hereda a otra, el comportamiento de los métodos que hereda no siempre se ajusta a las necesidades de la nueva clase. Un ejemplo clásico es el método toString(). Escuela de Informática 2013 - UNPA UACO Agenda Clases y Paquetes. Modificadores de Acceso. Encapsulación. Sobrecarga de Métodos. Herencia. Clases Abstractas. Polimorfismo. Interfaces. Escuela de Informática 2013 - UNPA UACO Clases Abstractas Una clase abstracta es una clase en la que alguno de sus métodos está declarado pero no está definido. Estos métodos no definidos se los conoce como métodos abstractos. Escuela de Informática 2013 - UNPA UACO Clases Abstractas Un método abstracto es aquel que no tiene un comportamiento definido, sino hasta que una clase hereda su clase abstracta. Son un ejemplo de sobreescritura de métodos. Escuela de Informática 2013 - UNPA UACO Clases Abstractas Sintaxis. La sintaxis para una crear una clase abstracta es la siguiente: public abstract class Figura { public abstract double area(); //otros métodos. } Escuela de Informática 2013 - UNPA UACO Clases Abstractas Características. Una clase abstracta puede tener métodos no abstractos. No es posible crear objetos de una clase abstracta. Las subclases de una clase abstracta están obligadas a sobreescribir todos los métodos abstractos que heredan. Una clase abstracta puede tener constructores. Escuela de Informática 2013 - UNPA UACO Clases Abstractas EJERCICIO *Figura color getColor() *area() Triangulo base altura getBase() getAltura() area() * Clase/método abstracta/o Circulo radio getRadio() area() Escuela de Informática 2013 - UNPA UACO Agenda Clases y Paquetes. Modificadores de Acceso. Encapsulación. Sobrecarga de Métodos. Herencia. Clases Abstractas. Polimorfismo. Interfaces. Escuela de Informática 2013 - UNPA UACO Polimorfismo El polimorfismo es la posibilidad de utilizar una misma expresión para invocar a diferentes versiones de un mismo método, determinando en tiempo de ejecución la versión del método que se debe ejecutar. Escuela de Informática 2013 - UNPA UACO Polimorfismo Mediante el polimorfismo es posible asignar un objeto de una clase a una variable de su superclase. Figura f = new Triangulo(double base, double altura, String color); f.getColor(); f.getArea(); De esta forma solo podrán accederse a los métodos definidos en la superclase. Escuela de Informática 2013 - UNPA UACO Polimorfismo Esto nos permite acceder a diferentes versiones de un método heredado, dependiendo del objeto almacenado. Figura f; f = new Triangulo(..); f.area(); //Método área de Triangulo. f = new new Circulo(..); f.area(); //Método área de Circulo. f = new Rectangulo(..); f.area(); //Método área de Rectangulo. Escuela de Informática 2013 - UNPA UACO Polimorfismo Ventaja. A partir del ejemplo anterior se puede observar claramente que la principal ventaja es la Reutilización de Código. Escuela de Informática 2013 - UNPA UACO Agenda Clases y Paquetes. Modificadores de Acceso. Encapsulación. Sobrecarga de Métodos. Herencia. Clases Abstractas. Polimorfismo. Interfaces. Escuela de Informática 2013 - UNPA UACO Interfaces Una interfaz es un conjunto de métodos abstractos y de constantes públicas, definidos en un archivo .java. Una interfaz es similar a una clase abstracta en la que todos sus métodos son abstractos. Su finalidad es definir el formato que deben de tener determinados métodos que han de implementar ciertas clases. Escuela de Informática 2013 - UNPA UACO Interfaces Definición. Se define mediante la palabra interface, utilizando la siguiente sintaxis: public interface Operaciones { public void rotar(); public String serializar(); } Escuela de Informática 2013 - UNPA UACO Interfaces Implementación. Para indicar que una clase implementará los métodos de una interfaz, se utiliza la palabra inmplements. public class Triangulo extends Figura implements Operaciones { public void rotar() { //Implementación del método. } public String serializar() { //Implementación del método. } Escuela de Informática 2013 - UNPA UACO } Interfaces Características. Todos los métodos definidos en una interfaz son públicos y abstractos. En una interfaz es posible definir constantes. Una interfaz no es una clase. Escuela de Informática 2013 - UNPA UACO Interfaces Características. Una clase puede implementar más de una interfaz. public class MiClase implements Interfaz1, Interfaz2, … { } Una interfaz puede heredar otras interfaces. public interface MiInterfaz extends Interfaz1, Interfaz2, … { } Escuela de Informática 2013 - UNPA UACO Interfaces Interfaces y polimorfismo. Una variable de tipo interfaz puede almacenar cualquier objeto de las clases que la implementan. Operaciones op = new Triangulo(..); op.rotar(); op.serializar(); Escuela de Informática 2013 - UNPA UACO Referencias Programador Certificado Java 2, segunda edición. Antonio J., y Martin Sierra. Alfaomega-RaMa. Estructuras de Datos con Java, Diseño de estructuras y algoritmos, segunda edición. John Lewis y Joseph Chase. Pearson – Adison Wesley. FIN Escuela de Informática 2013 - UNPA UACO