Objetivos
Qu es una Clase?
Una clase es una entidad autocontenida que tiene las definiciones de los atributos y el comportamiento que son comunes a todos los objetos de software de un tipo en particular Los atributos se convierten en las variables y el comportamiento se refleja con los mtodos en una clase Java A partir de una clase se pueden crear instancias llamadas objetos
Qu es una Clase?
Caracteristicas (variables)
N# de Ruedas Tipo de Ruedas Color Velocidad
Bicicleta
acelerar
desacelerar
frenar
Cambiar Velocidad
Responsabilidades (mtodos)
Miembros de Instancia
Miembros de Clase
Cada objeto perteneciente a una clase tiene su propia copia de los Miembros de Instancia de la clase a la que pertenecen
Todos los objetos pertenecientes a una clase comparten los Miembros de Clase de la clase a la que pertenecen
public Persona(int numCi){ ci = numCi; numPersonas++; } public int getCi(){return ci;} public static int getNumPersonas(){ return numPersonas; Los Mtodos de } }
Los miembros que no poseen la clusula static, son considerados Miembros de Instancia
Propsito
La clase es pblicamente accesible
abstract final
class nombreClase extends superClase implements interface { }
Qu es un Objeto?
Un objeto es una instancia de una clase
Despus de que el objeto completa el trabajo para el cual fue creado, es recolectado como basura y sus recursos liberados
Creacin de Objetos Uso de Objetos Destruccin de Objetos
Creacin de Objetos
La creacin de un objeto es bsicamente la creacin de una
Miembros de un Objeto
Generalmente, para refererirse a los miembros de un objeto, se puede agregar el nombre de la variable o referencia del objeto con un punto (.) entre ellos.
class A{ public int m1; private int m2; public void setM2(int val){ m2 = val; } public static void main(String args[]){ A obj = new A(); obj.m1 = 32; // acceso a una variable m. obj.setM2(42);// acceso a un metodo m. } }
objeto.
class A{ private int m2; public void setM2(int val){ m2 = val; } public int getM2(){ return m2; } }
Mtodos en Java
Los mtodos disponibles en una clase pueden
Modificadores de Acceso
En Java, existen diferentes formas de controlar el acceso a los miembros de una clase. Para ello se utilizan los Modificadores de Acceso, que son: private proctected public
Private
Un miembro especificado como private es accesible slo dentro de la clase donde es definido Se utiliza para mantener el estado del objeto consistente
class Cuenta{ private float saldo; // Miembro privado public Cuenta() { saldo = 0; } } class Principal { public static void main(String args[]){ Cuenta c = new Cuenta(); c.saldo = 125; //Error, miembro
privado
}
}
Protected
Permite que un miembro sea accedido por la clase en el que est definido, sus subclases y las clases en el mismo paquete
class Padre{//Definida en el paquete p protected int m1; // Miembro protegido } class Hijo extends Padre{//Definida en el paquete p public void setM1(int val){ m1 = val; // Correcto, es protegida } } class Otra{ //Definida en otro paquete public static void main(String args[]){ new Hijo().m1 = 20; //Error m1 no es accesible } }
Public
Cualquier clase perteneciente a cualquier paquete tiene acceso a los miembros pblicos de una clase
class Padre{ public int m1; // Miembro pblico } class Hijo extends Padre{ public void setM1(int val){ m1 = val; // Correcto, es pblica } } class Otra{ public static void main(String args[]){ new Hijo().m1 = 20; // Correcto, es pblica } }
Package
Permite que un miembro sea accedido dentro de la clase en la que est definido, y las clases en el mismo paquete
class Padre{//Definida en el paquete p int m1; // Miembro con acceso package } class Hijo extends Padre{//Definida en p public void setM1(int val){ m1 = val; // Correcto } } class Otra{//Definida en otro paquete public static void main(String args[]){ new Hijo().m1 = 20; //Error m1 no es accesible } }
Modificadores de Acceso
Modificador Clase Subclase mismo paquete Clase mismo Paquete Subclase otro paquete Clase otro paquete
private
si
no
no
no
no
protected
si
si
si
si
no
public
si
si
si
si
si
package
si
si
si
no
no
Declaracin de Miembros
Componentes de la Declaracin de variables Nivel de acceso static final transient Propsito del Componente Especifica el nivel de acceso a la variable Indica la declaracin de una variable de clase Indica que la variable es una constante Indica que la variable no debe ser serializada Indica al compilador que el valor de la variable puede cambiar en cualquier momento Indica el tipo de datos al cual pertenece la variable
volatile
tipo
Declaracin de Miembros
Componentes de la Declaracin de mtodos Propsito del Componente
Especifica el nivel de acceso al mtodo Indica la declaracin de un mtodo de clase Indica que la implementacin del mtodo no es proporcionada Indica que el mtodo no puede ser sobreescrito por su subclase
Nivel de acceso
static abstract final
native
synchronized tipoRetorno nombreMetodo (lista de parmetros) throws Excepciones
class Persona{ int ci; static int numPersonas = 0; public Persona(){ci=0;} public Persona(int numCi){ ci = numCi; Si no numPersonas++; proporcionamos } algn constructor, Java lo hace public getCi(){return ci;} public static int getNumPersonas(){ return numPersonas; } }
Sobrecarga de Mtodos
Java permite tener dos o ms mtodos con el mismo nombre dentro de la misma clase, siempre que cumplan con alguna de las siguientes premisas: Distinto numero de argumentos
No basta con que el tipo de retorno sea distinto para diferenciar a dos mtodos sobrecargados
Sobrecarga de Mtodos
1. public class A{ 2. public 3. 4. } 5. public int n3){ 6. 7. } 8. public 9. ); 10. } 11.}
Mtodo suma int suma(int n1, int n2){ original return ( n1 + n2 );
return ( n1 + n2 + n3 );
Mtodo suma sobrecargado void suma(int n1, int n2){ perfectamente
System.out.println( n1 + n2
Nota: en la lnea 8 se genera un error ya que el mtodo suma solo se diferencia en el tipo de retorno
Clases Anidadas
Una clase anidada es una clase cuya definicin est dentro de otra clase Si una clase contiene a una clase anidada, es conocida como clase exterior.
Las clases anidadas tienen acceso total a los miembros de su clase exterior, incluso a los miembros privados.
Estas clases son consideradas miembro de la clase contenedora.
Clases Anidadas
class A{
Clase exterior
class B{
B(){
Clase anidada
System.out.println("Clase Anidada"); System.out.println(objA.mensaje); } } public static void main(String args[]){ A objA = new A(); B objB = objA.new B(); } }
Herencia
Objetivos
Entender los fundamentos de herencia
Fundamentos de Herencia
Usando este concepto se puede crear una clase general que da la definicin de los rasgos comunes a un conjunto de clases relacionadas Permite crear una jerarqua de clasificaciones En Java, la clase de la cual se hereda es llamada superclase y la clase que hereda de otra clase es llamada subclase Para especificar que una clase hereda de otra clase, la clase que hereda debe usar la palabra clave extends despus del nombre de la clase en su declaracin
Fundamentos de Herencia
Superclase o Clase Base
Transporte
Aereo
Maritimo
Fundamentos de Herencia
class Transporte{ int color; float velocidad; int capacidad; public Transporte(int c, int cap){ color = c; capacidad = cap; } } class Aereo extends Transporte{ float altura; public Aereo(int c, int cap, float a){ super(c,cap); altura = a; } }
Fundamentos de Herencia
La herencia mltiple no es soportada por Java Una subclase en una jerarqua puede llegar a ser una superclase para otra clase Una clase no puede ser una superclase de s misma
Aereo
Maritimo
Helicoptero
Qu se Hereda?
Los miembros (variables y mtodos)
son heredados
Los constructores no son heredados
Los modificadores de acceso controlan el acceso a los miembros, as los miembros privados de la clase base, aunque son heredados no son accesibles directamente por la subclase
La Clase java.lang.Object
Es la sper clase directa o indirectamente de todos las clases en Java. Los miembros (variables y mtodos) son heredados a toda clase en Java
La Clusula super
La palabra reservada super se utiliza para hacer una llamada explcita al constructor de la clase base desde la clase derivada Tambin se puede usar para referir a los miembros (variables y mtodos) de la superclase
La Clusula super
class Aereo extends Transporte{
float altura; public Aereo(int c, int cap, float a){ super(c,cap); /* Llamada explicita al constructor base */ altura = a;
} public void setColor(int val){ super.color = val;/* Variable miembro de la superclase */ } }
La Clusula this
La palabra reservada this se utiliza para hacer referencia a los miembros (variables y mtodos) de la clase actual
class Aereo extends Transporte{ float altura; public void setAltura(float altura){
this.altura = altura; }
}
Variable miembro Variable local del mtodo
} } class Y extends X { Y(){ System.out.println(Objeto Hijo"); } } public class ConstructorOrderTest { public static void main(String[] args) { Y y = new Y(); } }
Sobrescritura de Mtodos
Es el proceso mediante el cual el contenido de un mtodo de la superclase es editado en la subclase. Esto se logra cumpliendo las siguientes premisas: Tener el mismo nombre de mtodo Tener el mismo nmero de parmetros Tener los mismos tipos de datos en cada parmetro y en el mismo orden Tener el mismo tipo de retorno
Sobrescritura de Mtodos
class X { public void mostrar(){ System.out.println(Objeto Padre); } Mtodo original
de la superclase } class Y extends X { public void mostrar(){ System.out.println(Objeto Hijo"); } } Mtodo
sobrescrito en la subclase
La Clusula final
Se puede declarar una variable que tenga un valor constante a travs del programa usando el modificador final sobre la variable. Cuando se usa con un mtodo, previene que el mtodo sea sobreescrito Cuando se usa con una clase, previene que la clase sea heredada
La Clusula final
final class Cuenta{ protected float saldo = 0; Error, la clase Cuenta no puede public final float interes = 10; public final void setSaldo(float val){ ser heredada saldo = (val>=0)?val:saldo; } } class CuentaCorriente extends Cuenta{ private float numChequera; public void cambiarInteres(){interes+=2;} public void setSaldo(float val){ saldo = val; Error, el valor de la variable } interes no puede ser }
cambiado Error, el mtodo cambiarInteres() no puede ser sobrescrito
Resumen
Se entendieron los fundamentos de la herencia Se aprendi acerca de cmo usar el modificador super
Objetivos
Aprender acerca del modificador abstract
Modificador Abstract
Las clases abstractas sirven para definir caractersticas genricas de un concepto abstracto. Estas no pueden ser instanciadas Un mtodo abstracto, es aquel donde la implementacin no se encuentra en esa clase. Slo pueden presentarse dentro de una clase abstracta
Clases Abstractas
Clase abstracta Mtodo abstracto
Qu es una Interfaz?
Las interfaces son similares a las clase, pero no tienen ninguna variable de instancia y no se proporciona la implementacin para los mtodos declarados en ella Se usan bsicamente, para especificar que debe hacer una clase, pero no cmo, de esto se encargan las clases que implementen la interfaz
Qu es una Interfaz?
Una interfaz puede ser implementada por cualquier nmero de clases y tambin una clase puede implementar cualquier nmero de interfaces Una interfaz puede extender a otra interfaz, as se crean jerarquas de interfaces Una interfaz no puede implementar otra interfaz
Una clase que implementa una interfaz y no proporciona la implementacin para todos los mtodos que estn definidos en la interfaz, entonces debe ser declarada como abstracta
Interfaces
Qu es una Interfaz?
public interface Telefono{ void llamar(int tlf); } public interface Agenda{ void grabarNumero(String nombre,int tlf); Definicin de los int buscarNumero(String nombre); mtodos de las } interfaces public class Celular implements Telefono, Agenda{ public void llamar(int tlf){ // cdigo para llamar } Clase que public void grabarNumero(String nombre,int tlf){ implementa // cdigo para grabar} varias interfaces public int buscarNumero(String nombre){ // cdigo para buscar} public static void main(String args[]){ Telefono nokia = new Celular(); // Correcto } }
Resumen
Se aprendi acerca del modificador abstract
Paquetes
Objetivos de Aprendizaje
Conocer qu es un paquete
Qu es un Paquete?
Un paquete es un repositorio de clases e interfaces relacionadas El uso de paquetes permite tener dos o ms clases con el mismo nombre en diferentes paquetes
Definicin de un Paquete
Un usuario puede construir una jerarqua de paquetes
Esto puede lograrse dividiendo un nombre de paquete de otro directamente usando un punto (.)
package pack1.pack2.pack3; Un punto importante es que la jerarqua de paquetes debe mantenerse en el sistema de archivos subyacente La jerarqua de paquetes del ejemplo anterior debe estar presente como: pack1/pack2/pack3 Unix o pack1\pack2\pack3 Windows
La clase C se compila y coloca en un directorio x\y bajo algn directorio del sistema de archivos, por ejemplo:
\Ejemplos\x\y\C.class
no
si
si
si
no
si
si
si
no no
no no
si no
si si
public class Pruebas{ public static void main(String args[]){ java.util.Vector v = new java.util.Vector(); v.addElement("Hola Mundo"); System.out.println((String)v.elementAt(0)); } }
Importando Paquetes
Referirse a las clases por su nombre largo puede ser un proceso tedioso Para evitar esto, Java provee la clusula import, que permite hacer visible una clase o el conjunto de clases en un paquete La clusula import se coloca justo debajo de la clusula package La sintaxis de la sentencia import es la siguiente: import pack1.[pack.](nombreClase|*);
Importando Paquetes
import java.util.Vector; // import java.util.*; public class Pruebas{ public static void main(String args[]){ Vector v = new Vector(); v.addElement("Hola Mundo"); System.out.println((String)v.elementAt(0)); } }
Aqu importamos la clase que queremos utilizar, o en su defecto el paquete completo
Qu es el CLASSPATH?
El CLASSPATH es una variable de ambiente que controla la ubicacin particular que debe ser considerada por Java como la raz de la jerarqua de paquetes Los paquetes pueden resolver problemas de control de acceso y conflictos de espacio de nombres, pero tambin crean dificultades al compilar y ejecutar programas Usualmente un usuario puede guardar todas las clases en el paquete por defecto sin nombre Esto permite al usuario el compilar el cdigo fuente y luego ejecutar el intrprete de Java sin problemas Esto se debe a que el directorio de trabajo (.) se encuentra por defecto en el CLASSPATH
Resumen
Se aprendi qu es un paquete