DataCamp recentemente lançou seu primeiro curso de Scala: Introdução ao Scala. Confira!
Também, confira os seguintes tutoriais:
Introdução

Em geral, Programação Orientada a Objetos (POO) consiste em classes e objetos e tem por objetivo implementar entidades do mundo real como polimorfismo, herança.
A POO torna o desenvolvimento muito mais rápido e barato com melhor manutenção de software. A principal razão para esta magia é o número de recursos que ela suporta; você tem classes & objetos que podem facilmente ser reutilizados no futuro com base nas necessidades, em contraste com um programa que carece de classes & objetos. Isto, por sua vez, leva a software de qualidade superior, que também é extensível com novos métodos e atributos.
Vamos dizer que você tem um showroom de carros; a cada poucos meses, um novo carro é lançado, e para informar o público sobre seu nome e recursos, você tem que definir novos métodos e atributos de raiz. No entanto, se você tem um programa orientado a objetos que tem uma classe de carro, tudo o que você vai adicionar é um objeto para esse novo carro, que chamará os métodos e atributos da classe com as informações do veículo.
A classe pode ser pensada como uma representação ou um design para objetos. As classes normalmente terão seus próprios métodos (comportamento) e atributos .
Atributos são entidades individuais que diferenciam cada objeto do outro e determinam várias qualidades de um objeto. Métodos, por outro lado, são mais como uma função usual em programação. Eles determinam como a instância da classe funciona. A maioria das vezes, é devido a métodos (comportamento) que objetos têm a capacidade de serem feitos alguma coisa com eles.

