Programação Orientada a Objetos

Abstraindo o Mundo Real com Código

Código: INF1922 | Turma: MINF-0103

Carga horária: 72h (4 créditos)

Horário e local: Terças e Sextas às 09:20 – 11:00 | Bloco D – Sala/Laboratório 402 - UNICAP

Esta disciplina aprofunda a Programação Orientada a Objetos (POO) com Java. Os estudantes aprenderão como a POO transforma o projeto e o desenvolvimento de software, permitindo modelar sistemas complexos de forma intuitiva, modular e escalável. O foco é criar soluções robustas e reutilizáveis, preparando desenvolvedores para os desafios da engenharia de software contemporânea.

Tópicos Principais:

Fundamentos de Java e Introdução à POO

Classes, Objetos e o Princípio do Encapsulamento

Herança e Polimorfismo: Reutilização e Flexibilidade

Abstração e o Uso de Interfaces

Tratamento de Exceções e Coleções

Padrões de Projeto e Concorrência em Java

Bem-vindo à Disciplina!

Uma jornada do conceito à implementação

Seja bem-vindo à Programação Orientada a Objetos com Java! Aqui você aprenderá a pensar em objetos, modelar domínios complexos e construir sistemas robustos e reutilizáveis.

O que esperar desta disciplina?

Evolução Progressiva

Cada módulo constrói sobre o anterior, do básico de Java até os padrões de projeto.

Aprendizado Ativo

O foco é compreender a lógica da POO e tomar decisões de design fundamentadas.

Projeto Real

Você desenvolverá um sistema orientado a objetos completo aplicando todos os conceitos aprendidos.

Habilidades Profissionais

Sairá com competências em modelagem POO, padrões de projeto e boas práticas de desenvolvimento.

Como ter sucesso?

  • Pratique a codificação diariamente e tire dúvidas nas aulas
  • Comece o projeto cedo e evolua gradualmente a cada etapa
  • Entenda os conceitos da POO, não apenas a sintaxe do Java

Objetivos da Disciplina

Conheça as competências que você desenvolverá ao longo da disciplina.

Objetivo Geral

Capacitar o estudante a projetar, implementar e documentar sistemas orientados a objetos em Java, aplicando os quatro pilares da POO, padrões de projeto e boas práticas de engenharia de software. O foco central é o desenvolvimento de um projeto integrador completo, do design à defesa técnica.

Objetivos Específicos

Compreender o paradigma OO e sua diferença em relação à programação procedural

Implementar classes, objetos, construtores e modificadores de acesso em Java

Aplicar herança, polimorfismo e abstração na modelagem de hierarquias

Utilizar interfaces e classes abstratas para design flexível e extensível

Aplicar padrões de projeto GoF e GRASP em contextos reais

Mapa de Competências × Avaliação

Organização em Macro-Módulos

A disciplina está organizada em quatro macro-módulos progressivos, do conceitual ao prático.

1

Macro-Módulo I

Fundamentos de Java e POO

  • Introdução ao Java
  • Tipos de dados e operadores
  • Estruturas condicionais
  • Estruturas de repetição (loops)
2

Macro-Módulo II

Pilares da POO

  • Modelagem de classes
  • Construtores
  • Encapsulamento
  • Herança
  • Polimorfismo
3

Macro-Módulo III

Desenvolvimento de Aplicações Java

  • Classes abstratas
  • Interfaces
  • Pacotes e organização de código
  • Tratamento de exceções
  • Coleções e Generics
  • Arquivos e Fluxos I/O
  • Threads e Concorrência
  • Padrões de Projeto (GoF e GRASP)
4

Macro-Módulo IV

Integração dos conceitos e desenvolvimento orientado do Projeto Integrador

  • Revisão e integração dos conceitos
  • Preparação final do projeto
  • Oficinas de desenvolvimento
  • Apresentação dos projetos

Metodologia de Ensino

Nossa abordagem combina teoria e prática por meio de metodologias ativas para o desenvolvimento progressivo de competências.

Estratégias Pedagógicas

Resolução progressiva de problemas

Listas estruturadas (1 fácil, 2 médias, 1 difícil, 1 desafio)

Desenvolvimento de Projeto Integrador

Oficinas práticas de desenvolvimento Java

Revisões estruturadas antes dos GQ

Aprendizagem baseada na Taxonomia de Bloom

Ferramentas e Recursos

Conheça as ferramentas que utilizaremos e as referências bibliográficas recomendadas.

Bibliografia Básica

  • MARTIN, R. C. Clean Code. Prentice Hall.
  • FREEMAN, E.; ROBSON, E. Head First Design Patterns. O'Reilly.
  • BLOCH, J. Effective Java. Addison-Wesley.

Bibliografia Complementar

  • HORSTMANN, C. S. Core Java – Fundamentos. Pearson.
  • SCHILDT, H. Java: A Beginner's Guide. McGraw-Hill.
  • GAMMA, E. et al. Design Patterns (GoF). Addison-Wesley.
  • DEITEL, P.; DEITEL, H. Java: How to Program. Pearson.

Material da Disciplina

Documentação de Referência

Material das Aulas e Exercícios

📘 Macro-Módulo I – Fundamentos de Java e POO

Bases da linguagem Java e introdução ao paradigma orientado a objetos.


📗 Macro-Módulo II – Pilares da Programação Orientada a Objetos

Os mecanismos centrais da POO para modelagem e reutilização de software.


📙 Macro-Módulo III – Desenvolvimento de Aplicações Java

Estruturação de aplicações com interfaces, exceções, coleções, I/O e padrões de projeto.

Revisões


📕 Macro-Módulo IV – Integração dos Conceitos e Projeto Integrador

Integração dos conceitos no desenvolvimento e apresentação de um sistema completo.

Sistema de Avaliação

Entenda como sua nota será calculada e os requisitos para aprovação na disciplina.

1º GQ (Peso 2)

Foco: Fundamentos de Java, Classes, Objetos, Encapsulamento, Herança e Polimorfismo.

2º GQ (Peso 3)

Foco da Prova: Padrões de Projeto e Integração dos Conceitos (Aulas 17–20). As Aulas 10–16 (Classes Abstratas, Interfaces, Exceções, Coleções, Arquivos e Threads) são avaliadas pela Avaliação Formativa III e pelo Projeto Integrador.

Cronograma da Disciplina

Acompanhe o planejamento completo das aulas, incluindo datas de avaliações e feriados.

Carga horária: 72h | Terças e Sextas | 09:20–11:00 | Bloco D – Lab 402

📘 Macro-Módulo I – Fundamentos de Java e POO

📗 Macro-Módulo II – Pilares da POO

📙 Macro-Módulo III – Desenvolvimento de Aplicações Java

📕 Macro-Módulo IV – Integração dos Conceitos e Projeto Integrador

Projeto Integrador

Desenvolvimento de um Sistema Orientado a Objetos

Objetivo

Desenvolver um sistema orientado a objetos completo em Java, partindo da modelagem conceitual até a implementação com padrões de projeto e defesa técnica, aplicando os conhecimentos construídos ao longo da disciplina.

Cada etapa do Projeto Integrador corresponde aos conteúdos desenvolvidos até aquele momento da disciplina, permitindo a construção incremental de um sistema completo.


1º GQ

Etapa 1 – Proposta e Escopo

Entrega: 11/09/2026 (Enc. 11 – Lançamento do Projeto Integrador)

Entregáveis:

  • Documento de proposta do sistema
  • Diagrama de casos de uso
  • Definição do escopo e domínio escolhido
  • Justificativa técnica da escolha (1 página)

Valor: 0,5 ponto

Etapa 2 – Modelagem de Classes

Entrega: 29/09/2026 (Enc. 16 – Revisão 1º GQ)

Entregáveis:

  • Diagrama de classes UML completo
  • Identificação de herança e interfaces
  • Atributos e métodos com visibilidade correta
  • Justificativa das decisões de modelagem

Valor: 1,0 ponto

Etapa 3 – Implementação Parcial

Entrega: 02/10/2026 (Enc. 17 – 1º GQ)

