PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez
Encapsulamiento: Control de Acceso
Clases en Java (1) UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO En Java se organizan las clases en paquetes Por ejemplo, las clases del paquete java.lang son importadas automáticamente a cada archivo de java Para importar clases de un paquete en java se usa la palabra reservada import import java.util.*; Se coloca antes de la declaración de la clase import java.util.*; class Grupo { }..
Clases en Java (2) UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO Para definir un paquete se usa la palabra reservada package package curso.poo; Se coloca antes de la declaración de la clase y antes de cualquier import package curso.poo; import java.util.*; class Grupo { }..
Clases en Java (3) UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO En el sistema de archivos están dentro de un archivo JAR u organizados en una jerarquía de directorios C:/curso/poo/> C:\ ------curso --------poo ------Grupo.class ------Conjunto.class El archivo rt.jar contiene las clases principales de java
Encapsulamiento UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO Metodología para ocultar ciertos elementos de la implementación de una clase proporcionando una interfaz pública al cliente (usuario) del software (clase) Generar cápsulas seguras Importante para otros programadores Usan clases nuevas desarrolladas por otros Proteger datos dentro de la clase (no sean modificados inapropiadamente)
Encapsulamiento (2) Hay una sola interfaz pública segura para acceder al contenido privado del siguiente objeto Encapsulamiento
Encapsulamiento (3) Los atributos de la clase son elementos significativos de la implementación de la clase Para asegurarse que la clase está correctamente encapsulada: Aplicar los modificadores de visibilidad a Clases Variables atributo Métodos declarados Todas las clases, métodos y variables poseen un modificador de acceso
Modificadores de Acceso En Java existen cuatro tipos de acceso y sólo tres modificadores: public private protected (default)
Modificadores de Acceso: atributos y métodos public protected default private Visibilidad Clase Visibilidad Paquete Visibilidad subclases Visibilidad todos
Modificador public UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO public permite a cualquier objeto acceder a: las clases atributos y métodos
Modificador public (2) Acceso público a cualquier piso, inclusive áreas donde no deben ingresar visitantes
Modificador public (3) Sólo puede existir una clase publica por cada archivo de código fuente El nombre del archivo debe coincidir con el nombre de la clase pública
Modificador public (3) Colocar enfrente de la variable atributo o método el modificador public public int pisoactual = 1; public void setpiso(int pisodeseado) {. }
Problemas potenciales - public Clase sin encapsular /** * Archivo: ElevadorPublico.java */ public class ElevadorPublico { // definición de atributos public boolean ptasabiertas = false; public int pisoactual =1; public int peso=0; } // definición de constantes public static final int CAPACIDAD = 500; public static final int PISO_MAX= 5; public static final int PISO_MIN= 1;
// Clase TestElevadorPublico. public class TestElevadorPublico { public static void main (String[] args) { ElevadorPublico ep = new ElevadorPublico( ); ep.ptasabiertas=true; ep.ptasabiertas=false; System.out.println("piso actual:"+ ep.pisoactual); // bajar al piso 0 ep.pisoactual--; System.out.println("piso actual:"+ ep.pisoactual); ep.pisoactual++; System.out.println("piso actual:"+ ep.pisoactual); // pasar al piso 7 (sólo hay 5 pisos) ep.pisoactual=7; System.out.println("piso actual:"+ ep.pisoactual); ep.ptasabiertas=true; // los pasajeros suben/bajan ep.ptasabiertas=false; // los pasajeros suben/bajan ep.pisoactual=1; // pasa al piso 1 ep.ptasabiertas=true; // los pasajeros suben/bajan System.out.println("puertas abiertas->"+ ep.ptasabiertas); ep.pisoactual++; System.out.println("piso actual:"+ ep.pisoactual); } // fin main } // fin de la clase
Modificador private UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO private no permite que otros objetos accedan a atributos y métodos de alguna clase dada Elevador Privado
Modificador private UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO Se coloca el modificador private delante de la variable o método private int pisoactual = 1; private void getcapacidad() {. }
Clase ElevadorPrivado /** * Archivo: ElevadorPrivado.java */ public class ElevadorPrivado { // definición de atributos private boolean ptasabiertas = false; private int pisoactual =1; private int peso=0; } // definición de constantes private static final int CAPACIDAD = 500; private static final int PISO_MAX= 5; private static final int PISO_MIN= 1;
// Clase TestElevadorPrivado. public class TestElevadorPrivado { public static void main (String[] args) { ElevadorPrivado ep = new ElevadorPrivado( ); ep.ptasabiertas=true; ep.ptasabiertas=false; System.out.println("piso actual:"+ ep.pisoactual); // bajar al piso 0 ep.pisoactual--; System.out.println("piso actual:"+ ep.pisoactual); ep.pisoactual++; System.out.println("piso actual:"+ ep.pisoactual); // pasar al piso 7 (sólo hay 5 pisos) ep.pisoactual=7; System.out.println("piso actual:"+ ep.pisoactual); ep.ptasabiertas=true; // los pasajeros suben/bajan ep.ptasabiertas=false; // los pasajeros suben/bajan ep.pisoactual=1; // pasa al piso 1 ep.ptasabiertas=true; // los pasajeros suben/bajan System.out.println("puertas abiertas->"+ ep.ptasabiertas); ep.pisoactual++; System.out.println("piso actual:"+ ep.pisoactual); } // fin main } // fin de la clase
Sugerencias para el encapsulamiento En un programa ideal la mayoría de los atributos deben ser privados Los atributos deben ser modificados o consultados por medio de métodos que publica la clase Los métodos deben proporcionar la lógica de negocio asegurar la asignación válida de datos a los atributos
Sugerencias para el encapsulamiento (2) Los métodos públicos y las variables atributos se conocen como interfaz de la clase La interfaz proporciona los elementos que otras clases pueden usar La implementación del método es el detalle de cómo una clase completa una operación dentro de un método Un objetivo de la POO crear métodos públicos y atributos de modo que la implementación puede cambiar sin afectar la interfaz
Interfaz & Implementación Interfaz igual Implementación diferente
Ejemplo de Encapsulación
Ejemplo ElevadorPrivado2 (1) /** * Archivo: ElevadorPrivado2.java */ public class ElevadorPrivado2 { // definición de atributos private boolean ptasabiertas = false; private int pisoactual =1; private int peso=0; // definición de constantes private static final int CAPACIDAD = 500; private static final int PISO_MAX= 5; private static final int PISO_MIN= 1;
Ejemplo ElevadorPrivado2 (2) public void abrirpuertas( ) { System.out.println("Abriendo puertas."); ptasabiertas = true; System.out.println("Puertas abiertas."); } public void cerrarpuertas( ) { System.out.println("Cerrando puertas."); ptasabiertas = false; System.out.println("Puertas cerradas."); } public void subir( ) { System.out.println("Subiendo un piso."); pisoactual++; System.out.println("Piso: " + pisoactual ); }
Ejemplo ElevadorPrivado2 (3) public void bajar( ) { System.out.println("Bajando un piso."); pisoactual--; System.out.println("Piso: " + pisoactual ); } public void setpiso(int pisodeseado) { if ( pisodeseado >= PISO_MIN && pisodeseado<=piso_max) while (pisoactual!= pisodeseado) { if (pisoactual < pisodeseado) subir(); else bajar(); } }
Ejemplo ElevadorPrivado2 (4) public int getpiso( ) { return pisoactual; } public boolean getestatusptas( ) { return ptasabiertas; } } // FIN DE LA CLASE
Clase TestElevadorPrivado2 UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO public class TestElevadorPrivado2{ public static void main(string args[]) { ElevadorPrivado2 ep= new ElevadorPrivado2( ); ep.subir(); ep.abrirpuertas(); ep.cerrarpuertas(); ep.subir(); ep.subir(); ep.subir(); ep.abrirpuertas(); ep.cerrarpuertas(); ep.bajar(); ep.bajar(); ep.bajar(); int pisoact= ep.getpiso(); System.out.println("checando piso Actual: " + pisoact); ep.setpiso(5); ep.abrirpuertas(); } } // FIN CLASE
Aplicabilidad: Modificadores de Acceso private (default) protected public Clase Método Atributo NO SI NO SI SI SI SI SI SI SI SI SI
Modificadores de Acceso: atributos y métodos public protected default private Visibilidad Clase Visibilidad Paquete Visibilidad subclases Visibilidad todos
Ejercicio
Ejercicio OO (1) Crear una clase Rectangulo que represente un rectángulo usando atributos privados ancho y alto. Crear los siguientes métodos públicos getalto retorne el alto getancho retorne el ancho setalto verifique que el parámetro no sean mayor a 30 ni menor a 0 setancho verifique que el parámetro no sean mayor a 50 ni menor a 0 getarea UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO retorne el área de la figura getperimetro retorne el perímetro de la figura dibujar dibuje el rectángulo usando asteriscos (*)
Ejercicio OO (2) Crear otra clase TestRectangulo que contenga el método main y que demuestre el uso de la clase Rectangulo 1. Invocar los métodos con datos válidos 2. Invocar los métodos con datos inválidos