Escolar Documentos
Profissional Documentos
Cultura Documentos
Exercicios Fixação Java
Exercicios Fixação Java
Exerccio de Fixao #1
Sistema Universidade
Jorge H. C. Fernandes
Recife, 27 de Abril de 1999
Sistema Universidade
Requisitos
Classes e Cdigo
Execuo e Criao de Objetos
Exerccios e Outras Propostas de
Modificaes
Java Deployment Course - Exerccio #1. Copyright 1999, 1995. Jorge H. C. Fernandes. Todos os Direitos Reservados.
Requisitos do Sistema
Modelo ER Estendido
Java Deployment Course - Exerccio #1. Copyright 1999, 1995. Jorge H. C. Fernandes. Todos os Direitos Reservados.
Classes do Projeto
Pessoa
Aluno, AlunoGrad, AlunoIC, AlunoPos
Professor
Departamento, Curso, Disciplina, Turma
SetorEventos, Convite
SetorPagamento, Remunervel
Universidade
Java Deployment Course - Exerccio #1. Copyright 1999, 1995. Jorge H. C. Fernandes. Todos os Direitos Reservados.
Remunervel
Professor
Aluno
AlunoPos
AlunoGrad
AlunoIC
Java Deployment Course - Exerccio #1. Copyright 1999, 1995. Jorge H. C. Fernandes. Todos os Direitos Reservados.
Remunervel
interface Remuneravel {
int getDiasTrabalhados();
void setDiasTrabalhados(int diasTrabalhados);
int getRemuneracao();
}
Java Deployment Course - Exerccio #1. Copyright 1999, 1995. Jorge H. C. Fernandes. Todos os Direitos Reservados.
Pessoa
class Pessoa {
// Toda pessoa possui um nome e um endereo
String nome;
String endereco;
// construtor que recebe o nome e endereo
Pessoa(String nome, String endereco) {
this.nome = nome;
this.endereco = endereco;
}
// pessoa com endereo indefinido
Pessoa (String nome) {
this(nome, "Indefinido");
}
}
Java Deployment Course - Exerccio #1. Copyright 1999, 1995. Jorge H. C. Fernandes. Todos os Direitos Reservados.
Classe Pessoa:
Caractersticas do Cdigo
Dois construtores
// construtor que recebe o nome e endereo
Pessoa(String nome, String endereco) {
this.nome = nome;
this.endereco = endereco;
}
// pessoa com endereo indefinido
Pessoa (String nome) {
this(nome, "Indefinido");
}
Java Deployment Course - Exerccio #1. Copyright 1999, 1995. Jorge H. C. Fernandes. Todos os Direitos Reservados.
Aluno
abstract class Aluno extends Pessoa {
Curso curso; // curso que o aluno freqenta
int
creditosPagos; // Crditos j pagos pelo aluno
// cria um aluno (abstrato)
Aluno (String nome, String endereco, Curso curso) {
super(nome,endereco);
this.curso = curso;
this.creditosPagos = 0;
}
// adiciona crditos ao histrico do aluno
int adicionaCreditos(int creditos) {..}
// indica se o aluno j concluiu o curso
abstract boolean concluiu();
}
Java Deployment Course - Exerccio #1. Copyright 1999, 1995. Jorge H. C. Fernandes. Todos os Direitos Reservados.
AlunoGrad (Graduao)
public class AlunoGrad extends Aluno {
AlunoGrad (String nome, String endereco, Curso curso) {
super(nome, endereco, curso);
}
// cria um aluno de IC a partir de um aluno de graduao
AlunoIC iniciacaoCientifica(String projeto,
Professor orientador, int valorBolsa) {
return (new AlunoIC(nome, endereco, curso,
projeto, orientador, valorBolsa));
}
// indica se o aluno j cumpriu os requisitos para concluso
boolean concluiu() {
if (creditosPagos >= curso.creditosParaConclusao)
return true;
else
return false;
}
}
Java Deployment Course - Exerccio #1. Copyright 1999, 1995. Jorge H. C. Fernandes. Todos os Direitos Reservados.
Classe AlunoGrad:
Caractersticas do Cdigo
Construtor de AlunoGrad utiliza construtor
da superclasse
AlunoGrad (String nome, String endereco, Curso curso) {
super(nome, endereco, curso);
}
Java Deployment Course - Exerccio #1. Copyright 1999, 1995. Jorge H. C. Fernandes. Todos os Direitos Reservados.
Java Deployment Course - Exerccio #1. Copyright 1999, 1995. Jorge H. C. Fernandes. Todos os Direitos Reservados.
Professor
public class Professor extends Pessoa implements Remuneravel {
...
// turmas pelas quais o professor responsvel
private Turma[] turmas;
int qtdTurmas;
Professor(String nomeProfessor, String formacaoProfessor,
int salarioProfessor) {
..
turmas = new Turma[3];
qtdTurmas = 0;
}
Turma[] getTurmas() { return turmas; }
// inclui uma nova turma para o professor
void incluiTurma(Turma novaTurma) {
if (qtdTurmas < 3) {
turmas[qtdTurmas] = novaTurma;
qtdTurmas++;
}
}
}
Java Deployment Course - Exerccio #1. Copyright 1999, 1995. Jorge H. C. Fernandes. Todos os Direitos Reservados.
Classe Professor:
Caractersticas do Cdigo
Armazenamento de objetos em um array
// turmas pelas quais o professor responsvel
private Turma[] turmas;
int qtdTurmas;
Java Deployment Course - Exerccio #1. Copyright 1999, 1995. Jorge H. C. Fernandes. Todos os Direitos Reservados.
Disciplina
public class Disciplina {
String nome; // nome da disciplina
int creditos; // quantidade de crditos
Disciplina (String nomeDisciplina, int creditosDisciplina) {
nome = nomeDisciplina;
creditos = creditosDisciplina;
}
Turma criaTurma(String periodo) {
return new Turma(this, periodo);
}
public String toString() {
return "Nome Disciplina: "+nome +" Crditos: "+creditos;
}
}
Java Deployment Course - Exerccio #1. Copyright 1999, 1995. Jorge H. C. Fernandes. Todos os Direitos Reservados.
Classe Disciplina:
Caractersticas do Cdigo
Criao de Turma a partir de uma
disciplina
Turma criaTurma(String periodo) {
return new Turma(this, periodo);
}
Java Deployment Course - Exerccio #1. Copyright 1999, 1995. Jorge H. C. Fernandes. Todos os Direitos Reservados.
Turma
public class Turma {
Disciplina disciplina; // turma implementa uma disciplina especfica
String periodo;
// em um perodo de oferta
Professor professor;
// professor responsvel pela disciplina
private Aluno alunos[];// alunos inscritos na turma
int qtdAlunos;
// quantidade de alunos inscritos
Turma(Disciplina disciplina, String periodo) { // cria uma turma
...
alunos = new Aluno[30];
qtdAlunos = 0;
}
void alocaProfessor(Professor prof) {..} //aloca professor turma
void incluiAluno (Aluno aluno) {
// inclui aluno turma
if (qtdAlunos < 30) {
alunos[qtdAlunos] = umAluno;
qtdAlunos = qtdAlunos + 1;
}
}
public void liste() {..} // lista informaes da turma
}
Java Deployment Course - Exerccio #1. Copyright 1999, 1995. Jorge H. C. Fernandes. Todos os Direitos Reservados.
Classe Turma:
Caractersticas do Cdigo
Armazenamento de objetos em um array
Array com tamanho fixo
Nmero Mgico (Por que 30 alunos?)
Falha silenciosa na no incluso do 31o
aluno
Java Deployment Course - Exerccio #1. Copyright 1999, 1995. Jorge H. C. Fernandes. Todos os Direitos Reservados.
Departamento (1/2)
public class Departamento {
String nome; // nome do departamento
Professor professores[]; //professores lotados no depto
int qtdProfessores;
Disciplina disciplinas[]; // disciplinas oferecidas
int qtdDisciplinas;
Turma turmas[]; // turmas criadas
int qtdTurmas;
static final int MAX_TURMAS = 300;
Departamento (String umNome) {...} // cria departamento
boolean incluiProfessor(Professor umProfessor) {...}
boolean incluiDisciplina(Disciplina umaDisciplina) {...}
boolean incluiTurma(Turma umaTurma) {...}
void listaProfessores() {...}
void listaDisciplinas() {...}
void listaTurmas() {...}
}
Java Deployment Course - Exerccio #1. Copyright 1999, 1995. Jorge H. C. Fernandes. Todos os Direitos Reservados.
Departamento (2/2)
class Departamento {
...
// inclui uma turma no departamento
boolean incluiTurma (Turma turma) {
if (qtdTurmas < MAX_TURMAS) {
turmas[qtdTurmas] = turma;
qtdTurmas++;
return true;
}
return false;
}
// lista as turmas ofertadas pelo departamento
void listaTurmas() {
for(int i=0; i<qtdTurmas; i++) {
System.out.println(turmas[i]);
}
}
}
Java Deployment Course - Exerccio #1. Copyright 1999, 1995. Jorge H. C. Fernandes. Todos os Direitos Reservados.
Class Departamento:
Caractersticas do Cdigo
Substituio de Nmeros Mgicos por
constantes
static final int MAX_TURMAS = 300;
Java Deployment Course - Exerccio #1. Copyright 1999, 1995. Jorge H. C. Fernandes. Todos os Direitos Reservados.
Curso (1/2)
public class Curso {
String nome; // nome do Curso
int creditosParaConclusao; // crditos para concluso
static final int MAX_ALUNOS = 300;// tamanho mximo do array
private Aluno alunos[];
// alunos matriculados
int qtdAlunos;
// quantidade de alunos no array
Curso(String nome, int creditos) {
this.nome = nome;
this.creditosParaConclusao = creditos;
this.alunos = new Aluno[MAX_ALUNOS];
this.qtdAlunos = 0;
}
void listaConcluintes() {...} // lista os concluintes
public String toString() {
// informaes sobre o curso
return "Curso: "+ nome + " | "+
"Crditos: "+ creditosParaConclusao + " | "+
"Qtd Alunos: "+ qtdAlunos + "|";
}
// testa criao de cursos
public static void main(String[] args) {...}
}
Java Deployment Course - Exerccio #1. Copyright 1999, 1995. Jorge H. C. Fernandes. Todos os Direitos Reservados.
Curso (2/2)
public class Curso {
..
// testa criao de cursos
public static void main(String[] args) {
Curso curso1 = new Curso("Bach. Informtica", 360);
Curso curso2 = new Curso("Ph.D. Informtica", 48);
Curso curso3 = new Curso("M.Sc. Informatica", 36);
System.out.println(curso1);
System.out.println(curso2);
System.out.println(curso3);
}
}
Java Deployment Course - Exerccio #1. Copyright 1999, 1995. Jorge H. C. Fernandes. Todos os Direitos Reservados.
Classe Curso:
Caractersticas do Cdigo
Implementao do Mtodo toString()
Mtodo de teste para criao de alguns
objetos
Java Deployment Course - Exerccio #1. Copyright 1999, 1995. Jorge H. C. Fernandes. Todos os Direitos Reservados.
Classe Universidade
public class Universidade { ...
public static void main (String args[]) { ...
/* Criao de setor de pagamentos, eventos, departamento e curso */
/* Variveis para armazenar professores, disciplinas, turmas */
/* Criando alguns professores */
/* Incluindo professores no departamento de Informtica */
/* Criando algumas disciplinas */
/* Criando algumas turmas */
/* Incluindo disciplinas no departamento de informtica */
/* Alocando professores a disciplinas */
/* Criando alunos */
/* Matriculando os alunos em turmas */
/* Emite relatrio do Departamento */d
/* Movimento do setor financeiro */
}
}
Java Deployment Course - Exerccio #1. Copyright 1999, 1995. Jorge H. C. Fernandes. Todos os Direitos Reservados.
Exerccios
Acompanhe a execuo do mtodo main da classe Universidade. Observe
como ocorre a criao de objetos das vrias classes: Departamento,
SetorEventos, SetorPagamento, Curso, Disciplina, Professor, Turma, Aluno,
AlunoGrad, AlunoIC
Esboce um grafo dos objetos que so criados durante a execuo de main
Acompanhe a execuo das rotinas de clculo da folha
Confrontando a implementao com os requisitos do sistema, percebe-se
que existem vrias falhas conceituais na implementao. Algumas destas
falhas esto listadas no slide a seguir. Proponha solues para elas. Tente
identificar outras.
O cdigo apresenta algumas deficincias de lgica de programao, ou
esquemas de codificao que tornam o sistema mais susceptvel a falhas
(menos robusto). Algumas destas deficincias esto listadas em um slide
frente. Proponha solues para estas. Tente identificar outras deficincias.
Java Deployment Course - Exerccio #1. Copyright 1999, 1995. Jorge H. C. Fernandes. Todos os Direitos Reservados.
Implementao versus
Requisitos
Departamento permite que se inclua uma Turma cuja Disciplina no
pertena ao conjunto de disciplinas que ele agrega
Um Professor pode ministrar Disciplinas que no pertenam ao seu
Departamento
Alunos podem se inscrevem em Turmas cuja Disciplina no so do
seu Curso
Java Deployment Course - Exerccio #1. Copyright 1999, 1995. Jorge H. C. Fernandes. Todos os Direitos Reservados.
Codificao Frgil
Alguns mtodos de incluso de professor e turma falham
silenciosamente quando se ultrapassa o limite do array utilizado.
Existem alguns nmeros mgicos que no esto documentados
O limite no tamanho dos arrays um requisito do sistema, ou um
esquema de codificao frgil?
No existe teste de duplicidade na insero de alunos, professores,
turmas, disciplinas, etc
Java Deployment Course - Exerccio #1. Copyright 1999, 1995. Jorge H. C. Fernandes. Todos os Direitos Reservados.
Fim