0% acharam este documento útil (0 voto)
7 visualizações16 páginas

JavaScriptPOO 04

O documento aborda os quatro pilares da orientação a objetos: encapsulamento, herança, abstração e polimorfismo, com foco na implementação em JavaScript e TypeScript. Ele detalha conceitos como herança simples, classes abstratas, polimorfismo, interfaces e a importância de evitar heranças complexas. Além disso, apresenta um exercício prático para aplicar esses conceitos em um sistema bancário simples.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PPTX, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
7 visualizações16 páginas

JavaScriptPOO 04

O documento aborda os quatro pilares da orientação a objetos: encapsulamento, herança, abstração e polimorfismo, com foco na implementação em JavaScript e TypeScript. Ele detalha conceitos como herança simples, classes abstratas, polimorfismo, interfaces e a importância de evitar heranças complexas. Além disso, apresenta um exercício prático para aplicar esses conceitos em um sistema bancário simples.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PPTX, PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 16

JavaScript POO04

Profº Bruno
○ OS 4 PILARES DA ORIENTAÇÃO A OBJETOS
■ ENCAPSULAMENTO
● HERANÇA
■ ABSTRAÇÃO
■ POLIMORFISMO
• Para relembrar:
• Associação - usa
• Agregação - tem
• Composição - é dono de

• Agora teremos Herança - É um


JavaScript POO
Herança Simples:

Sintaxe em JS/TS: class Filha


