Tema 1: Introducción a la programación en Java y Estructura de Datos
Resumen Ejecutivo
Esta unidad introduce el paradigma de la Programación Orientada a Objetos (POO) utilizando Java, destacando su robustez y portabilidad gracias a la Máquina Virtual de Java (JVM). Se definen los pilares fundamentales: Clases (moldes), Objetos (entidades), Atributos (datos) y Métodos (comportamiento), diferenciándolos de la programación estructurada clásica. Finalmente, se abordan las estructuras de control básicas (bucles y condicionales) y la organización del código mediante paquetes y modificadores de acceso para garantizar el principio de ocultación.
Conceptos Clave
- POO (Programación Orientada a Objetos): Paradigma que organiza el software en objetos que agrupan datos y comportamiento.
- JVM (Java Virtual Machine): Máquina virtual que interpreta el bytecode, permitiendo que Java se ejecute en cualquier sistema operativo.
- Clase: Plantilla o molde que define la forma y comportamiento de un objeto.
- Instancia (Objeto): Entidad única creada a partir de una clase que ocupa memoria.
- Tipado Fuerte: Característica de Java donde las variables deben definirse con un tipo de dato específico que no cambia.
- Constructor: Método especial utilizado para inicializar un objeto.
- Encapsulamiento (Ocultación): Principio de proteger los atributos haciéndolos privados y accediendo a ellos vía métodos (Getters/Setters).
Desarrollo del Temario
1. Introducción a Java y su Entorno
Java es un lenguaje de propósito general, fuertemente tipado y orientado a objetos. Aunque Python ha ganado popularidad recientemente debido al auge de la IA y su facilidad de uso, Java sigue siendo líder en robustez y rapidez frente a lenguajes interpretados.
Características Principales:
- Portabilidad (WORA - Write Once, Run Anywhere): El código fuente (
.java) se compila a un código intermedio llamado Bytecode (.class). Este bytecode es interpretado por la JVM, lo que permite ejecutar el mismo programa en Windows, Linux o Mac sin recompilar. - Robustez: Al ser fuertemente tipado (tipado estático), muchos errores se detectan en tiempo de compilación y no de ejecución.
- Gestión de Memoria: A diferencia de C, Java utiliza un Garbage Collector (recolector de basura) que libera automáticamente la memoria no utilizada.
2. Paradigmas: Estructurada vs. Orientada a Objetos (POO)
Es vital entender el cambio de mentalidad de C (estructurado) a Java (POO).
-
Programación Estructurada (Ej. Robot Tonto):
"Imagina que tienes que decirle a un robot paso a paso: 've a la cocina', 'abre la nevera', 'saca la leche'. Es una lista de instrucciones secuenciales."
- Datos y funciones están separados.
- Ideal para programas simples.
-
Programación Orientada a Objetos (Ej. Robot Inteligente):
"Creas un objeto Robot que ya sabe caminar y abrir la nevera. Tiene esos métodos dentro de él. No le das instrucciones paso a paso, sino que interactúas con él."
- Los objetos combinan datos y comportamiento.
- Permite reutilización de código y modelado de sistemas complejos.
3. Conceptos Fundamentales: Clases y Objetos
La Analogía del Molde (Clase) y la Galleta (Objeto)
Esta es la distinción más importante del tema:
- La Clase (El Molde): Es la definición abstracta. Define qué ingredientes (atributos) y forma tendrá la galleta, pero no se puede comer.
- El Objeto (La Galleta): Es la materialización del molde. Puedes crear infinitas galletas (objetos) con el mismo molde, pero cada una puede tener sabores diferentes (valores de atributos distintos).
Ejemplo Práctico: Clase Perro
- Atributos (Cosas que sabe/es): Nombre, Color, Edad.
- Métodos (Cosas que hace): Ladrar, Comer, Correr.
- Instancias (Objetos concretos):
- Objeto 1: "Toby", Marrón, 3 años.
- Objeto 2: "Luna", Blanca, 5 años.
Nota del Profesor: Los métodos (acciones) no se repiten en memoria por cada objeto. Residen en la clase y los objetos "tiran" de ellos cuando los necesitan. Lo que sí es único para cada objeto son sus atributos (datos).
4. Estructura del Código en Java
Paquetes (Packages)
Son "carpetas" para organizar las clases. Por convención se escriben en minúsculas.
- Ejemplo:
package calculator;
Definición de Clase
Se utiliza class y el nombre en PascalCase (PrimeraLetraMayuscula). El nombre debe representar lo que hace la clase (ej. Vehiculo, no Manzana).
package calculator;
public class Complex { // Clase pública
// Atributos y métodos irán aquí
}
Modificadores de Acceso (¡OJO AL DATO!)
Definen la visibilidad de clases, métodos y atributos. Es un punto crítico de examen.
| Modificador | Visibilidad | Explicación |
|---|---|---|
| public | Total | Accesible desde cualquier clase y cualquier paquete. |
| protected | Heredada/Paquete | Accesible por clases del mismo paquete y subclases (hijos). |
| default | Paquete | (Si no se escribe nada) Solo accesible desde el mismo paquete. |
| private | Clase | El más restringido. Solo accesible desde dentro de la propia clase. |
Aclaración de la sesión:
protectedpermite acceso a clases hijas y vecinos de paquete.privatebloquea incluso a los vecinos del mismo paquete; es exclusivo para la propia clase [transcripción].
5. Elementos de la Clase: Atributos, Métodos y Constructores
Atributos
Variables que guardan el estado del objeto. Se definen con tipo y nombre (lowerCamelCase).
- Principio de Ocultación: Los atributos deben ser
private. No queremos que nadie modifique los datos internos directamente. - Getters y Setters (Analogía del Coche): > "El motor (atributos) está oculto bajo el capó (private). Tú no tocas el motor directamente; usas los pedales (setters) y miras el velocímetro (getters). Esto evita que pongas, por ejemplo, una velocidad negativa.".
Constructores
Es el "botón de la fábrica" que crea el objeto.
- Tiene el mismo nombre que la clase y no tiene tipo de retorno.
- ¡Importante!: Si no defines ningún constructor, Java crea uno por defecto (vacío). Pero si defines un constructor con parámetros, el constructor por defecto desaparece y debes recrearlo manualmente si lo necesitas.
- Uso de
this: Se usa para diferenciar el atributo de la clase del parámetro del método cuando tienen el mismo nombre.
public Complex(double re, double im) {
this.re = re; // 'this.re' es el atributo, 're' es el parámetro
this.im = im;
}
Métodos
Equivalentes a las funciones en C, pero pertenecen a una clase.
- Método Main: Es el punto de entrada. > "Imagina una película. El programa es la peli, los objetos son actores, pero necesitas el botón 'Play' para que arranque. Ese botón es el método main.".
6. Tipos de Datos y Estructuras de Control
Tipos Primitivos vs. Referenciados
- Primitivos (
int,double,boolean): Guardan el valor real en la memoria (stack). Son simples. - Referenciados (Objetos): Guardan una dirección de memoria (referencia) que apunta a donde está el objeto (heap).
Persona p = new Persona();->pes como un "control remoto" para acceder al objeto, no el objeto en sí.
Estructuras de Control
Funcionan de manera muy similar a C:
- Condicionales:
if,if-else, operadores lógicos (&&,||,!). Recordar la evaluación en cortocircuito (si el primero falla en un&&, no se evalúa el segundo). - Bucles:
for: Cuando sabes el número de iteraciones.while: Se repite mientras la condición sea verdadera (evalúa antes).do-while: Garantiza al menos una ejecución (evalúa al final).
Pro-Tip de Eclipse (Sesión Práctica)
Para el examen práctico o desarrollo rápido: No escribas todo a mano.
- Clic derecho en el código ->
Source(oAlt+Shift+S). - Ahí puedes seleccionar "Generate Constructor using Fields" y "Generate Getters and Setters" para escribir el código automáticamente [transcripción].
Preguntas de Autoevaluación
-
¿Qué ocurre con el constructor por defecto si defines explícitamente un constructor con parámetros en tu clase?
- Respuesta: El constructor por defecto desaparece. Si quieres usarlo, debes definirlo explícitamente de nuevo.
-
Si un atributo se define como
private, ¿puede acceder a él una clase que esté en el mismo paquete?- Respuesta: No. El modificador
privaterestringe el acceso únicamente a la propia clase. Ni siquiera las clases del mismo paquete pueden acceder (para eso seríadefaultoprotected).
- Respuesta: No. El modificador
-
¿Cuál es la diferencia principal entre un tipo de dato primitivo (ej.
int) y uno referenciado (ej. un Objeto)?- Respuesta: El primitivo almacena el valor real, mientras que el referenciado almacena la dirección de memoria donde se encuentra el objeto.
-
Según la analogía de clase, ¿cuál es la función de los métodos
GetterySetter?- Respuesta: Actúan como la interfaz pública (pedales/tablero) para interactuar de forma segura con los datos privados (motor) del objeto, permitiendo validaciones (ej. no permitir vida negativa).
-
¿Qué estructura de control garantiza que el código interno se ejecutará al menos una vez?
- Respuesta: El bucle
do-while.
- Respuesta: El bucle