Poo
Poo
Derechos reservados
Objetivo
Al termino de este curso deber conocer los conceptos bsicos del lenguaje Java para el desarrollo de aplicaciones.
Agenda
Caractersticas de Java JDK Programacin Orientada a Objetos Conceptos bsicos Estatutos de Control Objetos y Clases en Java Ejercicios
Caracteristicas de Java
Familiar:
Estrucutra parecida a lenguajes como C++
Simple:
Eliminaron caracteristicas inecesarias del lenguaje C++ y no eran necesarias para aplicar orientacin a objetos (Se elimin: typedefs, define, estructuras y uniones, enumeraciones, funciones, herencia multiple, goto, apuntadores, ajuste automtico valores primitivos.
Caracteristicas de Java
Orientado a Objetos
Encapsulacin Polimorfismo Herencia Construccin Dinamica
Caracteristicas de Java
Caracteristicas de Java
Arquitectura neutral, portable
Byte-Codes
Mquina Virtual (JVM) Sistema Operativo Computadora
Caracteristicas de Java
Dinmico
Independencia entre clases. (link) Clases se cargan conforme se van requiriendo
Rendimiento (Performance)
Just In Time (JIT) compiler
Caracteristicas de Java
JDK
Bajar la ltima versin del JDK del site de SUN (JDK 1.4.2) www.javasoft.com Instalar el JDK en la mquina Bajar la documentacin Instalar la documentacin Comenzar a programar en Java
El primer programa
Ejecucin
Es una filosofa para el desarrollo de sistemas basado en el modelado del mundo real a travs de la identificacin de objetos
Surgi inicialmente como un enfoque para la programacin pero se ha extendido a todo el ciclo de desarrollo de sistemas
Objeto
Un elemento con estado, comportamiento.
Estado (lo que se sabe del objeto) Nombre, color, raza, contento Comportamiento (lo que puede hacer) Ladrando, durmiendo, corriendo Estado Nmero de llantas, color, marca, modelo Comportamiento Acelerando, frenando, Reparando.
Objetos
Perro
Representa
Objetos de Software
Objetos reales
Objeto (Software)
Estado
Representado por sus Variables
Comportamiento
Modificado por sus Mtodos
Los objetos en programacin representan objetos reales y objetos abstractos (conceptos), ej. Eventos
Objetos de Software
El Objeto Perro
come ladra
brinca
duerme
Encapsulacin
- Permite ocultar los detalles de la implementacion de un objeto - El usuario solo tiene acceso a la Interfaz
API pblica
Application Program Interface
Encapsulacin
Modularidad
Independencia entre objetos
Transparencia
Publica una interfaz publica Puede cambiar la implementacin sin afectar su utilizacin
A veces se hacen pblicas las variables y se esconden algunos mtodos por razones de eficiencia
Mensajes
Permiten la interaccin entre objetos Mandar a ejecutar un mtodo
Mensaje
Acelera, frena, etc.
Parmetros
A veces los mtodos necesitan ms informacin para realizar una accin Esta informacin adicional se pasa en forma de parmetros
enciende
enciende (%)
Mensajes
Expresan el comportamiento de un objeto, cambiando el estado de ste Ocultan la necesidad de exponer las variables Los objetos pueden estar en procesos y/o mquinas diferentes
Mensajes
Objeto destino Nombre del mtodo a ejecutar Parmetros necesarios
focoSala.enciende(porcentaje)
Clases
Prototipo de objetos Definen las variables y mtodos comunes para todos los objetos
Clases y Objetos
Los objetos son ejemplares (instancias) de clases Los objetos de una clase comparten el comportamiento (mtodos) Cada objeto tiene su propio estado (variables)
De clase
Todos los objetos de una clase comparten la misma copia No se necesita crear un objeto para el acceso a variables y mtodos Si un objeto cambia una variable de clase, esa variable se cambia para todos los objetos de la clase
Abstraccin
La abstraccin se refiere a quitar las propiedades y acciones de un objeto que no son necesarias para el sistema.
Herencia
Especializacin de una clase Subclases se definen con base en Superclases La subclase hereda las variables y mtodos de la superclase La subclase define sus propias variables y mtodos los cuales se agregan a los de la superclase
Herencia
Televisin
Televisin Blanco y negro Televisin color Televisin stereo
Una subclase puede redefinir (override) mtodos heredados, para que realicen algo diferente o en diferente forma
Herencia
Esquema jerrquico Reutilizacin de cdigo Una super clase puede guardar una referencia a una subclase, Por ejemplo:
Una televisin puede almacenar una instancia de una televisin a color
Palabras reservadas
Palabras con funcionalidad especifica en Java. No pueden Ser utilizadas como identificadores
Variables
Un objeto guarda su estado en variables. Una variable es un espacio en memoria que sirve para almacenar informacin El tamao de el espacio en memoria vara dependiendo de la informacin que se desea guardar.
Variables
Identificador legal con carcteres unicode (65,536 posibles, 34,168 asignados) Debe iniciar con letra (A-Z,a-z) No debe ser palabra reservada Convencin:
Primera letra minscula y cada palabra subsiguiente comienza con mayscula, sin espacios (variableDeVariasPalabras) Constantes todas en mayuscula separando las palabras cor el carcter _ (EJEMPLO_CONSTANTE)
Variables
Declaracin de Variables:
tipo_dato lista_de_variables;
Donde lista_de_variables puede ser el nombre de una variable o una lista separada por coma.
Ejemplos:
int edad, semestre, matricula; boolean encontrar; char sigla;
Literales
Una literal es una representacin en cdigo de los tipos de dato primitivos, por ejemplo:
b //literal para char 42 //literal para int false //literal para boolean 2453.345 //literal para double
Literales
Enteros: Se pueden representar de 3 formas:
Decimal (base 10): smbolos del 0 al 9
int longitud = 345;
Hexadecimal (base 16): Utiliza 16 simbolos diferentes(0 al 9 adems de las letras A, B, C, D, E).
int longitud = 0X10
Por default todos son tipo entero. Si se quieren definir como long se tendr que agregar al final la letra L.
Literales
Punto Flotante
Representacin decimal
double d = 112424.3453;
Por default las literales de punto flotante son double. si se quiere representar como float es necesario agregar una F al final del nmero
float f = 1234.35F;
Literales
Literales boolean
Pueden tener solo el valor de true o false.
boolean t=true; boolean f=false;
Literales
Literales char
Carcter entre comilla simple
char a = a;
Para valores Unicode se antepone el carcter de escape \u, seguido de el cdigo en Hexadecimal
char a = \u004E //Letra N
Debido a que el char es en realidad un entero sin signo de 16 bits, es posible asignarle un valor entero.
char a = 16;
Literales
Strings
El valor de un String se puede representar como Literal.
String letrero = Letrero
Operadores
Unitarios
Requiere solo un operando, prefijo o postfijo
Binarios
Dos operandos, infijo
Ternarios
Tres operadores expresin ? op1 : op2
Operadores aritmticos
Operador + * / % + ++ ++ --Uso
op1+op2 op1-op2 op1*op2
Descripcin Suma Resta Multiplicacin Divisin Residuo de op1 / op2 Promueve a int si es byte, short o char Regresa el valor negado de op Incrementa a op en 1, se evalua antes del incremento Incrementa a op en 1, se evalua despus del incremento Decrementa a op en 1, se evalua antes del incremento Decrementa a op en 1, se evalua antes del incremento
op1/op2
op1%op2 +op -op op++ ++op op---op
Ejemplos
class Aritmeticos { public static void main int x = 17, y = 5; System.out.println("x System.out.println("y System.out.println("x System.out.println("x System.out.println("x System.out.println("x System.out.println("x } } (String args[]) { = = + * / % " " y y y y y + + = = = = = x); y); " + " + " + " + " +
(x (x (x (x (x
+ * / %
Salida a pantalla
Ejemplos
class Incrementos { public static void main (String args[]) { int x = 8, y = 13; System.out.println("x = " + x); System.out.println("y = " + y); System.out.println("++x = " + ++x); System.out.println("y++ = " + y++); System.out.println("x = " + x); System.out.println("y = " + y); } } x = y = ++x y++ x = y = 8 13 = 9 = 13 9 14
Salida a pantalla
Operadores relacionales
Regresan un valor booleano (true o false)
Operador Uso
op1>op2
op1<op2 op1>=op2 op1<=op2 op1==op2 op1!=op2
Descripcin
Regresa verdadero si op1 es mayor que op2 Regresa verdadero si op1 es menor que op2 Regresa verdadero si op1 es mayor o igual que op2 Regresa verdadero si op1 es menor o igual que op2 Regresa verdadero si op1 es igual a op2 Regresa verdadero si op1 es diferente a op2
Ejemplos
class Relacionales { public static void main (String args[]) { int x = 7, y = 11, z = 11; System.out.println("x = " + x); System.out.println("y = " + y); System.out.println("z = " + z); System.out.println("x < y = " + (x < y)); System.out.println("x > z = " + (x > z)); System.out.println("y <= z = " + (y <= z)); System.out.println("x >= y = " + (x >= y)); System.out.println("y == z = " + (y == z)); System.out.println("x != y = " + (x != z)); } }
Salida a pantalla
x y z x x y x y x
= 7 = 11 = 11 < y = true > z = false <= z = true >= y = false == z = true != y = true
Operadores Logicos
Regresan un valor booleano (true o false)
Operador && || ! & | ?:
int int int int int int a b c d e f = = = = = =
Uso
op1&&op2
Descripcin
AND lgico, condicionalmente evalua op2 op1||op2 OR lgico, condicionalmente evalua op2 !op Niega lgicamente a op op1&op2 AND lgico, siempre evalua op2 op1|op2 OR lgico, siempre evalua op2 Evalua exp y regresa op1 si es verdadera exp?op1:op2 o regresa op2 si exp es falsa
28; 4; 45; 0; (b == 0) ? 0 : (a / b); (d == 0) ? 0 : (c / d);
e=7 f =0
Operadores Logicos
public class ShortCut { public static void main (String args[]){ if ((esMenor(3)) || (esMenor(9))) { System.out.println("Resultado es true"); } } public static boolean esMenor(int i) { if (i < 5) { System.out.println(i +" menor que 5"); return true; } else { System.out.println(i + " mayor que 5"); return false; } } }
Salida
Operadores Logicos
public class ShortCut { public static void main (String args[]){ if ((esMenor(3)) | (esMenor(9))) { System.out.println("Resultado es true"); } } public static boolean esMenor(int i) { if (i < 5) { System.out.println(i +" menor que 5"); return true; } else { System.out.println(i + " mayor que 5"); return false; } } }
Salida
Operadores de bit
Operador >> << >>> & | ^ Uso
op1>>op2 op1<<op2
Descripcin Recorre los bits de op1 hacia la derecha op2 bits Recorre los bits de op1 hacia la izquierda op2 bits Recorre a la derecha, pero sin signo AND lgico, bit a bit OR lgico, bit a bit XOR lgico, bit a bit Complementa op, bit a bit
op1>>>op2
op1&op2 op1|op2 op1^op2
~op
Ejemplos
class Shift { public static void main (String args[]) { int x = 7; System.out.println("x = " + x); System.out.println("x >> 2 = " + (x >> 2)); System.out.println("x << 1 = " + (x << 1)); System.out.println("x >>> 1 = " + (x >>> 1)); System.out.println("12 & 13 = "+ (12 & 13)); } }
Salida a pantalla
Operadores de asignacin
Operador = += -= *= /= %= &= |= ^= <<= >>= >>>= Uso
op1=op2 op1+=op2 op1-=op2
Equivalente a op1 = op1 + op2 op1 = op1 - op2 op1 = op1 * op2 op1 = op1 / op2 op1 = op1 % op2 op1 = op1 & op2 op1 = op1 | op2 op1 = op1 ^ op2 op1 = op1 << op2 op1 = op1 >> op2 op1 = op1 >>> op2
op1*=op2
op1/=op2 op1%=op2 op1&=op2 op1|=op2 op1^=op2 op1<<=op2 op1>>=op2 op1>>>=op2
Prioridad de Operadores
Expresiones
Se forman utilizando operadores relacionales y lgicos y se evalan de acuerdo a la prioridad de los operadores involucrados.
Ejemplo Expresiones Lgicas:
5 > 3 && 7 == 0 int x = 10+8*2; int x = (10+8)*2; false Resultado x=26 Resultado x=36
Casting Implcito
Se realiza de forma automtica cuando un tipo de menor capacidad se asigna a un tipo de mayor capacidad, tambin llamado promocin numrica.
byte -> short -> int -> long -> float -> double
Ejemplo:
double n; int x = 7; n= x / 3;
Resultado n=2
Casting Explcito
Es necesario utilizar un operador de tipo cast.
Ejemplo:
double n; int a = 7; n = (double) a / 3; Resultado n = 2.333
Estatutos Secuenciales
Un estatuto forma una unidad completa de ejecucin.
Estatutos de declaracin:
double valor=10;
Estatutos de expresiones:
valor = 8933.234; //asignacin valor++; //incremento System.out.println(valor); //llamadas a mtodo Integer integer = new Integer(4); //Creacin de Objetos
Estatutos de Control
Decisin (seleccin) se ejecuta un bloque de cdigo de acuerdo a la condicin.
Repeticin (ciclo) se repite la ejecucin de un bloque de cdigo de acuerdo a una condicin.
Estatutos de Control
Condicionales: Se utilizan estatutos condicionales cuando se tienen varias alternativas de ejecucin.
if - else switch
Bloque de Cdigo
Grupo de cero o ms estatutos. Se delimita entre llaves ( { } ) Una variable declarada dentro de un bloque de cdigo, solo puede ser utilizado en el mismo.
Ejemplo: { int x = 10; System.out.println(x) } System.out.println(x); Error Bloque
Comentarios
Para agregar comentarios dentro del cdigo de Java se utilizan 2 metodos
Comentarios de una sola lnea: 2 diagonales (//) seguido del comentario deseado. Comentarios de varias lneas: Comienzan con /* y para indicar el final del comentario */
/*comentarios varias lneas Se marca solo el inicio y el fin, pueden ser N lneas */
Estatutos de Control
if - else
La forma bsica del estatuto If es la siguiente:
if (expresinBooleana) { System.out.println(Dentro del estatuto"); }
La expresin booleana puede ser cualquier combinacin de operadores que al ser evaluados se obtenga como Resultado true o false El bloque else es opcional, se ejecuta en caso de que la expresin booleana regrese false
if (x > 3) { System.out.println("x mayor a 3"); } else { System.out.println("x no es mayor a 3"); }
if - else
Si no utilizamos las llaves ({ }), solamente el primer estatuto ser considerado para el estatuto
if (x > 3) y = 2; z += 8; a = y + x;
Ifs Anidados
if - else
OJO
if (examen.terminado()) if (examen.obtenCalificacion() < 0.61) System.out.println(Intenta en segundas); else //A que if pertenece ??? System.out.println(Felicidades);
Recomendacin
if (examen.terminado()){ if (examen.obtenCalificacion() < 0.61){ System.out.println(Intenta en segundas); } else{ System.out.println(Felicidades); } }
if - else
OJO
boolean boo = false; if (boo = true) { System.out.println(Siempre entra); }
Notas:
Expresiones ilegales int x = 1; if (x) { } if (0) { } if (x = 6) Forma Legal int x = 1; if (x == 1) { } if (false) if (x == 6)
if - else
if (Condicin) Estatuto1; if (Condicin) Estatuto1; else Estatuto2; if(condicin){ ____; ____; } else if (condicin2){ ____; ____; } else{ ____; ____; }
switch
switch (Expresin) { case Constante1: Estatutos1; break; case Constante2: Estatutos2; break; : : default: Estatutos; break; }
Expresin debe ser char, byte, short o int Las constantes deben de ser del mismo tipo que la expresin break es opcional, si no se utiliza se ejecutan todos los estatutos despus del primer case que coincida con la expresin default maneja todos los casos que no estn contamplados en los case, es opcional No puede haber dos constantes iguales Solamente puede existir un default
Ejemplo
int x = 2; switch (x) { case 1: System.out.println(x es igual a 1"); break; case 2: System.out.println("x es igual a 2"); break; case 3: System.out.println("x es igual a 3"); break; default: System.out.println(Fuera de rango"); }
Resultado x
es igual a 2
Ejemplo 2
OJO
int x = 2; switch (x) { case 1: System.out.println(x es igual a 1"); break; case 2:
Falta break
Resultado
x es igual a 2 x es igual a 3
Ejemplo 3
final int uno=1; final int dos=2; final int tres=3; int x = 2; switch (x) { case uno: System.out.println(x es igual a 1"); break; case dos: System.out.println("x es igual a 2"); break; case tres: System.out.println("x es igual a 3"); break; default: System.out.println(Fuera de rango"); }
Resultado x
es igual a 2
while
3
while (condicin) estatuto;
1 Condicin
Estatutos
4
Pasos de ejecucin: 1. Evala la condicin Si es verdadera ir al paso 2. Si es falsa ir al paso 4 2. Ejecuta el o los estatutos 3. Ir al paso 1 4. Fin del ciclo
Ejemplo while
Ejemplo: Sumar los nmeros 1, 2, 3, 4, 5, 6, ... n
int i = 1, suma = 0; // Inicializacin while ( i <= n ) // Condicin del ciclo { // Inicio del cuerpo del ciclo suma+= i; i++; // Estatuto que modifica la //condicin } // Fin del cuerpo del ciclo
do - while
do estatuto; while (condicin); do{ estatuto1; estatuto2; : : }while (condicin);
Estatutos
2
Condicin
Pasos de ejecucin: 1. Ejecuta el o los estatutos 2. Evala la condicin Si es verdadera ir al paso 1 Si es falsa ir al paso 3 3. Fin del ciclo
Ejemplos
int i = 0; int n = 10; while (i<n){ System.out.println(i= +i); i++; } i= 0 i= 1 : : i= 9
i= 0 i= 1 : : i= 9
for (asignacin inicial; condicin booleana; expresin de iteracin) estatuto; for (asignacin inicial; condicin booleana; expresin de iteracin){ estatuto1; estatuto2; : :
for
La asignacin inicial se realiza una sola vez. Se pueden inicializar 0, 1 o ms variables (separado por comas) La condicin (Expresin booleana) se evalua al principio de cada ciclo, si es verdadera ejecuta los estatutos y vuelve a hacer la evaluzacin, si es falsa termina y se sale La expresin de iteracin puede actualizar 0,1 o ms variables, separado por comas Cualquiera de los componentes puede ser estatuto vacio
Ejemplos
int i; int n=10; for (i=1;i<n;i++) System.out.println(i= "+i);
i= 1 i= 2 : : i= 9
int i,j; int n=10; for (i=j=1;i*j<n;i++,j++){ System.out.println("i= "+i+" j= "+j); System.out.println("i*j= "+i*j); }
j= 1 1 j= 2 4 j= 3 9
break
Brinca al final de los estatutos del ciclo y continua con la siguiente instruccin
int i=0; int n=10; do{ System.out.println(i= "+i); if (i>n) break; i++; }while(true);
i= 0 i= 1 : : i= 11
continue
Brinca al final del ciclo, pero evalua la condicin para saber si continua iterando
int i=0; int n=10; do{ i++; if (i%2!=0) continue; System.out.println(i= "+i); }while(i<n); i= i= i= i= i= 2 4 6 8 10
Resultado
Ciclos Etiquetados
externo: for(int i=0; i<10; i++) { while (i < 7) { System.out.println("Hola"); break externo; } // ciclo interno System.out.println("Ciclo externo."); // Nunca entra } // ciclo externo System.out.println("Adios");
Resultado
Hola Adios
Creacin de Objetos
Se divide en 3 secciones:
Declaracin
No crea el objeto, slo notifica al compilador el tipo de la variable
Creacin
Crear un ejemplar (instancia) de una clase
Declaracin
Tipo nombre;
Clase o interfaz
Constructor
Rectangulo r = new Rectangulo(10,20,300,200); Constructor con parametros de inicializacin
Clases
Son el prototipo de los Objetos Se pueden declarar varias clases en un archivo pero solamente puede haber una pblica El nombre de la Clase pblica tiene que ser igual a el nombre del archivo con que se grabe.
Ejemplo:
class MiClase { }
public class Rectangulo{ int x, y; int ancho, alto; public Rectangulo(){ x = 0; y = 0; ancho = 100; alto = 100; } public void mueve(int x, int y){ this.x = x; this.y = y; } public void cambiaTamano(int ancho, int alto){ this.ancho = ancho; this.alto = alto; } protected void finalize () throws Throwable{ x = null; y.close(); super.finalize();
Declaracin
Variables
Cuerpo
Constructor
Mtodos
Limpieza
}
}
Paquetes
Las clases de Java estan organizadas en paquetes. Cada paquete corresponde a una carpeta en la computadora Ayuda a tener organizado el cdigo en proyectos grandes
Ejemplo:
Varios programadores en un proyecto, si crean una clase llamada Utilerias habra problemas al juntar los modulos. Al organizarlo en paquetes evitamos este tipo de problemas.
Paquete
SUN recomienda seguir la siguiente estructura de paquetes:
Dominio reservados.nombre de proyecto.modulo de proyecto Ejemplo:
Paquete: com.mecasa.sipre.contabilidad
Estructura en disco:
Importar paquetes
Si una clase requiere crear objetos de otro paquete, es necesario especificarle al compilador en que paquetes buscar la clase.
package edu.uanl.estudiantes; public class Estudiante { } package edu.uanl.maestros; import edu.uanl.estudiantes.Estudiante; import edu.uanl.estudiantes.*; public class Maestro{ . . . }
public class Rectangulo{ int x, y; int ancho, alto; public Rectangulo(){ x = 0; y = 0; ancho = 100; alto = 100; } public void mueve(int x, int y){ this.x = x; this.y = y; } public void cambiaTamano(int ancho, int alto){ this.ancho = ancho; this.alto = alto; } protected void finalize () throws Throwable{ x = null; y.close(); super.finalize();
Declaracin
Variables
Cuerpo
Constructor
Mtodos
Limpieza
}
}
Declaracin de Clases
modificador class UnaClase extends Superclase implements Interfaz{}
Modificadores De acceso (default, public) De comportamiento (abstract, final) extends identifica superclase implements identifica interfaz que se debe de implementar
package edu.uanl.maestros; import edu.uanl.estudiantes.Estudiante; class Maestro{ //PODR crear instancias de estudiante }
Declaracin - Comportamiento
final
Una clase con un modificador final no puede tener subclases
abstract
Una clase abstracta no puede instanciarse. Su proposito es solo para generar subclases. Sirve para especificar el comportamiento de sus subclases
Extends
La palabra reservada extends sirve para especificar la super clase. La subclase hereda todas las funciones y metodos de la super clase
public abstract class Fruta { . . }
Cuerpo
Constructores Mtodos Variables finalize()
Las variables y mtodos de una clase son llamados miembros de la clase. Los constructores no son mtodos, no son miembros
public class Rectangulo{ int x, y; int ancho, alto; public Rectangulo(){ x = 0; y = 0; ancho = 100; alto = 100; } public void mueve(int x, int y){ this.x = x; this.y = y; } public void cambiaTamano(int ancho, int alto){ this.ancho = ancho; this.alto = alto; } protected void finalize () throws Throwable{ x = null; y.close(); super.finalize();
Declaracin
Variables
Cuerpo
Constructor
Mtodos
Limpieza
}
Constructores
Mismo nombre de la clase Puede haber ms de uno (sobrecarga) Inicializacin del objeto Opcional Pueden tener variables locales, ciclos y otros estatutos
protected
Slo subclases de esta clase pueden crear instancias
public
Todas las clases pueden crear instancias de esta clase
package
Slo clases del mismo paquete puede crear instancias de esta clas. Este caso se da cuando no se especifica ninguno de los otros niveles de acceso.
Ejemplo
package figuras; public class Rectangulo{ public Rectangulo(int alto, int ancho){ //Cualquier clase puede declarar rectangulos //Especificando su ancho y alto } Rectangulo(int alto, int ancho, int posicionX, int posicionY){ //Solo clases del mismo paquete pueden //Inicializar el rectangulo con } } public class Utilerias { Utilerias(){ Rectangulo rect=new Rectangulo(10,10, 0, 5); } }
Error
public class Rectangulo{ int x, y; int ancho, alto; public Rectangulo(){ x = 0; y = 0; ancho = 100; alto = 100; } public void mueve(int x, int y){ this.x = x; this.y = y; } public void cambiaTamano(int ancho, int alto){ this.ancho = ancho; this.alto = alto; } protected void finalize () throws Throwable{ x = null; y.close(); super.finalize();
Declaracin
Variables
Cuerpo
Constructor
Mtodos
Limpieza
}
Declaracin de variables
[nivel de acceso] [atributos] tipo nobre;
Atributos
static, final, transient, volatile
protected
Slo la clase donde son definidas, subclases de sta y clases del mismo paquete pueden accesar a estas variables
public
Todas las clases pueden accesar a estas variables
package
Slo clases del mismo paquete pueden accesar estas variables, no sublclases, es especificador por omisin
final
Valor de la variable no puede cambiar (constante)
transient
Variable no debe ser serializada
volatile
El compilador no efectua ciertas optimizaciones
Uso de this
Indica este objeto Sirve para diferenciar variables miembro de parmetros con el mismo nombre Est implcito en todos los miembros de la clase Tambin se puede usar en mtodos
public class Rectangulo{ int x; int y; public Rectangulo(int x, int y){ this.x = x; this.y = y; ancho = 100; alto = 100; } }
}
Variable de Zoo Gallo Variable modificada Pato
Resultado
}
Variables.java:19: variable has private access in Zoo System.out.println("Variable de Zoo " + z.variable); ^
Ejemplo - static
class Zoo { public static String variable="Gallo"; public String v2="Perro"; }
class Moo { public Moo() { Zoo z1 = new Zoo(); Zoo z2 = new Zoo();
z1.variable="Pato"; z1.v2="Gato"; System.out.println("Variables z1 " + z1.variable+" "+z1.v2); System.out.println("Variables z2 " + z2.variable+" "+z2.v2); System.out.println("Variable estatica "+Zoo.variable); } }
Ejemplo - final
class Zoo { public final String variable="Gallo"; public String v2="Perro"; } class Moo { public Moo() { Zoo z1 = new Zoo(); Zoo z2 = new Zoo(); z1.variable="Pato"; z1.v2="Gato"; System.out.println("Variables z1 " + z1.variable+" "+z1.v2); System.out.println("Variables z2 " + z2.variable+" "+z2.v2); } }
Metodos
Todas las variables declaradas dentro del mtodo son variables locales. Casi todos los mtodos tiene una lista de parmetros que permiten comunicar informacin entre mtodos. Los parmetros tambin son variables locales al mtodo.
Mtodos
Un mtodo o funcin es un segmento de programa que realiza una accin en especfico.
Nivel de Acceso
Declaracin public static int convierte(String s) throws NumberFormatException{ int valorFinal=0; . . }
Atributos
Nombre
Parmetros
Throws Exceptions
Variables locales
Cuerpo
Metodos - Declaracin
Nivel de acceso Nombre de la funcin Atributo Exepciones
Tipo de regreso
Parametros
protected
Slo la clase donde son definidos, subclases de sta y clases del
mismo paquete pueden accesar a estos mtodos
public
Todas las clases pueden accesar a estos mtodos
package
Slo clases del mismo paquete pueden accesar estos mtodos, no
Ejemplo Protected
package autos; public class Carro{ public void acelerar(){} protected void enfriarMotor(){} } package autos; //Mismo paquete public class Compacto { public Compacto(){ Carro carro=new Carro(); carro.enfriarMotor(); } }
package autos.deportivos; import autos.*; public class CarroDeportivo extends Carro{ public CarroDeportivo(){}; public void operaAuto(){ acelerar(); enfriarMotor(); Carro carro=new Carro(); carro.acelerar(); carro.enfriarMotor(); } } package autos.deportivos;
//Herencia //Herencia //Instancia //Instancia - Error Protegido, acceso desde otro paquete
Atributos de mtodos
static
Mtodo de clase y no de instancia
abstract
No tiene implementacin. Debe de pertencer a una clase abstract
final
No puede ser reprogramado (overriden)
native
Escrito en otro lenguaje, cdigo especfico para una plataforma
http://java.sun.com/docs/books/tutorial/native1.1/index.html
synchronized
Para ser usado por threads y no causar problemas tpicos de multiproceso
Ejemplo - Abstract
Clase abstracta
package autos; public abstract class Vehiculo { abstract void acelerar(); abstract void enfriarMotor(); public void mostrarTemepratura(){ //Implementacion } }
Primer subclase no abstracta tiene que implementar todas las funciones abstractas de la superclase
package autos; public class Carro extends Vehiculo{ public void acelerar(){ //Implementacion } protected void enfriarMotor(){ //Implementacion } }
Ejemplo - Abstract
Clase abstracta package autos;
public abstract class Vehiculo { abstract void acelerar(); abstract void enfriarMotor(); public void mostrarTemepratura(){ //Implementacion } }
package autos; public class abstract Carro extends Vehiculo{ public void acelerar(){ //Implementacion } }
Ejemplo - Static
public class Empleado { private static int numEmpleados = 0; public Empleado() { incrementa(); } private static void incrementa() { numEmpleados++; } public static void despliegaNum() { System.out.println(" Numero de empleados = " + numEmpleados); } }
public class PruebaEmpleado{ public static void main(String args[]){ new Empleado(); Empleado.despliegaNum(); } }
Resultado
Numero de empleados = 1
Ejemplo - Static
public class Empleado { private static int numEmpleados = 0; private String nombre; public Empleado() { incrementa(); } private static void incrementa() { numEmpleados++; } public static void despliegaNum() { nombre=""; System.out.println(" Numero de empleados = " + numEmpleados); } }
Desde una funcin estatica no es posible mandar utilizar variables de instancia, solamente de clase.
Sobrecarga de mtodos
Varios mtodos pueden compartir el mismo nombre, deben de diferir en el nmero y/o tipo de parmetros
Redefinicin de mtodos
Una clase puede reemplazar (override) un mtodo de su superclase
El mtodo debe ser exactamente igual (tipo de regreso, nombre y parmetros), slo cambia la implementacin
Ejemplo
package autos; public abstract class Vehiculo { abstract void acelerar(); abstract void enfriarMotor(); public void mostrarTemepratura(){ System.out.println("Temperatura de Vehiculo"); } } package autos; public class Carro extends Vehiculo{ public void acelerar(){ //Implementacion } protected void enfriarMotor(){ //Implementacion } public void mostrarTemepratura(){ System.out.println("Temperatura de Carro"); } public void mostrarTemperaturaVehiculo(){ super.mostrarTemepratura(); } }
Variables locales
Son las variables declaradas en un mtodo e inicializadas en un mtodo. Su tiempo de vida es desde que comienza el mtodo hasta que termina. Es posible declarar variables locales con el mismo nombre que variables de instancia. Una variable local es posible declararla como final
Ejemplos
public class Empleado { private boolean activo=true; public void calculaSueldo(){ boolean activo=this.activo; double sueldoBase=10000; double prestaciones=5000; String leyendas=""; . . activo=false; this.activo=false; } }
OJO, mismo nombre que variable de instancia.
Valores de retorno
Valor de retorno
Al declarar un metodo se debe especificar un valor de retorno. El valor de retorno puede ser cualquier tipo de dato, ya sea primitivo u objetos. Si la funcin no regresa ningn valor se utiliza la palabra reservada void.
Regresando un valor
En el cuerpo de la funcin se utiliza el operador return para regresar algn valor.
Cuando se manda llamar el operador return no se continua ejecutando el resto de los estatutos de la funcin.
El valor de retorno tiene que ser del mismo tipo al declarado.
Ejemplo - Return
public class Empleado { private boolean activo=true; public boolean estaActivo(){ if(activo){ System.out.println("Esta activo"); return true; } System.out.println("No esta activo"); return false; } }
public class PruebaEmpleado{ public static void main(String args[]){ Empleado empleado=new Empleado(); boolean activo=empleado.estaActivo(); empleado.estaActivo(); } }
Resultado
Esta activo Esta activo
Parmetros de un mtodo
Se usan para pasar informacin a un mtodo Se debe declarar el tipo y nombre de cada uno, separados por coma Se puede pasar un objeto y llamar a uno de sus mtodos No pueden tener el mismo nombre que otro parmetro o variable local
Ejemplo
public cambiaValor (int x, Button b){ x = 5; b.setLabel(Otro letrero); }
int edad = 25; Button boton = new Button (Letrero original); cambiaValor (edad, boton);
edad = 25
cambiaValor(edad,boton)
edad = 25
Ejemplo 2
public cambiaValor (int x, Button b){ x = 5; b = new Button( ); b.setLabel(Otro letrero); }
int edad = 25; Button boton = new Button (Letrero original); cambiaValor (edad, boton);
OJO
edad = 25
cambiaValor(edad,boton)
edad = 25
Ejemplo 3 - Referencias
public class Empleado { private String nombre; public void asignaNombre(String nombre){ this.nombre=nombre; } public String obtenNombre(){ return nombre; } } class PruebaEmpleado{ public static void main(String args[]){ Empleado empleado1=new Empleado(); Empleado empleado2=empleado1; empleado1.asignaNombre("Juan");
empleado1
Objeto Juan
empleado2
empleado1
Juan Juan
1 2 3
empleado2
Juan Pedro
empleado1
empleado1=empleado2; Pedro Pedro
empleado2
} }
Referencia
Heap
main()
El main es el mtodo principal que controla el programa. Crea objetos nuevos e invoca mtodos pertenecientes a esos objetos. Tiene un parmetro nico, el cual es una arreglo de tipo String Se accesa con el nombre y subndice comenzando en 0 (args[0])
Ejemplo
class EjemploMain{ public static void main(String[] args){ System.out.println(args[0]); System.out.println(args[1]); } }
Garbage Collection
La creacin y destruccin de objetos es tediosa y propensa a errores El proceso de liberacin de memoria es automatizado en Java Ms prctico y libera al programador de esta tarea Disminucin de errores de programacin (bugs)
Garbage Collection
Responsable: La mquina virtual Un objeto es elegible para ser eliminado por el recolector de basura cuando ya no existen referencias a l Cuando una variable se sale de alcance o se le asigna explcitamente el valor null
unaVariable = null;
Perdida de referencia
StringBuffer sb = new StringBuffer(Hola"); System.out.println(sb); // El objeto sb an no puede ser eliminado por el // garbage Collector sb = null; // En este momento el objeto sb puede ser // elegido por el Garbage Collector
StringBuffer s1 = new StringBuffer(Hola"); StringBuffer s2 = new StringBuffer(Adios"); System.out.println(s1); // s1 y s2 no son elegibles para eliminar s1 = s2; // La referencia de s1 apunta ahora a s2 //El StringBuffer s2 ahora puede ser eliminado
Perdida de Referencia
public class Empleado { private String nombre; public void asignaNombre(String nombre){ this.nombre=nombre; } public String obtenNombre(){ return nombre; } } class PruebaEmpleado{ public static void main(String args[]){ Empleado empleado1=new Empleado(); Empleado empleado2=empleado1; empleado1.asignaNombre("Juan");
empleado1
Objeto Juan
empleado2
empleado1 empleado2
1 2 3 4
Juan Juan
empleado1
3
empleado2=new Empleado(); empleado2.asignaNombre("Pedro"); Juan Pedro
empleado2
empleado1=empleado2;
Pedro Pedro
4 Referencia Heap
empleado1=null; empleado2=null;
} }
finalize()
Mtodo que se ejecuta antes de que la mquina virtual destruya al objeto Todos los objetos tienen uno por default Util para liberar recursos del sistema No se puede asegurar que se ejecutar en un momento determinado
finalize()
protected void finalize () throws Throwable{ x = null; y.close(); super.finalize(); }
Convenciones
Nombres de clases
Primera letra mayscula y cada palabra subsiguiente comienza con mayscula, sin espacios ClaseDeVariasPalabras
Paquetes
Todas las letras con minuscula edu.uanl.estudiantes
Ejercicio
Un grupo de personas esta apostando a los dados. Escribe el segmento de cdigo que utiliza la funcin predefinida random de la clase Math para simular el lanzamiento del dado (3 lanzamientos) y despliega las ganancias de acuerdo a las siguientes reglas: Si en los tres lanzamientos se obtiene el nmero 6, lapersona gana $200. Si en los tres lanzamientos se obtiene el mismo nmero (diferente de 6), la persona gana $100. Si en dos de los tres lanzamientos se obtiene el mismo nmero, la persona gana $50.
Ejercicio 2
Modifica el ejercicio anterior y desarrolla un segmento de programa utilizando algunos de los ciclos vistos, para que 3 personas que participan obtengan una de las tres condiciones que lo hacen ganador, el segmento de programa deber de desplegar la cantidad de veces que cada persona tuvo que tirar el dado tres veces, para ganar.
Ejercicio 3
Desarrolla una o varias clases que permitan manejar cuentas bancarias, tomando en cuenta la siguiente informacin: Nombre del cliente, nmero de cuenta, domicilio, saldo de la cuenta. Las acciones a realizar con la cuenta son: darla de alta, incrementar saldo, disponer de efectivo y desplegar su informacin en pantalla. El nmero de cuenta se deber de asignar automticamente y es un nmero consecutivo.
Ejercicio 4
Desarrolla una aplicacin en Java que permita dar de alta una cuenta bancaria (utilizando la clase que desarrollaste en el ejercicio # 3), y que realice 1movimiento de depsito y 1 de disposicin de efectivo. Adems, deber desplegar el saldo final de cada cuenta. Utiliza el mtodo random para generar las cantidades a depositar (entre 1 y 50,000) y a retirar (entre 1 y el saldo actual de la cuenta)
Manejo de Excepciones
Excepciones
El propsito del manejo de excepciones es permitir a los programas atrapar y manejar los errores en lugar de dejar que ocurran. Los mtodos arrojan excepciones
Excepciones
Es una situacin que interrumpe el flujo normal. Permite detectar errores facilmente. Ejemplos:
Intentar abrir archivos que no existen. Divisin entre cero Tratar de leer un nmero y se recibe letra.
Excepciones - try/catch
La palabra reservada try permite definir un bloque de cdigo en el que pueden ocurrir excepciones. (region resguardada) Los bloques de cdigo catch permiten especificar el cdigo para el manejo de la excepcin. (manejador de excepciones)
Excepciones - try/catch
Estructura
try { // Primer lnea de regin resguardada // Cdigo que puede lanzar excepciones // Tantas lneas de cdigo como sean necesarias. } catch (PrimerExcepcion e) { // Manejador de excepciones // Tantas lneas de cdigo como sean necesarias } catch (SegundaExcepcion e) { // Manejador de excepciones 2 }
Jerarqua de excepciones
Excepciones que pueden ser lanzadas en operacin normal de la MV. No requieren ser atrapadas
throws
Ejemplo
Excepciones
import java.io.*; public class Excepciones { public static void main(String args[]) { Excepciones e = new Excepciones(); }
public Excepciones() { try { FileReader file = new FileReader("c:\\archivo.prueba"); System.out.println("Paso"); } catch (FileNotFoundException e) { System.out.println("Error"); } System.out.println("Salgo"); }
} Error Salgo
Resultado:
Excepciones
import java.io.*; public class Excepciones { public static void main(String args[]) { Excepciones e = new Excepciones(); }
public Excepciones() { try { FileReader file = new FileReader("c:\\archivo.prueba"); System.out.println("Paso"); System.out.println("Salgo"); } catch (FileNotFoundException e) { System.out.println("Error"); } }
} Resultado:
Error
Excepciones
Se pueden atrapar todas las excepciones particulares de cada mtodo o agrupar varias llamadas a mtodos y atrapar las excepciones en bloque Depende del diseo de tu programa y de la legibilidad de cdigo que quieras
Ejemplo
public static void main(String[] args) { FileReader entrada; try { String nombreArchivo = args[0]; entrada = new FileReader(nombreArchivo); System.out.println("Archivo abierto sin problemas"); } catch (FileNotFoundException e) { System.out.println("Archivo no existe"); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Faltan argumentos"); } }
Excepciones
Al poner en un catch una superclase, esta atrapar todas las excepciones generadas por sus subclases. Esta practica no es muy recomendable ya que normalmente realizamos operaciones diferentes por cada excepcin.
Ejemplo
La clase Exception es superclase tanto de FileNotFoundException como ArrayIndexOutOfBoundsException
public static void main(String[] args) { FileReader entrada; try { String nombreArchivo = args[0]; entrada = new FileReader(nombreArchivo); System.out.println("Archivo abierto sin problemas"); } catch (Exception e) { System.out.println(No encontr el archivo faltaron argumentos ?"); } }
finally
finally siempre se ejecuta Nos permite hacer una limpieza de los recursos que un mtodo pudo haber dejado abiertos o en uso Eso nos evita el tener que duplicar cdigo en cada catch para hacer la limpieza
finally
public ejemplo() { FileReader file =null; try { file = new FileReader("c:\\archivo.prueba"); System.out.println("Paso"); } catch (FileNotFoundException e) { System.out.println("Error"); } finally { System.out.println("Siempre entra"); if(file!=null){ //Cerrar archivo } } }
Resultado:
Excepciones
Las Excepciones proveen de mtodos tiles para manejar los errores. Los mtodos que se utilizan principalmente son:
getMessage(); printStackTrace();
Excepciones - Mensaje
Las Excepciones cuentan con un metodo llamado getMessage() , el cual regresa un String con el mensaje de error.
Excepciones
import java.io.*; public class Excepciones { public static void main(String args[]) { Excepciones e = new Excepciones(); } public Excepciones() { try { FileReader file = new FileReader("c:\\archivo.prueba"); System.out.println("Paso"); } catch (FileNotFoundException e) { System.out.println("Mensaje: "+e.getMessage()); } finally { System.out.println("Siempre entra"); } } }
Resultado
Mensaje: c:\archivo.prueba (The system cannot find the file specified) Siempre entra
Excepciones - StackTrace
Imprime el estado del Stack en el momento que se gener la excepcin. Inicia imprimiendo el ltimo mtodo ejecutado y contina con la secuencia de mtodos que fueron llamados hasta llegar al main.
Ejemplo stackTrace
import java.io.*; public class Excepciones { public static void main(String args[]) { Excepciones e = new Excepciones(); } public Excepciones() { try { FileReader file = new FileReader("c:\\archivo.prueba"); System.out.println("Paso"); } catch (FileNotFoundException e) { e.printStackTrace(); } finally { System.out.println("Siempre entra"); } } } java.io.FileNotFoundException: c:\archivo.prueba (The system cannot find the file specified) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(FileInputStream.java:106) at java.io.FileInputStream.<init>(FileInputStream.java:66) at java.io.FileReader.<init>(FileReader.java:41) at Excepciones.<init>(Excepciones.java:10) at Excepciones.main(Excepciones.java:5) Siempre entra
Resultado
Excepciones
Podemos crear nuestras propias excepciones extendiendo a la clase Exception o RunTimeException
Excepciones
public class Carro { private boolean encendido=false; public static void main(String args[]){ Carro carro=new Carro(); try{ carro.acelerar(); } catch(AutoVacioException e){ System.out.println(e.getMessage()); } } public void acelerar() throws AutoVacioException{ if(!encendido){ throw new AutoVacioException("No puedo acelerar+ , estoy vacio"); } } }
Resultado
Excepciones
public class Carro { private boolean encendido=false;
public static void main(String args[]) throws AutoVacioException{ Carro carro=new Carro(); carro.acelerar(); } public void acelerar() throws AutoVacioException{ if(!encendido){ throw new AutoVacioException("No puedo acelerar+ , estoy vacio"); } } }
Si no se quiere manejar la excepcin en la funcin actual, se puede declarar a la misma como si esta la lanzara tambin.