DEV Community

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

Posted on

2 1

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.

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay