Menu
Coddy logo textTech

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
challenge icon

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:

  1. Crie uma propriedade processor usando a classe Processor
  2. Crie uma propriedade memory usando a classe Memory
  3. 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();
quiz iconTeste seus conhecimentos

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