Skip to content

2.3 Objetos y Clases

Características de los objetos

En este contexto, un objeto de software es una representación de un objeto del mundo real, compuesto de una serie de características y un comportamiento específico. Pero ¿qué es más concretamente un objeto en Programación Orientada a Objetos?

Definición de objeto

Un objeto es un conjunto de datos con las operaciones definidas para ellos. Los objetos tienen un estado y un comportamiento.

Por tanto, estudiando los objetos que están presentes en un problema podemos dar con la solución a este. Los objetos tienen unas características fundamentales que los distinguen:

  • Identidad. Es la característica que permite diferenciar un objeto de otro. De esta manera, aunque dos objetos sean exactamente iguales en sus atributos, son distintos entre sí. Puede ser una dirección de memoria, el nombre del objeto o cualquier otro elemento que utilice el lenguaje para distinguirlos. Por ejemplo, dos vehículos que hayan salido de la misma cadena de fabricación y sean iguales aparentemente, son distintos porque tienen un código que los identifica.
  • Estado. El estado de un objeto viene determinado por una serie de parámetros o atributos que lo describen, y los valores de éstos. Por ejemplo, si tenemos un objeto Coche, el estado estaría definido por atributos como Marca, Modelo, Color, Cilindrada, etc.
  • Comportamiento. Son las acciones que se pueden realizar sobre el objeto. En otras palabras, son los métodos o procedimientos que realiza el objeto. Siguiendo con el ejemplo del objeto Coche, el el comportamiento serían acciones como: arrancar(), parar(), acelerar(), frenar(), etc.

Propiedades y métodos de los objetos

Como acabamos de ver todo objeto tiene un estado y un comportamiento. Concretando un poco más, las partes de un objeto son:

  • Campos, Atributos o Propiedades: Parte del objeto que almacena los datos. También se les denomina Variables Miembro. Estos datos pueden ser de cualquier tipo primitivo (boolean, char, int, double, etc) o ser a su vez otro objeto.

Por ejemplo, un objeto de la clase Coche puede tener un objeto de la clase Ruedas (o más concretamente cuatro).

  • Métodos o Funciones Miembro: Parte del objeto que lleva a cabo las operaciones sobre los atributos definidos para ese objeto.

La idea principal es que el objeto reúne en una sola entidad los datos y las operaciones, y para acceder a los datos privados del objeto debemos utilizar los métodos que hay definidos para ese objeto.

Manipular los objetos mediante métodos

La única forma de manipular la información del objeto es a través de sus métodos; si queremos saber el valor de algún atributo, tenemos que utilizar el método que nos muestre el valor de ese atributo. Así, evitamos que métodos externos puedan alterar los datos del objeto de manera inadecuada. Se dice que los datos y los métodos están encapsulados dentro del objeto.

Atributos

Los atributos representan la información que almacenan los objetos de la clase. Los atributos son declaraciones de variables dentro de la clase.

Se sigue la siguiente sintaxis (los corchetes indican opcionalidad):

[ámbito] tipo nombreDelAtributo;
[ámbito] tipo nombreDelAtributo1, nombreDelAtributo2, ...;

donde:

  • ámbito permite indicar desde qué clases es accesible el atributo.
  • tipo indica el tipo de dato del atributo.
  • nombreDelAtributo es el identificador del atributo.

Métodos

Los métodos determinan qué puede hacer un objeto de la clase, es decir, su comportamiento.

Los métodos realizan algún tipo de acción o tarea y, en ocasiones, devuelven un resultado.

Para realizar su trabajo puede ser necesario que pasemos al método cierta información. Por ejemplo, cuando llamamos al método round de la clase Math, para redondear un número real, debemos indicar al método cual es el número que queremos redondear. A esa información que pasamos a los métodos se le llama parámetros o argumentos.

1
2
3
4
5
6
7
8
//Al llamar a Math.round, pasamos al método un parámetro 
int redondeado1 = Math.round(numero);
int redondeado2 = Math.round(125.687);
...
//Al llamar a Math.pow, pasamos al método dos parámetros
int pot1 = Math.pow(a,b);
int pot2 = Math.pow(a,6);
...

En la definición de un método se distinguen dos partes:

  • La cabecera, en la cual se indica información relevante sobre el método.
  • El cuerpo, que contiene las instrucciones mediante las cuales el método realiza su tarea.

Para definirlos, se sigue la siguiente sintaxis (los corchetes indican opcionalidad):

1
2
3
4
5
6
7
[ámbito] [static] tipoDevuelto nombreDelMetodo ([parámetros])  //Cabecera del método
{
    //Cuerpo del método (instrucciones)
    ...
    ...
    ...
}

donde:

  • ámbito permite indicar desde qué clases es accesible el método.
  • static, cuando aparece, indica que el método es estático.
  • tipoDevuelto indica el tipo de dato que devuelve el método. La palabra reservada void (que no es ningún tipo de dato) indicaría que el método no devuelve nada.
  • nombreDelMetodo es el identificador del método.
  • parámetros es una lista, separada por comas, de los parámetros que recibe el método. De cada parámetro se indica el tipo y un identificador.

