Lecciones del módulo (1/2)
Clases y Objetos
Java es un lenguaje centrado en la Programación Orientada a Objetos (OOP). En la OOP, modelamos el mundo real utilizando objetos. Un objeto posee un estado (los datos) y comportamientos (las acciones).
Clases y Objetos
- Clase: Es un modelo (o blueprint) que define las características y el comportamiento de un tipo de objeto.
- Objeto: Es una instancia concreta creada a partir de una clase.
Por ejemplo, si Car es la clase, tu automóvil en el garaje es el objeto real.
Campos de Instancia y Constructores
Los datos dentro de una clase se denominan campos de instancia (o atributos). Para inicializar el estado de un objeto en el momento de su creación, se utiliza un método especial llamado constructor.
Un constructor tiene el mismo nombre que la clase y no tiene tipo de retorno (ni siquiera void).
class Dog {
// Campi istanza
String name;
int age;
// Costruttore
public Dog(String name, int age) {
this.name = name; // 'this' fa riferimento al campo dell'oggetto corrente
this.age = age;
}
}
Crear un Objeto con new
Para crear un objeto en memoria, usamos la palabra clave new seguida del constructor de la clase:
public class Main {
public static void main(String[] args) {
// Creazione di un oggetto Dog
Dog myDog = new Dog("Fido", 3);
// Accesso ai campi
System.out.println(myDog.name + " ha " + myDog.age + " anni.");
}
}
La Referencia this
La palabra clave this en Java hace referencia al objeto actual sobre el cual se ejecuta el constructor o un método. Se utiliza principalmente para evitar ambigüedades cuando los parámetros del constructor tienen el mismo nombre que los campos de instancia del objeto (sombreado de variables):
class User {
String username;
public User(String username) {
this.username = username; // this.username è il campo istanza, username è il parametro
}
}
Asignación de Memoria: Stack vs Heap
Comprender cómo asigna Java la memoria es fundamental:
- Stack: Es un área de memoria rápida y organizada donde se almacenan las variables primitivas y las referencias a los objetos (direcciones de memoria) locales dentro de los métodos.
- Heap: Es un área de memoria más grande y dinámica donde se asignan los objetos reales (con la palabra clave
new).
Cuando declaramos Dog myDog = new Dog("Fido", 3);:
- La referencia
myDogse crea en el Stack. - El objeto real
Dogcon sus datos se crea en el Heap. - La variable
myDogapunta a la ubicación del objeto en el Heap.
Pruébalo tú
Completa la clase Person agregando el campo name y un constructor apropiado. Luego, en el main crea un objeto Person llamado p con el nombre Alice.
Mostrar pista
Escribe `String name;` dentro de la clase, declara el constructor `public Person(String name) { this.name = name; }` e instancialo con `new Person('Alice')`.
Solución disponible después de 3 intentos
Crea una clase Book con los campos title (String) y pages (int), un constructor completo, e instancia en el main un libro llamado b con título Moby Dick y 600 páginas.
Mostrar pista
Recuerda definir ambos campos en Book, mapearlos en el constructor usando `this.title = title;` y `this.pages = pages;`, y usar `new Book('Moby Dick', 600)`.
Solución disponible después de 3 intentos
Crea una clase Product con los campos name (String) y price (double), y un constructor que inicialice ambos campos. En el main, crea un objeto Product llamado p con el nombre Laptop y precio 999.99.
Mostrar pista
Declara los campos `String name;` y `double price;` en Product, asígnalos en el constructor con `this.name = name;` y `this.price = price;`, y finalmente crea el objeto en el main.
Solución disponible después de 3 intentos