Turma Online 25 - Imersão JavaScript | Semana 6 - Introdução à Orientação a Objeto II | 2023 | Professora: Luara Kerlen
Antes de começar, vamos organizar nosso setup.
- Fork esse repositório
- Clone o fork na sua máquina (Para isso basta abrir o seu terminal e digitar
git clone url-do-seu-repositorio-forkado
) - Entre na pasta do seu repositório (Para isso basta abrir o seu terminal e digitar
cd nome-do-seu-repositorio-forkado
)
- Entender o conceito de herança e polimorfismo;
- Aplicar todos os conceitos de POO.
O que veremos na aula de hoje?
A programação orientada a objetos é um paradigma de programação que fornece um modelo no qual um programa é uma coleção de objetos que interagem entre si, passando mensagens que transformam seu estado.
Neste caso, todos os objetos possuem determinados estados e comportamentos. Enquanto os estados são descritos pelas classes como atributos, a forma como eles se comportam é definida por meio de métodos.
A Programação Orientada a Objetos possui dois pilares de sustentação: a utilização de classes e objetos. Além de possuírem, dentro dessas, atributos e métodos.
As classes são modelos/formas que definem os objetos que serão reutilizados e instanciados durante o código.
Os objetos são instâncias de classes criadas com dados específicos.
Enquanto classes são como definições do conceito de uma entidade do mundo real, objetos são a representação de um exemplar da entidade.
Atributos são as características que as classes (e, por consequência, seus objetos) possuem.
Métodos são as funções que a classe (e, por consequência, seus objetos) possuem.
Métodos e atributos privados são aqueles que ficam acessíveis apenas dentro da classe. Para isso, utilizamos #
antes do nome. Além disso, temos os métodos get
e set
que nos auxiliam a acessar ou alterar atributos privados de uma maneira controlada e segura.
Métodos e atributos estáticos são aquelas que pertencem à classe, não aos objetos instanciados a partir dela. Para isso, utilizamos a palavra-chave static
.
Exemplo:
class Funcionario {
nome;
#salario;
static funcionarios = [];
constructor(nome, salario) {
this.nome = nome;
this.#salario = salario;
this.constructor.funcionarios.push(this.nome);
}
get salario() {
return this.#salario;
}
set salario(novoSalario) {
this.#salario = novoSalario;
}
receberBonusMensal(bonus) {
//..
}
#receberAumento(aumento) {
//...
}
static removerFuncionario(funcionario) {
//...
}
}
Na prática, para a POO funcionar, ela precisa utilizar de 4 pilares básicos. São eles:
- Abstração
- Encapsulamento
- Herança
- Polimorfismo
Abstrair algo significa esconder os detalhes da implementação dentro de algo.
Na Orientação a Objetos, a abstração consiste em extrair entidades do mundo real para dentro do código seguindo a fio suas responsabilidades.
Na POO, podemos utilizar diagrama de classe em UML para representar as nossas classes de uma maneira simples, abstraindo as implementações:
Quando definimos os atributos de um objeto, devemos garantir que alterar os valores desses atributos sejam responsabilidade exclusiva do próprio objeto. O encapsulamento, portanto, é o conceito de proteger os atributos de um objeto.
Para que isso seja possível, podemos utilizar o conceito de métodos e atributos privados, dando acesso de leitura e edição apenas quando fizer sentido e para quem tiver permissão. Nesse caso, utilizamos os métodos get
e set
.
class Funcionario {
nome;
#salario;
#temPermissao;
constructor(nome, salario, temPermissao) {
this.nome = nome;
this.#salario = salario;
this.#temPermissao = temPermissao;
}
get salario() {
if(this.temPermissao) {
return this.#salario;
}
}
set salario(novoSalario) {
if(this.temPermissao) {
this.#salario = novoSalario;
}
}
}
Desenvolvido com 💜 por Luara Kerlen