¡Esta es una revisión vieja del documento!
Tabla de Contenidos
Clases y Objetos
La utilización de clases y objetos (o instancia de clase) es uno de los pilares de la programación orientada a objetos (POO). Debemos aprender a emplear ambos términos de una forma exacta. Los objetos pueden guardar relación con las cosas que tenemos en la vida real, pero nunca serán elementos de la vida real. Sin embargo nos pueden servir para representar esos elementos concretos de una forma abstracta dentro de un programa. La abstracción es algo esencial en la programación orientada a 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.
Ejemplo de sobrecarga de método indexOf()
de la clase String:
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 athis
, 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 palabraclass
, define una clase abstracta pura, se conocen como interfaces.implements
: similar aextends
, se usa para indicar de qué interfaces se hereda.
© 2025 Fernando Valdeón