Concepto y Estructura de un Objeto
En el paradigma de Java, el principio fundamental establece que todo se modela como una entidad operable. Desde la perspectiva de la arquitectura de software, un objeto es un bloque de memoria que encapsula tanto el estado (características) como el copmortamiento (acciones) de una entidad del mundo real.
Relaciones entre Entidades
La interacción y estructura de los objetos se definen mediante tres tipos principales de relaciones:
- Herencia (Is-a): Establece una jerarquía donde una entidad es un tipo específico de otra. Por ejemplo, un
Perroes unAnimal. - Composición (Has-a): Indica que una entidad está formada por otras más pequeñas. Un
Vehículotiene unMotoryRuedas. - Dependencia (Use-a): Refleja una interacción temporal donde una entidad utiliza a otra para realizar una tarea. Un
Conductorusa unVehículo.
Definición y Componentes de una Clase
Las clases actúan como planos o plantillas que definen las características y comportamientos comunes. Mientras que la clase es la abstracción lógica, el objeto es la materialización concreta en memoria. Una misma plantilla puede generar múltiples instancias independientes.
Atributos (Variables de Instancia)
Definen el estado del objeto. Se declaran dentro de la clase pero fuera de cualquier método. A diferencia de las variables locales, los atributos tienen valores por defecto y su alcance abarca toda la clase.
| Característica | Variable Local | Atributo de Instancia |
|---|---|---|
| Ubicación | Dentro de un método | Dentro de la clase, fuera de métodos |
| Valor por defecto | No posee (debe inicializarse) | Sí posee (0, null, false) |
| Ciclo de vida | Limitado al bloque de código | Vinculado a la vida del objeto |
Métodos
Definen el comportamiento y la lógica de negocio. Su estructura incluye un modificador de acceso, tipo de retorno, identificador y lista de parámetros.
package com.empresa.modelo;
public class Empleado {
String nombreCompleto;
int edad;
String cargo;
double salario;
public void trabajar() {
System.out.println("Ejecutando tareas diarias...");
}
public void asistirReunion() {
System.out.println("Participando en la reunión de equipo.");
}
}
Instanciación y Manipulación de Objetos
Para materializar un objeto, se utiliza el operador new seguido del nombre de la clase. El acceso a sus miembros se realiza mediante el operador punto (.).
Empleado emp1 = new Empleado();
emp1.nombreCompleto = "Ana García";
emp1.edad = 28;
emp1.cargo = "Ingeniera de Software";
emp1.salario = 4500.0;
System.out.println(emp1.nombreCompleto);
emp1.trabajar();
Constructores
Son bloques de código especiales diseñados exclusivamente para la inicialización de objetos. No tienen tipo de retorno y su nombre debe coincidir exactamente con el de la clase. Si no se define ninguno, el compilador inyecta un constructor vacío por defecto; sin embargo, al declarar explícitamente al menos uno, el implícito desaparece.
public class Empleado {
public String nombreCompleto;
public int edad;
public String cargo;
public double salario;
// Constructor sin parámetros
public Empleado() {}
// Constructor parametrizado
public Empleado(String nombre, int edad, String cargo, double salario) {
this.nombreCompleto = nombre;
this.edad = edad;
this.cargo = cargo;
this.salario = salario;
}
}
Composición de Objetos en Código
La relación "Has-a" se implementa declarando un objeto como atributo de otro.
public class Gerente {
public String nombre;
public String especialidad;
public Gerente(String nombre, String especialidad) {
this.nombre = nombre;
this.especialidad = especialidad;
}
}
public class Departamento {
public String nombreDepto;
public int numeroEmpleados;
public Gerente lider; // Relación de composición
public Departamento(String nombreDepto, int numeroEmpleados) {
this.nombreDepto = nombreDepto;
this.numeroEmpleados = numeroEmpleados;
}
}
public class SistemaRRHH {
public static void main(String[] args) {
Gerente jefe = new Gerente("Carlos Ruiz", "Finanzas");
Departamento finanzas = new Departamento("Finanzas", 15);
finanzas.lider = jefe;
System.out.println("Departamento: " + finanzas.nombreDepto +
" | Gerente: " + finanzas.lider.nombre);
}
}
Sobrecarga de Métodos
Permite definir múltiples métodos con el mismo nombre en una misma clase, siempre que difieran en la cantidad, tipo u orden de sus parámetros. El tipo de retorno y los modificadores de acceso no influyen en la firma para la sobrecarga.
Uso de la Palabra Clave this
El identificador this es una referencia implícita al objeto actual que está ejecutando el método.
this.atributo: Resuelve ambigüedades cuando un parámetro local oculta a un atributo de instancia con el mismo nombre.this(...): Invoca a otro constructor dentro de la misma clase. Debe ser la primera instrucción ejecutable y no puede generar llamadas cíclicas.
public Empleado(String nombreCompleto, int edad) {
this.nombreCompleto = nombreCompleto; // Diferencia atributo de parámetro
this.edad = edad;
}
public Empleado() {
// Llamada a otro constructor de la misma clase
this("Desconocido", 0, "Sin cargo", 0.0);
}
Fases de Creación de un Objeto en Memoria
El proceso de instanciación sigue un flujo estricto de asignación de valores:
- Asignación de memoria: Se reserva espacio en el Heap y se asignan los valores por defecto del sistema (0, null, false).
- Inicialización explícita: Se asignan los valores iniciales si fueron declarados directamente en la definición de los atributos.
- Ejecución del constructor: Se ejecuta el bloque del constructor para establecer el estado final y personalizado del objeto.