Entregáveis:

  • Classes principais implementadas em Java
  • Encapsulamento aplicado (private + getters/setters)
  • Construtores definidos corretamente
  • Código versionado no GitHub

Valor: 1,5 pontos



2º GQ

Etapa 4 – Implementação Avançada

Entrega: 10/11/2026 (Enc. 28 – Oficina de Desenvolvimento do Projeto Integrador I)

Entregáveis:

  • Exceções tratadas com classes específicas
  • Coleções utilizadas adequadamente (List, Map, Set)
  • Leitura/escrita de arquivos implementada
  • Testes básicos realizados

Valor: 2,0 pontos

Etapa 5 – Padrões de Projeto

Entrega: 17/11/2026 (Enc. 30 – Oficina de Desenvolvimento do Projeto Integrador III)

Entregáveis:

  • Ao menos 2 padrões GoF identificados e aplicados
  • Justificativa de uso documentada
  • Código refatorado com os padrões
  • README atualizado

Valor: 1,5 pontos


Etapa 6 – Defesa Técnica

Defesa: 24/11/2026 (Enc. 32 – Apresentação dos Projetos – Defesa Técnica)

Entregáveis:

  • Apresentação de 10 a 15 minutos
  • Demonstração do sistema funcionando
  • Explicação das decisões de design e padrões aplicados
  • Código completo no GitHub
  • Respostas aos questionamentos da banca

Valor: 1,5 pontos

Formação de Grupos - Projeto Integrador

Orientações para organização e registro dos grupos

Tamanho dos Grupos

  • Mínimo: 2 estudantes
  • Máximo: 4 estudantes
  • Recomendação: grupos com 3 integrantes, permitindo melhor divisão das responsabilidades.

Modalidade de Formação

  • Formação livre até 11/09/2026 (Enc. 11 – Lançamento do Projeto Integrador)
  • Após essa data, o professor poderá realocar estudantes sem grupo

Composição Estratégica (Recomendação)

Sugere-se que o grupo tenha perfis complementares:

  • 1 perfil arquiteto (modelagem de classes e UML)
  • 1 perfil implementador (codificação Java e lógica)
  • 1 perfil qualidade (testes, exceções e refatoração)
  • 1 perfil integrador (padrões de projeto e documentação)

Os papéis são apenas uma recomendação e podem ser acumulados por um mesmo integrante, especialmente em grupos de 2 ou 3 pessoas.

⚠️ Não é obrigatório, mas melhora desempenho.

Registro Oficial do Grupo

Até 11/09/2026, cada grupo deve enviar:

  • Nome do projeto
  • Integrantes
  • Sistema escolhido (tema do projeto)
  • Justificativa do domínio (1 parágrafo)

Sem registro formal → grupo não validado.

Troca ou Saída de Integrante

  • Permitida apenas até 29/09/2026 (Enc. 16 – Revisão 1º GQ / Entrega da Modelagem de Classes)
  • Após essa data: mudanças somente com justificativa formal
  • Reorganização pode implicar redefinição de tarefas

Situações Especiais

  • Aluno sem grupo após prazo: Será alocado em grupo existente ou desenvolverá projeto individual (com complexidade reduzida).
  • Conflitos internos: Comunicação formal ao professor. Avaliação individual pode ser aplicada.

Checklist do Projeto Integrador

Verifique todos os requisitos antes de cada entrega

ETAPA 1 – Proposta e Escopo (11/09/2026 | Enc. 11)

  • Documento de proposta escrito e revisado
  • Diagrama de casos de uso elaborado
  • Escopo e domínio do sistema definidos
  • Justificativa técnica da escolha (1 página)
  • Grupo registrado oficialmente

ETAPA 2 – Modelagem de Classes (29/09/2026 | Enc. 16)

  • Diagrama de classes UML completo
  • Herança e interfaces identificadas e justificadas
  • Atributos e métodos com visibilidade correta (public/private/protected)
  • Relacionamentos entre classes representados
  • Justificativa das decisões de modelagem

