Unidad I Programación Orientada a Objetos en Java Clases, Objetos y Métodos en Java Programación I - 0416202
Contenido Esta lección abarca los siguientes temas: Creación de Clases Constructores Creación de Objetos (Instanciar una Clase) Definición de Métodos Modificadores de Acceso Tipos de Clases Atributos Esquema de trabajo para una Clase Ejemplo de acceso a miembros privados y públicos Pase de mensajes Métodos Getter y Setter Destructores Referencia this Vector de objetos Prácticas de laboratorio
Preliminares Para llevar a cabo exitosamente esta lección debe cumplir con lo siguiente: Estudiar y comprender los conceptos de Programación Orientada a Objetos. Tener instalado y funcional el BlueJ. Descargar y descomprimir el archivo de prácticas: UIII-P01 Prácticas de POO en Java.rar en la Sección de Actividades de la Semana 2: Fundamentos de la POO y Definición en Java.
Creación de Clases Los programadores pueden crear sus propias clases. Las clases son esencialmente una plantilla o plano para todas las instancias de una clase. El código de la clase también comunica al compilador cómo definir, crear e interactuar con los objetos de la clase. El código de la siguiente diapositiva comienza a crear el vehículo de la clase que representaría el esquema básico para los objetos del vehículo.
Creación de Clases (Ejemplo) public class Vehiculo{ // El Vehiculo tiene 2 atributos private String make; private int milespergallon; //Constructor public Vehiculo(){ } //Mutador/Método Setter public void setmake(string m){ make = m; } // Mutador/Método Setter public void setmilespergallon(int mpg){ milespergallon = mpg; } //Accesador/Método Getter public String getmake(){ return make; } //Accesador/Método Getter public int getmilespergallon(){ return milespergallon; } } Palabras nuevas: private public class Mutador (Mutator) Accesador (Accessor) Constructor
Creación de Clases (Ejemplo) Por lo general un archivo contiene una sola clase, y el nombre de éste debe coincidir con el nombre de la clase Nombre_Clase y tener extensión.java El <modificador> de acceso a la clase permite definir si la clases y los objeto de ella son visibles o no por objetos de otras clases. El <tipo> de clases es utilizado para dar cualidades especificas a la clase, no tiene que ver con los objetos.
Constructores Los constructores son métodos que permiten al usuario crear instancias de una clase (instanciar). En programación se aconseja incluir un constructor predeterminado (ó por defecto) en las clases: No toma parámetros. En general, inicializa todas las variables privadas en los valores base. public Vehiculo(){ make = ; milespergalon=0; }
Constructores Los constructores que contienen parámetros generalmente inicializan las variables privadas de la clase, en los valores aprobados por el usuario. public Vehiculo(String m, int mpg){ make = m; milespergalon=mpg; } Los constructores no tienen un tipo de devolución (anulados o de otro tipo).
Creación de Objetos (Instanciar una clase) Una vez que ha creado una clase, puede crear instancias de esta clase (objetos) en una clase de controlador o dentro de otras clases de objetos. Instancias: Heredan todos los atributos y métodos definidos en la plantilla de una clase. Interactúan independientemente entre sí. Son objetos de referencia. Se crean utilizando el operador new.
Creación de Objetos (Instanciar una clase) Para crear una instancia de una instancia de un Vehículo denominado mycar, escriba: public class VehiculoTester{ public static void main(string[] args){ Vehiculo mycar = new Vehiculo(); } }
Creación de Objetos (Instanciar una clase) Para crear una instancia de Vehículo utilizando el constructor con los parámetros, escriba: Vehiculo mycar = new Vehiculo( Toyota, 30); Para crear una instancia Vehículo utilizando el constructor predeterminado, escriba: Vehiculo mycar = new Vehiculo();
Definición de Métodos Un método es un bloque de código al que se hace referencia mediante el nombre y que se puede invocar en cualquier punto del programa simplemente mediante el uso del nombre del método. <modificador> <static> <final> <synchronized> TipoObjetoRetorno nombremetodo(lista de parámetros){ //Declaración de variables locales //Lista de sentencias propias del método } Un método final no puede ser redefinido por clases que hereden de su propia clase.
Definición de Métodos La lista de parámetros son declaraciones de Objetos separadas por coma. En Java no existe paso de parámetro por dirección, en cambio, tenemos paso de parámetro por referencias constantes. Un método static es aquel que puede ser llamado sin necesidad de crear un objeto de la clase. Ejemplo: Math.abs(x) Los Métodos synchronized permiten una simple estrategia para prevenir la interferencia de hilos y errores de coherencia de memoria: si un objeto es visible a más de un hilo, todas escrituras o lecturas a las variables de ese objeto se realiza a través de métodos sincronizados.
Práctica 01 Máquina de Boletos Simple 1. Iniciar la aplicación BlueJ y abrir el proyecto Maquina Boletos Simple. 2. Crea un objeto de tipo MaquinaBoleto y examina sus métodos (Decida el precio del boleto). 3. Invoque el método getprecio. 4. Inserte dinero en la máquina en montos pequeños hasta completa el valor del boleto. 5. Invoque el método getsaldo y chequee que la máquina mantiene el saldo ingresado por el cliente. 6. Imprima el boleto. 7. Revise el valor retornado por getsaldo. 8. Se puede imprimir el boleto, sin ingresar el valor completo del boleto? 9. Si ingresa un monto mayor al costo del boleto, la máquina devuelve la diferencia cuando se imprime el boleto? 10. Cree otro objeto de tipo MaquinaBoleto, ingrese dinero e imprima el ticket El boleto es diferente al de la primera máquina? Cuánto se ha recaudado entre las dos máquinas? 11. Examine el código de la clase MaquinaBoleto.
Modificadores de Acceso y Tipos de Clases Los Modificadores de Acceso: Una clase puede ser public o package, si una clase se define public significa que cualquier otro objeto puede crear instancias de está y establecer comunicación con dichos objetos (invocar los métodos del objeto). Si se omite el modificador de acceso, la clase pasa a ser package de forma automática, con lo cual solo podrá ser accedida desde clases declaradas dentro del mismo paquete. Un paquete en java es una colección de clases que tienen alguna relación en común.
Modificadores de Acceso y Tipos de Clases En cuanto al tipo, una Clase puede ser: abstract: Es una clase de la que no se pueden crear objetos, está estrechamente relacionada con el concepto de herencia y polimorfismo. final: Es una clase de la cual no se puede heredar
Atributos Los atributos almacenan información de manera persistente dentro del ámbito del objeto. La forma general para declarar un atributo es la siguiente: <modificador> <static> <final> TipoObjeto nombreobjeto <=exp>; Un atributo puede ser un tipo de dato primitivo o puede ser otro objeto cuya clase haya sido definida previamente. Un atributo static mantiene un único valor para todos los objetos de la clase, por eso se dice que es un atributo de clase. Ejemplo: System.out
Atributos Un atributo final es aquel que no cambia su valor durante la ejecución del programa. En otras palabras es una constante Math.PI es un atributo static y final.
Modificadores de acceso en Métodos y Atributos Los métodos y los atributos comparten los mismos modificadores de acceso que pueden ser private, public, protected, package (modificador por defecto). La siguiente tabla resume los modificadores de acceso en java:
Práctica 02 Máquina de Boletos Simple 1. Existe algún atributo de clase en el ejemplo de Máquina de Boletos. Cuál es? 2. Cuál es el modificador, tipo y nombre de los siguientes atributos? private int contador; protected Estudiante representado; private Server host; public final PI; 3. Es necesario que la declaración de un atributo finalice con un ;? 4. Cuál es la instrucción para declarar un atributo entero llamado estado?
Métodos Getter Son métodos que sirven para acceder a los atributos de un objeto, es decir, retornan el valor de un atributo. Estos métodos tienen la siguiente forma: public tipoatributo getatributo(){ return atributo; } Ejemplo: public int getprecio(){ return precio; }
Métodos Setter Estos métodos se utilizan para cambiar el valor de un atributo. El método no retorna valor y en cambio recibe un parámetro de tipo igual al tipo del atributo. La forma es la siguiente: public void setatributo(tipoatributo valor){ atributo = valor; } Ejemplo: public void setprecio(int valor){ precio = valor; }
Práctica 03 Máquina de Boletos Simple Revise la clase MaquinaBoletos: 1. Compare los métodos getsaldo y getprecio. Qué diferencias existen? 2. Tiene algún método getter? Nombrelos 3. Tiene algún método setter? Nombrelos 4. Escriba un método getter para el total y pruebe que funcione. 5. Intente eliminar la instrucción de retorno del método getprecio. Qué mensaje de error se produce cuando se compila la clase? 6. Por qué los métodos imprimirboleto e insertardinero no tienen instrucción de retorno? 7. Escriba un método setter para el precio y pruebe que funcione. 8. Complete el siguiente método cuyo propósito es sustraer el valor del parámetro al atributo precio. public void descontar(int monto){. }
Destructor El destructor es un método de la clase que es llamado en el momento que el objeto va a ser destruido, permitiendo así al programador liberar memoria solicitada previamente. En Java no hay destructores como en otros lenguajes. El garbage collector se ocupa de liberar la memoria de los objetos que ya han perdido la referencia. En Java no se sabe exactamente cuándo se va a activar el garbage collector. Si no falta memoria es posible que no se llegue a activar en ningún momento.
Referencia this En un método de instancia o un constructor, this es una referencia al objeto actual. La referencia al objeto cuyo método o constructor se invoca. Consulte a cualquier miembro del objeto actual utilizando this. public class Point { private int x; private int y; Se utiliza mayormente cuando un campo está sombreado por un parámetro de un método o constructor del mismo nombre. } //constructor public Point(int x, int y) { this.x = x; this.y = y; }
Ejemplo: Clases, Objetos y Métodos en Java Referencia this
Vector de objetos Para crear un vector de objetos, primero se hace la declaración de tipo y se específica el tamaño, de la siguiente forma: nombre_clase [] nombre_vector = new nombre_clase[tamaño]; Luego, por cada posición del vector se debe crear la referencia y hacer la inicialización correspondiente, llamando a un constructor. for (int i=0; i<nombre_vector.length; i++) nombre_vector[i]= new nombre_clase();
Ejemplo: Clases, Objetos y Métodos en Java Vector de objetos
Vector de objetos Para manipular los miembros (atributos y métodos) de un vector de objetos, se hace de la siguiente forma: nombre_vector[indice].miembroatributo nombre_vector[indice].miembrometodo
Ejemplo: Clases, Objetos y Métodos en Java Vector de objetos
Práctica 04 Fractal 1. Abra el proyecto fractal en BlueJ. 2. Complete la clase Complejo para que la aplicación compile correctamente. 3. Cree un objeto de tipo Ventana e invoque el método mostrar(). El resultado debe ser el siguiente:
Práctica 05 Banco 1. Cree un nuevo proyecto en BlueJ llamado banco. 2. Cree una clase denominada Cuenta con los siguientes atributos nombre de tipo cadena de caracteres cuenta de tipo cadena de caracteres saldo de tipo real doble 3. La clase cuenta debe contar con los siguientes métodos. Métodos getter y setter de cada atributo. Un Constructor paramétrico que reciba el nombre del cliente, el número de cuenta y el saldo inicial. Métodos para depositar/retirar dinero de la cuenta (debe hacer las validaciones correspondientes) Un método que muestre el estado de la cuenta (Mostrar cliente, numero de cuenta y saldo de manera apropiada) 4. Probar que la clase funcione apropiadamente. 5. Cree una clase Banco, la cual debe contener como atributos un vector de tipo Cuenta (Puede usar ArrayList para el manejo de vectores o si lo prefiere puede usar la forma clásica para vectores) y un atributo que almacene el nombre de la entidad financiera.
Práctica 05 Banco (cont.) 6. Cree un constructor por defecto e inicialice correctamente sus atributos. 7. Agregue un método denominado menú que muestre un menú de opciones y retorne el valor de la opción seleccionada por el usuario del sistema. Las opciones son (debe usar Scanner para leer): 1. Abrir cuenta. 2. Consultar estado de cuenta. 3. Realizar Deposito. 4. Realizar Retiro. 5. Salir 8. Cree métodos en la clase Banco que resuelvan cada una de las operaciones del menú (Para ellos consulte con el profesor los requerimientos de cada opción del sistema). 9. Cree un método iniciar que se encargue de controlar el menú de la aplicación, llamando al método correspondiente de acuerdo a la opción seleccionada por el usuario).
Práctica 05 Banco (cont.) 6. Diagrama de clases del ejercicio: Banco <<create>>+banco() +menu(): int +crearcuenta(): void +consultarcuenta(): void +realizarretiro(): void +realizardeposito(): void +iniciar(): void 0..* -cuentas -cliente: String -cuenta: String -saldo: double Cuenta <<create>>+cuenta(cliente: Sring, cuenta: String, saldo: double) +getcliente(): String +getcuenta(): String +getsaldo(): double +retirar(monto: double): void +depositar(monto: double): void +mostrarestadocuenta(): void
Esquema de trabajo para una Clase Generalmente el esquema de trabajo para una clase, es que sus atributos sean privados y sus métodos públicos. Recordando que si los atributos se encuentran privados, sólo podrán ser accedidos desde dentro (por los métodos o main) de la clase. Mientras que si los métodos son públicos, éstos pueden ser accedidos desde cualquier clase en cualquier paquete. Sólo basta crear una instancia objeto de la clase para poder acceder a ellos con el operador punto (.)
Ejemplo de acceso a miembros privados Los atributos y métodos privados de la clase Rectangulo (x, y, ancho, alto, desplazar(int,int) ) pueden ser accedidos desde la misma clase Rectangulo, incluyendo la función main, porque ésta se encuentra dentro de la clase Rectangulo.
Ejemplo de acceso a miembros privados Ahora, al tratar de acceder a los atributos ó métodos privados de la clase Rectangulo (x,y, ancho, alto, desplazar(int,int) ) desde otra clase (Principal) el acceso es prohibido. Esto quiere decir que para poder acceder a los atributos hay que construir métodos públicos en la clase Rectangulo.
Ejemplo de acceso a miembros privados Por ejemplo, se construyó el método setvalores que es público y recibe los valores que se desean asignar a los atributos privados. Sin embargo, desde la clase Principal no se puede tener acceso al método desplazar porque éste es privado.
Ejemplo de acceso a miembros públicos Los atributos y métodos públicos de una clase pueden ser accedidos desde la misma clase ó desde cualquier clase. Por ejemplo, cambiemos el acceso del método desplazar de la clase Rectangulo de private a public.
Ejemplo de acceso a miembros privados
Ejemplo de acceso a miembros públicos
Pase de mensajes Ejemplo: Proyecto Figuras Circulo.java Cuadro.java Otras Rectangulo.java