Pular para o conteúdo principal

Classes e objetos em Scala

Neste tutorial, você vai aprender as noções fundamentais de programação orientada a objetos em Scala: classes e objetos.
Atualizado 17 de set. de 2026  · 8 min lido

Explorar com IA

ChatGPTClaudePerplexity

A DataCamp lançou recentemente seu primeiro curso de Scala: Introduction to Scala. Dá uma olhada!

Confira também os seguintes tutoriais:

Introdução

diagrama de conceitos de POO
Fonte

Em geral, a programação orientada a objetos (POO) é composta por classes e objetos e busca representar entidades do mundo real, como polimorfismo e herança.

A POO torna o desenvolvimento muito mais rápido e econômico, além de facilitar a manutenção do software. O principal motivo para isso é o conjunto de recursos que ela oferece: você tem classes e objetos que podem ser facilmente reutilizados no futuro conforme a necessidade, ao contrário de um programa que não usa classes e objetos. Isso leva a um software de maior qualidade, que também é extensível com novos métodos e atributos.

Imagine que você tem um showroom de carros; a cada poucos meses, um novo modelo é lançado e, para informar o público sobre seu nome e seus recursos, você precisaria definir novos métodos e atributos do zero. Porém, se você tiver um programa orientado a objetos com uma classe de carro, tudo o que precisa fazer é criar um objeto para esse novo carro, que vai usar os métodos e atributos da classe com as informações do veículo.

A classe pode ser vista como a representação ou o projeto dos objetos. As classes geralmente têm seus próprios métodos (comportamentos) e atributos.

Os atributos são elementos que diferenciam cada objeto dos demais e determinam várias características de um objeto. Já os métodos funcionam como funções na programação: eles definem como a instância da classe se comporta. É principalmente graças aos métodos (comportamentos) que os objetos podem sofrer ações.

Fonte

A figura acima ajuda a entender melhor o fluxo da programação orientada a objetos ou, de forma mais específica, como é uma classe. Na imagem, há uma class car que possui attributes: fuel, max speed e pode ter mais atributos, como model, make, etc. Ela tem diferentes conjuntos de methods, como refuel(), getFuel(), setSpeed(), e métodos adicionais podem ser change gear, start the engine, stop the engine, etc.

Então, quando você fala de um carro específico, você terá um objeto, que é uma instanciação de uma classe.

Agora, vamos falar sobre programação orientada a objetos em Scala.

Classes e objetos em Scala

Assim como em C++ e Java, a programação orientada a objetos em Scala segue praticamente as mesmas convenções. Ela traz o conceito de definir classes e objects e, dentro da classe, constructors. Essencialmente, é isso que compõe a programação orientada a objetos em Scala.

Declaração de classe

class Class_name{
// methods and attributes
}

Uma classe em Scala é definida pela palavra-chave class, seguida do nome da classe, que geralmente começa com letra maiúscula. Há algumas palavras opcionais que podem ser usadas na declaração de classe em Scala, como: class-name, que deve começar com letra maiúscula; superclass, o nome da classe-pai precedido pela palavra-chave extend; traits, uma lista separada por vírgulas implementada pela classe, também precedida por extend.

Uma classe em Scala pode herdar apenas uma classe-pai, o que significa que Scala não oferece suporte a herança múltipla. No entanto, isso pode ser alcançado com o uso de Traits.

Por fim, o corpo de uma classe em Scala é delimitado por chaves {}.

// 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();
    }
}

Você pode salvar o código acima com o nome class.scala e executá-lo no terminal com scala class.scala. O resultado deverá ser como o mostrado abaixo.

saída

Bem, o código acima não aproveita totalmente os recursos que um programa orientado a objetos oferece. A saída será sempre a mesma, não importa quantas vezes você o execute. Você definiu variáveis estáticas dentro da classe, e os valores dessas variáveis permanecerão constantes, mesmo que você crie infinitos novos objetos. Em outras palavras, não dá para esperar que ele traga detalhes de um Mercedes-Benz ou de uma Ferrari.

Construtor em Scala

Construtores são usados principalmente para inicializar o estado do objeto. Essa inicialização acontece no momento da criação do objeto, e eles são chamados apenas uma vez.

Existem dois tipos de construtores em Scala: Primary e Auxiliary. Neste tutorial, você vai aprender sobre o construtor primário (Fonte: O'Reilly).

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

O construtor primário compartilha o mesmo corpo da classe e é criado implicitamente junto com a definição da classe. Ele começa na definição da classe e abrange todo o corpo da classe. Além disso, quando há apenas um construtor no programa Scala, ele é conhecido como construtor primário. Um construtor primário pode ser definido com zero, um ou mais parâmetros.

Vamos retomar o exemplo anterior, mas agora acrescentando o recurso de construtor primário para observar o efeito.

Aqui você também vai conhecer um novo recurso de uma classe: uma classe pode ter vários objetos ou instâncias, todos independentes entre si.

// 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();
    }
}

