A relação "tem um" vs. "é um"
Parte da seção Programação Orientada a Objetos do Journey de JavaScript da Coddy — lição 47 de 56.
Na programação orientada a objetos, existem dois tipos principais de relacionamentos entre objetos: "tem-um" (composição) e "é-um" (herança). Enquanto a herança cria hierarquias pai-filho, a composição constrói objetos combinando componentes menores e focados.
Vamos primeiro entender a relação "é-um" através da herança:
class Animal {
constructor(name) {
this.name = name;
}
eat() {
console.log(`${this.name} is eating.`);
}
}
// Dog "é-um" Animal - relação de herança
class Dog extends Animal {
bark() {
console.log(`${this.name} says woof!`);
}
}Agora vamos examinar o relacionamento "tem-um" (has-a) através da composição:
class Engine {
start() {
console.log("Engine started");
}
}
// Car "has-a" Engine - composition relationship
class Car {
constructor() {
this.engine = new Engine(); // Composition
}
startCar() {
this.engine.start();
console.log("Car is running");
}
}A principal diferença:
- "is-a" (herança): Um Cachorro É UM Animal
- "has-a" (composição): Um Carro TEM UM Motor
Desafio
Você recebeu as classes de componentes (Processor, Memory) e a maior parte da classe Computer. Sua tarefa é completar o constructor no arquivo computer.js:
- Crie uma propriedade
processorusando a classeProcessor - Crie uma propriedade
memoryusando a classeMemory - Passe processorSpeed para o constructor de Processor e memorySize para o constructor de Memory
Folha de consulta
Na programação orientada a objetos, existem dois tipos principais de relacionamentos entre objetos:
- Relacionamento "é-um" (herança): Cria hierarquias pai-filho onde uma subclasse estende uma classe pai
- Relacionamento "tem-um" (composição): Constrói objetos combinando componentes menores e focados
Exemplo de herança ("é-um"):
class Animal {
constructor(name) {
this.name = name;
}
eat() {
console.log(`${this.name} is eating.`);
}
}
// Dog "is-a" Animal
class Dog extends Animal {
bark() {
console.log(`${this.name} says woof!`);
}
}Exemplo de composição ("tem-um"):
class Engine {
start() {
console.log("Engine started");
}
}
// Car "has-a" Engine
class Car {
constructor() {
this.engine = new Engine(); // Composition
}
startCar() {
this.engine.start();
console.log("Car is running");
}
}Experimente você mesmo
import { Computer } from './computer.js';
const myComputer = new Computer(3.5, 16);
myComputer.start();Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Programação Orientada a Objetos
1Objetos e a Palavra-chave this
Revisão Rápida: ObjetosAdicionando Métodos a ObjetosEntendendo a Palavra-chave thisFunções ConstrutorasA Palavra-chave newDesafio de Recapitulação7Herança e a palavra-chave extends
HerançaA relação "é um"A palavra-chave extendsO método super()Herdando propriedades e métodosDesafio de recapitulação10Polimorfismo
O que é Polimorfismo?Sobrescrevendo Métodos HerdadosUsando superDesafio de Recapitulação13Composição vs. Herança
A relação "tem um" vs. "é um"Os limites da herança profundaConstruindo objetos2Organizando o Código
O que são Módulos?Exportando com exportImportando com importExportações Default vs. Nomeadas5Encapsulamento e Acesso
EncapsulamentoCampos de Classe Públicos e PrivadosMétodos PrivadosDesafio de Recapitulação8Organizando Código POO
Organizar Classes em Módulos11Projeto: Um Renderizador de Formas
Configuração: Classe Shape e ExportaçãoHerança da Classe Circle14Sistema de Gerenciamento de Biblioteca
Projetando a BibliotecaClasse Livro com Composição