sábado, 29 de septiembre de 2012

CONCEPTOS BÁSICOS DE JAVA (I)


CLASE
Cuando queremos construir una aplicación necesitamos representar entidades del mundo real en un lenguaje informático. Por ejemplo si queremos programar una aplicación que gestione un concesionario de coches necesitaremos representar diferentes tipos de entidades como pueden ser: coches, vendedores, compradores o facturas. Una clase es una plantilla que nos permite definir qué es relevante para nosotros de cada una de estas entidades, es decir, realizamos una abstracción de cada una de las entidades quedándonos únicamente con lo que nos interesa de cada una. Una clase no es más que un bloque de código que almacena:
- Datos o información (atributos): que valores queremos almacenar dentro de una entidad de un tipo determinado.
- Acciones (métodos): que acciones son interesantes realizar con estos datos.

Por ejemplo si nos interesa en nuestra aplicación que exista un tipo de entidad coche y queremos que un coche este constituido por lo siguiente:
- Información: matrícula, marca, modelo y tipo de combustible.
- Acciones: mostrar sus características.

La clase podría quedar así:
public class Coche {
/* ATRIBUTOS */
String matricula;
String marca;
String modelo;
String tipoCombustible;
/* MÉTODOS */
public void mostrarCaracteristicas() {
System.out.println("Soy un coche [matricula = " + matricula + ",
marca = " + marca + ", modelo = " + modelo + ", combustible = " + tipoCombustible + "]");
}
}
Por tanto una clase es un modelo o generalización que nos permite definir de forma clara y precisa qué tipo de información vamos a almacenar y que operaciones podrá realizar cualquier coche definido en nuestra aplicación. Una clase es un concepto general que luego podemos caracterizar en objetos diferentes.
[matrícula = 1600RM, marca = Audi, modelo = A5, combustible = Diesel]
[matrícula = 2720BC, marca = Seat, modelo = León, combustible = Gasolina]

OBJETOS (INSTANCIA DE UNA CLASE)
Es una instanciación, realización o concretización de una clase. Cuando queremos crear un coche concreto necesitamos crear un objeto. Un objeto es un concepto específico, que utiliza la clase Coche como modelo y nos permite representar cualquier coche que se ajuste a este modelo.
Por ejemplo si quiero crear un coche concreto con una determinada matrícula, marca, modelo y tipo de combustible, entonces debería crear un objeto de tipo Coche.
// Creamos un coche, utilizando el método constructor de la clase Coche
Coche coche1 = new Coche("1600RM", "Audi", "A5", "Diesel");
// Creamos otro coche, utilizando el método constructor de la clase Coche
Coche coche2 = new Coche("2720BC", "Seat", "León", "Gasolina");
Cuando creamos un objeto concreto lo que estamos haciendo es crear una instancia de una determinada clase. En Java al ser un lenguaje orientado a objetos todo elemento creado y utilizado es un objeto, y la instanciación (creación de una instancia mediante el constructor) determina de qué tipo concreto es el objeto creado.


ATRIBUTOS
Es la parte de una clase que se ocupa de determinar qué datos podemos almacenar en un objeto de este tipo de clase, y de qué tipo será cada uno de estos datos. Por ejemplo en nuestra clase Coche tenemos los siguientes tipos de datos:
- Matricula: representada por una cadena de caracteres (String).
- Marca: representada por una cadena de caracteres (String).
- Modelo: representada por una cadena de caracteres (String).
- TipoCombustible: representada por una cadena de caracteres (String).

/* ATRIBUTOS */
String matricula;
String marca;
String modelo;
String tipoCombustible;


MÉTODOS
Nos permite definir las funciones, acciones o comportamientos que nos interesa que un objeto de nuestra clase sea capaz de realizar. Siguiendo con el ejemplo del Coche un posible comportamiento que nos podría interesar es que un coche sea capaz de mostrar sus características en la aplicación. Esto se podría realizar de la siguiente manera:
// Método que muestra la información de un coche por consola
public void mostrarCaracteristicas() {
System.out.println("Soy un coche [matricula = " + matricula + ", marca = " + marca + ", modelo = " + modelo + ", combustible = " + tipoCombustible + "]");
}
La ejecución de este método nos mostraría por consola las características del objeto coche sobre el que se ejecuta. Por ejemplo:
Soy un coche [matricula = 1600RM, marca = Audi, modelo = A5, combustible = Diesel]


CONSTRUCTORES
Los constructores son un tipo de funciones especiales que permiten asignar información inicial a un objeto de una clase en el momento de su creación (instanciación). Los constructores nos permiten asegurarnos que cuando creamos un objeto concreto del tipo de una clase, a la fuerza va a tener un mínimo de información inicial establecida. Luego podremos modificar esta información con los métodos que proporciona la clase. Por ejemplo para un coche nos podría interesar que en el momento de su creación se indicaran todas sus características:
// Constructor de la clase Coche
public Coche(String matricula, String marca, String modelo,
String tipoCombustible)
{
this.matricula = matricula;
this.marca = marca;
this.modelo = modelo;
this.tipoCombustible = tipoCombustible;
}
En el ejemplo visto se ha introducido un elemento nuevo, la referencia this que nos permite diferenciar entre los parámetros pasados al constructor y los atributos de la propia clase. Si observa verá que tanto los parámetros pasados a la función como los atributos de la clase se llaman igual, para resolver esta ambigüedad se utiliza la referencia this. El constructor anterior se podría haber realizado de la siguiente manera si los parámetros pasados se llamarán de diferente manera a los atributos. Por ejemplo vamos a añadir una P al final de los parámetros para diferenciarlos de los atributos del objeto: matriculaP, marcaP, modeloP y tipoCombustibleP:
// Constructor de la clase Coche
public Coche(String matriculaP, String marcaP, String modeloP,
String tipoCombustibleP)
{
matricula = matriculaP;
marca = marcaP;
modelo = modeloP;
tipoCombustible = tipoCombustibleP;
}

Una apreciación importante sobre los métodos constructores (puede haber más de un constructor definido en una clase) es que no necesitan definir ningún valor de retorno, pues debido a que se utiliza para crear objetos de ese tipo de clase, se sobreentiende que devolverá un objeto de tipo ese tipo. Por el mismo motivo no es necesario poner una instrucción return al final. Para crear un objeto de una determinada clase es necesario utilizar la palabra reservada new, seguida por el nombre de la clase. El constructor se utilizaría de la siguiente manera:
// Creamos un coche, utilizando el método constructor de la clase Coche
Coche coche1 = new Coche("1600RM", "Audi", "A5", "Diesel");