Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions trilhas_poo/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
/vendor/
composer.lock
.env
121 changes: 121 additions & 0 deletions trilhas_poo/DOCUMENTAÇÃO.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
# 📚 Trilha de Aprendizado: PHP Orientado a Objetos

Este repositório documenta uma jornada prática de aprendizado em **PHP**, partindo dos conceitos fundamentais de **Programação Orientada a Objetos (POO)** até a implementação de arquiteturas utilizadas no mercado, como **Repository Pattern** e **Service Layer**.

O objetivo da trilha é aplicar conceitos essenciais de orientação a objetos por meio de exercícios progressivos, construindo uma base sólida para o desenvolvimento de aplicações organizadas, escaláveis e de fácil manutenção.

---

# 🎯 Estrutura de Branches

O projeto foi dividido em branches para isolar cada etapa do aprendizado. Dessa forma, é possível acompanhar a evolução dos conceitos implementados.

| Branch | Conteúdo |
| :------ | :------- |
| `master` | Base inicial do projeto. |
| `01_biblioteca` | Classes, Objetos, Encapsulamento e Construtores. |
| `02_funcionarios` | Herança, Classes Abstratas e Polimorfismo. |
| `03_pagamentos` | Interfaces e Polimorfismo. |
| `04_logger` | Utilização de Traits para reutilização de código. |
| `05_organizador` | Organização do projeto utilizando PSR-4, Namespaces e Autoload. |
| `06_Repository` | Implementação do padrão Repository para abstração da persistência. |
| `07_service` | Implementação da camada de Serviço (Service Layer). |
| `desafio` | Integração de todos os conceitos em um sistema completo. |

---

# 📖 Conteúdo Programático

## 1. Fundamentos e Organização

### Encapsulamento
- Utilização dos modificadores de acesso (`private`, `protected` e `public`);
- Controle da visibilidade dos atributos e métodos.

### Abstração
- Criação de classes abstratas;
- Definição e implementação de interfaces;
- Polimorfismo aplicado à orientação a objetos.

### Organização com PSR-4

Organização completa do projeto utilizando **Composer**, **Namespaces** e **Autoload**, eliminando a necessidade de `require` manuais (com exceção do `vendor/autoload.php`).

---

## 2. Padrões de Arquitetura

### Repository Pattern

Implementação de uma camada dedicada exclusivamente ao acesso e manipulação de dados, mantendo a lógica de persistência desacoplada das regras de negócio.

### Service Layer

Criação de uma camada responsável por:

- Centralizar regras de negócio;
- Realizar validações;
- Orquestrar chamadas aos repositórios;
- Manter a aplicação desacoplada e organizada.

---

## 3. Desafio Final: Sistema de Biblioteca

Como conclusão da trilha, foi desenvolvido um sistema de biblioteca integrando todos os conceitos estudados.

O projeto contempla:

- Implementação da interface `Identificavel` pelas classes **Livro** e **Usuário**;
- Classe **Empréstimo** responsável por orquestrar o relacionamento entre as entidades;
- Utilização de **Traits** para logging centralizado;
- Aplicação dos princípios de responsabilidade única e separação de responsabilidades (SOLID);
- Organização em camadas utilizando **Repository** e **Service Layer**.

---

# 🚀 Como navegar entre os exercícios

Para acessar uma etapa específica da trilha, utilize o seguinte comando dentro da pasta do projeto:

```bash
git switch nomeDaBranch
```

Substitua `nomeDaBranch` pela branch desejada.

**Exemplo:**

```bash
git switch 03_pagamentos
```

---

# 📝 Observações

> **Exercício 5 (`05_organizador`)**
>
> Nesta etapa, o foco foi a organização rigorosa da estrutura do projeto utilizando o padrão **PSR-4**. Cada classe foi separada em arquivos individuais dentro da pasta `src/`, seguindo a convenção adotada para facilitar o mapeamento automático realizado pelo Composer e tornar a estrutura mais clara e escalável.

---

# 📌 Conceitos abordados

- Classes e Objetos
- Encapsulamento
- Construtores
- Herança
- Classes Abstratas
- Interfaces
- Polimorfismo
- Traits
- Namespaces
- Composer
- PSR-4
- Autoload
- Repository Pattern
- Service Layer
- Organização em Camadas
- Princípios SOLID
```
29 changes: 29 additions & 0 deletions trilhas_poo/composer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{
"name": "ana/trilhas_poo",
"autoload": {
"psr-4": {
"App\\": "src/"
}
},
"authors": [
{
"name": "Ana Beatriz",
"email": "ana.beatriz.adriano.silva.1929@gmail.com"
}
],
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.95"
},
"scripts": {
"format": "php-cs-fixer fix --allow-risky=yes --sequential",
"format:check": "php-cs-fixer fix --dry-run --diff --allow-risky=yes --sequential",
"test:basic": "php tests/ServiceTest.php",
"test:integration": "php tests/IntegrationTest.php",
"test:http": "php tests/HttpResponseTest.php",
"test": [
"@test:basic",
"@test:integration",
"@test:http"
]
}
}
Loading