Вы находитесь на странице: 1из 9

Unidad 3 Programacin Orientada a Objetos con Java.

3.1 Clases.
En el mundo real encontramos muchos objetos del mismo tipo, por ejemplo, existen diferentes bicicletas de la misma marca y modelo. Cada una de ellas fue elaborada utilizando la misma plantilla o molde y por lo tanto cada una de ellas contiene los mismos componentes. Hablando en trminos de la programacin orientada a objetos, podemos decir que una bicicleta es una instancia u objeto de la clase Bicicleta. Una clase en java es una plantilla que contiene atributos y mtodos que definen el estado y comportamiento de un objeto. En java, todo debe estar dentro de una clase. El archivo donde se almacena la clase debe de tener el mismo nombre que la clase con extensin .java

Forma General de una clase en java.


AccesoALaClase class NombreClase{ //atributos //metodos }

Tipos de clases.
abstract . Una clase abstract tiene al menos un mtodo abstracto. Una clase abstracta no se instancia, sino que se utiliza como clase base para la herencia. final . Una clase final se declara como la clase que termina una cadena de herencia. No se puede heredar de una clase final. Por ejemplo, la clase Math es una clase final. public . Las clases public son accesibles desde otras clases, bien sea directamente o por herencia. Son accesibles dentro del mismo paquete en el que se han declarado. Para acceder desde otros paquetes, primero tienen que ser importadas. synchronizable . Este modificador especifica que todos los mtodos definidos en la clase son sincronizados, es decir, que no se puede acceder al mismo tiempo a ellos desde distintos threads; el sistema se encarga de colocar los flags necesarios para evitarlo. Este mecanismo hace que desde threads diferentes se puedan modificar las mismas variables sin que haya problemas de que se sobreescriban.

Existen diferentes formas de acceso a los miembros de las clases, en la siguiente tabla se muestran. Nivel de Acceso Modificador Clase Paquete Subclase Mundo
public protected

Y Y

Y Y

Y Y

Y N

no modifier
private

Y Y

Y N

N N

N N

Tabla 1 Modificadores de Acceso a los miembros de una clase.

3.2 Mtodos.
Los mtodos son procedimientos definidos en una clase que contienen instrucciones y variables.

Forma general de un mtodo.


modificadorAcceso tipoDeRetorno nombreMetodo(argumentos){ //declaraciones e instrucciones } La declaracin de un mtodo tiene 6 componentes. Modificador de Acceso. Por ejemplo puede ser pblico o privado o los que se encuentran en la Tabla 1. Este modificador indicar la forma en que otras clases pueden ver o no al mtodo. Tipo de Retorno. El tipo de dato que regresar el mtodo o void si no regresa nada. Nombre del Mtodo Argumentos o parmetros enlistados entre parntesis. Dentro de los parntesis es la lista de argumentos delimitados por comas indicando primero el tipo de dato que es. Si no hay parmetros se ponen parntesis vacos (). Lista de excepciones. En caso de que no se desee hacer caso de las excepciones en este mtodo, se indican todas las excepciones que se pueden presentar dentro del mtodo. Cuerpo del mtodo. El cdigo de lo que realizara el mtodo, incluyendo la declaracin de variables. Todo dentro de {}.

Ejemplo. void suma(int numero1,int numero1){ //cuerpo del metodo } Una de las caractersticas de java es la de mantener la encapsulacin de los datos, esto se logra manteniendo los atributos privados. De esta forma solo utilizando los mtodos de acceso adecuados podremos ver o establecer/modificar los valores de los atributos. A estos mtodos se les llama en ingles accesors y mutators. Accesors. Son mtodos de acceso a los atributos, se les llama getters, y la firma del metos es:

acceso tipoRetorno nombreMetodo(); Generalmente el acceso es publico y siempre debe haber un tipo de retorno, ya que como la palabra lo indica, es para tener el acceso al atributo (para poder ver su valor). Mutators. Son mtodos para modificar los valores de los atributos, se les llama setters, y la firma del mtodo es: acceso void nombreMetodo(tipoAtributo nuevoValor); Generalmente el acceso es pblico y generalmente no existe el tipo de retorno. Este mtodo se utiliza para establecer un nuevo valor para el atributo. Para invocar la llamada al un metodo se utiliza el . como se muestra a continuacin:

nombreObjeto.nombreMetodo();
En caso de que el mtodo reciba parmetros se hace de la siguiente manera:

nombreObjeto.nombreMetodo(param1,param2);

3.3 Constructores
El constructor es un tipo especfico de mtodo que siempre tiene el mismo nombre que la clase y se utiliza para construir objetos de esa clase. No tiene tipo de dato especfico de retorno, ni siquiera void. Esto se debe a que el tipo especfico que debe devolver un constructor de clase es el propio tipo de la clase. En este caso, pues, no se puede especificar un tipo de retorno, ni se puede colocar ninguna sentencia que devuelva un valor. Los constructores pueden sobrecargarse, y aunque puedan contener cdigo, su funcin primordial es inicializar el nuevo objeto que se instancia de la clase. Cuando se declara una clase en Java, se pueden declarar uno o ms constructores opcionales (sobrecarga de mtodos o polimorfismo) que realizan la inicializacin cuando se instancia un objeto de dicha clase. class Persona { private String nombre; private String curp; private String fechaNacimiento; private float peso; //Constructores. public Persona(String nombre,String curp,String fechaNacimiento,float peso){ this.nombre=nombre; this.curp=curp; this.fechaNacimiento=fechaNacimiento; this.peso=peso;

} public Persona(String nombre,float peso){ this.nombre=nombre; this.peso=peso; } //setters y getteres para cada atributo de la clase } En el ejemplo de Persona se declararon dos constructores, lo que hace la diferencia entre los dos, es la lista de argumentos o parmetros que le llega a cada uno de ellos. Por un lado esta el que recibe cuatro argumentos, igual cantidad que los atributos. Y el otro constructor solo recibe dos argumentos, uno String para el nombre y otro flotante para el peso. En Java, si no se proporciona explcitamente un constructor, el sistema proporciona uno por defecto que inicializar automticamente todas las variables miembro a cero o su equivalente, en Java. 3.4 El recolector de basura. Se utiliza para liberar la memoria reservada. En ingles se llama garbage collector. Cuando ya no se necesita un objeto simplemente puede dejar de referenciarse. No existe una operacin implcita para destruir un objeto o liberar el rea de memoria utilizada por el. La liberacin de memoria la realiza el recolector de basura, que es una funcin de baja prioridad de la JVM (java virtual Machine). La JVM determina en que momento se activara el recolector de basura. En ocasiones es necesario realizar alguna accin asociada antes de la liberacin de memoria. Esto se puede realizar codificando el mtodo finalize, se declara a continuacin: protected void finalize() throws Throwable{} El mtodo finalize es invocado por la JVM antes de liberar la memoria por el recolector de basura o antes de terminar la JVM. No existe un momento concreto en que las reas de memoria son liberadas, sino que lo determina en cada momentos la JVM en funcin de sus necesidades de espacio. La forma de invocar al garbage collector es: System.gc(); Pero esto no es recomendado. 3.5 Miembros de clase estticos Java tiene tres tipos de variables: de instancia de clase locales

Las variables de instancia o miembros dato, se usan para guardar los atributos de un objeto particular. Las variables de clase o miembros dato estticos son similares a las variables de instancia, con la excepcin de que los valores que guardan son los mismos para todos los objetos de una determinada clase. En el siguiente ejemplo, PI es una variable de clase y radio es una variable de instancia. PI guarda el mismo valor para todos los objetos de la clase Circulo, pero el radio de cada crculo puede ser diferente
class Circulo{ static final double PI=3.1416; double radio; double calcularArea(){ double area=PI*radio*radio; return area; } //... }

Para indicar que el miembro PI es una variable de clase se le antepone el modificador static. El modificador final indica que es una constante que no se puede modificar, una vez que la variable PI ha sido inicializada Las variables locales se utilizan dentro de las funciones miembro o mtodos. Como se puede ver en la declaracin del mtodo calcularArea(), area es una variable local a la funcin calcularArea en la que se guarda el valor del rea de un objeto de la clase Circulo. Una variable local existe desde el momento de su definicin hasta el final del bloque en el que se encuentra. De la misma forma que existen variables de instancia y variables de clase, existen los mtodos de instancia y lo mtodos de clase. Mtodos de Clase. El lenguaje java soporta tambin mtodos estticos. Los mtodos estticos son los que definen la palabra reservada static en la declaracin del mtodo, y deben llamarse utilizando el nombre de la clase, sin la necesidad de crear una instancia de la clase, por ejemplo: NombreClase.nombreMetodo(args); 3.6 Herencia Java permite el uso de la herencia simple. La herencia se refiriere a que una clase puede obtener los atributos de otra clase, esto se hace con el fin de encontrar cosas comunes y generales, para despus proporcionar estas caractersticas a otras clases y definir mas a detalle sus propias caractersticas. A la clase que da la herencia se le llama Superclase y a la que la recibe se le llama subclase. Por ejemplo, podemos crear una clase genrica Bicicleta, esta clase tendr caractersticas comunes a todas las bicicletas. Esta clase puede heredar sus atributos a

otras clases ms especializadas como BicicletaMontaa o BicicletaVelocidad. Cada subclase adems de las caractersticas comunes a todas las bicicletas, heredadas de Bicicleta, tendr sus propios atributos especficos. Observe la figura, en ella podemos observar la superclase y las subclases derivadas.

La forma de generar herencia es:


public class subclase extends superclase { }

Ejemplo.
public class Bicicleta { // la clase Bicicleta tiene 3 atributos public int cadence; public int gear; public int speed; // la clase Bicicleta tiene un constructor public Bicicleta(int startCadence, int startSpeed, int startGear) { gear = startGear; cadence = startCadence; speed = startSpeed; } // la clase Bicicleta tiene 4 metodos public void setCadence(int newValue) { cadence = newValue; } public void setGear(int newValue) { gear = newValue; } public void meterFreno(int decrement) { speed -= decrement; } public void aumentaVelocidad(int increment) { speed += increment; }

La clase BicicletaMontaa hereda los atributos de Bicicleta.


public class BicicletaMontaa extends Bicicleta { // la subclase BicicletaMontaa agrega un campo public int seatHeight; // la subclase BicicletaMontaa tiene un constructor public BicicletaMontaa(int startHeight, int startCadence, int startSpeed, int startGear) { super(startCadence, startSpeed, startGear); seatHeight = startHeight; } // la subclass BicicletaMontaa agrega un metodo public void setHeight(int newValue) { seatHeight = newValue; } }

En Java no se puede hacer herencia mltiple 3.7 Abstraccin de Datos La abstraccin de datos es obtener las partes esenciales de un objeto para crear una clase y generalmente se utilizan para generar herencia como superclase. Una clase abstracta puede tener o no atributos y puede tener o no mtodos abstractos. Un mtodo abstracto es un mtodo que no tiene implementacin como se muestra:
abstract void moveTo(double deltaX, double deltaY);

Si la clase incluye mtodos abstractos, la misma clase debe ser declarada como abstracta, como se muestra a continuacin.
public abstract class ClaseAbstracta { // declaracion de campos // declaracion de metodos no abstractos // declaracion metodo abstracto abstract void dibujar(); }

Las clases abstractas solamente se pueden usar como clases base para otras clases. No se pueden crear objetos pertenecientes a una clase abstracta. Sin embargo, se pueden declarar variables de dichas clases. 3.8 Polimorfismo. El concepto de Polimorfismo es uno de los fundamentos para cualquier lenguaje orientado a Objetos, las mismas races de la palabra pueden ser una fuerte pista de su significado: Poli = Multiple, morfismo= Formas , esto implica que un mismo Objeto puede tomar diversas formas. A travs del concepto de Herencias es posible ilustrar este comportamiento

El poder manipular un Objeto como si ste fuera de un tipo genrico otorga mayor flexibilidad al momento de programar con Objetos, vea el siguiente cdigo:
Figura a = new Circulo(); Figura b = new Triangulo();

Inicialmente se puede pensar que este cdigo generara un error debido a que el tipo de referencia es distinta a la instancia del objeto, sin embargo, el fragmento anterior es correcto y demuestra el concepto de Polimorfismo. Esto es posible debido a que Circulo y Triangulo son subclases de Figura. Tambin podemos asociar el polimorfismo en la declaracin de mtodos con nombres igual y argumentos diferentes, como cuando declaramos mltiples constructores. Para ilustrar este concepto veamos el siguiente ejemplo.
class Sumas{ // declaracion de atributos int numero1,numero2,resultado1; float numero3,numero4,resultado2; Complejo numero5,numero6,resultado3; //constructores public Sumas(int n1,int n2){ numero1=n1; numero2=n2 } public Sumas(float n1,float n2){ numero3=n1; numero4=n2 } public Sumas(Complejo n1,Complejo n2){ numero5=n1; numero6=n2 } // declaracion de metodos on el mismo nombre public int laSuma(int valor){ return valor+numero1;

} public float laSuma(float valor){ return valor+numero3; } public Complejo laSuma(Complejo valor){ return valor+numero5; } }

Podemos observar de la clase Suma, que existen 3 constructores, y cada uno de ellos recibe diferentes tipos de valores, esto hace que no haya confusin a la hora de invocar el constructor, java sabr cual se esta invocando. Tambin hay 3 mtodos laSuma, y al momento de invocar cualquiera de los mtodos java sabr cual ejecutar debido a que recibir el atributo de un tipo en particular.

Bibliografia. 1. http://java.sun.com/docs/books/tutorial/java/javaOO/methods.html 2. http://www.ulpgc.es/otros/tutoriales/java/Cap1/instan.html 3. http://www.sc.ehu.es/sbweb/fisica/cursoJava 4.