trabalho de poo

40
Capitulo 3 1) Imprima todos os números de 150 a 300. package Capitulo3; public class PrimeiraQuestao { public static void main(String[] args) { for(int i = 150; i <= 300; i ++){ System.out.println(i); } } } 2) Imprima a soma de 1 até 1000. package Capitulo3; public class SegundaQuestao { public static void main(String[] args) { int soma = 0; for(int i = 1; i <= 1000; i ++){ soma = soma + i; } System.out.println(soma); } } 3) Imprima todos os múltiplos de 3, entre 1 e 100. package Capitulo3; public class TerceiraQuestao { public static void main(String[] args) { for(int i = 1; i <= 100; i ++){ if(i % 3 == 0){ System.out.println(i); }

Upload: luiz-kr

Post on 18-Apr-2015

301 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Trabalho de Poo

Capitulo 3

1) Imprima todos os números de 150 a 300.

package Capitulo3;

public class PrimeiraQuestao {

public static void main(String[] args) {

for(int i = 150; i <= 300; i ++){

System.out.println(i);

}

}

}

2) Imprima a soma de 1 até 1000.

package Capitulo3;

public class SegundaQuestao {

public static void main(String[] args) {

int soma = 0;

for(int i = 1; i <= 1000; i ++){

soma = soma + i;

}

System.out.println(soma);

}

}

3) Imprima todos os múltiplos de 3, entre 1 e 100.

package Capitulo3;

public class TerceiraQuestao {

public static void main(String[] args) {

for(int i = 1; i <= 100; i ++){

if(i % 3 == 0){

System.out.println(i);

}

}

}

Page 2: Trabalho de Poo

}

4) Imprima os fatoriais de 1 a 10.

package Capitulo3;

public class QuartaQuestao {

public static void main(String[] args) {

int i,n;

for (n = 1; n <= 10; n++){

int fatorial=1;

for(i = n; i>=1; i--){

fatorial = fatorial * i;

}

System.out.println(n+"!="+fatorial);

}

}

}

5) Aumente a quantidade de números que terão os fatoriais impressos, até 20, 30, 40. Em um determinadomomento, além desse cálculo demorar, vai começar a mostrar respostas completamente erradas. Porque?Mude de int para long, e você poderá ver alguma mudança.

package Capitulo3;

public class QuartaQuestao {

public static void main(String[] args) {

int i,n;

for (n = 1; n <= 40; n++){

int fatorial=1;

for(i = n; i>=1; i--){

fatorial = fatorial * i;

}

System.out.println(n+"!="+fatorial);

}

}

}

Page 3: Trabalho de Poo

7) (opcional) Escreva um programa que, dada uma variável x (com valor 180, por exemplo), temos y de acordo com a seguinte regra:

_ se x é par, y = x / 2_ se x é impar, y = 3 * x + 1_ imprime y_ O programa deve então jogar o valor de y em x e continuar até que y tenha o valor final de 1. Porexemplo, para x = 13, a saída será:

40 -> 20 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1

package Capitulo3;

public class SetimaQuestao {

public static void main(String[] args) {

int x = 13;

int y = 0;

while (y != 1) {

if (x % 2 == 0) {

y = x / 2;

}

else {

y = (3 * x) + 1;

}

x = y;

System.out.println(y);

}

}

}

Capitulo 4.12

1) Modele um funcionário. Ele deve ter o nome do funcionário, o departamento onde trabalha, seu salário (double), a data de entrada no banco (String), seu RG (String) e um valor booleano que indique se o funcionário está na empresa no momento ou se já foi embora.Você deve criar alguns métodos de acordo com sua necessidade. Além deles, crie um método bonifica queaumenta o salario do funcionário de acordo com o parâmetro passado como argumento. Crie, também, um método demite, que não recebe parâmetro algum, só modifica o valor booleano indicando que o funcionário não trabalha mais aqui.A idéia aqui é apenas modelar, isto é, só identifique que informações são importantes e o que um funcionário faz. Desenhe no papel tudo o que um Funcionario tem e tudo que ele faz.

package Capitulo4_12;

Page 4: Trabalho de Poo

public class Funcionario { String nome; String departamento; double salario;

String dataEntradaBanco; String rg; boolean estaNaEmpresa;

void bonifica(double aumento) {salario = salario + aumento;

}

void demite() { estaNaEmpresa = false; System.out.println("Funcionario demitido");

}}

}2) Transforme o modelo acima em uma classe Java. Teste-a, usando uma outra classe que tenha o main. Você deve criar a classe do funcionário chamada Funcionario, e a classe de teste você pode nomear como quiser.A de teste deve possuir o método main.

package Capitulo4_12;

public class TestaFuncionario {

public static void main(String[] args) {

Funcionario funcionario = new Funcionario();

funcionario.nome = "Luiz Washington";

funcionario.salario = 1800;

funcionario.dataEntradaBanco = "25/10/2007";

funcionario.departamento = "Engenharia";

funcionario.rg = "16661848";

funcionario.estaNaEmpresa = true;

System.out.println("Nome:"+funcionario.nome);

System.out.println("Departamento:"+funcionario.departamento);

System.out.println("Salario:"+funcionario.salario);

System.out.println("Rg:"+funcionario.rg);

System.out.println("Data de entrada no banco:"+funcionario.dataEntradaBanco);

System.out.println("Funcionario está na empresa:"+funcionario.estaNaEmpresa);

}

}

3) Crie um método mostra(), que não recebe nem devolve parâmetro algum e simplesmente imprime todos os atributos do nosso funcionário. Dessa maneira, você não

Page 5: Trabalho de Poo

precisa ficar copiando e colando um monte de System.out.println() para cada mudança e teste que fizer com cada um de seus funcionários, você simplesmente vai fazer:

package Capitulo4_12;

public class Funcionario {

String nome;

String departamento;

double salario;

String dataEntradaBanco;

String rg;

boolean estaNaEmpresa;

void bonifica(double aumento) {

salario = salario + aumento;

}

void demite() {

estaNaEmpresa = false;

System.out.println("Funcionario demitido");

}

public void mostra(){

System.out.println("Nome:"+nome);

System.out.println("Departamento:"+departamento);

System.out.println("Salario:"+salario);

System.out.println("Rg:"+rg);

System.out.println("Data de entrada no banco:"+dataEntradaBanco);

System.out.println("Trabalha na empresa:"+estaNaEmpresa);

}

}

package Capitulo4_12;

public class TestaFuncionario {

public static void main(String[] args) {

Funcionario funcionario = new Funcionario();

funcionario.nome = "Luiz Washington";

funcionario.salario = 1800;

funcionario.dataEntradaBanco = "25/10/2007";

Page 6: Trabalho de Poo

funcionario.departamento = "Engenharia";

funcionario.rg = "16661848";

funcionario.estaNaEmpresa = true;

funcionario.mostra();

funcionario.bonifica(780);

funcionario.demite();

funcionario.mostra();

}

}

4) Construa dois funcionários com o new e compare-os com o ==. E se eles tiverem os mesmos atributos? Para isso você vai precisar criar outra referência:

package Capitulo4_12;

public class TestaFuncionario {public static void main(String[] args) {

Funcionario f1 = new Funcionario();Funcionario f2 = new Funcionario();

f1.nome = "Dallas"; f1.salario = 1800; f2.nome = "Isac"; f2.salario = 2100;

if (f1 == f2) { System.out.println("Os funcionários são iguais"); } else { System.out.println("Os funcionários são diferentes");}

}

5) Crie duas referências para o mesmo funcionário, compare-os com o ==. Tire suas conclusões. Para criar duas referências pro mesmo funcionário

package Capitulo4_12;

public class TestaFuncionario {public static void main(String[] args) {

Funcionario f1 = new Funcionario();

f1.nome = "Dallas"; f1.salario = 1800;

Funcionario f2 = f1;

if (f1 == f2) {System.out.println("Os funcionários são iguais");

Page 7: Trabalho de Poo

} else {

System.out.println("Os funcionários são diferentes");}

}}

Os funcionários vão ser iguais, pois as duas referências estão referenciando o mesmo objeto.

6) (opcional) Em vez de utilizar uma String para representar a data, crie uma outra classe, chamada Data. Ela possui 3 campos int, para dia, mês e ano. Faça com que seu funcionário passe a usá-la. (é parecido com o último exemplo, em que a Conta passou a ter referência para um Cliente).

package Capitulo4_12;

public class Data {

int dia;int mes;int ano;

}

package Capitulo4_12;

public class Funcionario { String nome; String departamento; double salario;

Data dataEntradaBanco; String rg; boolean estaNaEmpresa;

void bonifica(double aumento) {salario = salario + aumento;

}

void demite() { estaNaEmpresa = false; System.out.println("Funcionario demitido");

}

public void mostra(){

System.out.println("Nome:"+nome);System.out.println("Departamento:"+departamento);System.out.println("Salario:"+salario);System.out.println("Rg:"+rg);System.out.println("Data de entrada no banco:"+dataEntradaBanco);System.out.println("Trabalha na empresa:"+estaNaEmpresa);

}}

package Capitulo4_12;

public class TestaFuncionario {public static void main(String[] args) {

Page 8: Trabalho de Poo

Funcionario f1 = new Funcionario();Data data = new Data();

f1.dataEntradaBanco = data;

f1.nome = "Dallas"; f1.salario = 1800;

Funcionario f2 = f1;

if (f1 == f2) {System.out.println("Os funcionários são iguais");

} else {

System.out.println("Os funcionários são diferentes");}

}}

7) (opcional) Modifique seu método mostra para que ele imprima o valor da dataDeEntrada daqueleFuncionario:

package Capitulo4_12;

public class Funcionario { String nome; String departamento; double salario;

Data dataEntradaBanco; String rg; boolean estaNaEmpresa;

void bonifica(double aumento) {salario = salario + aumento;

}

void demite() { estaNaEmpresa = false; System.out.println("Funcionario demitido");

}

public void mostra(){

System.out.println("Nome:"+nome);System.out.println("Departamento:"+departamento);System.out.println("Salario:"+salario);System.out.println("Rg:"+rg);System.out.println("Trabalha na empresa:"+estaNaEmpresa);System.out.println("Dia:"+this.dataEntradaBanco.dia);System.out.println("Mês:"+this.dataEntradaBanco.mes);System.out.println("Ano:"+this.dataEntradaBanco.ano);

}}

As datas vão retornar o valor default para int, ou seja, vão retornar 0.

Capitulo 4.14

Page 9: Trabalho de Poo

1) Programa 1Classe: Pessoa Atributos: nome, idade. Método: void fazAniversario()Crie uma pessoa, coloque seu nome e idade iniciais, faça alguns aniversários (aumentando a idade) eimprima seu nome e sua idade.

package Capitulo4_14;

public class Pessoa {

String nome;int idade;

public void aniversario(){idade++;

}

}

package Capitulo4_14;

public class TestaPessoa {

public static void main(String[] args) {Pessoa p1 = new Pessoa();

p1.nome = "Luiz";p1.idade = 1;

System.out.println("Idade:"+p1.idade);

for(int i = 1; i<=80; i ++){p1.aniversario();

System.out.println("Idade:"+p1.idade);}

}}

2) Programa 2Classe: Porta Atributos: aberta, cor, dimensaoX, dimensaoY, dimensaoZ Métodos: void abre(), void fecha(),void pinta(String s), boolean estaAberta()Crie uma porta, abra e feche a mesma, pinte-a de diversas cores, altere suas dimensões e use o métodoestaAberta para verificar se ela está aberta.

package Capitulo4_14;

public class Porta {boolean estaAberta;String cor;double dimensaoX;double dimensaoY;double dimensaoZ;

public void pinta(String cor){this.cor = cor;

}public void abre(){

estaAberta = true;}

Page 10: Trabalho de Poo

public void fecha(){estaAberta = false;

}public boolean estaAberta(){

if(estaAberta == true){return true;

}else{

return false;}

}

}

package Capitulo4_14;

public class TestaPorta {public static void main(String[] args) {

Porta porta1 = new Porta();

porta1.pinta("Preto"); porta1.abre(); porta1.mostra();

porta1.estaAberta();

porta1.pinta("Azul"); porta1.dimensaoX = 1.8; porta1.dimensaoY = 2.25; porta1.dimensaoZ = 0.25;

System.out.println("\n"); porta1.mostra();

porta1.fecha(); porta1.pinta("Amarelo"); System.out.println("\n"); porta1.mostra(); porta1.pinta("Preto e branco"); System.out.println("\n"); porta1.mostra();

}

}

3) Programa 3Classe: Casa Atributos: cor, porta1, porta2, porta3 Método: void pinta(String s), int quantasPortasEstaoAbertas()Crie uma casa e pinte-a. Crie três portas e coloque-as na casa; abra e feche as mesmas como desejar.Utilize o método quantasPortasEstaoAbertas para imprimir o número de portas abertas.

package Capitulo4_14;

public class Casa {String cor;Porta porta1;Porta porta2;Porta porta3;int portasAbertas = 0;

Page 11: Trabalho de Poo

public void pinta(String s){cor = s;

}public int quantasPortasEstaoAbertas(){

if(porta1.estaAberta){portasAbertas++;

}if(porta2.estaAberta){

portasAbertas++;}if(porta3.estaAberta){

portasAbertas++;}return portasAbertas;

}

}

package Capitulo4_14;

public class TestaCasa {

public static void main(String[] args) {Casa casa1 = new Casa();casa1.pinta("Verde");Porta casaPorta1 = new Porta();Porta casaPorta2 = new Porta();Porta casaPorta3 = new Porta();

casa1.porta1 = casaPorta1;casa1.porta2 = casaPorta2;casa1.porta3 = casaPorta3;

casa1.porta1.abre();casa1.porta2.abre();casa1.porta3.abre();casa1.porta2.fecha();casa1.porta1.fecha();

System.out.println("Quantidade de portas abertas:"+casa1.quantasPortasEstaoAbertas());

}}

Capitulo 5.5

1) Volte ao nosso sistema de Funcionario e crie uma classe Empresa dentro do mesmo arquivo .java. AEmpresa tem um nome, cnpj e uma referência a uma array de Funcionario, além de outros atributos quevocê julgar necessário.

package Capitulo5_5;

public class Empresa2 {String nomeEmpresa;String cnpj;

Page 12: Trabalho de Poo

Funcionario [] funcionarios;}

2) A Empresa deve ter um método adiciona, que recebe uma referência a Funcionario como argumento, eguarda esse funcionário.

package Capitulo5_5;

public class Empresa {String nomeEmpresa;String cnpj;Funcionario [] funcionarios;

void adiciona(Funcionario f){for(int i=0; i<funcionarios.length; i++){

if(funcionarios[i]==null){funcionarios[i] = f;break;

}}

}

}

3) Crie uma classe TestaEmpresa que possuirá um método main. Dentro dele crie algumas instâncias de Funcionario e passe para a empresa pelo método adiciona. Repare que antes você vai precisar criar a array, pois inicialmente o atributo empregados da classe Empresa não referencia lugar nenhum (null):

package Capitulo5_5;

public class Empresa {String nomeEmpresa;String cnpj;Funcionario [] funcionarios;

void adiciona(Funcionario f){for(int i=0; i<funcionarios.length; i++){

if(funcionarios[i]==null){funcionarios[i] = f;break;

}}

}void mostraEmpregados() {

for (int i = 0; i <funcionarios.length; i++) { if(funcionarios[i]!=null){ System.out.println("Funcionário na posição: " + i);

System.out.println("Nome:"+funcionarios[i].nome); System.out.println("Salario:"+funcionarios[i].salario);

} }

}}

package Capitulo5_5;

public class TestaEmpresa {

public static void main(String[] args) { Empresa empresa = new Empresa();

Page 13: Trabalho de Poo

empresa.funcionarios = new Funcionario[5]; Funcionario f1 = new Funcionario(); Funcionario f2 = new Funcionario(); Funcionario f3 = new Funcionario(); Funcionario f4 = new Funcionario(); Funcionario f5 = new Funcionario(); f1.salario = 5005; f2.salario = 3424; f1.nome = "Luiz"; f2.nome = "Dallas"; empresa.adiciona(f1); empresa.adiciona(f2); empresa.mostraEmpregados(); }

}

Capitulo 5.8

1) O objetivo dos exercícios a seguir é fixar os conceitos vistos até agora. Se você está com dificuldade emalguma parte desse capítulo, aproveite e treine tudo o que vimos até agora no pequeno programa abaixo:

_ Programa: Classe: Casa Atributos: cor, totalDePortas, portas[] Métodos: void pinta(String s), int quantasPortasEstaoAbertas(), void adicionaPorta(Porta p), int totalDePortas()Crie uma casa, pinte-a. Crie três portas e coloque-as na casa através do método adicionaPorta, abra e feche-as como desejar. Utilize o método quantasPortasEstaoAbertas para imprimir o número de portas abertas e o método totalDePortas para imprimir o total de portas em sua casa.

package capitulo5_8;

public class Porta {boolean estaAberta;String cor;double dimensaoX;double dimensaoY;double dimensaoZ;

public void pinta(String cor){this.cor = cor;

}public void abre(){

estaAberta = true;}public void fecha(){

estaAberta = false;}public boolean estaAberta(){

if(estaAberta){return true;

Page 14: Trabalho de Poo

}else{

return false;}

}public void mostra(){

System.out.println("Cor:" + cor);System.out.println("Está aberta:"+ estaAberta);System.out.println("Dimensão X:"+ dimensaoX);System.out.println("Dimensão Y:"+ dimensaoY);System.out.println("Dimensão Z:"+ dimensaoZ);

}}

package capitulo5_8;

public class Casa {String cor;int totalDePortas = 0;

Porta[] portas;

/** * @return Returns the cor. */

public String getCor() {return cor;

} public void pinta(String s){ cor = s; } public int quantasPortasEstaoAbertas(){ int portasAbertas = 0; for(int i = 0; i < portas.length; i++){ if(portas[i].estaAberta()){ portasAbertas++; } } return portasAbertas; }

public void adicionaPorta(Porta p){for(int i = 0; i < portas.length; i++){

if(portas[i] == null){portas[i] = p;break;

}}

}public int totalDePortas(){

for(int i = 0; i < portas.length; i ++){if(portas[i] != null){

totalDePortas++;}

}return totalDePortas;}

}

Page 15: Trabalho de Poo

package capitulo5_8;

public class TestaCasa {

public static void main(String[] args) {

Casa novaCasa = new Casa();novaCasa.portas = new Porta[3];

Porta porta1 = new Porta();Porta porta2 = new Porta();Porta porta3 = new Porta();

novaCasa.pinta("verde"); novaCasa.adicionaPorta(porta1);

novaCasa.adicionaPorta(porta2); novaCasa.adicionaPorta(porta3);

porta1.abre(); porta2.abre(); porta3.abre();

porta1.fecha(); porta3.fecha();

System.out.println("Quantidade de portas abertas:"+novaCasa.quantasPortasEstaoAbertas());

System.out.println("A casa contém "+novaCasa.totalDePortas()+" porta(s)");

}}

Capitulo 6.8

1) Adicione o modificador de visibilidade (private, se necessário) para cada atributo e método da classeFuncionario. Tente criar um Funcionario no main e modificar ou ler um de seus atributos privados. Oque acontece?

package Capitulo6_8;

public class Funcionario { private String nome; private String departamento; private double salario;

private Data dataEntradaBanco; private String rg; private boolean estaNaEmpresa;

void bonifica(double aumento) {salario = salario + aumento;

}

void demite() { estaNaEmpresa = false; System.out.println("Funcionario demitido");

Page 16: Trabalho de Poo

}public boolean isEstaNaEmpresa() {

return estaNaEmpresa;}public void mostra(){

System.out.println("Nome:"+nome);System.out.println("Departamento:"+departamento);System.out.println("Salario:"+salario);System.out.println("Rg:"+rg);System.out.println("Data de entrada no banco:"+dataEntradaBanco);System.out.println("Trabalha na empresa:"+estaNaEmpresa);System.out.println("Dia:"+this.dataEntradaBanco.dia);System.out.println("Mês:"+this.dataEntradaBanco.mes);

System.out.println("Ano:"+this.dataEntradaBanco.ano);

}}

package capitulo6_8;

public class TestaFuncionario {public static void main(String[] args) {

Funcionario funcionario = new Funcionario();

funcionario.salario = 2800;funcionario.departamento = "Engenharia";funcionario.rg = "16661848";funcionario.estaNaEmpresa = true;funcionario1.dataEntradaBanco(25,10,2008);

funcionario.mostra(); System.out.println("\n");

}}

A classe teste funcionário não consegue acessar diretamente os atributos de funcionário, acessa apenas através de métodos.

2) Crie os getters e setters necessários da sua classe Funcionario .

package Capitulo6_8;

public class Funcionario { private String nome; private String departamento; private double salario;

private Data dataEntradaBanco = new Data(); private String rg; private boolean estaNaEmpresa;

/** * @param dataEntradaBanco The dataEntradaBanco to set. */public void setDataEntradaBanco(int dia, int mes, int ano) {

this.dataEntradaBanco.setDia(dia);this.dataEntradaBanco.setMes(mes);this.dataEntradaBanco.setAno(ano);

}

Page 17: Trabalho de Poo

/** * @return Returns the dataEntradaBanco. */public void getDataEntradaBanco() {

System.out.println("Dia:"+dataEntradaBanco.getDia());System.out.println("Mes:"+dataEntradaBanco.getMes());System.out.println("Ano:"+dataEntradaBanco.getAno());

}

/** * @return Returns the departamento. */public String getDepartamento() {

return departamento;}/** * @param departamento The departamento to set. */public void setDepartamento(String departamento) {

this.departamento = departamento;}/** * @return Returns the estaNaEmpresa. */public boolean isEstaNaEmpresa() {

return estaNaEmpresa;}/** * @param estaNaEmpresa The estaNaEmpresa to set. */public void setEstaNaEmpresa(boolean estaNaEmpresa) {

this.estaNaEmpresa = estaNaEmpresa;}/** * @return Returns the nome. */public String getNome() {

return nome;}/** * @param nome The nome to set. */public void setNome(String nome) {

this.nome = nome;}/** * @return Returns the rg. */public String getRg() {

return rg;}/** * @param rg The rg to set. */public void setRg(String rg) {

this.rg = rg;}/** * @return Returns the salario. */public double getSalario() {

Page 18: Trabalho de Poo

return salario;}/** * @param salario The salario to set. */public void setSalario(double salario) {

this.salario = salario;}void bonifica(double aumento) {

salario = salario + aumento;}

void demite() { estaNaEmpresa = false; System.out.println("Funcionario demitido");

}public void mostra(){

System.out.println("Nome:"+nome);System.out.println("Departamento:"+departamento);System.out.println("Salario:"+salario);System.out.println("Rg:"+rg);System.out.println("Trabalha na empresa:"+estaNaEmpresa);System.out.println("Dia:"+dataEntradaBanco.getDia());System.out.println("Mês:"+dataEntradaBanco.getMes());

System.out.println("Ano:"+dataEntradaBanco.getAno());

}}

3) Modifique suas classes que acessam e modificam atributos de um Funcionario para utilizar os getters esetters recém criados.

package Capitulo6_8;

public class TestaFuncionario {public static void main(String[] args) {

Funcionario funcionario = new Funcionario();

funcionario.setNome("Luiz Washington");funcionario.setSalario(1800);funcionario.setDepartamento("Engenharia");funcionario.setRg("16661848");funcionario.setEstaNaEmpresa(true);funcionario.setDataEntradaBanco(25,10,2008);

funcionario.mostra(); System.out.println("\n"); funcionario.bonifica(780); System.out.println("\nSalário depois do aumento"); System.out.println("Novo salário:"+funcionario.getSalario()); funcionario.demite(); System.out.println(funcionario.isEstaNaEmpresa());

}}

Page 19: Trabalho de Poo

4) Faça com que sua classe Funcionario possa receber, opcionalmente, o nome do Funcionario durante a criação do objeto. Utilize construtores para obter esse resultado.Dica: utilize um construtor sem argumentos também, para o caso de a pessoa não querer passar o nome do Funcionario.

package Capitulo6_8;

public class Funcionario { private String nome; private String departamento; private double salario;

private Data dataEntradaBanco = new Data(); private String rg; private boolean estaNaEmpresa;

/** * */public Funcionario(String nome) {

this.nome = nome;}public Funcionario() {

}/** * @param dataEntradaBanco The dataEntradaBanco to set. */public void setDataEntradaBanco(int dia, int mes, int ano) {

this.dataEntradaBanco.setDia(dia);this.dataEntradaBanco.setMes(mes);this.dataEntradaBanco.setAno(ano);

}/** * @return Returns the dataEntradaBanco. */public void getDataEntradaBanco() {

System.out.println("Dia:"+dataEntradaBanco.getDia());System.out.println("Mes:"+dataEntradaBanco.getMes());System.out.println("Ano:"+dataEntradaBanco.getAno());

}

/** * @return Returns the departamento. */public String getDepartamento() {

return departamento;}/** * @param departamento The departamento to set. */public void setDepartamento(String departamento) {

this.departamento = departamento;}/** * @return Returns the estaNaEmpresa. */public boolean isEstaNaEmpresa() {

return estaNaEmpresa;}/** * @param estaNaEmpresa The estaNaEmpresa to set.

Page 20: Trabalho de Poo

*/public void setEstaNaEmpresa(boolean estaNaEmpresa) {

this.estaNaEmpresa = estaNaEmpresa;}/** * @return Returns the nome. */public String getNome() {

return nome;}/** * @param nome The nome to set. */public void setNome(String nome) {

this.nome = nome;}/** * @return Returns the rg. */public String getRg() {

return rg;}/** * @param rg The rg to set. */public void setRg(String rg) {

this.rg = rg;}/** * @return Returns the salario. */public double getSalario() {

return salario;}/** * @param salario The salario to set. */public void setSalario(double salario) {

this.salario = salario;}void bonifica(double aumento) {

salario = salario + aumento;}

void demite() { estaNaEmpresa = false; System.out.println("Funcionario demitido"); }

public void mostra(){

System.out.println("Nome:"+nome);System.out.println("Departamento:"+departamento);System.out.println("Salario:"+salario);System.out.println("Rg:"+rg);System.out.println("Trabalha na empresa:"+estaNaEmpresa);System.out.println("Data de entrada no banco");System.out.print("Dia:"+dataEntradaBanco.getDia());System.out.print(" Mês:"+dataEntradaBanco.getMes());

System.out.println(" Ano:"+dataEntradaBanco.getAno());

}}

Page 21: Trabalho de Poo

5) (opcional) Adicione um atributo na classe Funcionario de tipo int que se chama identificador. Esse identificador deve ter um valor único para cada instância do tipo Funcionario. O primeiro Funcionario instanciado tem identificador 1, o segundo 2, e assim por diante. Você deve utilizar os recursos aprendidos aqui para resolver esse problema.Crie um getter para o identificador. Devemos ter um setter?

package capitulo6_8;

public class Funcionario { private String nome; private String departamento; private double salario;

private Data dataEntradaBanco = new Data(); private String rg; private boolean estaNaEmpresa; private static int idPassado; private int identificador;

/** * */public Funcionario(String nome) {

this.nome = nome;idPassado++;identificador += idPassado;

}public Funcionario() {

idPassado++;identificador += idPassado;

}/** * @return Returns the identificador. */public int getIdentificador() {

return identificador;}/** * @param dataEntradaBanco The dataEntradaBanco to set. */public void setDataEntradaBanco(int dia, int mes, int ano) {

this.dataEntradaBanco.setDia(dia);this.dataEntradaBanco.setMes(mes);this.dataEntradaBanco.setAno(ano);

}/** * @return Returns the dataEntradaBanco. */public void getDataEntradaBanco() {

System.out.println("Dia:"+dataEntradaBanco.getDia());System.out.println("Mes:"+dataEntradaBanco.getMes());System.out.println("Ano:"+dataEntradaBanco.getAno());

}

/** * @return Returns the departamento. */public String getDepartamento() {

return departamento;

Page 22: Trabalho de Poo

}/** * @param departamento The departamento to set. */public void setDepartamento(String departamento) {

this.departamento = departamento;}/** * @return Returns the estaNaEmpresa. */public boolean isEstaNaEmpresa() {

return estaNaEmpresa;}/** * @param estaNaEmpresa The estaNaEmpresa to set. */public void setEstaNaEmpresa(boolean estaNaEmpresa) {

this.estaNaEmpresa = estaNaEmpresa;}/** * @return Returns the nome. */public String getNome() {

return nome;}/** * @param nome The nome to set. */public void setNome(String nome) {

this.nome = nome;}/** * @return Returns the rg. */public String getRg() {

return rg;}/** * @param rg The rg to set. */public void setRg(String rg) {

this.rg = rg;}/** * @return Returns the salario. */public double getSalario() {

return salario;}/** * @param salario The salario to set. */public void setSalario(double salario) {

this.salario = salario;}void bonifica(double aumento) {

salario = salario + aumento;}

void demite() { estaNaEmpresa = false; System.out.println("Funcionario demitido");

Page 23: Trabalho de Poo

}public void mostra(){

System.out.println("Nome:"+nome);System.out.println("Departamento:"+departamento);System.out.println("Salario:"+salario);System.out.println("Rg:"+rg);System.out.println("Trabalha na empresa:"+estaNaEmpresa);System.out.println("Data de entrada no banco");System.out.print("Dia:"+dataEntradaBanco.getDia());System.out.print(" Mês:"+dataEntradaBanco.getMes());

System.out.println(" Ano:"+dataEntradaBanco.getAno()); System.out.println("Identificador:"+getIdentificador());

}}

Não devemos ter um setter para o identificador, pois o ele é criado automaticamente quando um novo objeto é criado.

6) (opcional) Crie os getters e setters da sua classe Empresa e coloque seus atributos como private. Lembre-se de que não necessariamente todos os atributos devem ter getters e setters.

package Capitulo5_5;

public class Empresa {private String nomeEmpresa;private String cnpj;private Funcionario [] funcionarios;

/** * @return Returns the cnpj. */public String getCnpj() {

return cnpj;}/** * @param cnpj The cnpj to set. */public void setCnpj(String cnpj) {

this.cnpj = cnpj;}/** * @return Returns the funcionarios. */public Funcionario getFuncionarios(int posicao) {

return this.funcionarios[posicao];}/** * @return Returns the nomeEmpresa. */public String getNomeEmpresa() {

return nomeEmpresa;}/** * @param nomeEmpresa The nomeEmpresa to set. */public void setNomeEmpresa(String nomeEmpresa) {

this.nomeEmpresa = nomeEmpresa;}

Page 24: Trabalho de Poo

void adiciona(Funcionario f){for(int i=0; i<funcionarios.length; i++){

if(funcionarios[i]==null){funcionarios[i] = f;break;

}}

}void mostraEmpregados() {

for (int i = 0; i <funcionarios.length; i++) { if(funcionarios[i]!=null){ System.out.println("Funcionário na posição: " + i);

System.out.println("Nome:"+funcionarios[i].nome); System.out.println("Salario:"+funcionarios[i].salario);

} }

}}

7) (opcional) Na classe Empresa, em vez de criar um array de tamanho fixo, receba como parâmetro no construtor o tamanho do array de Funcionario.Agora, com esse construtor, o que acontece se tentarmos dar new Empresa() sem passar argumento algum? Por quê?

package capitulo6_8;

public class Empresa {private String nomeEmpresa;private String cnpj;private Funcionario [] funcionarios;

/** * @return Returns the cnpj. */public String getCnpj() {

return cnpj;}public Empresa(int tamanho) {

funcionarios = new Funcionario[tamanho];}/** * @param cnpj The cnpj to set. */public void setCnpj(String cnpj) {

this.cnpj = cnpj;}/** * @return Returns the funcionarios. */public Funcionario getFuncionarios(int posicao) {

return this.funcionarios[posicao];}/** * @return Returns the nomeEmpresa. */public String getNomeEmpresa() {

return nomeEmpresa;}/** * @param nomeEmpresa The nomeEmpresa to set. */

Page 25: Trabalho de Poo

public void setNomeEmpresa(String nomeEmpresa) {this.nomeEmpresa = nomeEmpresa;

}void adiciona(Funcionario f){

for(int i=0; i<funcionarios.length; i++){if(funcionarios[i]==null){

funcionarios[i] = f;break;

}}

}void mostraEmpregados() {

for (int i = 0; i <funcionarios.length; i++) { if(funcionarios[i]!=null){ System.out.println("Funcionário na posição: " + i);

System.out.println("Nome:"+funcionarios[i].getNome()); System.out.println("Salario:"+funcionarios[i].getSalario());

} }

}}

Vai gerar um erro, porque o construtor da classe solicita no momento da criação do objeto o tamanho do array de funcionários, logo, é obrigatório informar o tamanho.

8) (opcional) Como garantir que datas como 31/2/2005 não sejam aceitas pela sua classe Data?

package capitulo6_8;

public class Data {private int dia;private int mes;private int ano;

public void setData(int dia, int mes, int ano) {if (mes >= 1 && mes <= 12) {

switch (mes) {case 1:case 3:case 5:case 7:case 8:case 10:case 12:

if(dia >= 1 && dia <= 31){this.dia = dia;this.mes = mes;this.ano = ano;

}break;

case 2:if (dia >= 1 && dia <= 28) {

this.dia = dia;this.mes = mes;this.ano = ano;

}break;

case 4:case 6:case 9:

Page 26: Trabalho de Poo

case 11:if (dia >= 1 && dia <= 30) {

this.dia = dia;this.mes = mes;this.ano = ano;

}break;

default: this.dia = 0; this.mes = 0; this.ano = 0;}

}}

/** * @return Returns the ano. */public int getAno() {

return ano;}/** * @return Returns the dia. */public int getDia() {

return dia;}/** * @return Returns the mes. */public int getMes() {

return mes;}public void mostraData(){

System.out.print("Data:"+getDia());System.out.print("/"+getMes());System.out.print("/"+getAno());

}}

package capitulo6_8;

public class TestaData {

public static void main(String[] args) {Data data = new Data();data.setData(31,02,1983);data.mostraData();

}}

9) (opcional) Crie a classe PessoaFisica. Queremos ter a garantia de que pessoa física alguma tenha CPFinvalido, nem seja criada PessoaFisica sem cpf inicial. (você não precisa escrever o algoritmo de validaçãode cpf, basta passar o cpf por um método valida(String x)....)

package capitulo6_8;

public class PessoaFisica {private String nome;private String cpf;

Page 27: Trabalho de Poo

public PessoaFisica(String nome, String cpf){this.nome = nome;valida(cpf);

}/** * @param cpf The cpf to set. * método para alterar um cpf inválido informado no momento da criação do objeto. */public void setCpf(String cpf) {

valida(cpf);}protected String valida(String cpf){

int cump = cpf.length();if(cump==11){

this.cpf = cpf;}return cpf;

}/** * @return Returns the cpf. */public String getCpf() {

return this.cpf;}/** * @return Returns the nome. */public String getNome() {

return nome;}public void mostra(){

System.out.println("Nome:"+getNome());System.out.println("CPF:"+getCpf());

}

}

package capitulo6_8;

public class TestePessoaFisica {

public static void main(String[] args) {PessoaFisica p1 = new PessoaFisica("Luiz","80000000259863220");

p1.mostra();

p1.setCpf("14000000004");

p1.mostra();}

}

Capitulo 7

1) Vamos criar uma classe Conta, que possua um saldo, e os métodos para pegar saldo, depositar, e sacar.

package capitulo7;

Page 28: Trabalho de Poo

public class Conta {private double saldo;

void deposita(double valor) {this.saldo += valor;

}

void saca(double valor) {this.saldo -= valor;

}

double getSaldo() {return this.saldo;

}

}

2) Adicione um método na classe Conta, que atualiza essa conta de acordo com uma taxa percentual fornecida.

package capitulo7;

public class Conta {private double saldo;

void deposita(double valor) {this.saldo += valor;

}

void saca(double valor) {this.saldo -= valor;

}

double getSaldo() {return this.saldo;

}void atualiza(double taxa) {

this.saldo += this.saldo * taxa;}

}

3) Crie duas subclasses da classe Conta: ContaCorrente e ContaPoupanca. Ambas terão o método atualiza reescrito: A ContaCorrente deve atualizar-se com o dobro da taxa e a ContaPoupanca deve atualizar-se como triplo da taxa.Além disso, a ContaCorrente deve reescrever o método deposita, afim de retirar uma taxa bancária de dez centavos de cada depósito.

package capitulo7;

public class ContaCorrente extends Conta {

void atualiza(double taxa) {this.saldo += this.saldo * taxa * 2;

}void deposita(double valor) {

this.saldo += valor - 0.10;}

}

Page 29: Trabalho de Poo

package capitulo7;

public class ContaPoupanca extends Conta{

void atualiza(double taxa) {this.saldo += this.saldo * taxa * 3;

}

}

4) Crie uma classe com método main e instancie essas classes, atualize-as e veja o resultado.

package capitulo7;

public class TestaContas {

public static void main(String[] args) {Conta c = new Conta();ContaCorrente cc = new ContaCorrente();ContaPoupanca cp = new ContaPoupanca();c.deposita(5000);cc.deposita(10000);cp.deposita(125000);c.atualiza(0.01);cc.atualiza(0.01);cp.atualiza(0.01);System.out.println(c.getSaldo());System.out.println(cc.getSaldo());System.out.println(cp.getSaldo());

}}

Após imprimir o saldo (getSaldo()) de cada uma das contas, o que acontece? R = cada objeto tem seu próprio getSaldo.

5) O que você acha de rodar o código anterior da seguinte maneira:

Conta c = new Conta();Conta cc = new ContaCorrente();Conta cp = new ContaPoupanca();

package capitulo7;

public class TestaContas {

public static void main(String[] args) {Conta c = new Conta();Conta cc = new ContaCorrente();Conta cp = new ContaPoupanca();

c.deposita(5000);cc.deposita(10000);cp.deposita(125000);c.atualiza(0.01);cc.atualiza(0.01);cp.atualiza(0.01);System.out.println(c.getSaldo());System.out.println(cc.getSaldo());System.out.println(cp.getSaldo());

}}

Compila? Roda? O que muda? Qual é a utilidade disso? Realmente, essa não é a maneira mais útil do

Page 30: Trabalho de Poo

polimorfismo - veremos o seu real poder no próximo exercício. Porém existe uma utilidade de declararmosuma variável de um tipo menos específico do que o objeto realmente é.

R = Compila e roda, pois, como ContaCorrente e ContaPoupanca são heranças da classe Conta, ambas podem ser referenciadas por Conta, o compilador verifica que objeto está chamando o método em tempo de execução.

6) (opcional) Vamos criar uma classe que seja responsável por fazer a atualização de todas as contasbancárias e gerar um relatório com o saldo anterior e saldo novo de cada uma das contas.

package capitulo7;

public class AtualizadorDeContas {

private double saldoTotal = 0;

private double selic;

AtualizadorDeContas(double selic) {this.selic = selic;

}

void roda(Conta c) {System.out.println(c.getSaldo());c.atualiza(selic);System.out.println(c.getSaldo());saldoTotal += c.getSaldo();

}/** * @return Returns the saldoTotal. */public double getSaldoTotal() {

return saldoTotal;}

}

7) (opcional) No método main, vamos criar algumas contas e rodá-las:

package capitulo7;

