DEV Community

Cover image for POO com JavaScript e TypeScript
Vitor Rios
Vitor Rios

Posted on

POO com JavaScript e TypeScript

Introdução

A Programação Orientada a Objetos (POO) é um paradigma fundamental no desenvolvimento de software. Ela aborda não apenas a maneira como escrevemos código, mas também como organizamos e estruturamos nossas aplicações. Em JavaScript e TypeScript, a POO nos permite criar códigos mais limpos, reutilizáveis e fáceis de manter. Vamos explorar detalhadamente os conceitos de Classes e Objetos, Herança, Encapsulamento e Polimorfismo.

1. Classes e Objetos

O que são?

Classes são os "moldes" para a criação de objetos, enquanto objetos são instâncias de classes.

Para que são usados?

Classes e objetos são usados para modelar entidades do mundo real ou conceitos abstratos, encapsulando dados e comportamentos relacionados.

Vantagens

  • Organização: Facilita a organização do código, agrupando logicamente dados e funções.
  • Reutilização: Objetos criados a partir de uma classe podem ser reutilizados em diferentes partes da aplicação.

Exemplo de Implementação

class Carro {
    marca: string;
    modelo: string;

    constructor(marca: string, modelo: string) {
        this.marca = marca;
        this.modelo = modelo;
    }

    mostrarDetalhes(): void {
        console.log(`Carro: ${this.marca} ${this.modelo}`);
    }
}

const meuCarro = new Carro('Ford', 'Mustang');
meuCarro.mostrarDetalhes();
Enter fullscreen mode Exit fullscreen mode

2. Herança

O que é?

Herança é um mecanismo pelo qual uma classe (filha) pode herdar propriedades e métodos de outra classe (pai).

Para que é usada?

Usada para criar uma hierarquia de classes, permitindo o reuso e a extensão de funcionalidades existentes.

Vantagens

  • Evita a duplicação de código: A herança permite que as classes compartilhem código, reduzindo a duplicidade.
  • Facilita a manutenção: Mudanças em uma classe pai podem automaticamente beneficiar classes filhas.
class Veiculo {
    marca: string;

    constructor(marca: string) {
        this.marca = marca;
    }

    buzinar(): void {
        console.log('Buzina!');
    }
}

class Carro extends Veiculo {
    modelo: string;

    constructor(marca: string, modelo: string) {
        super(marca);
        this.modelo = modelo;
    }
}

const meuCarro = new Carro('Ford', 'Mustang');
meuCarro.buzinar();
Enter fullscreen mode Exit fullscreen mode

3. Encapsulamento

O que é?

Encapsulamento é a prática de ocultar detalhes internos de uma classe e expor apenas o necessário para o mundo externo.

Para que é usado?

Usado para restringir o acesso direto aos componentes internos da classe, promovendo uma interface mais controlada.

Vantagens

  • Segurança: Protege o estado interno do objeto contra acessos indevidos.
  • Simplicidade: Fornece uma interface clara e simplificada para a interação com o objeto.

Exemplo de Implementação

class ContaBancaria {
    private saldo: number;

    constructor(saldoInicial: number) {
        this.saldo = saldoInicial;
    }

    depositar(valor: number): void {
        if (valor > 0) {
            this.saldo += valor;
        }
    }

    verSaldo(): number {
        return this.saldo;
    }
}

const minhaConta = new ContaBancaria(1000);
minhaConta.depositar(500);
console.log(minhaConta.verSaldo());
Enter fullscreen mode Exit fullscreen mode

4. Polimorfismo

O que é?

Polimorfismo é a capacidade de um objeto ser tratado como a instância de várias classes.

Para que é usado?

Usado para criar uma interface comum para diferentes classes, permitindo que elas sejam usadas de maneira intercambiável.

Vantagens

  • Flexibilidade: Permite escrever programas que funcionam com objetos de diferentes tipos.
  • Extensibilidade: Novas classes podem ser introduzidas sem alterar o código existente.

Exemplo de Implementação

abstract class Animal {
    abstract falar(): void;
}

class Cachorro extends Animal {
    falar(): void {
        console.log('Au au');
    }
}

function fazerAnimalFalar(animal: Animal): void {
    animal.falar();
}

const toto = new Cachorro();

fazerAnimalFalar(toto); // Au au
Enter fullscreen mode Exit fullscreen mode

Conclusão

A Programação Orientada a Objetos em JavaScript e TypeScript oferece um conjunto poderoso de ferramentas para construir aplicações complexas e bem estruturadas. Ao entender e aplicar conceitos como classes e objetos, herança, encapsulamento e polimorfismo, desenvolvedores podem criar sistemas mais robustos, escaláveis e fáceis de manter. Estes conceitos formam a base para a construção de códigos coesos e bem organizados, fundamentais para o sucesso de qualquer aplicação moderna.

Top comments (0)