Lab 361 - 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 por email e devem ser feitos individualmente ou em duplas.
Todos terão confirmação de recebimento.
As datas de entrega serão definidas ao longo do semestre.
Os pesos serão: T1 (3,5), T2 (1,5), T3 (1,5), T4 (3,5).
Documentos:
Entrega dos trabalhos:
Aula 1 - 11/03 - Apresentação da Disciplina
Ver o vídeo introdutório
Instalar uma IDE Java
Eclipse:
IntelliJ IDEA
Criem uma licença de estudante para baixarem a versão mais completa:
Popularidade IDEs, segundo o JRebel Productivity Report 2024:
IntelliJ IDEA 41%
Eclipse 23%
VSCode 19%
Ver os materiais necessários para cada aula na seção Material.
Aula 2 - 13/03 - Programação Imperativa (em Java) - Sequência
Em sala de aula:
Acompanhar a apresentação
Fazer os exercícios de sequência disponíveis nos slides de Introdução à Linguagem Java.
Comparar com possíveis respostas fornecidas:
Fazer as lições 1 e 2 de Java no Codecademy.
Em casa:
Ver a vídeo aula denominada Introdução à Linguagem Java - Sequência (ou os slides correspondentes), caso deseje recapitular o material discutido presencialmente em sala de aula.
Finalizar exercícios ou lições do Codecademy.
Aula 3 - 18/03 - Programação Imperativa (em Java) - Seleção
Ver a vídeo aula denominada Introdução à Linguagem Java - Seleção
Fazer a lição 4 de Java no Codecademy.
Finalizar os exercícios de sequência disponíveis nos slides de Introdução à Linguagem Java.
Fazer os exercícios de seleção (nos mesmos slides).
Aula 4 - 20/03 - Programação Imperativa (em Java) - Repetição
Ver a vídeo aula denominada Introdução à Linguagem Java - Repetição
Fazer as lições 5 e 6 de Java no Codecademy.
Adicionalmente, será útil usar a classe ArrayList para criar listas de objetos. Desta forma, vocês podem fazer também a seguinte atividade:
Finalizar os exercícios de seleção disponíveis nos slides de Introdução à Linguagem Java.
Fazer os exercícios de repetição (nos mesmos slides)
Comparar com as respostas fornecidas
Aula 5 - 25/03 - Programação Orientada a Objetos
Assistir à vídeo aula "Programação Orientada a Objetos" e "POO em Java"
Ler o texto de minha autoria
Java - Materiais Complementares
Especificação da linguagem:
Documentação:
Aula 6 - 27/03 - POO - Classes, atributos e métodos
Assistir à vídeo aula
Assistir aos vídeos Hands-on
Fazer a lição 3 de Java no Codecademy
Iniciar o Trabalho 1 (Peso 8,0 na N1)
Aula 7 - 01/04 - POO - Herança e Polimorfismo
Assistir à vídeo aula
Assistir aos vídeos Hands-on
Fazer a lição 8 de Java no Codecademy
Continuar o Trabalho 1
Complementar: Ver os vídeos complementares sobre o tema
-------------------------------------------------------------------------------------------------------------------------------------------
Aula 8 - 03/04 - Programação Lógica - Não presencial - Em Afastamento Saúde.
Assistir à vídeo aula "Programação Lógica"
Ler o capítulo de Programação Lógica do livro indicado no material.
Aula 9 - 08/04 - Programação Lógica - Não presencial - Em Afastamento Saúde.
Trabalho 2 (Peso 2,0 na N1) - Data de Entrega: 08/05
Faca um texto dissertativo de 2 a 3 páginas descrevendo a linguagem Prolog, incluindo exemplos.
-------------------------------------------------------------------------------------------------------------------------------------------
Aula 10 - 10/04 - Não presencial - - Em Afastamento Saúde - Continuar T1
Aula 11 - 15/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
Assistir à vídeo aula
Implementar o exemplo da vídeo aula / slides em uma IDE Java
Comparar com o exemplo de código fornecido no material
Continuar o Trabalho 1
Aula 12 - 17/04 - POO - Camada de Acesso a Dados
Assistir à vídeo aula
Implementar o exemplo da vídeo aula / slides em uma IDE Java
Comparar com o exemplo de código fornecido no material
Ver os vídeos Hands-on
Continuar o Trabalho 1
Aula 13 - 22/04 - POO - Continuar T1
Aula 14 - 24/04 - POO - Tipos Genéricos e Classes Abstratas
Assistir à vídeo aula
Implementar o exemplo da vídeo aula / slides em uma IDE Java
Comparar com o exemplo de código fornecido no material
Vejam também uma versão atualizada para as versões mais recentes de Java:
Ver os vídeos Hands-on
Slides denominados "Organização de Sistemas OO" (sem narração) e o exemplo de código.
Tal exemplo de código mostra como um sistema como o do Trabalho 1 poderia ser organizado em diferentes classes (no caso a interface é console).
Continuem a fazer o Trabalho 1.
Quem já finalizou o trabalho, assistir ao material complementar em vídeo "Boas práticas em programação orientada a objetos".
Atividade prática - Extra/Complementar
Quem quiser exercitar tipos genéricos e coleções no codecademy:
Aula 15 - 29/04 - POO - Finalizar T1.
Aulas 16 e 17 - Finalizar T1. Entrega em 22/05 (nova data).
UFSM suspende atividades acadêmicas durante a semana de 06 a 10 de maio (e depois até o dia 17/05)
Aula 18 - 20/05 - Programação Funcional em Java
Assistir à vídeo aula "Programação Funcional"
Ler o capítulo de Programação Funcional do livro indicado no material.
Haskell
Assistir aos vídeos de Haskell Básico
Fazer o tutorial interativo em https://tryhaskell.org/
Assistir à vídeo aula "Classes anônimas, expressões lambda, streams" para ver como Java implementa características funcionais
Implementar os códigos de exemplo do vídeo em uma IDE, executando-os.
Aula 19 - 22/05 - Atividades de Acolhimento em razão das enchentes
Aula 20 - 27/05 - Programação Funcional em Java - Acesso a Dados
Estudar os exemplos de acesso a dados usando expressões lambda
Aula 21 a 22 - 29/05 e 03/06 - Programação Funcional - Trabalho 3
POO - Tratamento de Exceções
Slides (pdf)
Especificação da linguagem - Leiam o capítulo "11 - Exceptions":
Trabalho 3. Entrega em 19/06
Implementar os seguintes exercícios usando obrigatoriamente 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
Aulas 23 a 30 - 05/06 a 01/07 - Trabalho Final. Entrega 08/07.
Crie um programa que, como entrada, receba um caminho/endereço para uma base de dados, leia os metadados desta base e gere, para cada tabela do esquema:
Classes de acesso a dados (padrão de projetos DAO - Data Access Object)
Classes que representam as entidades
Classes de exemplo da utilização das classes anteriormente criadas.
Por exemplo, se o usuário informar uma base de dados contendo as tabelas CLIENTES, FUNCIONARIOS, VENDAS, devem ser criados, ao menos, os arquivos: ClienteDao.java, Cliente.java, ClienteExemplo.java, FuncionarioDao.java, Funcionario.java, FuncionarioExemplo.java, VendaDao.java, Venda.java, VendaExemplo.java.
Para os arquivos de exemplo, devem ser gerados dados aleatórios para valores inteiros, de ponto flutuante, Strings, etc.
Este trabalho pode ser feito em duplas (não trios). Pode ser feito em qualquer linguagem OO, de sua escolha.
Usem a classe DatabaseMetaData para obter os metadados das tabelas, caso estejam usando Java. Um exemplo pode ser encontrado em: https://examples.javacodegeeks.com/core-java/sql/jdbc-databasemetadata-example/
Caso não estejam, leiam o código fornecido e procurem por alternativas na linguagem escolhida.
Observações:
Use tipos genéricos para reduzir a duplicação de código, caso possível.
Se a linguagem permitir, use inferência de tipos quando possível (procure documentação sobre o tema na linguagem que esteja usando).
Atividade extra-classe
Ler o capítulo de Programação Concorrente do livro indicado no material previamente, como forma de complementar o estudo sobre Paradigmas de Programação. Caso sobre tempo, usá-lo para a finalização dos trabalhos anteriores. Dada a quantidade de atividades que vocês estão tendo este semestre nas diferentes disciplinas, não será solicitado trabalho específico de programação concorrente (embora os conceitos possam ser cobrados no exame - para quem ficar de exame).
Leitura complementar: https://docs.oracle.com/javase/specs/jls/se22/html/jls-17.html
Realizar a seguinte atividade prática:
Material (parte do resto parece que o dropbox "bugou"):
Slides
Programação Orientada a Objetos
Programação Orientada a Objetos (novo - espelhando o texto)
Vídeos
Programação Orientada a Objetos
Programação Orientada a Objetos (novo - espelhando o texto)
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
Programação Orientada a Objetos - Eduardo Piveta
Trabalhos
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
A disponibilizar
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?