A Orientação a Objetos (OO) é um dos pilares fundamentais da programação em Kotlin, assim como em outras linguagens como Java, C# e Python. Abaixo, explico os principais conceitos de Orientação a Objetos em Kotlin, com exemplos práticos.

1. Definindo uma Classe em Kotlin

Uma classe em Kotlin é definida com a palavra-chave class:

kotlin
Copiar código
class Pessoa(val nome: String, var idade: Int)

Aqui, Pessoa é uma classe com dois atributos: nome (imutável) e idade (mutável). A palavra-chave val define um atributo imutável, enquanto var define um atributo mutável.

2. Criando Objetos a Partir de Classes

Depois de definir a classe, você pode criar instâncias dela, ou seja, objetos:

kotlin
Copiar código
val pessoa1 = Pessoa("João", 30)
val pessoa2 = Pessoa("Maria", 25)

3. Construtores

Kotlin tem um construtor primário que pode ser diretamente incluído na declaração da classe. No exemplo acima, Pessoa já possui um construtor que recebe os parâmetros nome e idade.

Construtores Secundários

Você pode também adicionar construtores secundários para fornecer diferentes maneiras de instanciar objetos:

kotlin
Copiar código
class Pessoa(val nome: String, var idade: Int) {
    constructor(nome: String) : this(nome, 0)  // Construtor secundário
}

val pessoa3 = Pessoa("Carlos")  // idade será 0

4. Métodos

Você pode definir métodos dentro de uma classe, que são funções que operam sobre os dados dessa classe:

kotlin
Copiar código
class Pessoa(val nome: String, var idade: Int) {
    fun cumprimentar() {
        println("Olá, meu nome é $nome e tenho $idade anos.")
    }
}

val pessoa = Pessoa("Ana", 28)
pessoa.cumprimentar()  // Saída: Olá, meu nome é Ana e tenho 28 anos.

5. Herança

Kotlin suporta herança, mas por padrão, as classes não podem ser herdadas. Para permitir que uma classe seja herdada, você deve declará-la como open: