SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
13.11.2024

Lição: 19: Classes e Herança

Em Swift, classes são um bloco fundamental da programação orientada a objetos. Elas permitem a criação de estruturas de dados complexas que podem encapsular tanto dados quanto comportamentos. Nesta aula, nós exploraremos o conceito de classes e herança em Swift com exemplos práticos.

O que é uma Classe?

Uma classe em Swift é um modelo para criar objetos. Ela define propriedades (variáveis) e métodos (funções) que podem ser usados para manipular essas propriedades. As classes também suportam herança, permitindo que uma nova classe herde propriedades e métodos de uma classe existente.

Definindo uma Classe

Aqui está um exemplo simples de como definir uma classe em Swift:

class Veiculo {
    var velocidade: Double
    var nome: String

    init(nome: String, velocidade: Double) {
        self.nome = nome
        self.velocidade = velocidade
    }

    func descrever() -> String {
        return "O \(nome) se move a \(velocidade) km/h."
    }
}

// Criando uma instância de Veiculo
let carro = Veiculo(nome: "Carro", velocidade: 120.0)
print(carro.descrever())  // Saída: O Carro se move a 120.0 km/h.

Neste exemplo, definimos uma classe Veiculo com duas propriedades (velocidade e nome) e um método chamado descrever().

Herança

A herança permite que uma classe herde propriedades e métodos de outra. Isso promove a reutilização de código e estabelece uma relação hierárquica entre as classes.

Criando uma Subclasse

Para criar uma subclasse em Swift, use a palavra-chave class seguida pelo nome da subclasse e um dois-pontos, seguido pelo nome da superclasse.

Aqui está um exemplo de uma subclasse chamada Carro que herda da classe Veiculo:

class Carro: Veiculo {
    var numeroDePortas: Int

    init(nome: String, velocidade: Double, numeroDePortas: Int) {
        self.numeroDePortas = numeroDePortas
        super.init(nome: nome, velocidade: velocidade)
    }

    override func descrever() -> String {
        return "O \(nome) é um carro com \(numeroDePortas) portas e se move a \(velocidade) km/h."
    }
}

// Criando uma instância de Carro
let meuCarro = Carro(nome: "Honda", velocidade: 150.0, numeroDePortas: 4)
print(meuCarro.descrever())  // Saída: O Honda é um carro com 4 portas e se move a 150.0 km/h.

Neste código, a classe Carro herda da classe Veiculo. Ela adiciona uma nova propriedade, numeroDePortas, e sobrescreve o método descrever() para fornecer detalhes adicionais específicos para carros.

Inicializadores em Subclasses

Ao criar uma subclasse, você pode definir inicializadores para configurar a nova classe. É necessário chamar o inicializador da superclasse usando super.init() para garantir que as propriedades da superclasse sejam corretamente inicializadas.

Como mostrado no exemplo, o inicializador de Carro chama super.init(nome:velocidade:) para inicializar as propriedades nome e velocidade da classe Veiculo.

Sobrescrita de Métodos

Em Swift, você pode sobrescrever métodos da superclasse para fornecer uma implementação personalizada na subclasse. Para fazer isso, use a palavra-chave override, conforme demonstrado nos exemplos anteriores.

class Caminhao: Veiculo {
    var capacidadeDeCarga: Double

    init(nome: String, velocidade: Double, capacidadeDeCarga: Double) {
        self.capacidadeDeCarga = capacidadeDeCarga
        super.init(nome: nome, velocidade: velocidade)
    }

    override func descrever() -> String {
        return "O \(nome) é um caminhão com capacidade de carga de \(capacidadeDeCarga) toneladas, se movendo a \(velocidade) km/h."
    }
}

// Criando uma instância de Caminhao
let meuCaminhao = Caminhao(nome: "Freightliner", velocidade: 80.0, capacidadeDeCarga: 10.0)
print(meuCaminhao.descrever())  // Saída: O Freightliner é um caminhão com capacidade de carga de 10.0 toneladas, se movendo a 80.0 km/h.

A classe Caminhao herda de Veiculo e sobrescreve o método descrever() para fornecer informações sobre sua capacidade de carga.

Conclusão

Classes e herança são recursos poderosos em Swift que permitem a criação de código complexo e reutilizável. Ao definir classes e usar herança, você pode modelar efetivamente entidades do mundo real e criar uma base de código bem estruturada. Nesta aula, abordamos os fundamentos das classes, subclasses, inicialização e sobrescrita de métodos.

Pratique criando suas próprias classes e subclasses para aprofundar sua compreensão desses conceitos!

Video

Did you like this article? Rate it from 1 to 5:

Thank you for voting!