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.