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");