A relação "é um"
Parte da seção Programação Orientada a Objetos do Journey de JavaScript da Coddy — lição 25 de 56.
A relação "é-um" é um teste simples para determinar quando a herança faz sentido. Se você pode dizer "X é um Y" e isso soa correto, então X provavelmente deve herdar de Y.
Correto (Use Herança):
- "Um Cachorro é um Animal" →
class Dog extends Animal
- "Um Carro é um Veículo" →
class Car extends Vehicle
- "Um Livro Didático é um Livro" →
class Textbook extends Book
Incorreto (Não use herança):
- "Um Driver é um Car" → Não, um driver usa um car
- "Uma Roda é um Carro" → Não, uma roda é parte de um carro
- "Um Aluno é uma Sala de Aula" → Não, um aluno está em uma sala de aula
Por exemplo, vamos considerar dois objetos:
// Classe base - o que todos eles SÃO
class Book {
constructor(title, author, pages) {
this.title = title;
this.author = author;
this.pages = pages;
}
read() {
console.log(`Reading ${this.title} by ${this.author}`);
}
}
// Um Novel É-UM Book (herança correta)
class Novel extends Book {
constructor(title, author, pages, genre) {
super(title, author, pages);
this.genre = genre;
}
}
// Usando as classes
const fiction = new Novel("1984", "George Orwell", 328, "Dystopian");
fiction.read(); // "Reading 1984 by George Orwell" - herdado de Book
Desafio
Você recebeu uma classe ElectronicDevice e uma classe Smartphone. Um Smartphone é um tipo de ElectronicDevice com recursos adicionais. Sua tarefa é criar um objeto `myPhone` com a marca "Samsung" e o modelo “Galaxy S23”.
Folha de consulta
O relacionamento "é-um" é um teste para determinar quando a herança faz sentido. Se você puder dizer "X é um Y" e soar correto, então X deve herdar de Y.
Exemplos corretos (use herança):
- "Um Cachorro é um Animal" →
class Dog extends Animal - "Um Carro é um Veículo" →
class Car extends Vehicle - "Um Livro Didático é um Livro" →
class Textbook extends Book
Exemplos incorretos (não use herança):
- "Um Motorista é um Carro" → Não, um motorista usa um carro
- "Uma Roda é um Carro" → Não, uma roda faz parte de um carro
- "Um Aluno é uma Sala de Aula" → Não, um aluno está em uma sala de aula
Exemplo:
// Classe base
class Book {
constructor(title, author, pages) {
this.title = title;
this.author = author;
this.pages = pages;
}
read() {
console.log(`Reading ${this.title} by ${this.author}`);
}
}
// Um Romance É-UM Livro (herança correta)
class Novel extends Book {
constructor(title, author, pages, genre) {
super(title, author, pages);
this.genre = genre;
}
}
const fiction = new Novel("1984", "George Orwell", 328, "Dystopian");
fiction.read(); // "Reading 1984 by George Orwell" - herdado de Book
Experimente você mesmo
import { ElectronicDevice } from './electronicDevice.js';
import { Smartphone } from './smartphone.js';
// TODO: Crie um objeto `myPhone` com a marca "Samsung" e o modelo “Galaxy S23”.
// Código de teste - não modifique
console.log(myPhone.turnOn()); // Deve exibir "Samsung Galaxy S23 is now ON"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