Interacción entre objetos

Dentro de un programa los objetos se comunican llamando unos a otros a sus métodos. Los métodos están dentro de los objetos y describen el comportamiento de un objeto cuando recibe una llamada a uno de sus métodos. En otras palabras, cuando un objeto, objeto1, quiere actuar sobre otro, objeto2, tiene que ejecutar uno de sus métodos. Entonces se dice que el objeto2 recibe un mensaje del objeto1.

Un mensaje es la acción que realiza un objeto. Un método es la función o procedimiento al que se llama para actuar sobre un objeto.

Los distintos mensajes que puede recibir un objeto o a los que puede responder reciben el nombre de protocolo de ese objeto.

El proceso de interacción entre objetos se suele resumir diciendo que se ha "enviado un mensaje" (hecho una petición) a un objeto, y el objeto determina "qué hacer con el mensaje" (ejecuta el código del método). Cuando se ejecuta un programa se producen las siguientes acciones:

  • Creación de los objetos a medida que se necesitan.
  • Comunicación entre los objetos mediante el envío de mensajes unos a otros, o el usuario a los objetos.
  • Eliminación de los objetos cuando no son necesarios para dejar espacio libre en la memoria del computador.

Cómo interactuan los objetos

Los objetos se pueden comunicar entre ellos invocando a los métodos de los otros objetos.

Clases

Hasta ahora hemos visto lo que son los objetos. Un programa informático se compone de muchos objetos, algunos de los cuales comparten la misma estructura y comportamiento. Si tuviéramos que definir su estructura y comportamiento del objeto cada vez que queremos crear un objeto, estaríamos utilizando mucho código redundante. Por ello lo que se hace es crear una clase, que es una descripción de un conjunto de objetos que comparten una estructura y un comportamiento común. Y a partir de la clase, se crean tantas "copias" o "instancias" como necesitemos. Esas copias son los objetos de la clase.

Una clase java se escribe en un fichero con extensión .java que tiene el mismo nombre que la clase. Por ejemplo la clase Vehículo se escribiría en el fichero Vehiculo.java.

Cuando la clase se compila se obtiene un fichero con el mismo nombre que la clase y extensión .class. Ejemplo: Vehiculo.class.

Cómo nombrar los identificadores de clase

Los identificadores de clase siguen las mismas reglas que otros identificadores de Java (contienen carácter alfanuméricos y especiales, no pueden comenzar por un dígito, no pueden coincidir con una palabra reservada, etc.). Por convenio los identificadores de las clases comienzan por mayúsculas (UpperCamelCase).

Estructura de clases

Las clases constan de datos y métodos que resumen las características comunes de un conjunto de objetos. Un programa informático está compuesto por un conjunto de clases, a partir de las cuales se crean objetos que interactúan entre sí.

En otras palabras, una clase es una plantilla o prototipo donde se especifican:

  • Los atributos comunes a todos los objetos de la clase.
  • Los métodos que pueden utilizarse para manejar esos objetos.

Para declarar una clase en Java se utiliza la palabra reservada class. La declaración de una clase está compuesta por:

  • Cabecera de la clase. La cabecera es un poco más compleja que como la definimos aquí, pero por ahora sólo nos interesa saber que está compuesta por una serie de modificadores, en este caso hemos puesto public que indica que es una clase pública a la que pueden acceder otras clases del programa, la palabra reservada class y el nombre de la clase.
  • Cuerpo de la clase. En él se especifican encerrados entre llaves los atributos y los métodos que va a tener la clase.

Ejemplo:

//Paquete al que pertenece la clase
package NombreDePaquete;

//Paquetes que importa la clase
import ...

...

public class NombreDeLaClase {
    // Atributos de la clase
    ...
    ...
    // Métodos de la clase
    ...
    ...
}

  • En la unidad anterior ya hemos utilizado clases, aunque aún no sabíamos su significado exacto. Por ejemplo, estábamos utilizando clases; todas ellas eran clases principales, no tenían ningún atributo y el único método del que disponían era el método main().

  • También es una clase Math y su método era random(), el que nos permitía usar números aleatorios.

  • El método main() se utiliza para indicar que se trata de una clase principal, a partir de la cual va a empezar la ejecución del programa. Este método no aparece si la clase que estamos creando no va a ser la clase principal del programa.

¿Qué significa public class?

Significa que la clase que se define es pública. Una clase pública es una clase accesible desde otras clases o, dicho de otra forma, que puede ser utilizada por otras clases. Ya hemos dicho que un programa, de alguna manera, consiste en la creación de objetos de distintas clases, que se relacionan entre sí. Lo más común es que las clases que definimos sean públicas y que en cada fichero de extensión .java se defina una única clase.

Sin embargo, en ocasiones se definen clases (A) que solo van a ser utilizadas por una clase determinada (B). En ese caso, decimos que la clase A es una clase privada de la clase B. Las clases A y B se definen en el mismo fichero .java. En un fichero pueden definirse varias clases pero solo una de ellas puede ser pública. De esta forma, si en un fichero se definen varias clases, una de ellas sería pública y el resto serían clases privadas de la primera, a las que solo ésta tendría acceso.