O gráfico acima dá mais intuição sobre o fluxo de programação orientada a objetos ou, para ser mais específico, o que uma classe se parece. No gráfico acima, há uma classe carro
que tem atributos: combustível, velocidade máxima
e pode ter mais atributos como o modelo
, marca
, etc. Tem diferentes conjuntos de métodos
como reabastecer()
, getFuel()
, setSpeed()
e alguns métodos adicionais podem ser mudar a marcha
, iniciar o motor
, parar o motor
, etc.
Então, quando você fala de um carro específico, você teria um objeto, que é uma instância de uma classe.
Agora, vamos falar sobre programação orientada a objetos no Scala.
Classes e Objetos no Scala
Como em C++ e Java, a programação orientada a objetos no Scala segue praticamente as mesmas convenções. Tem o conceito de definir classes
e objetos
e dentro do construtor de classe constructors
, e é tudo o que há sobre programação orientada a objetos no Scala.
Declaração de Classe
class Class_name{ // métodos e atributos }
Uma classe em Scala é definida pelo palavra-chave class
seguida pelo nome da classe, e geralmente, o nome da classe começa com letra maiúscula. Existem algumas palavras-chave que são opcionais, mas podem ser usadas na declaração de classe em Scala como: class-name
, 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 precedida pela palavra-chave extend.
Uma classe pode herdar apenas um pai em Scala, o que significa que o Scala não suporta herança múltipla. No entanto, isso pode ser alcançado usando Traits
.
Por fim, o corpo de uma classe em Scala é delimitado por chaves {}
.
// O nome da classe é Car class Car { // Variáveis de classe var make: String = "BMW" var model: String = "X7" var fuel: Int = 40 // Método de classe def Display() { println("Make of the Car : " + make); println("Model of the Car : " + model); println("Fuel capacity of the Car : " + fuel); } } object Main { // Método Main def main(args: Array[String]) { // Objeto de classe var obj = new Car(); obj.Display(); } }
Você pode salvar o código acima com o nome class.scala
e executá-lo no terminal como scala class.scala
, e você deveria ver a saída conforme abaixo.

Bem, o código acima não utiliza completamente os privilégios de um programa orientado a objetos. Como a saída do código acima retornará o mesmo resultado independentemente de quantas vezes você executar, você definiu variáveis estáticas dentro da classe e os valores dessas variáveis permanecerão constantes, mesmo se você criar objetos infinitos. Em conclusão, você não pode esperar que ele forneça detalhes para um carro Mercedes-Benz ou um Ferrari.
Construtor em Scala
Construtores são principalmente usados para inicializar o estado do objeto. Essa inicialização de objeto ocorre no momento da criação do objeto e são chamados apenas uma vez.
Existem dois tipos de construtores em Scala: Primário
e Auxiliar
. Para este tutorial, você vai aprender sobre o construtor primário (Fonte: O’Reilly).
class Class_name(Parameter_list){ // métodos, atributos }
O construtor primário contém o mesmo corpo com a classe, e é criado implicitamente juntamente com a definição da classe. Ele começa na definição da classe espanha o corpo completo da classe. Também, quando há somente um construtor no programa Scala, é conhecido como construtor primário. Um construtor primário pode ser definido com zero, um ou mais parâmetros.
Assim, vamos pegar o exemplo anterior, mas desta vez acrescentar a característica do construtor primário e observar o efeito.
Também aqui, você aprenderá uma nova característica de uma classe, ou seja, uma classe pode ter vários objetos ou instâncias, mas ambos independentes um do outro.
// O nome da classe é Car class Car(make: String, model: String, fuel: Int) { // Método da classe def Display() { println("Make of the Car : " + make); println("Model of the Car : " + model); println("Fuel capacity of the Car : " + fuel); } } object Main { // Método principal def main(args: Array[String]) { // Múltiplos objetos de classe var obj1 = new Car("BMW", "X7", 40); var obj2 = new Car("Mercedes Benz", "S350D", 50); obj1.Display(); obj2.Display(); } }
Vamos ver rapidamente a saída:

Não é isso ótimo? Com a ajuda de um construtor, você conseguiu gerar resultados mais eficientes.
Declarando Objetos em Scala
Declarar objetos em Scala também pode ser chamado de instanciar uma classe ou invocar uma classe. Semelhante às classes, objetos também são uma unidade fundamental da programação orientada a objetos.
Um objeto pode consistir de três características (Fonte: GeeksforGeeks:
Estado:
Atributos de um objeto o representam. Também reflete as propriedades de um objeto.Comportamento:
Métodos de um objeto o representam. Também reflete a resposta de um objeto com outros objetos.Identidade:
Ele fornece um nome único a um objeto e permite que um objeto interaja com outros objetos.
Considere o Cão como um objeto e veja o diagrama abaixo para sua identidade, estado e comportamento.

Todas as instâncias ou objetos compartilham atributos e métodos da classe. Uma única classe pode ter vários objetos, conforme você aprendeu aqui. No entanto, o estado ou valores de cada objeto são únicos.
Finalmente, você escreverá um código que terá construtores primários, variáveis de classe, atributos e métodos todos combinados em um único código.
Abaixo está uma representação gráfica dos componentes juntos na classe Motorcycle
.

O código abaixo é bem explicativo; em nível superior, ele verifica se o motor da motocicleta está ligado
ou desligado
. Inicialmente, o motor é colocado em estado desligado e ele notificará você de seu estado e o alternará para ligado.
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(); } }

Parabéns!
Parabéns por finalizar este tutorial.
Você agora 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 a você não só em Scala, mas até em outras linguagens de programação.
O paradigma de programação orientada a objetos é interessante e, ao mesmo tempo, muito poderoso. Adiciona uma nova dimensão ao seu código, tornando-o reutilizável. Quando o seu programa torna-se maior, seu código vai crescer em complexidade. Há muito conteúdo em conceitos de programação orientada a objetos, como herança, polimorfismo, métodos de instância. Outra funcionalidade poderosa é o Singleton. Os princípios de projeto ajudam a manter seu código mais estruturado e legível. Para mais informações sobre padrões de projeto, considere ler este livro.
Por favor, não deixe de perguntar quaisquer questões relacionadas a este tutorial nos comentários abaixo.
Finalmente, não esqueça de cursar o novo curso de Scala no DataCamp, Introdução a Scala.
Source:
https://www.datacamp.com/tutorial/scala-classes-objects