Download 2 - Departamento de Computación
Document related concepts
no text concepts found
Transcript
Lectura 2 Programación Basada en Objetos Clases en Java Definición class identificador{ //Bloque de propiedades (datos miembro, atributos, propiedades) //Bloque de métodos (comportamientos) } Ejemplo: class Tiempo{ // Bloque de propiedades int hora; // 0..23 int minutos; // 0..59 int segundos; // 0..59 int centesimas; // 0..99 ** Medicion del tiempo en formato militar ** // Bloque de métodos /* inicializar, inicializa los datos miembro */ void inicializar(int h, int m, int s, int c){ hora = h; minutos = m; segundos = s; centesimas = c; } /* escribirEstandard, muestra la hora en formato estándar por consola */ void escribirEstandard(){ System.out.print(”hh:mm:ss:cc” + ((hora == 0 || hora ==12)? 12: hora % 12); System.out.println(”:” + minutos + ”:” + segundos + ”:” + centesimas); } /* escribirMilitar, despliega la hora en formato militar por consola */ void escribirMilitar(){ System.out.println(”hh:mm:ss:cc” + hora + ”:” + minutos + ”:” + segundos + ”:” + centesimas); } } Universidad de Carabobo. Facultad de Ingeniería. Departamento de Computación. Computación Avanzada. 2003. 2 Programación Basada En Objetos. Lectura2 Representación gráfica de una clase Nombre de la clase Datos Métodos Ejemplo: Tiempo Este es un comentario de la clase Tiempo hora minutos segundos centesimas inicializar escribirEstandard escribirMilitar Objetos ° Es una variable de un tipo de dato definido como clase. Por ejemplo: Tiempo reloj; // la variable no ha sido creada en memoria ° Un objeto es una instancia de una clase. Para crear una instancia de una clase debe utilizarse la palabra reservada new así: Tiempo reloj = new Tiempo(); // new reserva espacio de memoria o también Tiempo reloj; reloj = new Tiempo(); Tres formas para declarar un objeto: • • • nombreClase nombreObjeto; nombreClase nombreObjeto = new nombreClase(); nombreClase nombreObjeto = new nombreClase(parámetros); Universidad de Carabobo. Facultad de Ingeniería. Departamento de Computación. Computación Avanzada. 2003. 3 Programación Basada En Objetos. Lectura2 Representación gráfica de un objeto En el primer compartimiento se escribe el nombre del objeto precediendo al nombre de la clase de la cual fue creado (subrayado), en el segundo los campos miembro con sus valores iniciales y en el tercero los métodos miembro. Nombre del objeto: Nombre de la clase Campos Métodos Ejemplo: relojCasa:Tiempo hora = 0 minutos = 0 segundos = 0 centesimas = 0 inicializar escribirEstandard escribirMilitar Pase de mensajes a un objeto Pasar un mensaje significa llamar a un método de un objeto. Para que un método de un objeto se ejecute debemos escribir el nombre del objeto seguido del nombre del método, así: objeto.metodo(lista de parámetros); Ejemplo: relojCasa.inicializar(0,0,0,0); Constructores Un constructor es un método público que tiene el mismo nombre de la clase y que se ejecuta en forma automática al crear la instancia de la clase (el objeto). La forma general de un método constructor es: Nombre de la clase(parámetros){ Universidad de Carabobo. Facultad de Ingeniería. Departamento de Computación. Computación Avanzada. 2003. 4 Programación Basada En Objetos. Lectura2 sentencias } El programador que escribe la clase puede crear uno o más constructores que tengan diferente número de parámetros (sobrecarga de métodos constructores) y que se corresponderán con los proporcionados durante la creación del objeto. Por ejemplo podemos agregar otros constructores a la clase Tiempo, de esta forma: Tiempo(){ hora = 0; minutos = 0; segundos = 0; centesimas = 0; } Tiempo(int h, int m, int s, int c){ hora = h; minutos = m; segundos = s; centesimas = c; } En el primer constructor no hay parámetros. En el segundo constructor, cuando se crea el objeto, deben especificarse los valores iniciales que queremos que tomen los campos del objeto. Ejemplo: 1. Si queremos crear un objeto llamado relojCasa con valores iniciales de sus campos en cero, debemos escribir en el programa: Tiempo relojCasa = new Tiempo(); 2. Si de lo contrario queremos crear un objeto relojCasa con valores de tiempo específicos, debemos declarar el objeto de la siguiente forma : Tiempo relojCasa = new Tiempo(5,15,55,0); Universidad de Carabobo. Facultad de Ingeniería. Departamento de Computación. Computación Avanzada. 2003. Programación Basada En Objetos. Lectura2 5 Java determina que constructor debe utilizar según sea la llamada al constructor Tiempo Reglas referentes a los constructores de Java ° Un constructor tiene el mismo nombre que la clase Un constructor siempre se llama con la palabra clave new ° Los constructores pueden tener ninguno, uno o más parámetros ° ° ° Los constructores no devuelven ningún tipo en forma explicita Si no se especifica un constructor, Java incluye uno predeterminado, que asigna la memoria para almacenar el objeto y luego inicializa todas las variables a sus valores predeterminados. Si la clase especifica uno o más constructores, Java no proporciona un constructor predeterminado. Encapsulamiento Dentro de una clase todos los métodos tienen acceso a los datos miembro, es decir, los métodos pueden usar o modificar los datos miembro, sin necesidad de pasarlos como parámetros. Una clase debe ser auto-contenida y revelar a las clases restantes únicamente lo necesario. Se considera conveniente proteger los campos de datos impidiendo el acceso directo a ellos y proporcionando métodos de asignación (set) y consulta (get) que permita un acceso controlado a cada dato. Este tipo de protección se logra mediante modificadores de acceso. Modificadores para controlar el acceso a los miembros de una clase Modificador de acceso Descripción ninguno Accesible solo en su paquete public El miembro de clase está disponible a todas las clases dentro y fuera del paquete y a todas las clases derivadas private El acceso al miembro de la clase únicamente esta permitido a otros miembros de la misma clase protected El acceso al miembro de la clase únicamente esta permitido a otros miembros de la misma clase, a clases derivadas o a clases dentro del mismo paquete default El acceso al miembro de la clase únicamente esta permitido a otros miembros de la misma clase, a clases derivadas en el mismo paquete y a otras clases dentro del mismo paquete Universidad de Carabobo. Facultad de Ingeniería. Departamento de Computación. Computación Avanzada. 2003. Programación Basada En Objetos. Lectura2 6 Pautas para el diseño de clases (Bishop Judy, 1999, Java Fundamentos de Programación) 1. Coherencia Una clase debe referirse a una única entidad o a un conjunto similar de operaciones. Por ejemplo, la clase Math dispone de operaciones de naturaleza trigonométrica y exponencial. 2. Separación de funciones Incluso para una única entidad, se pueden tener varias clases relacionadas en vez de una clase. 3. Ocultar información Una clase debería revelar al usuario solo aquello que debe revelarse y nada más. De esta forma se pueden proteger los datos de un mal uso, y la clase puede operar sobre una base más segura. También es conveniente ocultar los métodos que no sean relevantes para los usuarios, sino que sólo los necesita la clase. 4. Acceso a datos mediante métodos El acceso a datos ocultos, se debe hacer, si se requiere, mediante métodos apropiados. Por ejemplo la clase Locale no revela los campos del país ni del idioma de ningún objeto Locale. Para acceder a ellos, se usa el método get o set apropiado. 5. Inicialización de objetos Cuando se crea un objeto, es eficiente copiar todos sus valores iniciales, para que se puedan usar más tarde. Esto es preferible a tener que proporcionar los valores repetidamente como parámetros. Por ejemplo con la clase Locale, establecemos los valores iniciales para alli, y a menos que los cambiemos, estarán siempre disponibles. Por supuesto, algunos valores deben cambiar, pero el objetivo es mantener las llamadas a métodos tan sencillas como sea posible. Referencias: BISHOP Judy. (1999). Java Fundamentos de Programación DEITEL & Deitel. (1999). C++ como programar. Segunda Edición. Prentice may. Pág. 520. JOYANES A. y ZAHONERO, M. (2002). Programación en Java 2. Algoritmos, Estructuras de Datos y Programación Orientada a Objetos. Mc Graw Hill. Pág. 72 GREG, Perry. (1993). Aprendiendo Programación Orientada a Objetos con Turbo C++ en 21 Días. Prentice Hall Hispanoamericana, S.A. Pág. 446 Universidad de Carabobo. Facultad de Ingeniería. Departamento de Computación. Computación Avanzada. 2003.