Scala combina características avanzadas de programación funcional y orientada a objetos. La POO en Scala permite estructurar el código usando clases, objetos, herencia, traits, y otros principios fundamentales de este paradigma, lo que hace que sea un lenguaje robusto y flexible tanto para aplicaciones pequeñas como grandes.


Clases en Scala

Declaración de una Clase

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

val persona = new Persona("Juan", 30)
persona.saludar() // Salida: Hola, soy Juan y tengo 30 años.

Clases con Constructor Secundario

Scala permite la definición de constructores secundarios para inicializar objetos de maneras alternativas, proporcionando flexibilidad en la creación de instancias.

class Persona(val nombre: String, val edad: Int) {
  def this(nombre: String) = this(nombre, 0) // Constructor secundario
}

val persona = new Persona("Ana")
println(s"Nombre: ${persona.nombre}, Edad: ${persona.edad}") // Salida: Nombre: Ana, Edad: 0


Objetos Singleton

Un objeto en Scala es una clase que tiene exactamente una instancia. Se utiliza comúnmente para definir puntos de entrada, métodos utilitarios o valores constantes que no dependen de instancias.

Ejemplo de Objeto Singleton

object Utilidades {
  def saludar(): Unit = {
    println("Hola desde Utilidades.")
  }
}

Utilidades.saludar() // Salida: Hola desde Utilidades.

Los objetos singleton también pueden contener funciones relacionadas con operaciones estáticas o utilidades comunes, evitando la necesidad de crear instancias para su uso.


Herencia

Scala soporta herencia simple, donde una clase puede extender otra clase. Esto permite reutilizar comportamientos y extender funcionalidades sin duplicar código.

Ejemplo de Herencia