Conceitos iniciais sobre Programação Orientação a Objeto (POO)
Published: 2022-12-18 16:32:07

## Origem
Orientação a Objeto tem como origem a Linguagem Simula (Simula Language), que surgiu na década de 60. Conseguinte a Orientação a Objeto tem como propósito criar a similaridade com o mundo real e surgiu na década de 70 com o Alan Kay.

## Principais pilares
## 1. Classe

 - Uma estrutura que abstraí um conjunto de objetos com características similares. Essa classe, define o comportamento dos seus objetos através de método e define o estado através de atributos. Em suma, a classe irá definir e servir de base para o que futuramente será o objeto.

Exemplos:

```java
public class Profissional {
}
```

```java
public class Venda {
}
```

- Classe pode ser de **entidade de abstração física:** pessoa; carro etc. Ou, pode ser de **entidade de abstração conceitual:** venda; produto etc.

É necessário pensar na estrutura que vimos no exemplo acima, que é constituído dos seguintes elementos:

**Modificador de acesso** (ex: public ou private) + **class** + **Nome da classe** (ex: profissional, venda, pessoa etc.)

## 2. Atributo
- São as características definidas para a classe, sendo possível alterar ou manipular. Em suma, o atributo é responsável por definir a estrutura de dados de uma classe.

Classes possuem atributos:

**Modificador de acesso** + **Tipo de dados** (primitivo/String) + **Descrição** (substantivo/adjetivo)

```java
    public class Profissional {

        private String nomeProfissional;
        private String matriculaProfissional;
        private Double vhProfissional;
        private String disponibilidade;
    }
```
## 3. Métodos
- Para entender o método é preciso sempre lembrar que sua função é identificar as ações, ou seja, identifica os serviços/ações que a classe tem a oferecer.

 **Modificador de acesso** + **Tipo de retorno** (set, Tipo primitivo ou VOID) + **Descrição** (verbo de ação)

```java
    public class Profissional {

        private String nomeProfissional;
        private String matriculaProfissional;
        private Double vhProfissional;
        private String disponibilidade;

        public String getDisponibilidade() {
        return disponibilidade;
    }
    public void setDisponibilidade(String disponibilidade) {
        this.disponibilidade = disponibilidade;
    }

    public String getNomeProfissional() {
        return nomeProfissional;
    }

    public void setNomeProfissional(String nomeProfissional) {
        this.nomeProfissional = nomeProfissional;
    }

    public String getMatriculaProfissional() {
        return matriculaProfissional;
    }

    public void setMatriculaProfissional(String matriculaProfissional) {
        this.matriculaProfissional = matriculaProfissional;
    }

    public Double getValorHoraProfissional() {
        return valorHoraProfissional;
    }

    public void setValorHoraProfissional(Double vhProfissional) {
        this.valorHoraProfissional = valorHoraProfissional;
    }
}
```

## Resumo
Esse é o básico, tentei abordar os assuntos gradativamente para não ter o mesmo impacto negativo que eu tive, mas antes de encerrar vamos resumir alguns conceitos já vistos nos códigos acima, pode até ser que não faça muito sentido. Entretanto, para esse quebra cabeça fazer sentido, será importante.

### Modificadores de acesso:
1. Public - Pode ser acessado por outras classes
2. Private - Não pode ser acessado por outras classes, ou seja, só poderá ser acessado na própria classe.

### Atributos são acessados por meio de getters e setters:
1. Get - OBTER o atributo + return = retornar o atributo
2. Set - ALTERAR  o atributo + não retorna nada, ou seja, public void (vazio)

### This
1. Palavra reservada usada para autorreferência, ou seja, é usado para referenciar métodos e atributos da classe e objeto

Espero que gostem e aguardem a continuação deste trabalho...

# Referências
1. CARVALHO, Thiago Leite. Título: Orientação a Objetos Aprenda Seus Conceitos e Suas Aplicabilidades de Forma Efetiva.pdf.
2. ALVES, Nelio. Título: Java COMPLETO Programação Orientada a Objetos + Projeto (Udemy).