Herramientas de usuario

Herramientas del sitio


bloque4:clasesobjetos

¡Esta es una revisión vieja del documento!


Clases y Objetos

Clase

Objeto

Instanciar una clase: Constructores

Variables de referencia

Modificadores de visibilidad o acceso

Métodos getters y setters

Palabra reservada: this

Sobrecarga de métodos y constructores

El concepto de sobrecarga (overload) consiste en crear varios métodos con el mismo nombre. Aplicado a constructores (todos tienen el mismo nombre) consiste en tener varios constructores. Es un aspecto que se trató en el tema de métodos estáticos

Para que pueda sobrecargar constructores o métodos, cada uno debe diferenciarse de otro en el numero, o tipo de los parámetros que recibe.

Java solo nos permite crear más de un método o constructor con el mismo nombre si el número de parámetros o su tipo, es diferente a los de los demás métodos. El valor de retorno no se toma como dato diferenciador.

Modificador static

Inicialización de atributos de una clase

Desde el punto de vista del lugar donde se declaran existen dos tipos de variables:

  • Variables miembro: Se declaran en una clase, fuera de cualquier método.
  • Variables locales: Se declaran y usan en un bloque de código dentro de un método.

Las variables miembro son inicializadas automáticamente, de la siguiente forma:

  • Las numéricas a 0.
  • Las booleanas a false.
  • Las char al caracter nulo (hexadecimal 0).
  • Las variables de referencia a null.

Las variables miembro pueden inicializarse con valores distintos de los anteriores en su constructor. Las variables locales (de ámbito local) no se inicializan automáticamente. Se les debe asignar un valor antes de ser usadas.

Recolector de basura

Cuando ya no se necesita un objeto simplemente puede dejar de referenciarse. No existe una operación explícita para 'destruir' un objeto o liberar el área de memoria usada por él.

Un objeto deja de referenciarse cuando no hay ninguna variable de referencia dentro del programa que contenga su valor de referencia:

Coche miCoche = new Coche();
miCoche = null; //He perdido el valor de la referencia al objeto
 
//Otro ejemplo:
Coche miCoche = new Coche();
miCoche = new Coche(); //Pierdo la referencia del objeto anterior

Una variable solo puede contener un valor, y cuando no hay nada que guarde la referencia a un objeto, lo habré perdido para siempre.

La liberación de memoria la realiza el recolector de basura (garbage collector), que es una función de la JVM (Java Virtual Machine). El recolector revisa toda el área de memoria del programa y determina qué objetos pueden ser borrados de la memoria porque ya no tienen referencias activas que los apunten.

El recolector de basura actúa cuando la JVM lo determina (tiene un mecanismo de actuación no trivial). No existe un momento concreto en que las áreas de memoria son liberadas, sino que lo determina en cada momento la JVM en función de sus necesidades de espacio.

Clase Object

La clase Object es la clase raíz de la cual heredan todas las clases. Esta herencia es implícita, no es necesario indicarlo en la subclase (mediante extends). Puede que una clase no herede de Object, pero tendrá una superclase que sí lo hace.

La clase Object define una serie de métodos miembro que son heredados por todas las clases. Algunos de estos métodos se redefinen (o sobrescriben) en las clases que definamos.

Encapsulamiento y abstracción

La programación orientada a objetos (POO) es un paradigma de programación basado en unos pilares. Entre ellos podemos encontrar 4 principales: abstracción, encapsulamiento, herencia y polimorfimo.

La abstracción se puede entender como la representación de entidades (pueden ser de la vida real) mediante elementos de un programa. Definimos esos elementos mediante las clases (Coche, Vehiculo, Persona, Pasajero, etc) y los usamos mediante sus objetos.

Además, estos elementos realizan una serie de operaciones, pero nosotros no tenemos por qué saber cómo se realizan están operaciones: el cómo se hace, formará parte de la clase, donde se definen cómo se hacen las cosas. A nosotros una clase nos ofrece una interfaz (métodos) mediante la cual realizar dichas operaciones, sin tener que preocuparnos de entender cómo se hacen o de implementar su funcionamiento cada vez que las usemos. Todo esto se conoce como abstracción.

El concepto de encapsulamiento es otro pilar fundamental de la POO y está ligado a la abstracción. Consiste en aislar los miembros (propiedades y operaciones) del acceso exterior (ponerlos dentro de una clase). Así evitamos que otras partes del programa pueden modificar las propiedades de un objeto de forma errónea, y crearemos una interfaz para trabajar con el objeto y acceder a sus propiedades. Esta interfaz son los métodos. Es la forma en la que el objeto nos permite trabajar con él, sin poder tener acceso a su interior (implementación de operaciones, valor de las propiedades).

La herencia y el polimorfismo se verán más adelante ya que también están ligados entre sí.

Otras palabras reservadas

Las siguientes palabras clave se irán viendo a medida que trabajemos con nuestras clases y ampliando conocimientos:

  • extends : Se usa para indicar cuál es la clase desde la que se hereda.
  • super : similar a this, pero contiene una referencia a la superclase.
  • abstract : modificador para clases o métodos, se usa en las clases abstractas.
  • final : se aplica tanto a variables, clases o métodos, e indica que no se permiten modificar.
  • interface : similar a la palabra class, define una clase abstracta pura, se conocen como interfaces.
  • implements : similar a extends, se usa para indicar de qué interfaces se hereda.

© 2025 Fernando Valdeón

bloque4/clasesobjetos.1520248344.txt.gz · Última modificación: 16/09/2024 20:53 (editor externo)