9 POO e Módulos
Programação Orientada a Objetos (POO) ajuda a modelar o mundo real em código usando classes e objetos.
9.1 Conceitos básicos de POO
- classe: molde para criar objetos;
- objeto: instância da classe;
- atributo: característica do objeto;
- método: comportamento do objeto.
9.2 Criando uma classe
class Pessoa {
constructor(nome, idade) {
this.nome = nome;
this.idade = idade;
}
apresentar() {
return `Meu nome é ${this.nome} e tenho ${this.idade} anos.`;
}
}
const p1 = new Pessoa("Lia", 17);
console.log(p1.apresentar());9.3 Encapsulando regras com métodos
class ContaEstudante {
constructor(saldoInicial = 0) {
this.saldo = saldoInicial;
}
depositar(valor) {
if (valor <= 0) return;
this.saldo += valor;
}
sacar(valor) {
if (valor > this.saldo) return "Saldo insuficiente";
this.saldo -= valor;
return "Saque realizado";
}
}
const conta = new ContaEstudante(100);
conta.depositar(50);
console.log(conta.sacar(30));
console.log(conta.saldo);9.4 Herança
Herança permite reutilizar código de uma classe base.
class Pessoa {
constructor(nome, idade) {
this.nome = nome;
this.idade = idade;
}
}
class Aluno extends Pessoa {
constructor(nome, idade, curso) {
super(nome, idade);
this.curso = curso;
}
dados() {
return `${this.nome} - ${this.curso}`;
}
}
const aluno = new Aluno("Rafa", 16, "Informática");
console.log(aluno.dados());9.5 Polimorfismo (ideia prática)
Diferentes classes podem ter métodos com o mesmo nome e comportamentos específicos.
class Transporte {
calcularTempo() {
return "Tempo padrão";
}
}
class Onibus extends Transporte {
calcularTempo() {
return "Tempo estimado: 25 min";
}
}
class Bicicleta extends Transporte {
calcularTempo() {
return "Tempo estimado: 18 min";
}
}
const opcoes = [new Onibus(), new Bicicleta()];
opcoes.forEach((item) => console.log(item.calcularTempo()));9.6 Relembrando módulos ES
9.6.1 Export nomeado
matematica.js
export function somar(a, b) {
return a + b;
}main.js
import { somar } from "./matematica.js";
console.log(somar(5, 7));9.6.2 Export default
formatador.js
export default function formatarMoeda(valor) {
return `R$ ${valor.toFixed(2)}`;
}app.js
import formatarMoeda from "./formatador.js";
console.log(formatarMoeda(35.5));9.7 Exemplo integrado: classe + módulo
produto.js
export class Produto {
constructor(nome, preco) {
this.nome = nome;
this.preco = preco;
}
aplicarDesconto(percentual) {
this.preco -= this.preco * (percentual / 100);
}
}index.js
import { Produto } from "./produto.js";
const caderno = new Produto("Caderno", 30);
caderno.aplicarDesconto(10);
console.log(caderno);9.8 Exercícios
- Crie uma classe
Produtocom nome, preço e método de desconto. - Crie
FuncionarioeProfessorusando herança. - Crie uma classe
RoteiroTuristicocom método para calcular custo total. - Separe funções em módulos e importe no arquivo principal.
- Desafio: combine uma classe com persistência em array de objetos.