Este repositório é uma coleção de exercícios e projetos relacionados à Programação Orientada a Objetos (POO). Ele é organizado em diferentes seções, cada uma focada em um aspecto específico da POO, como classes, objetos, herança, polimorfismo, entre outros.
-
@+git gain=1 type=read eval=selfIntrodução ao git -
@+relacionamento gain=0 type=read eval=selfRelacionamentos -
@+uml gain=0 type=read eval=selfRelacionamentos Resumo -
@+relatorio gain=0 type=read eval=selfComo fazer os códigos e relatórios -
@+atividade gain=0 type=read eval=selfPadrão para atividades de código -
@+main gain=0 type=read eval=selfCriando a Main
-
Conceitos abordados neste módulo:
- classe, objeto, atributo e método;
- estado e comportamento;
- construtor;
- identidade entre objetos;
- testes do comportamento observável;
- separação inicial entre domínio e Shell.
-
Princípio citado somente quando útil: responsabilidade.
-
@toalha gain=2 hard=1 size=1 type=make eval=selfToalha: estado e comportamento em uma classe coesa -
@animal gain=2 hard=1 size=1 type=make eval=testAnimal: estado, comportamento e ciclo de vida -
@carro gain=3 hard=2 size=2 type=make eval=testCarro: separação inicial entre domínio e Shell -
@enxugar gain=2 hard=1 size=2 type=make eval=testEnxugar: comportamento observável e Shell -
@calculadora gain=3 hard=2 size=2 type=make eval=testCalculadora: resultados de operação e mensagens no Shell
-
Conceitos abordados neste módulo:
- atributos privados;
- estado válido;
- validação dentro da classe responsável;
- operações que preservam invariantes;
- falhas e estado após falhas;
- diferença entre encapsular e criar getters/setters para tudo.
-
Conceitos principais: encapsulamento, invariante e contrato.
-
@chinela gain=1 hard=1 size=1 type=make eval=self[GUIA] Comprando uma chinela 40/41 -
@camisa gain=1 hard=1 size=1 type=make eval=self[GUIA] Comprando uma camisa XG -
@roupa gain=2 hard=1 size=1 type=make eval=testRoupa: extensão testável de Camisa -
@relogio gain=3 hard=2 size=2 type=make eval=testRelógio: invariantes de tempo e atualização coordenada
-
Conceitos abordados neste módulo:
-
agregação;
-
posse e colaboração;
-
delegação;
-
multiplicidade;
-
ciclos de vida independentes.
-
Conceitos principais: agregação, delegação e multiplicidade.
-
@motoca gain=3 hard=2 size=3 type=make eval=testMotoca: agregação opcional e delegação -
@grafite gain=3 hard=3 size=3 type=make eval=testGrafite: agregação opcional e delegação -
@motouber gain=3 hard=3 size=3 type=make eval=testMotoUber: colaboração entre objetos e transferência de recurso
-
@charger gain=3 hard=3 size=3 type=make eval=testCharger: agregação e coordenação por etapas -
@tamagotchi gain=3 hard=3 size=3 type=make eval=testTamagotchi: coordenação, invariantes e estado terminal
-
Conceitos abordados neste módulo:
- Array ou lista de objetos;
- multiplicidade 0..*;
- adicionar, remover, buscar e percorrer;
- ordem de chegada e ordem de remoção;
- fila e pilha como usos simples de uma lista;
- encapsular a coleção;
- evitar devolver uma coleção interna mutável;
- separar operações sobre um item de operações sobre o conjunto.
-
Conceitos principais: coleção, multiplicidade, busca e coordenação.
-
@array gain=3 hard=1 size=1 type=make eval=selfOperações fundamentais com coleções lineares -
@contato gain=1 hard=1 size=1 type=make eval=testContato: coleção de telefones e validação -
@pula-pula gain=1 hard=1 size=1 type=make eval=testPula-pula: filas e movimentação de crianças -
@lapiseira gain=1 hard=1 size=1 type=make eval=testLapiseira: extensão do grafite com tambor
-
Conceitos abordados neste módulo:
- vetor de tamanho fixo;
- índice como informação do domínio;
- posição ocupada e posição vazia;
- uso de
T | nullpara representar ausência; - busca em vetor com posições vazias;
- comparação entre ausência por
nulle objeto vazio.
-
Conceitos principais: posição, ausência, nulidade e busca.
-
@cinema gain=1 hard=1 size=1 type=make eval=testCinema: posições fixas e ausência -
@budega gain=2 hard=1 size=1 type=make eval=testBudega: fila e posições fixas -
@junkfood gain=1 hard=1 size=1 type=make eval=testJunkfood: posições fixas e objeto vazio
-
@tabuleiro gain=1 hard=1 size=1 type=make eval=testTabuleiro: coleções na simulação de turnos
-
Conceitos abordados neste módulo:
- Map<K, V>;
- chave única;
- identidade versus posição;
- acesso eficiente por identificador;
- inserção duplicada;
- remoção e busca por chave;
- escolha entre lista e mapa;
- manutenção de uma única fonte de verdade.
-
Não é ensinar mapa apenas como nova estrutura, mas discutir:
- O elemento é localizado por posição, por busca ou por identidade única?
-
Conceitos principais: identidade, chave e, quando houver duplicação real, DRY.
-
@agenda gain=1 hard=1 size=1 type=make eval=testGerencie os vários contatos de uma agenda -
@agiota gain=1 hard=1 size=1 type=make eval=testGerencie os empréstimos do agiota -
@petshop gain=1 hard=1 size=1 type=make eval=testMeu Petshop -
@porquinho gain=1 hard=1 size=1 type=make eval=testGuardando moedas e itens em um cofrinho
Neste bloco, você aprenderá a manter diferentes formas de acesso aos mesmos objetos, preservando uma única fonte de verdade e a consistência entre as estruturas.
-
@favoritos gain=1 hard=1 size=1 type=make eval=testCache e redundância em @favoritos -
@ligacao gain=1 hard=1 size=1 type=make eval=test@ligacao
-
Conceitos abordados neste módulo:
- contrato comum;
- implementações diferentes;
- substituição de condicionais por delegação;
- composição versus herança;
- tipos abstratos ou interfaces;
- extensibilidade;
- substituição segura.
-
Possíveis princípios, apresentados gradualmente:
- OCP, quando um novo comportamento puder ser adicionado sem alterar a coordenação;
- LSP, quando houver substituição por subtipos;
- ISP, apenas quando uma interface estiver grande demais;
- DIP, quando o domínio precisar deixar de depender de uma implementação concreta.
-
@zoo gain=1 hard=1 size=1 type=make eval=selfSistema de Animais no Zoológico -
@pagamento gain=1 hard=1 size=1 type=make eval=selfSistema de Pagamentos de um Marketplace -
@shapes gain=2 hard=1 size=1 type=make eval=testUtilizando interface em círculos e retângulos -
@estacionamento gain=3 hard=1 size=1 type=make eval=testCobrando o valor de carros e motos -
@cofre gain=3 hard=1 size=1 type=make eval=testSeu porquinho cresceu -
@cadastro gain=3 hard=1 size=1 type=make eval=testCrie as contas poupança e corrente
-
@twitter gain=1 hard=1 size=1 type=make eval=testTwitter antes de ser bloqueado -
@salario gain=1 hard=1 size=1 type=make eval=test@salario -
@comunicador gain=1 hard=1 size=1 type=make eval=test@comunicador -
@paciente gain=1 hard=1 size=1 type=make eval=test@paciente -
@whatsapp gain=1 hard=1 size=1 type=make eval=test@whatsapp -
@grupo gain=1 hard=1 size=1 type=make eval=test@grupo -
@mensagem gain=1 hard=1 size=1 type=make eval=test@mensagem -
@vetores gain=1 hard=1 size=1 type=make eval=test@vetores -
@anotacoes gain=1 hard=1 size=1 type=make eval=testAdicione título e texto em @anotacoes -
@trem gain=1 hard=1 size=1 type=make eval=test@trem -
@produto gain=1 hard=1 size=1 type=make eval=test@produto - Padrão Composite e Decorator -
@git_pratica gain=1 hard=1 size=1 type=make eval=testPrática git -
@+ts_install gain=1 type=read eval=selfInstalação TS -
@tarifas gain=1 hard=1 size=1 type=make eval=testOperações de saque, depósito, extrato
-
@memoria gain=1 hard=1 size=1 type=make eval=testPesquisa sobre alocação de memória