Programação Orientada a Objetos

Conceitos

A Programação Orientada a Objetos (POO) é um paradigma de programação que organiza o código em torno de objetos que possuem atributos (dados) e métodos (comportamentos).

Em Kotlin, assim como em outras linguagens modernas, utilizamos classes, objetos, construtores, encapsulamento, herança e polimorfismo para implementar POO.

Conceitos a serem estruturados a seguir:

Classe: modelo para objetos

Objeto: instância de uma classe

Construtor: inicializa objetos

Encapsulamento: protege e controla o acesso a dados

Herança: reaproveitamento de código entre classes

Polimorfismo: comportamentos diferentes para o mesmo método

 

1. Classes

Uma classe é como uma planta arquitetônica de uma casa: ela descreve como algo deve ser, mas não é o objeto em si.

Dentro de uma classe, podemos ter:

Propriedades (atributos) → variáveis que guardam informações do objeto.

Métodos (funções) → ações que o objeto pode executar.

Aqui definimos uma classe Pessoa com duas propriedades (nome e idade) e um método (apresentar).

class Pessoa {
    var nome: String = ""
    var idade: Int = 0

    fun apresentar() {
        println("Olá, meu nome é $nome e tenho $idade anos.")
    }
}

 

2.Objetos

Um objeto é uma instância de uma classe.

Cada objeto tem valores próprios para os atributos definidos pela classe. Enquanto a classe é o molde, o objeto é o produto final construído a partir desse molde.

fun main() {
    val pessoa1 = Pessoa()
    pessoa1.nome = "Maria"
    pessoa1.idade = 25
    pessoa1.apresentar()

    val pessoa2 = Pessoa()
    pessoa2.nome = "João"
    pessoa2.idade = 30
    pessoa2.apresentar()
}

Neste exemplo:

  • pessoa1 e pessoa2 são objetos diferentes criados a partir da mesma classe Pessoa.

  • Cada um tem valores próprios para nome e idade.

  • O método apresentar() usa os dados de cada objeto individualmente.

 

3.Construtores

O construtor é usado para inicializar objetos de forma prática.

Em Kotlin, podemos usar o primary constructor diretamente na definição da classe.

class Pessoa(val nome: String, var idade: Int) {
    fun apresentar() {
        println("Olá, meu nome é $nome e tenho $idade anos.")
    }
}

fun main() {
    val pessoa = Pessoa("Ana", 20)
    pessoa.apresentar()
}

 

  • val nome: String → propriedade somente leitura (não pode ser alterada depois).

  • var idade: Int → propriedade mutável (pode ser alterada depois).

  • Quando fazemos Pessoa("Ana", 20), já passamos os valores direto para o construtor.

 

4. Encapsulamento

O encapsulamento protege os dados internos de uma classe, controlando o acesso com modificadores de visibilidade:

(padrão) → acessível de qualquer lugar

→ acessível apenas dentro da classe

→ acessível na classe e subclasses

→ acessível apenas dentro do mesmo módulo

class ContaBancaria(private var saldo: Double) {
    fun depositar(valor: Double) {
        saldo += valor
    }

    fun sacar(valor: Double) {
        if (valor <= saldo) {
            saldo -= valor
        } else {
            println("Saldo insuficiente.")
        }
    }

    fun consultarSaldo() {
        println("Saldo atual: R$ $saldo")
    }
}

fun main() {
    val conta = ContaBancaria(100.0)
    conta.depositar(50.0)
    conta.sacar(30.0)
    conta.consultarSaldo()
}
  • saldo é private, ou seja, ninguém fora da classe pode acessá-lo diretamente.

  • Só é possível interagir com o saldo através dos métodos depositar, sacar e consultarSaldo.

  • Isso garante segurança e controle sobre como os dados são manipulados.

 

5. Herança

A herança permite que uma classe (subclasse) herde características de outra (superclasse).

Em Kotlin, usamos para permitir herança.

open class Animal(val nome: String) {
    open fun emitirSom() {
        println("Som genérico")
    }
}

class Cachorro(nome: String) : Animal(nome) {
    override fun emitirSom() {
        println("Au au!")
    }
}

class Gato(nome: String) : Animal(nome) {
    override fun emitirSom() {
        println("Miau!")
    }
}

fun main() {
    val cachorro = Cachorro("Rex")
    val gato = Gato("Mimi")

    cachorro.emitirSom()
    gato.emitirSom()
}
  • open class → em Kotlin, por padrão, classes não podem ser herdadas. Por isso usamos open.

  • override → usado para sobrescrever um método da classe pai.

  • Cachorro e Gato herdam nome e emitirSom() de Animal, mas cada um implementa o som de forma diferente

 

6. Polimorfismo

O polimorfismo permite que objetos de classes diferentes possam ser tratados de forma uniforme através da herança.

Cada classe pode ter sua própria implementação do mesmo método.

fun main() {
    val animais: List<Animal> = listOf(Cachorro("Rex"), Gato("Mimi"))

    for (animal in animais) {
        animal.emitirSom() // Cada animal emite o som correspondente
    }
}
  • A lista animais contém objetos de diferentes subclasses (Cachorro e Gato).

  • Mesmo chamando animal.emitirSom() de forma genérica, o método correto é escolhido em tempo de execução.

Isso é polimorfismo → um único comando (emitirSom()) gera comportamentos diferentes dependendo do objeto.

Vídeos sobre POO:

https://youtu.be/QT-HK_r3MTo?si=GGdTqUrLGU-skjWA

https://youtu.be/z_0jLLtB83U?si=3obxbDpvBuYDhD4I

https://youtu.be/cN7FuVa2dAA?si=_v1YiQO27i8abudH

https://youtu.be/Scy4mupiado?si=GwzMdd7CL1yfgQdt

https://youtu.be/KzO6tMM5QI0?si=ZDVPmWh1smO-dXuk

https://youtu.be/5-vqDPFolTA?si=JZybM1P-UcSONbj1

 

Referências:

FARIAS SILVA, Víctor de; ZUCHI, Jederson Donizete. Análise dos fundamentos do paradigma orientado a objetos na linguagem Kotlin. Revista Interface Tecnológica, Taquaritinga, SP, v. 20, n. 2, p. 170–181, 2023. DOI:

10.31510/infa.v20i2.1796. Disponível em: https://revista.fatectq.edu.br/interfacetecnologica/article/view/1796.

SENHOR DEV. Orientação a objetos em Kotlin: conceitos e aplicações práticas. Senhor DEV, 13 mar. 2025. Disponível em: https://senhordev.com/2025/03/13/orientacao-a-objetos-em-kotlin-conceitos-e-aplicacoes-praticas

ROCKETSEAT. Dominando a orientação a objetos em Kotlin: abstração, encapsulamento, herança e polimorfismo. DIO (via Rocketseat), 27 ago. 2023. Disponível  em:  https://www.dio.me/en/articles/dominando-a-orientacao-a-objetos-em-kotlin-abstracao-encapsulamento-heranca-e-polimorfismo.

Você completou 0% da lição
0%
Acessibilidade

Cor de fonte Cor de fonte

Tipo de fonte Tipo de fonte

Font Kerning Font Kerning

Tamanho da fonte Tamanho da fonte

1

Visibilidade da Imagem Visibilidade da Imagem

Espaçamento entre letras Espaçamento entre letras

0

Altura da Linha Altura da Linha

1.2

Destaque do link Destaque do link

Text Alignment Text Alignment

Cor do texto Cor do texto

Paragraph Width Paragraph Width

0