extends Pai {}
A classe filha herda todos os
atributos e métodos da classe pai,
exceto os privados (em JS,
marcados com #; em TS, private).

Explicação:
Tipagem: public e protected são
usados para definir o acesso.
_idade: Protegido, acessível em
Pessoa e suas subclasses (Cliente e
Aluno).
Herança: Os métodos e atributos
públicos/protegidos de Pessoa são
herdados.
privates (#) nao sao herdados
JavaScript POO
Sobre o MRO(method resolution Order):
A ordem que o python procura atributos e métodos é
sempre da mais especifica pra mais generalista
Ex: Cliente => Pessoa => Object
Tomem cuidado com cadeias de Heranças muito
profundas, acabam ficando demasiadas complexas e
dificeis de debugar, procurem ter no maximo 3 niveis
de herença(Pai,Filho,Neto)
JavaScript POO
Super e Sobreposição de Membros:

super: Em JS/TS, super é usado na subclasse para


acessar a superclasse (classe pai).
No construtor, super() chama o construtor da classe
pai.
Fora do construtor, super.metodo() chama métodos da
classe pai.
Sobreposição de Membros: Quando uma subclasse
redefine (sobrescreve) um método ou atributo da
classe pai, isso é chamado de override. O super
permite acessar a versão original da classe pai, se
necessário.
Cuidado com Heranças Complexas: super() em JS/TS
referencia diretamente a classe pai imediata, não
"avós" ou níveis superiores, a menos que configurado
explicitamente.
○ OS 4 PILARES DA ORIENTAÇÃO A OBJETOS
■ ENCAPSULAMENTO
■ HERANÇA
● ABSTRAÇÃO
■ POLIMORFISMO
JavaScript POO
Classes Abstratas:

Definição: Classes abstratas são usadas como "contratos" para definir a estrutura de novas
classes. Elas podem exigir que subclasses implementem métodos específicos (abstratos) e
também podem ter métodos concretos próprios.
Métodos Abstratos: São métodos sem implementação (apenas declarados em TS), marcados
como obrigatórios para as subclasses.
Regras:
Classes abstratas com métodos abstratos não podem ser instanciadas diretamente.
Métodos abstratos devem ser implementados nas subclasses.
JavaScript (Simulação):
JS não tem suporte nativo para classes abstratas ou métodos abstratos.
Podemos simular lançando erros em métodos que devem ser sobrescritos e evitando
instanciação direta com verificações.
TypeScript:
Usa a palavra-chave abstract para definir classes e métodos abstratos, com enforcecimento em
tempo de compilação.
JavaScript POO
○ OS 4 PILARES DA ORIENTAÇÃO A OBJETOS
■ ENCAPSULAMENTO
■ HERANÇA
■ ABSTRAÇÃO
● POLIMORFISMO
JavaScript POO
Polimorfismo:

Definição: Polimorfismo é o princípio que permite que classes derivadas de uma mesma
superclasse tenham métodos com a mesma assinatura (mesmo nome e quantidade de
parâmetros), mas comportamentos diferentes.
Exemplo Intuitivo: O operador + em JS/TS funciona como adição para números (ex.: 2 +
3 = 5) e concatenação para strings (ex.: "a" + "b" = "ab"), assim como no Python.
Assinatura de Método: Mesmo nome, quantidade de parâmetros e retorno(se for TS)
Princípio da Substituição de Liskov (LSP): Objetos de uma classe pai devem ser
substituíveis por objetos de uma classe filha sem quebrar a aplicação.
Sobrecarga de Métodos (Overload): Não existe nativamente em JS(mas TS simula isso
com sintaxe especial).
Sobreposição de Métodos (Override): Existe em JS/TS, permitindo redefinir métodos da
classe pai.
JavaScript POO
Explicação:
abstract: Animal é abstrata,
forçando subclasses a
implementar emitirSom().
Polimorfismo: Cachorro e Gato
implementam emitirSom() de
forma diferente.
LSP: fazerSom() aceita qualquer
Animal, e as subclasses
funcionam sem problemas.
JavaScript POO
Sobrecarga (Overload) em TS:
JS não suporta sobrecarga
nativa (métodos com o
mesmo nome e diferentes
parâmetros), mas TS permite
simular isso com assinaturas
múltiplas antes da
implementação.
JavaScript POO
Interfaces:
O que são?
Interfaces são contratos que definem a estrutura (propriedades e métodos) que um
objeto ou classe deve seguir.
Elas garantem que uma classe ou objeto implemente certas funcionalidades,
promovendo consistência e interoperabilidade.
Interfaces vs. Classes Abstratas:
Interfaces:
Apenas definem a estrutura (sem implementação).
Uma classe pode implementar múltiplas interfaces.
Classes Abstratas:
Podem ter métodos concretos e abstratos.
Uma classe só pode herdar de uma classe abstrata (herança única).
JavaScript POO
JavaScript POO
Exercicio com Abstração, Herança, Encapsulamento e Polimorfismo:
Criar um sistema bancario(extremamente simple) que tem clientes, contas e um banco. A ideia é que o cliente tenha uma conta(poupança ou corrente) e que
possa sacar/depositar nessa conta. Contas corrente tem um limite extra.
Conta(ABC)
ContaCorrente
ContaPoupanca
Pessoa(ABC)
Cliente
Cliente -> Conta
Banco
Banco -> Cliente
Banco -> Conta
Dicas: Criar classe Cliente que herda da classe Pessoa(Herança)
Pessoa tem nome e idade(com getters)
Cliente TEM conta(Agregação da classe ContaCorrente ou ContaPoupança)
Criar Classes ContaPoupança e ContaCorrente que herdam Conta
ContaCorrente deve ter um limite extra
Contas tem Agencia, numero da conta e saldo
Contas devem ter método para deposito
Conta(Classe Pai) deve ter o metodo sacar abstrato(Abstração e polimorfismo - as classes filhas que implementam o método sacar)
Criar classe Banco para AGREGAR classes de clientes e de contas(Agregação)
Banco será responsável por autenticar o cliente e as contas da seguinte maneira:
Banco tem contas e cliente(Agregação)
Checar se a agencia é daquele banco
Checar se o cliente é daquele banco
Checar se a conta é daquele banco
Só sera possivel sacar se passar na autenticação do banco(descrita acima)
Banco autentica por um método.

Você também pode gostar