miércoles, 18 de enero de 2012

2.1.-Programación en Android: Algunos conceptos (II)


2.1.- Programación en Android: Algunos conceptos (II)

Continuamos en este capítulo ampliando y aclarando algunos conceptos de los que hablamos en el anterior, aunque posiblemente los comprendamos mejor cuando comenzemos a escribir el código.

Antes hablamos de la herencia, de que unas clases heredan de otras, etc., el significado de este concepto es simple: Puedes crear una clase partiendo de otra que ya exista, osea no tienes porque reinventar la rueda, puedes coger una "rueda" ya hecha y "tunearla". Más adelante se hablará como crear la clase y heredarla con más detalle.
La clase que hereda de otra, tiene todas las variables y los métodos de la "superclase" o clase "padre", y además le podrás añadir más métodos o variables. Veamoslo con una imagen:

imagen: Herencia_clases.png


También podeis bajar un proyecto con un ejemplo y descripciones aqui.

Como crear objetos en Java

Los objetos se crean ejemplarizando las clases. En el ejemplo anterior creamos una clase OperacionAritmetica, ahora debemos hacer un objeto que tenga sus funcionalidades.
A menudo se ven las creaciones de los objetos con sentencias del tipo:


OperacionAritmetica operacion1 = new OperacionAritmetica();


Esta sentencia creará un objeto del tipo OperacionAritmetica. Aunque para ser más precisos, en esta sentencia se hacen tres cosas: una declaración, ejemplarización e inicialización.
Con "OperacionAritmetica operacion1" estamos declarando una variable, "operacion1". Le estamos indicando al compilador que el nombre "operacion1" se va a utilizar para referirse a un objeto del tipo "OperacionAritmetica".

Posteriormente con el operador "new" le estamos indicando que cree un nuevo objeto "OperacionAritmetica", osea, lo estamos ejemplarizando. Al usar el operador "new" se asigna memoria para este nuevo objeto. El operador "new" necesita un argumento, y este es la llamada al método constructor del objeto. "New" crea el objeto y el constructor lo inicializa. El operador "new" nos devuelve una referencia al objeto recien creado, la cual le estamos asignando a "operacion1".

Y finalmente con "OperacionAritmetica()" estamos inicializando el objeto llamando a su constructor. Puede haber más de un constructor, cada uno de ellos realizaría diferentes inicializaciones. Los constructores tienen el mismo nombre de la clase y no tienen un tipo de retorno. Si el constructor no tiene ningún argumento, como en nuestro caso, entonces se le conoce como constructor por defecto.

No es necesario inicializar el objeto en el momento de su declaración, podemos hacerlo posteriormente.

Acceder a métodos o variables de un objeto.

Cuando deseemos acceder a las variables de un objeto, debemos añadir el nombre de la variable al objeto, separándolos por un punto.
Para acceder a los métodos realizaríamos el mismo sistema que con las variables, pero además le pasaríamos los argumentos dentro de los paréntesis (int x), y en caso de no tener argumentos pondríamos los paréntesis vacíos (), por ejemplo:

int resultado = operacion1.suma(55, 5);


En este ejemplo estaríamos declarando una variable de tipo int (resultado), y le asignariamos (=) el valor que nos retorna la llamada al método suma (operacion1.suma(55,5)). Al método suma le estamos enviando dos argumentos separados por comas: (55 , 5).

Las llamadas a métodos también se conocen como mensajes.

Eliminar objetos en Java

Si alguna vez has programado en C, o en otros lenguajes, sabes que hay que tener un control sobre los objetos que hemos creado para destruirlos cuando no sean necesarios, con el fin de evitar pérdidas de memoria.
En Java nos ahorramos el tener que destruir los objetos que ya no necesitemos. El entorno de ejecución de Java tiene un "recolector de basura" que se encarga de borrar automáticamente los objetos que no se van a utilizar más. Los objetos son elegibles para recolectarlos y destruirlos cuando no existen más referencias a ese objeto, o cuando se borra explícitamente el objeto y su valor sea null. Las referencias de variables desaparecen cuando la variable sale de su ámbito.
El recolector de basura está en un hilo (thread) de baja prioridad, y se ejecuta cuando haga falta memoria o si lo pide expresamente un programa de Java mediante una llamada a System.gc().

Cuando el recolector de basura va a "recolectar" el objeto, llama antes al método finalize() del propio objeto. Así en esa finalización se puden liberar los handles a ficheros, referencias a otros objetos, etc.

Declarar Clases (En Java)

La declaración de una clase en Java tiene como mínimo dos componentes: la declaración de la clase, y su cuerpo.
La declaración de la clase debe tener como mínimo la palabra clave class y el nombre de la clase que se define. Por ejemplo:

class NombreClase
{
//...cuerpo de la clase
}



Por convención deben comenzar por mayúscula y tiene que ser un identificador legal en Java. En caso de que la clase "herede" de otra clase, la superclase, entonces se utiliza la palabra clave extends. En caso de no utilizarlo se entiende que la clase deriva de la clase Object.

class NombreClase extends NombreSuperClase
{
//...cuerpo de la clase
}


Interfaces

Los interfaces son una manera de acceder a los métodos de una clase, pero sin heredar su implementación. Un interface es un conjunto de prototipos de métodos sin información de la implementación asociada. Si una clase implementa un interface tiene obligatoriamente que proporcionar implementaciones para todas las declaraciones de método que posea dicho interface.
Si una clase implementa algún interface, entonces por convención dicha cláusula debe ir despues de la cláusula extends, si existe.

Modificadores: Public, Abstract y Final

Estos modificadores se utilizan para declarar el tipo de acceso a la clase.
Public: Indica que la clase puede ser utilizada por objetos fuera del paquete actual. En caso de utilizarlo suele ser el primer elemento de la declaración.
Abstract: Declara la clase como abstracta. Las clases abstractas pueden contener métodos para los que no se ha creado la implementación. Las clases de este tipo están diseñadas para ser superclases y no pueden ejemplarizarse.
Final: Al añadir este modificador, indicamos que la clase no puede tener subclases. No se puede heredar.
No tiene mucho sentido utilizar los modificadores abstract y final juntos, ya que si no implementamos los métodos, ni dejamos que se implementen, en fin...

En definitiva, podría ser así:

[Modificadores] class NombreClase [extends NombreSuperClase] [implements NombredeInterface]
{
//...cuerpo de la clase
}



El cuerpo de una clase en JAVA

En el cuerpo de la clase va la implementación de la propia clase: sus métodos y sus variables.
Dentro del cuerpo de la clase se definen todas las variables miembro y los métodos o funciones que soporta esa clase en particular.
Normalmente se declaran primero las variables miembro y posteriormente las declaraciones e implementaciones de los métodos.

public class OperacionAritmetica
{
int variablemiembro;

public int metodo(int operando1, int operando2)
{
return operando1 + operando2;
}
}




Ver. 1.0 – Revisión 23.1.2012

No hay comentarios:

Publicar un comentario