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.
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.
val y var: Los parámetros del constructor son automáticamente atributos de la clase si se declaran como val o var.def.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
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.
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.
Scala soporta herencia simple, donde una clase puede extender otra clase. Esto permite reutilizar comportamientos y extender funcionalidades sin duplicar código.