Lab 338 - CT/UFSM
O material da disciplina será atualizado ao longo do semestre.
As senhas de acesso aos textos de minha autoria foram/serão passadas por email. Qualquer coisa, solicitem no meu email da INF (piveta).
O material 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.
Os materiais serão disponibilizados antes de cada aula.
As avaliações da disciplina serão feitas através de trabalhos e/ou provas.
Os trabalhos devem ser enviados via Classroom e devem ser feitos individualmente ou em duplas.
As datas de entrega serão definidas ao longo do semestre.
*new* As provas terão peso 2.5 e os trabalhos peso 7.5
P1 (2.5)
T1 (0.5)
T2 (2.0)
T3 (1.5)
T4 (3.5)
Documentos:
Entrega dos trabalhos:
Aula 1 - 10/03 - Apresentação da Disciplina - Paradigmas de Programação
Apresentação da disciplina (Slides)
Quem não estiver na aula: Ver o vídeo introdutório (conteúdo reduzido)
Instalar uma IDE Java em sua máquina pessoal
Eclipse
IntelliJ IDEA
Criem uma licença de estudante para baixarem a versão mais completa:
VSCode
Quem quiser usar, descubra quais plug-ins baixar e boa sorte:
IDEs, ferramentas, etc:
Ver os materiais necessários para cada aula na seção Material.
Leitura: Capítulos 1 e 2 de Conceitos de Linguagens de Programação, de Robert Sebesta (disponível on-line na biblioteca - Ir em "Recursos Eletrônicos / Minha Biblioteca").
Aula 2 - 12/03 - Programação Imperativa - Java - Sequência
Apresentação sobre Java e sentenças relacionadas a algoritmos em sequência
Apresentação: Introdução à Linguagem Java
Disponível também em vídeo (Introdução à Linguagem Java - Sequência)
Leitura: Seções 1 a 5 do texto Introdução à Linguagem Java
Resolução de Exercícios
Lista de exercícios: Slides 23 e 24 da apresentação
Codecademy
Java Tutorial: Learn Java Programming | Codecademy
Fazer os módulos 1 e 2
Observações:
A partir do Java 23, use uma importação estática para chamar println diretamente: import static java.io.IO.println;
Aula 3 - 17/03 - Programação Imperativa - Java - Seleção
Apresentação acerca dos mecanismos de seleção usados em Java
Apresentação: Introdução à Linguagem Java (slide 25)
Disponível também em vídeo (Introdução à Linguagem Java - Seleção)
Leitura: Seção 6 do texto Introdução à Linguagem Java (até o final da seção 6.1.1)
Resolução de Exercícios
Lista de exercícios: Slides 26 a 32 da apresentação
Codecademy
Java Tutorial: Learn Java Programming | Codecademy
Fazer o módulo 4
Aula 4 - 19/03 - Programação Imperativa - Java - Repetição
Apresentação acerca dos mecanismos de repetição usados em Java
Apresentação: Introdução à Linguagem Java (slides 33 a 35)
Disponível também em vídeo (Introdução à Linguagem Java - Repetição)
Leitura: Seção 6.1.2 do texto Introdução à Linguagem Java
Resolução de Exercícios
Lista de exercícios: Slides 36 a 41 da apresentação
Codecademy
Java Tutorial: Learn Java Programming | Codecademy
Fazer o módulo 5 e 6
Aula 5 - 24/03 - Programação Imperativa - Java - Resolução dos Exercícios e Trabalho 1
Respostas dos exercícios de sequência, seleção e repetição (versão simplificada)
Esta versão das respostas foi desenvolvida usando Java 21 sem, no entanto, usar os recursos em preview da versão, que simplificariam mais o código:
Respostas dos exercícios usando Java 23. Para compilá-los e executá-los é necessário configurar a IDE para esta versão do compilador e é necessário habilitar a diretiva de compilação --enable-preview (configuração depende da IDE ou linha de comando - descubra como fazer para a sua):
Resposta exercícios de sequencia
Notem que os arquivos não estão em nenhum pacote específico (palavra reservada package), para que possamos usar o main simplificado, sem precisar definir uma classe e outras definições do método main.
Resposta exercícios de seleção
Aqui os arquivos já estão em um pacote.
Iniciar o Trabalho 1
Fazer os exercícios da Seção 8 texto Introdução à Linguagem Java
Entrega em 30/03
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.
Aula 6 - 26/03 - Programação Imperativa - Java - Trabalho 1 (continuação)
Continuar a resolução do Trabalho 1 em sala de aula.
Aula 7 - 31/03 - Programação Orientada a Objetos - Java
Apresentações:
Disponível também em vídeo:
Leitura:
Exercícios:
Codecademy:
Java Tutorial: Learn Java Programming | Codecademy
Fazer a lição 3
Aula 8 - 02/04 - POO - Classes, atributos e métodos
Apresentação
Disponível também em vídeo:
Assistir aos vídeos Hands-on
Hands-on (Eduardo Guerra - INPE)
Fazer a lição 3 de Java no Codecademy
Fazer os exercícios (1 a 11) dos slides.
Estude sobre algumas das principais classes da linguagem:
Aula 9 - 07/04 - POO - Acesso a Dados
Instalar um SGBD
PostgreSQL:
Instalar o PGAdmin e o driver JDBC durante a instalação do Postgres
Outro de sua preferência: https://chatgpt.com/share/67ef5da6-8a60-800c-ad7d-b94c3936c214
Obs: Na 338, aparentemente, não há postgres. Mas há um MySQL rodando. Usem o usuário e senha "mysql". Criem o banco com uma identificação de vcs, para diferenciar dos bancos dos outros usuários.
Para criar as tabelas: https://phoenixnap.com/kb/how-to-create-mysql-database-workbench
Apresentação
Disponível também em vídeo:
Implementar o exemplo dos slides em uma IDE Java
Comparar com o exemplo de código fornecido no material
Classes estudadas/usadas:
Leitura:
Leitura complementar: Exemplos de uso da linguagem Java
Aula 11 - 09/04 - POO - Camada de Acesso a Dados
Apresentação:
Disponível também em vídeo:
Implementar o exemplo da vídeo aula / slides em uma IDE Java
Para adicionar o .jar do driver JDBC no IntelliJ:
Comparar com o exemplo de código fornecido no material
Complementar - Ver os vídeos:
Java com MySQL (CRUD):
Aula 11 - 14/04 - POO - Tipos Genéricos e Classes Abstratas
Apresentação:
Ver o material complementar
Hands-on (Eduardo Guerra - INPE)
Comparar com o exemplo de código fornecido:
Iniciar o T2 (vide descrição mais abaixo - Aula 13)
Aula 12 - 16/04 - POO - Herança e Polimorfismo
Apresentação
Disponível também em vídeo:
Sealed Classes:
Fazer a lição 8 de Java no Codecademy
Fazer os exercícios dos slides.
Assistir aos vídeos Hands-on
Hands-on (Eduardo Guerra - INPE)
Material Complementar: Ver os vídeos complementares sobre o tema
Java - Vídeos (Eduardo Guerra - INPE)
Aula 13 - 23/04 - Trabalho 2
Exemplo:
Crie um programa para controle de um campeonato de futebol, que atenda aos seguintes requisitos mínimos:
Os dados devem ser armazenados em banco de dados
Deve ser possível cadastrar times, treinadores, jogadores e partidas. Cada cadastro deve possibilitar inclusão, alteração, exclusão e busca.
Cada treinador deve ter ao menos os seguintes dados: nome.
Cada jogador deve ter ao menos os seguintes dados: nome, posicao, idade, nr camisa.
Cada time deve ter os ao menos seguintes dados: nome, estádio, cidade, data de fundacao, jogadores (max 25).
Cada partida deve ter ao menos os seguintes dados: numero da rodada, time da casa, time visitante, gols do time casa, gols do visitante.
Deve ser possível gerar um relatório contendo a classificação geral dos clubes, de acordo com as informações informadas acerca dos gols (vitórias - 3 ptos, empates - 1 pto, derrota - 0 pts).
Aula 14 - 28/04 - Trabalho 2
Leitura:
Aula 15 - 30/04 - Prova 1
Aula 16 - 05/05 - Trabalho 2
Exemplos de implementação das interfaces Connection, Statement, PreparedStatement e ResultSet (driver PostgreSQL):
Tratamento de exceções
Liberação de recursos
Aula 17 - 07/05 - Trabalho 2
Aula 18 - 12/05 - Trabalho 2. Entrega 18/05. Podem entregar até 01/06 (mas não deixem os próximos trabalhos para trás).
Para gerar um script da criação da base de dados, ou copie individualmente os "create table" em um arquivo de texto com extensão .sql, ou use o pg_dump:
Para pegar o código gerado por auto-incremento no PostgreSQL (ou outro banco), usar o método getGeneratedKeys do PreparedStatement), que pega a chave gerada. Neste caso, o método inserir poderia retornar o objeto alterado, por exemplo (ao invés de retornar void).
Aula 19 - 14/05 - Programação Funcional
Visão geral
PF em Java - Records, Streams, Expressões Lambda. Exercícios (refazer os exercícios de repetição do início do semestre usando streams e expressões lambda).
Aula 20 - 19/05 - Programação Funcional
Exercícios.
Exemplo de deleção em cascata (dominio times/jogadores):
Exemplo: Acesso a Dados usando PF.
Usando inferência de tipos, records, expressões lambda, try with resources...
Exemplo usando o JDBCTemplate do framework Spring:
Aula 21 - 21/05 - Trabalho 3
Início do Trabalho 3.
Descrição:
Aula 22 - 26/05 - Trabalho 3
*new* - Entrega 09/06
Aula 23 - 28/05 - Trabalho 3
Aula 24 - 02/06 - Coleções (POO/PF/Programação Concorrente)
Texto:
Trabalho 4
Faça os exercícios de 1 a 7 do texto sobre coleções E
Faça o exercício 9 OU 10 do texto sobre coleções.
Acesso ao código das classes de Java:
Via GitHub - Exemplo - Interface Collection:
Via IDE (Eclipse, IntelliJ, e VSCode):
Aula 25 - 04/06 - Trabalho 4
Aula 26 - 09/06 - Trabalho 4
Aula 27 - 11/06 - Trabalho 4
Aula 28 - 16/06 - Trabalho 4.
Entrega 23/06.
Aula 29 - 18/06 - Programação Lógica
Finalizar Trabalho 4. Entrega em 23/06.
Atividades assíncronas:
Ver a apresentação em:
Programação Lógica (Prof. Andrea Charão - UFSM)
Ler o capítulo de programação lógica do livro: Conceitos de Linguagens de Programação, de Robert Sebesta (disponível on-line na biblioteca - Ir em "Recursos Eletrônicos / Minha Biblioteca").
Aula 30 - 23/06 - Programação Concorrente
Slides
Leitura + Exemplos
Texto
Livro: Conceitos de Linguagens de Programação, de Robert Sebesta (disponível on-line na biblioteca - Ir em "Recursos Eletrônicos / Minha Biblioteca").
Material Complementar
Programação Concorrente (Prof. Daniel Lucrédio - UFSCAR)
Exame - 30/06
Notas: Notas
Sala 387 - Anexo B do CT
Slides
Programação Orientada a Objetos
Programação Orientada a Objetos (novo - espelhando o texto)
Vídeos
Programação Orientada a Objetos
Classes, atributos e métodos
Hands-on (Eduardo Guerra - INPE)
Herança e Polimorfismo
Hands-on (Eduardo Guerra - INPE)
Camada de Acesso a Dados
Tipos Genéricos e Classes Abstratas
Hands-on (Eduardo Guerra - INPE)
Exemplos de código
Respostas dos exercícios de sequência, seleção e repetição (versão simplificada)
Esta versão das respostas foi desenvolvida usando Java 21 sem, no entanto, usar os recursos em preview da versão, que simplificariam mais o código:
Respostas dos exercícios de sequência, seleção e repetição (versão compartilhada com DSWeb)
Estas respostas separam a camada de apresentação (console) da camada de negócios (regras). Isto é feito porque a camada de negócios é reutilizada para outros clientes (na cadeira de Desenvolvimento para a Web, por exemplo). As respostas de vocês podem ser mais simples (em uma única classe por exercício).
Usando inferência de tipos, records, expressões lambda, try with resources...
Prática
Textos
Introdução à Linguagem Java - Eduardo K. Piveta
Programação Orientada a Objetos - Eduardo K. Piveta
Trabalho
Exemplo similar (outro domínio): Biblioteca v0.1, Readme
Ferramentas
IDEs Java: Eclipse, IntelliJ IDEA
Para obter uma licença de uso gratuita para estudantes do IDEA, preencha o formulário:
IDE colaborativa online: https://repl.it/
Material Complementar
Java - Vídeos (Eduardo Guerra - INPE)
Aulas de POO (UNIVESP) (Karina Valdivia Delgado - USP)
Codecademy (outras linguagens OO - Python, C#, C++, Kotlin, PHP, JavaScript, Ruby, Go, Swift):
Slides Narrados - Boas práticas em POO - Piveta (clicar em Apresentar)
Java/Hibernate: http://sites.inf.ufsm.br/dsweb/home/java
Especificação da Linguagem Java:
Slides
Vídeos
Haskell Básico (profs. Fabrício Olivetti e Emílio Francesquini - UFABC)
Programação Funcional em Java
Textos
Livro: Conceitos de Linguagens de Programação, de Robert Sebesta (disponível on-line na biblioteca - Ir em "Recursos Eletrônicos / Minha Biblioteca").
Exercícios
Implementar os seguintes exercícios usando Streams e Expressões Lambda em Java (veja os exemplos de código em Java 14 para ter uma ideia - .java e vídeo): https://drive.google.com/file/d/1I0ZpmQRSFT50q7g-LsftJb4Bzflp_QSH/view
Material Complementar
Haskell (profs. Fabrício Olivetti e Emílio Francesquini - UFABC)
Cálculo Lambda (prof. Cristiano Vasconcellos - UDESC)
Vídeos
Programação Lógica (Prof. Andrea Charão - UFSM)
Textos
Livro: Conceitos de Linguagens de Programação, de Robert Sebesta (disponível on-line na biblioteca - Ir em "Recursos Eletrônicos / Minha Biblioteca").
Material Complementar
Programação Lógica com Prolog (Prof. Daniel Lucrédio - UFSCAR)
Slides
Leitura + Exemplos
Texto
Livro: Conceitos de Linguagens de Programação, de Robert Sebesta (disponível on-line na biblioteca - Ir em "Recursos Eletrônicos / Minha Biblioteca").
Material Complementar
Programação Concorrente (Prof. Daniel Lucrédio - UFSCAR)
Trabalho
Na classe Scanner, ao usar nextInt, o "Enter" não é consumido, podendo dar problemas em leituras subsequentes. Como resolver?
R: Usar nextLine imediatamente após nextInt (pode-se criar uma função para ler inteiros que já faça isso todas as vezes ou então ler sempre com nextLine e usar Integer.parseInt para converter para inteiro.
Por que não concatenar strings para montar uma consulta SQL?
R: deem preferência para a classe PreparedStatement), pois isso torna seus programas passíveis de ataques de injeção de SQL:
Como uso classes internas em Java?
R: Classes internas podem ter detalhes de uso um pouco diferentes das classes usuais em Java. Verifique em:
Como usar campos auto-incremento no Postgres?
Como representar moedas em Java?
Como faço para acessar recursos disponíveis como preview da linguagem?
R: Use a diretiva de compilação --enable-preview
Como faço para usar o println diretamente (sem precisar usar System.out)?
R: A partir do Java 23, use uma importação estática:
import static java.io.IO.println;
Problemas
Em caso de problemas com links, acessar diretamente a pasta do Dropbox: