En este módulo, exploraremos uno de los conceptos fundamentales de la programación orientada a objetos (POO) en Scala: las clases y los objetos. Scala es un lenguaje que combina características de la programación funcional y la programación orientada a objetos, lo que lo hace muy poderoso y flexible.

Objetivos del Módulo

  • Comprender qué son las clases y los objetos en Scala.
  • Aprender a definir y utilizar clases y objetos.
  • Conocer la diferencia entre clases y objetos.
  • Implementar ejemplos prácticos para reforzar los conceptos.

  1. ¿Qué es una Clase?

Una clase es una plantilla o un plano a partir del cual se crean objetos. Define un conjunto de propiedades (atributos) y métodos (funciones) que los objetos creados a partir de la clase pueden tener.

Definición de una Clase

En Scala, una clase se define utilizando la palabra clave class. Aquí hay un ejemplo básico:

class Persona {
  var nombre: String = _
  var edad: Int = _

  def saludar(): Unit = {
    println(s"Hola, mi nombre es $nombre y tengo $edad años.")
  }
}

Explicación del Código

  • class Persona: Define una nueva clase llamada Persona.
  • var nombre: String = _: Declara una variable nombre de tipo String. El guion bajo (_) es un valor por defecto.
  • var edad: Int = _: Declara una variable edad de tipo Int.
  • def saludar(): Unit: Define un método saludar que no devuelve ningún valor (Unit es similar a void en otros lenguajes).

  1. ¿Qué es un Objeto?

Un objeto es una instancia de una clase. Cuando se crea un objeto, se asigna memoria para las variables de la clase y se pueden invocar los métodos definidos en la clase.

Creación de un Objeto

Para crear un objeto en Scala, utilizamos la palabra clave new seguida del nombre de la clase:

val persona1 = new Persona
persona1.nombre = "Juan"
persona1.edad = 30
persona1.saludar()

Explicación del Código

  • val persona1 = new Persona: Crea un nuevo objeto de la clase Persona y lo asigna a la variable persona1.
  • persona1.nombre = "Juan": Asigna el valor "Juan" a la variable nombre del objeto persona1.
  • persona1.edad = 30: Asigna el valor 30 a la variable edad del objeto persona1.
  • persona1.saludar(): Llama al método saludar del objeto persona1, que imprime un saludo en la consola.

  1. Constructores

Los constructores son métodos especiales que se utilizan para inicializar objetos. En Scala, el constructor principal se define junto con la clase.

Constructor Principal

class Persona(var nombre: String, var edad: Int) {
  def saludar(): Unit = {
    println(s"Hola, mi nombre es $nombre y tengo $edad años.")
  }
}

val persona2 = new Persona("Ana", 25)
persona2.saludar()

Explicación del Código

  • class Persona(var nombre: String, var edad: Int): Define un constructor principal que toma dos parámetros: nombre y edad.
  • val persona2 = new Persona("Ana", 25): Crea un nuevo objeto persona2 de la clase Persona y lo inicializa con los valores "Ana" y 25.

  1. Objetos Singleton

En Scala, un objeto singleton es una clase que solo tiene una instancia. Se define utilizando la palabra clave object.

Definición de un Objeto Singleton

object MiSingleton {
  def saludar(): Unit = {
    println("Hola desde el objeto singleton!")
  }
}

MiSingleton.saludar()

Explicación del Código

  • object MiSingleton: Define un objeto singleton llamado MiSingleton.
  • def saludar(): Unit: Define un método saludar dentro del objeto singleton.
  • MiSingleton.saludar(): Llama al método saludar del objeto singleton MiSingleton.

Ejercicios Prácticos

Ejercicio 1: Definir una Clase y Crear un Objeto

Define una clase Coche con las propiedades marca y modelo, y un método detalles que imprima la marca y el modelo del coche. Luego, crea un objeto de la clase Coche y llama al método detalles.

class Coche(var marca: String, var modelo: String) {
  def detalles(): Unit = {
    println(s"Marca: $marca, Modelo: $modelo")
  }
}

val miCoche = new Coche("Toyota", "Corolla")
miCoche.detalles()

Ejercicio 2: Crear un Objeto Singleton

Define un objeto singleton Contador con una variable cuenta y un método incrementar que aumente el valor de cuenta en 1. Luego, llama al método incrementar y muestra el valor de cuenta.

object Contador {
  var cuenta: Int = 0

  def incrementar(): Unit = {
    cuenta += 1
  }
}

Contador.incrementar()
println(s"Cuenta: ${Contador.cuenta}")

Resumen

En esta sección, hemos aprendido sobre las clases y los objetos en Scala. Hemos visto cómo definir clases, crear objetos, utilizar constructores y trabajar con objetos singleton. Estos conceptos son fundamentales para la programación orientada a objetos y nos preparan para explorar temas más avanzados en Scala.

En el próximo módulo, profundizaremos en la herencia y los rasgos, que son características clave de la programación orientada a objetos en Scala.

© Copyright 2024. Todos los derechos reservados