Ir al contenido principal

Clases y objetos en Scala

En este tutorial, aprenderás los conceptos fundamentales de la programación orientada a objetos en Scala: clases y objetos.
Actualizado 17 sept 2026  · 8 min leer

Explorar con IA

ChatGPTClaudePerplexity

DataCamp ha lanzado recientemente su primer curso de Scala: Introduction to Scala. ¡Échale un vistazo!

Además, te recomendamos estos tutoriales:

Introducción

diagrama de conceptos de POO
Fuente

En general, la programación orientada a objetos (POO) se basa en clases y objetos, y busca modelar entidades del mundo real, como el polimorfismo o la herencia.

La POO acelera el desarrollo, reduce costes y mejora el mantenimiento del software. La clave está en sus características: dispones de clases y objetos que puedes reutilizar fácilmente según las necesidades, a diferencia de un programa sin clases ni objetos. Esto se traduce en software de mayor calidad, extensible con nuevos métodos y atributos.

Imagina que tienes un concesionario de coches. Cada pocos meses sale un modelo nuevo y, para informar a tu audiencia de su nombre y características, tendrías que definir métodos y atributos desde cero. Sin embargo, si tu programa es orientado a objetos y ya tienes una clase coche, solo tendrías que crear un objeto para ese modelo nuevo que haga uso de los métodos y atributos de la clase con la información del vehículo.

Una clase puede entenderse como la representación o el plano de los objetos. Las clases suelen tener sus propios métodos (comportamiento) y atributos.

Los atributos son elementos que diferencian unos objetos de otros y determinan sus cualidades. Los métodos, por su parte, funcionan de forma parecida a una función en programación: definen cómo se comporta la instancia de la clase. Gracias a los métodos (el comportamiento), podemos "hacer cosas" con los objetos.

Fuente

La figura anterior ayuda a entender el flujo de la programación orientada a objetos y, en concreto, cómo se ve una clase. En la imagen hay una class car con attributes: fuel, max speed y podría tener más, como model, make, etc. También incluye varios methods como refuel(), getFuel(), setSpeed(), y otros posibles como change gear, start the engine, stop the engine, etc.

Cuando hablas de un coche concreto, trabajas con un objeto, que es una instancia de una clase.

Ahora, hablemos de la programación orientada a objetos en Scala.

Clases y objetos en Scala

Al igual que en C++ y Java, la programación orientada a objetos en Scala sigue convenciones muy similares. Tiene el concepto de definir classes y objects y, dentro de la clase, constructors. Eso es, en esencia, la POO en Scala.

Declaración de clases

class Class_name{
// methods and attributes
}

En Scala, una clase se define con la palabra clave class seguida del nombre de la clase, que por convención empieza con mayúscula. Hay algunas partes opcionales que pueden aparecer en la declaración de una clase en Scala: class-name, que debería comenzar en mayúscula; superclass, el nombre de la clase padre precedido por la palabra clave extend; y traits, una lista separada por comas implementada por la clase y también precedida por extend.

Una clase en Scala solo puede heredar de una única clase padre; es decir, Scala no admite herencia múltiple. No obstante, se puede lograr un efecto similar con el uso de Traits.

Por último, el cuerpo de una clase en Scala va entre llaves {}.

// Name of the class is Car
class Car
{

    // Class variables
    var make: String = "BMW"
    var model: String = "X7"
    var fuel: Int = 40

    // Class method
    def Display()
    {
        println("Make of the Car : " + make);
        println("Model of the Car : " + model);
        println("Fuel capacity of the Car : " + fuel);
    }
}
object Main  
{

    // Main method
    def main(args: Array[String])  
    {

        // Class object
        var obj = new Car();
        obj.Display();
    }
}

Puedes guardar el código anterior con el nombre class.scala y ejecutarlo en la terminal con scala class.scala. Deberías ver una salida como la siguiente.

salida

Ahora bien, este código no aprovecha realmente las ventajas de un programa orientado a objetos. La salida será siempre la misma por muchas veces que lo ejecutes. Has definido variables estáticas dentro de la clase, y sus valores permanecerán constantes incluso si creas infinitos objetos nuevos. En resumen, no puedes esperar que te dé información de un Mercedes-Benz o un Ferrari.

Constructor en Scala

Los constructores se usan principalmente para inicializar el estado del objeto. Esta inicialización ocurre en el momento de crear el objeto y se ejecuta solo una vez.

