Esta é uma disciplina essencialmente prática, presencial, associada à disciplina de Paradigmas de Programação.
O material da disciplina será atualizado ao longo do semestre e será um misto de materiais próprios e de terceiros (qualificados), incluindo vídeos, livros, exercícios, etc.
Acompanhem as atividades a serem desempenhadas em cada aula.
Acompanhem sua frequência no portal do aluno.
Em caso de dúvidas de qualquer natureza, me contatem durante a aula ou no meu email da INF (piveta).
As avaliações da disciplina serão feitas através de trabalhos. As notas e presenças estarão no portal do aluno.
Os trabalhos devem ser enviados via Google Classroom e devem ser feitos individualmente ou em duplas.
Para inscrição: https://classroom.google.com/c/Njg5NTc0MjEzNDEx?cjc=qzsowz7
Para acesso: https://classroom.google.com/c/Njg5NTc0MjEzNDEx
Documentos:
Aula 1 - 11/03 - Apresentação da Disciplina / Trabalho 1
Temáticas (vide ementa):
Reuso de Software
Separação de Interesses, Frameworks, Padrões, Modularização
Orientação a Objetos Avançada
Polimorfismo paramétrico (tipos genéricos), Expressões Lambda (closures), Inferência de Tipos, Tratamento de Exceções
Técnicas e Ferramentas de POO
IDEs
Sistema Legado
Material de Apoio
Vejam o material de Acesso a Dados, Camada de Acesso a Dados, Tipos Genéricos e Classes Abstratas e Programação Funcional em Java - Acesso a Dados
E vejam também as respectivas implementações
Introdução a Frameworks (Eduardo Martins Guerra - UNIBZ - Itália):
Aula 2 - 13/03 - Frameworks. Trabalho 1
Breve discussão acerca de frameworks no desenvolvimento de software:
Aula 3 - 18/03 - Trabalho 1
Discussão: Acesso a Dados e Camada de Acesso a Dados
Em vídeo: Acesso a Dados, Camada de acesso a dados
Exemplos
Aula 4 - 20/03 - Trabalho 1
Discussão: Tipos Genéricos e Classes Abstratas
Em vídeo: Vídeo
Exemplos:
Aula 5 - 25/03 - Trabalho 1
Acesso a dados usando inferência de tipos, records, expressões lambda, try with resources
Aula 6 - 27/03
Continuar com a implementação do Trabalho 1
Aula 7 a 10 - 01/04 a 10/04 - Trabalho 1
Entrega em 14/04
Cada dia de atraso acarreta o desconto de 1.0 na nota do trabalho (de um total máximo de 10.0).
Após 7 dias não serão mais aceitas entregas atrasadas e a nota correspondente ao trabalho será zero.
Aulas - 15/04 a 15/05 - Trabalho 2. Entrega 18/05.
Exemplo: Popular classes a partir dos meta-dados (e gerar código)
Exemplo: Gerando código usando uma ferramenta de templates (Velocity)
Temáticas (vide ementa)
Reuso de software
Orientação a Objetos Avançada
Metadados, anotações e reflexão
Técnicas e Ferramentas de POO
IDEs
Reflexão
Vídeo-aulas
Reflexão Computacional - Eduardo Piveta
Refatoração
Pesquisa UFSM
Um catálogo de refatorações envolvendo expressões lambda em Java (Dissertação de Mestrado)
Um catálogo de refatorações para evoluir programas Java (Dissertação de Mestrado)
Refatorações para a evolução de programas Java (Dissertação de Mestrado)
Mecanismos de busca por oportunidades de refatoração para padrões (Dissertação de Mestrado)
Busca por oportunidades de refatoração para aplicação de padrões de projeto (Dissertação de Mestrado)
Incorporação de novas refatorações para linguagem Fortran no IDE Eclipse (Dissertação de Mestrado)
Improving the search for refactoring opportunities on object-oriented and aspect-oriented software (Tese de Doutorado)
Aulas 20/05 a 17/06 - Trabalho 3
Temáticas
Boas práticas no desenvolvimento de software OO
Técnicas e Ferramentas de POO
Ferramentas de análise estática e refatoração
IA para desenvolvimento / low code / no code
Escolham uma ferramentas de low code, no code, automação de código, IA para desenvolvimento, LLMs. Estude a ferramenta. Monte uma apresentação de 20 - 30 minutos sobre a ferramenta a ser disponibilizada a todos.
Fazer a apresentação como um vídeo narrado e fazer upload no youtube ou loom ou algo do gênero (pode ser privado/não listado, desde que quem tenha o link tenha permissão de acesso). Pode ser em duplas ou individual.
A medida que forem escolhendo os temas, me avisem para que eu lance no site (para evitar (muitas) duplicatas de temas).
Envio do link até o dia 17/06.
Disponibilizarei a todos para que assistam nos dias 24 e 26.
Algumas sugestões (lista não exaustiva):
Replit: https://replit.com/
Lovable: https://lovable.dev/
Cursor: Cursor - The AI Code Editor
Windsurf: https://windsurf.com/editor
Copilot: https://github.com/features/copilot
Bubble: https://bubble.io/
Firebase: https://firebase.google.com/?hl=pt-br
N8N: https://n8n.io/
Geração de código em LLMs:
ChatGPT, Gemini, Grok, Claude
Aula 17/06 - Finalização do T3 - Envio do link
Aula 24/06 e 26/06 - Assistir as apresentações dos colegas
Gemini - Gabriel Moro
Grok
Bruno Perussatto - Apresentação Grok - T3 LabOO
Alan - Trab3 LabOO - IA Grok
ChatGPT - Felipe Sanfelice
Lovable - Guilherme
GDevelop vs Unity (com DeepSeek)
Alisson Canabarro - Video T3 Lab POO - YouTube
Claude
Alejandro
Convex
Marcos e Eduardo
Copilot
Salesforce Flows
Matheus - Salesforce Flows
Ana e Felipe - LABOO - T3 da Ana e Felipe - Google Drive
Aula 26/06 - Assistir as apresentações dos colegas
Reflexão Computacional
Anotações e Metadados (Eduardo Martins Guerra - INPE):
Exceções (Karina Valdivia Delgado - USP):
Livros:
Extras:
Type Inference: Friend or Foe (Venkat Subramaniam - Agile Developer Inc.)
JPA em Java (Rafael Sakurai)
Exceções:
Assistir aos vídeos relacionados a Boas Práticas de Programação:
Slides narrados (clicar em Apresentar)
Testes e refatoração:
TDD (Rafael Sakurai)
Refatoração (Eduardo Martins Guerra - INPE): https://www.youtube.com/watch?v=3ouXTIgIyxw
Hands-on (Eduardo Martins Guerra - INPE): https://www.youtube.com/watch?v=kA8Pq2prY9Y
TDD e JUnit - Introdução
Frameworks
Exame
Geral:
Aulas de paradigmas (incluindo POO - slides narrados - UFSM):
Programação Orientada a Objetos - Codecademy (em Java):
Codecademy (outras linguagens OO - Python, C#, C++, Kotlin, PHP, JavaScript, Ruby, Go, Swift):