ETAPA 3 – Implementação Parcial (02/10/2026 | Enc. 17 – junto ao 1º GQ)

  • Classes principais implementadas em Java
  • Encapsulamento aplicado (private + getters/setters)
  • Construtores definidos corretamente
  • Herança e polimorfismo implementados
  • Código versionado no GitHub com commits descritivos

ETAPA 4 – Implementação Avançada (10/11/2026 | Enc. 28)

  • Exceções específicas tratadas com mensagens úteis
  • Coleções utilizadas adequadamente (List, Map, Set)
  • Leitura e/ou escrita de arquivos implementada
  • Testes unitários básicos realizados e documentados (JUnit)
  • Código limpo e sem duplicação
  • README atualizado com descrição do sistema e instruções de execução

ETAPA 5 – Padrões de Projeto (17/11/2026 | Enc. 30)

  • Ao menos 2 padrões GoF identificados e aplicados
  • Justificativa de uso de cada padrão documentada
  • Código refatorado com os padrões
  • README atualizado com descrição do sistema e padrões usados
  • Javadoc nas classes e métodos públicos

ETAPA 6 – Defesa Técnica (24/11/2026 | Enc. 32)

  • Código completo e funcional no GitHub
  • Apresentação preparada (slides ou demo ao vivo)
  • Todos os integrantes prontos para explicar qualquer parte
  • Demonstração do sistema funcionando
  • Segurança técnica nas respostas à banca

Linha do Tempo do Projeto

Acompanhe visualmente a evolução do seu projeto

1

11/09/2026 – Etapa 1: Kickoff + Proposta e Escopo

Formação dos grupos, registro do projeto e entrega da Proposta e Escopo.

2

29/09/2026 – Etapa 2: Modelagem de Classes

Diagrama de classes UML completo com herança, interfaces e justificativa das decisões.

3

02/10/2026 – 1º GQ + Etapa 3: Implementação Parcial

Prova escrita (Aulas 01–09) e avaliação da implementação parcial das classes principais.

4

06/10/2026 – 2ª Chamada do 1º GQ

Prova de segunda chamada para estudantes que não realizaram o 1º GQ na data regular (Aulas 01–09).

5

10/11/2026 – Etapa 4: Implementação Avançada

Exceções, coleções (List, Map, Set), I/O e testes básicos implementados.

6

17/11/2026 – Etapa 5: Padrões de Projeto

Ao menos 2 padrões GoF aplicados, documentados e com código refatorado.

7

24/11/2026 – Etapa 6: Defesa Técnica

Apresentação oral, demonstração do sistema funcionando e código completo no GitHub.

8

27/11/2026 – 2º GQ

Prova escrita sobre Aulas 17–20 (Padrões de Projeto e integração dos conteúdos).

9

01/12/2026 – 2ª Chamada do 2º GQ

Prova de segunda chamada para estudantes que não realizaram o 2º GQ na data regular.

Políticas da Disciplina

Regras, prazos e conduta acadêmica

Frequência

  • Frequência mínima obrigatória: 75% das aulas
  • Atrasos superiores a 15 minutos podem ser considerados ausência

Entregas

  • Entregas fora do prazo sofrem desconto progressivo
  • Plágio resulta em nota zero
  • Código deve ser executável e funcional

Avaliações (GQ)

  • 1º GQ: 10 pontos (peso 2); 2º GQ: 10 pontos (peso 3)
  • Prova escrita do 2º GQ vale 4,0 pts; Projeto Integrador vale 5,0 pts
  • 2ª chamada disponível sem necessidade de atestado
  • Notas do Projeto compõem a nota do respectivo GQ

Conduta Acadêmica

  • IA pode ser usada como apoio, mas o aluno deve dominar todo o código produzido
  • Na defesa, todas as decisões técnicas devem ser explicadas
  • Integridade acadêmica é fundamental

Controle de Versão com GitHub

  • Uso do GitHub é obrigatório; commits frequentes são esperados ao longo do desenvolvimento
  • O histórico de commits será avaliado e pode ser analisado na Defesa Técnica
  • Repositório pode ser público ou privado, conforme orientação do professor

Política de Atraso - Projeto Integrador

Entregas devem ocorrer até 23h59 do dia estipulado na plataforma institucional, com código versionado no GitHub e identificado com o nome do grupo. O horário considerado será o registrado pelo Microsoft Teams.

Tabela de Penalidade

Recursos Complementares

Materiais adicionais para aprofundar seu aprendizado

Documentação Oficial

Plataformas de Prática

Comunidades e Suporte

Ferramentas de Modelagem UML

  • PlantUML: diagramas UML a partir de texto

Vídeos

Dicas de Estudo

Orientação estratégica para maximizar seu aprendizado

Não decore, compreenda o design

Se você entende por que encapsular, getters e setters fazem sentido naturalmente.

Sempre pense em responsabilidade

Antes de criar uma classe, pergunte: ela faz uma coisa só?

Para dominar herança e polimorfismo

Treine hierarquias semânticas, @Override e referências do tipo pai — pontos clássicos de avaliação.

Para o Projeto

Código funcionando não basta: saiba explicar cada decisão de modelagem e padrão aplicado.

Para o 2º GQ

O diferencial está em aplicar padrões GoF com justificativa, saber escolher entre interface e classe abstrata, e escrever código limpo e testável.

Erros Comuns na Disciplina

Aprenda com os erros mais frequentes e evite-os

Erros Comuns em Modelagem e POO

Confundir Classe com Objeto

Classe é o molde; objeto é a instância — são conceitos distintos e não devem ser confundidos.

Criar atributos que deveriam ser classes

Se algo tem comportamento próprio e relacionamentos, provavelmente é uma classe, não um atributo simples.

Herança sem justificativa semântica

Use herança apenas para relações reais de "é um" — prefira composição quando a relação for "tem um".

Erros Comuns em Implementação

Não aplicar encapsulamento corretamente

Atributos públicos violam o princípio — use sempre private com getters/setters e validação.

Métodos com múltiplas responsabilidades

Divida métodos longos em partes menores e focadas para facilitar testes e manutenção.

Erros Comuns em Padrões e Projeto

Aplicar padrão GoF sem justificativa

Use um padrão apenas quando ele resolve um problema real — saiba sempre explicar a escolha.

Não tratar exceções adequadamente

Trate exceções específicas com mensagens úteis e nunca deixe um catch vazio.

Não versionar o código com Git

Faça commits descritivos a cada etapa concluída para proteger seu trabalho e facilitar a defesa técnica.

Deixar o projeto para a última hora

O projeto é incremental — atrasos se acumulam e comprometem a qualidade da defesa.

O que Diferencia Nota 10?

Critérios de excelência que elevam seu projeto

Em Modelagem e Design

Diagrama de classes coeso e elegante

Um modelo simples, bem justificado e com responsabilidades claras vale mais que um diagrama complexo sem propósito.

Herança e interfaces com sentido semântico

Explique por que aquela hierarquia existe — a justificativa demonstra maturidade técnica.

Nomenclatura consistente e profissional

Use nomes claros e descritivos, evitando abreviações confusas ou nomes genéricos como "Classe1".

Em Implementação

01

Código limpo e bem documentado

Métodos curtos, nomes descritivos e Javadoc mostram que você domina boas práticas, não apenas que o código funciona.

02

Justificativa de cada decisão de design

Mostre que cada escolha — interface, padrão, hierarquia — foi consciente e fundamentada, não acidental.

Em Padrões de Projeto

Padrões GoF aplicados com propósito

Mostre que você identificou um problema real e escolheu o padrão certo para resolvê-lo.

Código refatorado e extensível

O código deve ter sido refatorado com os padrões, não apenas adicionado por cima.

README e documentação completos

Um README claro com instruções de execução e padrões aplicados demonstra profissionalismo.

Na Defesa Técnica

Segurança nas respostas

Responda com confiança e admita quando não souber — honestidade técnica é valorizada.

Capacidade de justificar decisões

Tenha respostas prontas para cada escolha de design: padrão utilizado, herança aplicada, interfaces criadas.

Demonstração prática funcionando

Mostre o sistema rodando e execute funcionalidades ao vivo para impressionar e validar seu trabalho.