En Scala hay dos tipos de constructores: Primary y Auxiliary. En este tutorial verás el constructor primario (Fuente: O'Reilly).

class Class_name(Parameter_list){
// methods, attributes
}

El constructor primario comparte cuerpo con la clase y se crea de forma implícita junto con la definición de la clase. Comienza en la definición de la clase y abarca todo su cuerpo. Además, cuando solo hay un constructor en el programa Scala, se considera el constructor primario. Puede definirse con cero, uno o más parámetros.

Retomemos el ejemplo anterior, pero esta vez añadiendo el constructor primario para ver el efecto.

Aquí también verás otra característica de las clases: una misma clase puede tener múltiples objetos o instancias, independientes entre sí.

// Name of the class is Car
class Car(make: String, model: String, fuel: Int)
{

    // Class method
    def Display()
    {
        println("Make of the Car : " + make);
        println("Model of the Car : " + model);
        println("Fuel capacity of the Car : " + fuel);
    }
}

object Main

{

    // Main method
    def main(args: Array[String])  
    {

        // Multiple Class object
        var obj1 = new Car("BMW", "X7", 40);
        var obj2 = new Car("Mercedes Benz", "S350D", 50);
        obj1.Display();
        obj2.Display();
    }
}

Veamos rápidamente la salida:

salida

¿A que está bien? Con la ayuda de un constructor has podido obtener resultados mucho más útiles.

Declaración de objetos en Scala

Declarar objetos en Scala también se conoce como instanciar o invocar una clase. Al igual que las clases, los objetos son una unidad fundamental de la programación orientada a objetos.

Un objeto puede tener tres características (Fuente: GeeksforGeeks):

  • State: los atributos de un objeto lo representan y reflejan sus propiedades.
  • Behavior: los métodos de un objeto lo representan y reflejan cómo responde ante otros objetos.
  • Identity: proporciona un nombre único al objeto y permite que interactúe con otros objetos.

Considera un perro como objeto y fíjate en el siguiente diagrama para ver su identidad, estado y comportamiento.

diagrama
(Fuente)

Todas las instancias u objetos comparten los atributos y métodos de la clase. Una sola clase puede tener múltiples objetos, como has visto aquí. Sin embargo, el estado o los valores de cada objeto son únicos.

Para terminar, escribirás un código que combine constructores primarios, variables de clase, atributos y métodos en un único ejemplo.

A continuación tienes una representación gráfica de los componentes reunidos en la clase Motorcycle.

componentes de la clase

El siguiente código se explica casi solo; a grandes rasgos, comprueba si el motor de la moto está on o off. Inicialmente, el motor está apagado, el programa te lo indica y lo enciende.

class Motorcycle(make:String,color:String) {


       var engineState: Boolean = false;

       def startEngine() {
          if (engineState == true){
            println("The engine is already on.");
          }
          else {
            engineState = true
            println("The engine is now on.");
         }
       }

       def showAtts() {
         println("This motorcycle is a "+ color + " " + make);
         if (engineState == true){
           println("The engine is on.");
         }
         else{
            println("The engine is off.");
         }
      }

}
object Main
{
    def main (args: Array[String])
    {
        var m = new Motorcycle("BMW K 1600 GTL","White");
        println("Calling showAtts...");
        m.showAtts();
        println("------");
        println("Starting engine...");
        m.startEngine();
        println("------");
        println("Calling showAtts...");
        m.showAtts();
        println("------");
        println("Starting engine...");
        m.startEngine();
    }
}
diagrama

¡Enhorabuena!

Enhorabuena por completar este tutorial.

Ya sabes cómo declarar clases y métodos, instanciar objetos, establecer sus atributos y llamar a métodos de instancia en Scala. Estos conceptos te serán útiles no solo en Scala, sino también en otros lenguajes de programación.

Los conceptos de programación orientada a objetos son interesantes y, al mismo tiempo, muy potentes. Aportan una nueva dimensión a tu código y fomentan la reutilización. A medida que tu programa crece, también lo hace la complejidad de tu código. Hay mucho contenido en POO: herencia, polimorfismo, métodos de instancia… Otra característica muy potente es el patrón Singleton. Los principios de diseño ayudan a mantener tu código más estructurado y legible. Para profundizar en patrones de diseño, te recomendamos este libro.

Si tienes cualquier duda sobre este tutorial, déjala en los comentarios.

Y no olvides hacer el nuevo curso de Scala en DataCamp, Introduction to Scala.

Temas
Scala

Aprende más sobre Scala

Curso

Introducción a Scala

3 h
27.1K
Comienza tu viaje con Scala, un lenguaje popular para aplicaciones escalables e infraestructura de ingeniería de datos.
Ver detallesRight Arrow
Iniciar Curso
Ver másRight Arrow
Relacionado

Tutorial

Programación orientada a objetos (POO) en Python: Tutorial

Aborda los fundamentos de la Programación Orientada a Objetos (POO) en Python: explora las clases, los objetos, los métodos de instancia, los atributos y ¡mucho más!
Théo Vanderheyden's photo

Théo Vanderheyden

12 min

SQLAlchemy_Tutorial.

Tutorial

Tutorial de SQLAlchemy con ejemplos

Aprende a acceder y ejecutar consultas SQL en todo tipo de bases de datos relacionales utilizando objetos Python.
Abid Ali Awan's photo

Abid Ali Awan

13 min

Tutorial

Programación funcional frente a programación orientada a objetos en el análisis de datos

Explore dos de los paradigmas de programación más utilizados en la ciencia de datos: la programación orientada a objetos y la programación funcional.
Amberle McKee's photo

Amberle McKee

15 min

Tutorial

Cómo escribir un Bash Script: Un sencillo tutorial de Bash Scripting

Descubre los fundamentos de las secuencias de comandos bash y aprende a escribir una secuencia de comandos bash.
Kurtis Pykes 's photo

Kurtis Pykes

5 min

Tutorial

Tutorial sobre clasificación bayesiana ingenua con Scikit-learn

Aprende a crear y evaluar un clasificador Naive Bayes utilizando el paquete Scikit-learn de Python.
Abid Ali Awan's photo

Abid Ali Awan

13 min

Tutorial

Tutorial de Python sobre conjuntos y teoría de conjuntos

Aprende sobre los conjuntos en Python: qué son, cómo crearlos, cuándo usarlos, funciones incorporadas y su relación con las operaciones de la teoría de conjuntos.
DataCamp Team's photo

DataCamp Team

13 min

Ver MásVer Más