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.