Veja rapidamente a saída:

saída

Legal, né? Com a ajuda de um construtor, você conseguiu gerar resultados bem mais úteis.

Declarando objetos em Scala

Declarar objetos em Scala também pode ser chamado de instanciar ou invocar uma classe. Assim como as classes, os objetos são uma unidade fundamental da programação orientada a objetos.

Um objeto pode ter três características (Fonte: GeeksforGeeks):

  • State: os atributos de um objeto o representam. Eles refletem as propriedades desse objeto.
  • Behavior: os métodos de um objeto o representam. Eles refletem como o objeto responde a outros objetos.
  • Identity: dá um nome único ao objeto e permite que ele interaja com outros objetos.

Considere Dog como um objeto e veja, no diagrama abaixo, sua identidade, estado e comportamento.

diagrama
(Fonte)

Todas as instâncias ou objetos compartilham os atributos e métodos da classe. Uma única classe pode ter vários objetos, como você viu aqui. Porém, o estado ou os valores de cada objeto são únicos.

Para finalizar, vamos escrever um código que junta construtores primários, variáveis de classe, atributos e métodos em um único exemplo.

Abaixo está uma representação dos componentes reunidos na classe Motorcycle.

componentes da classe

O código abaixo é bastante autoexplicativo; de forma geral, ele verifica se o motor da moto está on ou off. Inicialmente, o motor está desligado, o programa informa esse estado e então liga o motor.

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

Parabéns!

Parabéns por concluir este tutorial.

Agora você sabe como declarar classes e métodos, instanciar objetos, definir seus atributos e chamar métodos de instância em Scala. Esses conceitos serão úteis não só em Scala, mas também em outras linguagens de programação.

Os conceitos de programação orientada a objetos são interessantes e, ao mesmo tempo, muito poderosos. Eles adicionam uma nova dimensão ao seu código e favorecem a reutilização. À medida que seu programa cresce, o código se torna mais complexo. Há muito conteúdo em POO, como herança, polimorfismo e métodos de instância. Outro recurso poderoso é o Singleton. Princípios de design ajudam a manter seu código mais estruturado e legível. Para saber mais sobre padrões de projeto, considere ler este livro.

Fique à vontade para deixar suas dúvidas sobre este tutorial na seção de comentários abaixo.

Por fim, não esqueça de fazer o novo curso de Scala na DataCamp, Introduction to Scala.

Tópicos
Scala

Saiba mais sobre Scala

Curso

Introdução a Scala

3 h
27.1K
Comece sua jornada com Scala, uma linguagem popular para aplicativos escaláveis e infraestrutura de engenharia de dados.
Ver detalhesRight Arrow
Iniciar Curso
Ver maisRight Arrow
Relacionado

Tutorial

Programação orientada a objetos em Python (OOP): Tutorial

Aborde os fundamentos da programação orientada a objetos (OOP) em Python: explore classes, objetos, métodos de instância, atributos e muito mais!
Théo Vanderheyden's photo

Théo Vanderheyden

12 min

Tutorial

Tutorial de Python

Em Python, tudo é objeto. Números, cadeias de caracteres (strings), DataFrames, e até mesmo funções são objetos. Especificamente, qualquer coisa que você usa no Python tem uma classe, um modelo associado por trás.
DataCamp Team's photo

DataCamp Team

3 min

Tutorial

Como escrever um script Bash: um tutorial simples de scripts Bash

Descubra os fundamentos da criação de scripts Bash e aprenda a escrever um script Bash.
Kurtis Pykes 's photo

Kurtis Pykes

5 min

Tutorial

Tutorial de visão geral do banco de dados SQL

Neste tutorial, você aprenderá sobre bancos de dados em SQL.
DataCamp Team's photo

DataCamp Team

3 min

SQLAlchemy_Tutorial.

Tutorial

Tutorial de SQLAlchemy com exemplos

Aprenda a acessar e executar consultas SQL em todos os tipos de bancos de dados relacionais usando objetos Python.
Abid Ali Awan's photo

Abid Ali Awan

13 min

Tutorial

Classes abstratas em Python: Um guia completo com exemplos

Aprenda sobre classes abstratas em Python, sua finalidade e como usar o módulo `abc` para garantir interfaces consistentes. Inclui exemplos práticos e melhores práticas para uma implementação eficaz.
Derrick Mwiti's photo

Derrick Mwiti

10 min

Ver MaisVer Mais