public class TesteAtualizadorDeContas {

public static void main(String[] args) {Conta contaNormal = new Conta();Conta contaPoupanca = new ContaPoupanca();Conta contaCorrente = new ContaPoupanca();

contaNormal.deposita(8540);contaCorrente.deposita(300);contaPoupanca.deposita(7400);

AtualizadorDeContas atualizador = new AtualizadorDeContas(0.25);

atualizador.roda(contaNormal);atualizador.roda(contaCorrente);atualizador.roda(contaPoupanca);

Page 31: Trabalho de Poo

}}

Capitulo 9.6

1) Repare que a nossa classe Conta é uma excelente candidata para uma classe abstrata. Por quê? Quemétodos seriam interessantes candidatos a serem abstratos?Transforme a classe Conta em abstrata, repare o que acontece no seu main já existente do TestaContas.

package capitulo9_6;

public abstract class Conta {protected double saldo;

void deposita(double valor) {this.saldo += valor;

}

void saca(double valor) {this.saldo -= valor;

}

double getSaldo() {return this.saldo;

}void atualiza(double taxa) {

this.saldo += this.saldo * taxa;}

}

R = porque não faz muito sentido criar um objeto do tipo Conta, o ideal é fazer com que a classe conta torne-se abstrata e os seus métodos comuns às subclasses sejam declarados como abstratos, para que seja obrigatório a implementação deles na criação de objetos das subclasses.

2) Para que o código do main volte a compilar, troque o new Conta() por new ContaCorrente().Se agora não podemos dar new em Conta, qual é a utilidade de ter um método que recebe uma referência a Conta como argumento? Aliás, posso ter isso?

package capitulo9_6;

public class TestaContas {

public static void main(String[] args) {

Conta c = new ContaCorrente();Conta cc = new ContaCorrente();Conta cp = new ContaPoupanca();

c.deposita(5000);cc.deposita(10000);cp.deposita(125000);c.atualiza(0.01);cc.atualiza(0.01);cp.atualiza(0.01);System.out.println(c.getSaldo());System.out.println(cc.getSaldo());

Page 32: Trabalho de Poo

System.out.println(cp.getSaldo());}

}

R = A utilidade é que um método definido em Conta pode ser chamado por objetos de suas subclasses, mesmo que o método da superclasse receba como parâmetro um objeto do tipo Conta, não ocorrera erro se for passado um objeto do tipo ContaCorrente ou ContaPoupanca porque eles também são objetos Conta.

3) Apenas pare efeito de entender melhor o abstract, remova (delete) o método atualiza() da ContaPoupanca, dessa forma ele herdará o método diretamente de Conta.Transforme o método atualiza() da classe Conta em abstrato. Repare que, ao colocar a palavra chave abstract ao lado do método, o Eclipse rapidamente vai sugerir que você deve remover o corpo (body) do método com um quick fix:

package capitulo9_6;

public abstract class Conta {protected double saldo;

void deposita(double valor) {this.saldo += valor;

}

void saca(double valor) {this.saldo -= valor;

}

double getSaldo() {return this.saldo;

}abstract void atualiza(double taxa);

}

R = A classe ContaPoupanca tem um erro, pois, o método atualiza na classe Conta está definido como abstract, ou seja, todas suas subclasses têm que implementá-lo.

4) Reescreva o método atualiza() na classe ContaPoupanca para que a classe possa compilar normalmente.O eclipse também sugere isso como um quick fix:

package capitulo9_6;

public class ContaPoupanca extends Conta{

/* (non-Javadoc) * @see capitulo9_6.Conta#atualiza(double) */void atualiza(double taxa) {

// TODO Auto-generated method stubthis.saldo += this.saldo * taxa * 3;

}

}

Capitulo 11.11

1) Na classe Conta, modifique o método deposita(double x): Ele deve lançar uma exception chamada IllegalArgumentException, que já faz parte da biblioteca do java, sempre que o valor passado como argumento for inválido (por exemplo, quando for negativo).

Page 33: Trabalho de Poo

package capitulo11_11;

public abstract class Conta {

protected double saldo;

public void deposita(double valor) {if (this.saldo < valor) {

throw new IllegalArgumentException();} else {

this.saldo += valor - 0.10;}

}

public void saca(double valor) {if (this.saldo < valor) {

this.saldo -= valor;}

}

public double getSaldo() {return this.saldo;

}

abstract void atualiza(double taxa);

}

2) Crie uma classe TestaDeposita com o método main. Crie uma ContaPoupanca e tente depositar valoresinválidos:

package capitulo11_11;

public class TestaDeposita {

public static void main(String[] args) {Conta novaConta1 = new ContaPoupanca();

try {novaConta1.deposita(300);novaConta1.deposita(-100);

} catch (IllegalArgumentException e) {System.out.println("Você tentou depositar um valor inválido");

}

}}

3) Ao lançar a IllegalArgumentException, passe via construtor uma mensagem a ser exibida. Lembre que a String recebida como parâmetro é acessível depois via o método getMessage() herdado por todas as Exceptions.

package capitulo11_11;

public abstract class Conta {protected double saldo;

public void deposita(double valor) {if (this.saldo < valor) {

Page 34: Trabalho de Poo

throw new IllegalArgumentException("Você tentou depositar um valor negativo");

} else {this.saldo += valor - 0.10;

}}

public void saca(double valor) {if (this.saldo < valor) {

this.saldo -= valor;}

}

public double getSaldo() {return this.saldo;

}

abstract void atualiza(double taxa);

}

4) Agora, altere sua classe TestaDeposita para exibir a mensagem da exceção através da chamada dogetMessage():

package capitulo11_11;

public class TestaDeposita {

public static void main(String[] args) {Conta novaConta1 = new ContaPoupanca();

try {novaConta1.deposita(300);novaConta1.deposita(-100);

} catch (IllegalArgumentException e) {System.out.println(e.getMessage());

}

}}

Luiz Carlos