Lección 3: Creando clases 1. 2. 3. 4. 5. Definición de métodos Sobrecarga de métodos Definición de constructores Creando miembros estáticos Construcción e inicialización de objetos Programación en Java Objetivos En este capitulo se estudiarán los conceptos relacionados a métodos, como lo son sobrecarga, métodos estáticos. Se aprenderá a diferenciar el alcance de los componentes de los métodos. Se utilizarán los constructores y se definirán sus reglas de uso. Programación en Java Definición de métodos Como se vio en el capítulo anterior a un método lo define su firma, A un método lo define su firma, la cual está compuesta por los modificadores del método, el tipo de retorno, el nombre, sus argumentos y el conjunto de excepciones que arroja. Programación en Java Firma de un método modificadores TipoDeRetorno nombreDelMetodo( tipo argumento1, .., tipo argumentoN) throws Exception1, ... ,ExceptionN { … return instanciaTipoDeRetorno; } Ejemplo: public static DataSource getDataSource() throws MalformedURLException, SQLException, IOException { … } Programación en Java Variables locales Una variable local de un método es creada cuando se invoca un método. Sólo existe durante la ejecución del método. No llevan modificadores de acceso, public, protected o private. Programación en Java Paso de argumentos por valor Cuando Java pasa un argumento a la llamada de un método, se pasa una copia del argumento. Consideremos el siguiente fragmento de código. public void incrementar (int x) { x++; } … int x = 12345; incrementar(x); //El valor de x continua siendo 12345 System.out.println(“Ahora el valor de x es:”+x); Programación en Java Paso de argumentos por eferencia Lo anteriormente visto funciona con tipos de datos primitivos ¿Pero con objetos? El efecto es un tanto diferente. Consideremos el siguiente código: 1. 2. 3. 4. 5. 6. 7. 8. 9. Persona persona; persona = new Persona(“José”); cambiarNombre(persona); // El nombre de la persona continua siendo José System.out.println(persona.getNombre()); public void cambiarNombre(Persona persona) { persona = new Persona(“Hugo”); } Programación en Java Paso de argumentos por referencia Ahora si método modifica el objeto vía referencia, los cambios se harán en el objeto al que apunta la referencia. 1. 2. 3. 4. 5. 6. 7. 8. 9. Persona persona; persona = new Persona(“José”); cambiarNombre(persona); // El nombre de la persona ahora es Hugo System.out.println(persona.getNombre()); public void cambiarNombre(Persona persona) { persona.setnombre(“Hugo”); } Programación en Java Sobrecarga de métodos Existen ocasiones en las cuales nosotros deseamos reutilizar el nombre del método. En java existen dos maneras de hacer esto uno es la sobrecarga y otro la sobre escritura. Reutilizar el nombre del método con diferentes argumentos se le conoce como sobrecarga. Programación en Java Reglas para la sobrecarga El nombre de un método se puede sobrecargar en los siguientes casos: Si la lista de argumentos difiere en número Si la lista de argumentos difiere en tipo de al menos argumento. Si el orden y tipos de argumentos es diferente en la firma de los métodos. Es importante que el tipo de retorno y la lista de excepciones no es suficiente para considerar sobrecarga de métodos Programación en Java Reglas para la sobrecarga Ejemplos: public void getConexion(String tipoControlador){} //No es sobrecarga. No es suficiente el tipo de retorno //y la lista de excepciones public Connection getConexion(String tipoControlador) throws SQLException{} //Si es sobrecarga. El número de argumentos es // diferente public void getConexion(String nombreConexion, int tipoControlador) throws SQLException { } // Si es sobrecarga. El orden del tipo de los // argumentos es diferente al resto de los métodos public void getConexion(int tipoControlador, String fuenteDeDatos) throws SQLException{} Programación en Java Ejercicio En la clase Persona y la clase Direccion creada en la lección anterior agregue los métodos set y get para cada unos de los campos, además agregue los métodos: public String toString(); public bolean equals(Object o); Que el método toString regrese el valor de todos los campos concatenados y separados por comas. El método equals, debe comparar los datos que crea necesarios para que se puedan diferenciar una persona de otra y un domicilio de otro. Programación en Java Constructores Es un método con la característica de que no tiene tipo de retorno y su nombre es idéntico al nombre de la clase. Ejemplo: class Clase { //Constructor sin argumentos public Clase(){ //Inicializar el objeto } //Constructor private Clase(String nombre){ //Inicializa el objeto con un String } } Programación en Java Constructor por omisión Cuando creamos una clase y no especificamos ningún constructor java asigna un constructor sin argumentos. Ejemplo: class Clase { // Un constructor sin argumentos es asignado // por default public static void main(String args[]){ Clase clase = new Clase(); } } Programación en Java Constructor por omisión Al crear cualquier constructor en la clase, el constructor por omisión ya será creado. Ejemplo: class Clase { // Constructor con argumentos. private Clase(String nombre){ //Inicializa el objeto con un String } public static void main(String args[]){ // Error de compilación, el constructor de // por omisión no es creado. Clase clase = new Clase(); } } Programación en Java Sobrecarga de constructores Pueden existir tantos constructores como necesitemos en una clase sólo hay que considerar que: La lista de argumentos difiere en número La lista de argumentos difiere en tipo de al menos argumento. El orden y tipos de argumentos sea diferente. Lista de excepciones no es suficiente para considerar sobrecarga. Programación en Java Modificadores en constructores En los constructores sólo son validos los modificadores de acceso: public protected (default) private Programación en Java El uso de la referencia this Podemos utilizar la palabra reservada this, para invocar desde un constructor otro con un mayor número de argumentos. Ejemplo: class Persona { public Persona(){ //Inicializar el objeto utilizando otro //Constructor this(“Raúl”,15,50); } private Persona(String nombre, int edad, int peso){ //Proceso complejo de inicialización } } Nota: Cuando utilicemos la palabra reservada this, para invocar otro constructor es necesario que sea la primera instrucción que se invoque en el constructor. Programación en Java Ejercicio En la clase Usuario cree un constructor sin argumentos que inicialice los campos de la clase utilizando el constructor con todos los argumentos los valores de inicialización serán los siguientes: Campo Tipo nombre “Sin nombre” apellidoPaterno null apellidoMaterno null Usuario Una Instancia de la clase Usuario Puesto Una instancia de la clase Puesto Programación en Java Creando Miembros estáticos Los miembros estáticos son conocidos como miembros de clase, es decir no necesitan de una instancia de la clase para poder ejecutarse. Los miembros de clase se caracterizan porque tienen el modificador static. Los miembros estáticos pueden ser: Variables Métodos Bloques Programación en Java Variables estáticas Una variable de clase es conocida como una variable estática y es creada cuando la clase es cargada y es destruida cuando la clase se libera. Sólo hay una copia de la variables por clase aun cuando la clase nunca sea instanciada. Al tipo de la variable le antecede el modificador static. Ejemplo: public static final String USUARIO = “usuario” ; Programación en Java Métodos estáticos Al igual que las variables estáticas, los métodos estáticos pueden ser utilizados sin necesidad de crear un instancia de la clase. En su cuerpo sólo pueden utilizar variables estáticas u instancias creadas dentro de su cuerpo. Por ninguna razón puede utilizar una variable de instancia ya que la referencia this no existe dentro de estos métodos Programación en Java Métodos estáticos Ejemplo: class Persona { public static String ciudad; private String nombre; public static void solicitarPrestamo(String nombre) { //uso incorrecto //this.nombre = nombre; ciudad = “Chihuahua”; Persona persona = new Persona(); persona.nombre = nombre; //continua el procedimiento } } Programación en Java Bloques estáticos Los bloques estáticos, son un conjunto de expresiones que se ejecutan únicamente cuando la clase es cargada por la memoria. Programación en Java Bloques estáticos Ejemplo: public class ConexionBD implements Conexion { private Connection conexion; private static DataSource dataSource; static { try { dataSource = (DataSource)( new InitialContext()). lookup(Constante.DATA_SOURCE_NAME); } catch (NamingException nex) { nex.printStackTrace(); } } //Continua la clase } Programación en Java Ejercicio Cree un método estático autenticar que reciba el usuario y contraseña. Si ya existe uno en su clase haga las modificaciones correspondientes para que sea invocado La firma del método debe ser: public static boolean autenticar(String usuario, String password) { … } Programación en Java Modificadores Hasta ahora hemos visto que existen varios tipo de modificadores, pero hasta ahora no sabemos cuales aplican a cada uno de los componentes de una clase o a la clase misma. A continuación se presenta una tabla con los operadores y en que casos son aplicables, algunos de los modificadores, están fuera del alcance de este manual. Programación en Java Tabla de modificadores Programación en Java Operadores Java provee un conjunto de operadores muy completo el cual puede ser catalogado en: Operadores unarios Operadores Aritméticos Operadores de corrimiento Operadores de comparación Operadores de manejo de bits Operadores Optimizados Operadores Condicionales Operadores de comparación Programación en Java Precedencia Categoría Operadores Unarios ++ Aritméticos * + Corrimiento << Comparación < <= == != De Bits & ^ | Optimizados && Condicionales ?: De asignación = -/ - + - ! () % >> >>> > || “op=” >= instanceof Programación en Java Expresiones Una expresión consiste en operadores y sus operandos, los cuales son evaluados para obtener como producto un resultado. El resultado puede ser una variable o un valor o quizás nada si la expresión es la invocación de un método que tiene como tipo de retorno void. Programación en Java Expresiones Una expresión puede tan simple como el nombre de una variable o tan compleja como una secuencia de invocaciones de métodos, acceso a variables o creación de objetos o clases. Programación en Java Expresiones – Orden de evaluación A pesar de lo complejo que las expresiones puedan ser, las expresiones se evalúan de una manera bien definida. Los operados y los operadores se evalúan de izquierda a derecha. Ejemplo: x+y+z El compilador evalúa x, evalúa y, después los suma, evalúa z y lo suma al resultado de x+y Programación en Java Expresiones - Orden de evaluación Excepto por los operadores &&, || y ?:, cada operando de un operador, es evaluado antes de que la operación sea llevada a cabo. Ejemplo: If (cadena!=null && cadena.substring(3,4) ) {..} Programación en Java Tipo de expresiones Toda expresión tiene un tipo El tipo de la expresión es determinado por, los tipos de cada uno de sus componentes y la semántica de los operadores. Ejemplo: long a=1; // El tipo de la expresion es String String b = “Valor de a: ” + a; Programación en Java Resumen En esta lección se aprendió: A utilizar métodos y constructores de una clase Se analizó el comportamiento de los métodos y variables estáticas Se muestran los operadores de Java y su precedencia. Se aprendió a reconocer el tipo de las expresiones y su orden de evaluación.