Programação de Computadores II (TCC-00.174)
horários das aulas: terças (sala 406 da UFASA) e quintas (sala 503 da UFASA) de 8:00 às 11:00h
Objetivos do curso
Consolidar o domínio completo de uma linguagem de programação e capacitar a construção estruturada de programas interativos de médio porte e de compexidade média.
Tópicos abordados
- Introdução a linguagem Java;
- Conceito de estruturas de dados e seus algoritmos;
- Conceitos de orientação a objetos;
- Representação de dados por meio de agregados;
- Entrada e saída padrão;
- Tipos recursivos;
- Listas lineares;
- Recursividade;
- Entrada e saída por meio de arquivos;
- Tipos genéricos; e
- Coleções de objetos em Java.
Critério de avaliação
O sistema de avaliação da disciplina consiste na realização de três provas (P1, P2 e P3) e de um trabalho computacional de grande porte (T). PX, PY e M são calculados como segue: PX = (min{P1, P2} + T)/2, PY = max{P1, P2} e M = (PX + PY + P3)/3. Se M ≥ 6.0, o aluno será aprovado e a média final (MF), isto é, a nota que consta no histórico escolar do discente será igual a M.
Senão, se M < 4.0, o aluno será reprovado com MF igual a M.
Senão, o discente fará uma verificação suplementar (VS), com data e horário pré-estabelecidos, respeitando-se o prazo de 48 horas após a divulgação de M. As provas serão realizadas nos horários de aula.
Literatura básica
Horários de Monitoria
- Marcel (marcelsheeny@gmail.com): segundas de 9:00 às 11:00h, quartas de 9:00 às 13:00h e sextas de 14:00 às 16:00h; e
- Matheus (mateuspelegrino@gmail.com): segundas de 16:00 às 18:00h, terças de 8:00 às 11:00h e quintas de 8:00 às 11:00h.
Aulas ministradas
10/09/13
- Apresentação do curso: objetivos, tópicos abordados e critério de avaliação;
- Tipos primitivos;
- Operadores;
- Precedência de operadores; e
- Conversões entre tipos.
- Datas importantes:
- 29/10/13: P1
- 26/11/13: P2
- 19/12/13: P3
- 07/01/13: Entrega do trabalho computacional
- 14/01/13: VS
12/09/13
- Decisões com if;
- Seleção com switch-case-default;
- Repetições com while, do-while e for;
- break;
- Vetor de tipos primitivos; e
- Exemplos feitos em sala.
- OBS: material disponibilizado pelo Curso: introdução a Java.
17/09/13 (não houve aula)
19/09/13 (não houve aula)
24/09/13
- Construção de classes;
- Definição de atributos;
- Referências para objetos;
- Construção de métodos;
- this;
- Inicializações e construtores;
- Finalizadores;
- Gerência de memória em Java (coleta automática de lixo);
- Membros de classe versus membros de objetos;
- Motivação para o uso de membros estáticos; e
- Exemplo: modelagem de banco e conta.
26/09/13
- Herança;
- Hierarquia de árvore versus hierarquia de floresta;
- Hierarquia de Java;
- Sobrecarga de construtores e métodos;
- Polimorfismo;
- Conversão de tipos;
- Redefinição de métodos;
- Controle de acesso; e
- Exemplos: modelagem de banco, conta e poupança, e controle de acesso sobre as últimas classes.
01/10/13
- instanceof;
- Classes abstratas;
- Herança simples versus herança múltipla;
- Interfaces;
- Vetores;
- Matrizes; e
- Exercícios de classes: agência de casamentos usando classes abstratas e interface.
- OBS: material disponibilizado pelo Curso: orientação a objetos e revisão de vetores e matrizes.
03/10/13
- Motivação para o uso de listas lineares;
- Definição de listas lineares usando vetores;
- Operações básicas: (a) construtor, (b) busca de um elemento, (c) impressão da lista, (d) inserção de um elemento na lista, (e) remoção de um elemento da lista e (f) inserção de um elemento no final da lista.
- Motivação para o uso de listas lineares ordenadas;
- Definição e implementação desse tipo de lista;
- Motivação para o uso de pilhas;
- Implementação de pilhas com vetores: (a) construtores, (b) retirada de um elemento do topo da pilha - a operação pop, e (c) inserção de um elemento no topo da pilha - a operação push;
- Motivação para o uso de filas; e
- Implementação de filas por meio de vetores.
- OBS: material disponibilizado pelo Curso: listas lineares.
08/10/13
- Exercício sobre polinômios: classes polinômio propriamente dita.
- Exercícios sobre os assuntos da P1: fundamentos de java, orientação a objetos, uso de vetores e matrizes e listas lineares.
10/10/13
- Exercícios a respeito de listas lineares: acesso a lista uma única vez, ordenação (usando o método de seleção) e merge de listas linereas e exercício do avião (incompleto).
17/10/13
- Tratamento de exceções; e
- Exemplo de aplicação.
- OBS: material disponibilizado pelo Curso: tratamento de exceções.
29/10/13 (primeira prova)
31/10/13
- Motivação para o uso de listas;
- Definição de listas;
- Operações básicas: (a) inicialização, (b) busca de um elemento, (c) impressão da lista, (d) inserção de um elemento no início e no final da lista, (e) remoção de um elemento da lista e (f) implementações recursivas; e
- Implementação da lista que será usada como base para as definições de pilha e de fila.
05/11/13 (aula de laboratório no LCC)
- Implementações de pilha e de fila com listas simplesmente encadeadas.
07/11/13
- Definição de listas duplamente encadeadas;
- Operações básicas: (a) inicialização, (b) busca de um elemento, (c) impressão da lista, (d) inserção de um elemento no início e no final da lista e (e) remoção de um elemento da lista;
- Implementação desse tipo de lista; e
- Recursão: definição e exemplos, incluindo-se, fatorial com e sem recursão de cauda e Torres de Hanói.
- OBS: material disponibilizado pelo Curso: listas encadeadas, recursão e exercícios.
12/11/13
- Revisão da nota da P1; e
- Mais exemplos de recursão: quick-sort para números inteiros e criação da Matriz de Hadamard.
- Trabalho computacional: tela quente.
14/11/13
- Mais exemplos de recursão, incluindo-se código de gray;
- Definição de backtracking; e
- Exemplo de backtracking: o problema das N rainhas.
- OBS: material disponibilizado pelo Curso: backtracking e exercícios.
19/11/13 (aula de laboratório no LCC)
21/11/13
- Mais exemplos de backtracking usando o template: o problema das N rainhas, labirinto e sudoku.
26/11/13 (segunda prova)
28/11/13
- Conceitos sobre arquivos;
- Arquivos e fluxos (streams) em Java;
- Fluxos de entrada e de saída; e
- Fluxos de caracteres; e
- Exemplo de fluxo de caracteres.
- OBS: hierarquias de java: fluxo de bytes e fluxo de caracteres.
03/12/13 (aula de laboratório no LCC)
05/12/13
- Arquivos de acesso randômico;
- Métodos da classe RandomAccessFile;
- Definição de tipos genéricos;
- Motivação e vantagens do uso deste tipo; e
- Widecards.
- OBS: material disponibilizado pelo Curso: arquivos, tipos genéricos, exercícios de arquivos e exercícios de tipos genéricos.
10/12/13
- Definição de coleções; e
- Exemplo de aplicação: copas do mundo.
- OBS: material disponibilizado pelo Curso: coleções.
12/12/13
- Aula de exercícios: campeonato de vôlei.
17/12/13 (aula de laboratório no LCC, composta de revisão da nota da segunda prova e aula de dúvidas para a terceira prova)
19/12/13 (terceira prova)
07/01/14 (revisão da nota da terceira prova às 9:00h na sala 406 da UFASA)
14/01/14 (VS)