Visão Geral do Módulo

Neste módulo, você aprenderá os conceitos fundamentais da Programação Orientada a Objetos (POO) aplicados ao JavaScript. Vamos explorar como criar e utilizar classes e objetos para representar as entidades do nosso Sistema de Vendas (como `Cliente`, `Produto`, `Pedido`), além de entender herança, polimorfismo e encapsulamento no contexto do JavaScript.

Carga Horária

24 horas

Pré-requisitos

Módulos 1 e 2

Conteúdo Programático

1. Introdução à Orientação a Objetos
  • O que é Programação Orientada a Objetos (POO)
  • Paradigmas de programação: imperativo vs. orientado a objetos
  • Benefícios: Reutilização, Manutenibilidade, Organização
  • Conceitos chave: Classes, Objetos, Atributos, Métodos
  • JavaScript como linguagem multi-paradigma (funcional, OO, procedural)
2. Objetos em JavaScript
  • Revisão de objetos literais: Representando um produto ou cliente
  • Propriedades (Ex: `nome_cliente`, `val_unit`) e Métodos (Ex: `calcularSubtotal()`)
  • Acessando e modificando propriedades (dot notation, bracket notation)
  • O `this` em métodos de objetos
  • Object.create() e a cadeia de protótipos
  • Desestruturação de objetos para acessar dados (Ex: `const { nome_cliente, cidade } = cliente;`)
3. Princípios da Orientação a Objetos
  • Encapsulamento: Ocultar detalhes internos e expor apenas o necessário (Ex: Saldo de estoque só pode ser alterado por métodos específicos).
  • Herança: Criar novas classes baseadas em existentes (Ex: `ClientePessoaFisica` e `ClientePessoaJuridica` herdando de `Cliente` - conceitual, não no script).
  • Polimorfismo: Objetos de diferentes classes respondendo à mesma mensagem (Ex: Método `gerarRelatorio()` em `Pedido` e `Vendedor`).
  • Abstração: Focar nos aspectos essenciais, ignorando detalhes irrelevantes (Ex: A classe `Produto` abstrai os detalhes de armazenamento físico).
  • Associação, agregação e composição (Ex: `Pedido` *contém* `ItemPedido` - composição).
4. Funções Construtoras e Protótipos (Forma Clássica)
  • Criando "moldes" com funções construtoras (Ex: `function Cliente(...)`)
  • Operador `new` para criar instâncias (objetos)
  • A propriedade `prototype` para adicionar métodos compartilhados
  • Herança baseada em protótipos (`Object.setPrototypeOf` ou `Object.create`)
5. Classes em JavaScript (ES6+)
  • Sintaxe moderna com a palavra-chave `class`
  • Método `constructor` para inicializar objetos
  • Definição de métodos diretamente na classe
  • Métodos e propriedades estáticas (pertencem à classe, não à instância)
  • Getters e setters para controlar acesso a propriedades
6. Herança com Classes
  • Palavra-chave `extends` para criar subclasses
  • Método `super()` para chamar o construtor da classe pai
  • Sobrescrita de métodos da classe pai
  • Exemplo conceitual: `PedidoOnline extends Pedido` (não aplicável diretamente ao script)
  • Composição como alternativa à herança em muitos casos
7. Encapsulamento e Modificadores de Acesso
  • Conceito de proteger dados internos
  • Convenção com underscore (`_propriedade`)
  • Campos privados com `#` (hash) - sintaxe mais recente
  • Getters e Setters para acesso controlado
8. Polimorfismo em JavaScript
  • Conceito: "Muitas formas" - objetos diferentes respondendo à mesma mensagem.
  • Polimorfismo de subtipo (via herança e sobrescrita).
  • Polimorfismo Ad-hoc (Duck Typing - "Se anda como um pato e grasna como um pato...").
  • Exemplo: Uma função `imprimirDetalhes` que funciona para `Cliente` e `Vendedor`.

Objetivos de Aprendizagem

Ao final deste módulo, você será capaz de:

  • Explicar os princípios fundamentais da Programação Orientada a Objetos.
  • Criar e utilizar objetos literais e funções construtoras em JavaScript.
  • Implementar classes, construtores, métodos e propriedades no ES6+.
  • Aplicar herança para criar hierarquias de classes.
  • Utilizar encapsulamento para proteger dados internos dos objetos.
  • Implementar polimorfismo em JavaScript.
  • Reconhecer e aplicar padrões de projeto comuns.
  • Modelar entidades de um sistema real (como o Sistema de Vendas) usando POO em JavaScript.

Próximo Módulo

Avance para o próximo módulo e aprenda sobre Padrões de Desenvolvimento de Software.