Exercícios com Java e OO

Fala pessoal, beleza?

Alguém sabe ou tem algum exercício que estimule o estudo Java e OO a fazer um programa mais complexo? Como um Caixa de Supermercados, Banco, Sistema de Entrega, algo mais complexo?

Qualquer ajuda será bem aceita.

Um abraço a todos.

Uriel.

Faz uma calculadora utilizando o padrão Strategy, é um bom começo para apimorar. Não é algo complexo, mas pode lhe ajudar mais que escrever um programa grande, que de orientação a objetos só tem a linguagem.

eae cara,

eu sei que vc pegar uma apostila e ficar estudando eh pouco estimulante,

mais pode crer que é importante…

tem uma apostila de OO nesse site http://www.caelum.com.br/apostilas/

eh muito boa…

agora se quer praticar pra valer pense em algum sistema comercial, pois a logica
é mais simples de entender e comece a desenvolver…

flws

[quote=urieljuliatti]Fala pessoal, beleza?

Alguém sabe ou tem algum exercício que estimule o estudo Java e OO a fazer um programa mais complexo? Como um Caixa de Supermercados, Banco, Sistema de Entrega, algo mais complexo?

Qualquer ajuda será bem aceita.

Um abraço a todos.

Uriel.[/quote]

amigo,
não tenho nenhum enunciado pronto não,
mas se vc quer estudar, então faça o seguinte para mim:

Programa de banco
com cadastro de:
Gerente
Atendente
Cliente

cada Atendente tem um Gerente responsável…
Cada Gerente tem um setor …

depois crie um sistema para criar uma conta,
que pode ser
simples ou especial
e cada cliente pode ter 1 conta de cada (ou simples ou especial)…

A conversa entre as classes funciona assim:

o cliente chega no banco (a main)
conversa com o atendente e solicita uma conta…

o atendente pega os dados da pessoa,
confere pra ve se ta tudo certin,
se tiver, envia pro gerente avaliar se a conta pode ser Especial…

O gerente da o retorno e a atendente mostra as opcoes para o cliente…
o cliente aceita ou nao a abertura da conta…

FIM

:smiley:

foi um trabalho na facul… mas era mais complexo, tinha atendimento por fila e tal,
mas nem precisa :smiley:

abraços

Opa, d34d_d3v1l, valeu pela resposta! Vou começar a fazer a UML de um sistema de Banco.

Vou implementando e vendo a necessidade de certas coisas que perguntarei aqui mesmo no fórum, certo?

Abraço!

[quote=urieljuliatti]Opa, d34d_d3v1l, valeu pela resposta! Vou começar a fazer a UML de um sistema de Banco.

Vou implementando e vendo a necessidade de certas coisas que perguntarei aqui mesmo no fórum, certo?

Abraço![/quote]

Pode contar sempre com a gente …
abraços

Muito obrigado novamente!!

aa… depois se vc quizer ver um JAR desta aplicação pronta (swing)
é só pedir que anexo aqui…

mas só vou fazer isso depois q vc ja começar ta?
abraços

Sem dúvidas, precisava só de uma luz mesmo!

Já estou começando aqui :smiley:

Obrigado!

[quote=frankwco]eae cara,

eu sei que vc pegar uma apostila e ficar estudando eh pouco estimulante,

mais pode crer que é importante…

tem uma apostila de OO nesse site http://www.caelum.com.br/apostilas/

eh muito boa…

agora se quer praticar pra valer pense em algum sistema comercial, pois a logica
é mais simples de entender e comece a desenvolver…

flws[/quote]

Já estudei por ela e realmente essa apostila é muito boa

nao sei se isso é certo. mas tambem estou procurando algo para por em pratica meus conhecimentos em OO. entao to pegando carona no problemas do d34d_d3v1l . qualquer coisa vou postar as duvidas aqui mesmo. ok?

Fique à vontade!

Então, comecei aqui meu Banco.

O projeto segue o que o Dead Devil falou.

Então vamos as classes:

Main.java

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */

package bancojava;

/**
*

  • @author Uriel
    */
    public class Main {

    /**

    • @param args the command line arguments
      */

    public static void main(String[] args) {

     Gerente gerente = new Gerente("Ulysses");
     Atendente atendente = new Atendente("Atendente1", gerente);
     Cliente cliente = new Cliente("Uriel Juliatti", 900);
     // O cliente tem que ter o nome e o salário. Salário será utilizado para verificar se ele pode ou não ter
     // conta especial.
     System.out.println(atendente.getNome() + " está recebendo os dados do cliente de nome: " + cliente.getNome() +  " e passando para o Gerente de nome: " + gerente.getNome());
    
     cliente.requisitaConta(atendente);
    

    }

}
[/code]
Funcionario.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package bancojava;

/**
 *
 * @author Uriel
 */
public class Funcionario {
   private String nome;
   private String contracacao;
   private boolean ativo;
   
   public Funcionario(String nome)
   {
        this.nome = nome;
   }

    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

    /**
     * @return the ativo
     */
    public boolean isAtivo() {
        return ativo;
    }

    /**
     * @param ativo the ativo to set
     */
    public void setAtivo(boolean ativo) {
        this.ativo = ativo;
    }

}

Atendente.java


package bancojava;

/**
 *
 * @author Uriel
 */
public class Atendente extends Funcionario {

    // Cada atendente tem um gerente;

    private Gerente gerente;
    private Cliente cliente;
    
    public static int contaFuncionario;

    public Atendente(String nome, Gerente gerente)
    {
        super(nome);
        
        contaFuncionario++;

        this.gerente = gerente;
    }

    public void solicita(Cliente cliente)
    {   
        if(getGerente().verificaConta(cliente))
            addConta(cliente, 1); // especial
        else
            addConta(cliente, 0); // normal
    }

    private void addConta(Cliente cliente, int tipo)
    {
        System.out.println("O salario do cliente é: "+cliente.getSalario() + " e o tipo de conta é: " + tipo);
        cliente.addConta(tipo);
    }

    /**
     * @return the gerente
     */
    public Gerente getGerente() {
        return gerente;
    }
}

Cliente.java


package bancojava;

/**
 *
 * @author Uriel
 */
public class Cliente {

    private Conta conta;
    private String nome;
    private double salario;
    
    public Cliente(String nome, double salario)
    {
        this.nome = nome;
        this.salario = salario;
    }

    public void addConta(int tipo_conta)
    {
        conta = new Conta(tipo_conta);
    }

    public void requisitaConta(Atendente atendente)
    {
        atendente.solicita(this);
    }
    /**
     * @return the salario
     */
    public double getSalario() {
        return salario;
    }

    /**
     * @return the conta
     */
    public Conta getConta() {
        return conta;
    }

    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

}

Conta.java

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */

package bancojava;

/**
*

  • @author Uriel
    */
    public class Conta {

    // 0 para normal e 1 para especial
    private int tipo_conta;

    // Média do valor pra uma conta especial, o limite é 1000 reais;

    public static double rate = 1000;

    public Conta(int tipo_conta)
    {
    if(!(tipo_conta > 1))
    this.tipo_conta = tipo_conta;
    }

    /**

    • @return the tipo_conta
      */
      public int getTipo_conta() {
      if(tipo_conta == 0)

       System.out.println("A conta é simples. ");
      

      else

       System.out.println("A conta é especial. ");
      

      return tipo_conta;
      }

    /**

    • @param tipo_conta the tipo_conta to set
      */
      public void setTipo_conta(int tipo_conta) {
      this.tipo_conta = tipo_conta;
      }

}
[/code]
Gerente.java


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package bancojava;

/**
 *
 * @author Uriel
 */
public class Gerente extends Funcionario{
    
    private String setor;
    
    public Gerente(String nome)
    {
        super(nome);
    }
    public boolean verificaConta(Cliente cliente)
    {
        boolean verificacao = false;

        if(cliente.getSalario() >= Conta.rate)
            verificacao = true;
        else
            verificacao = false;

        System.out.println("Conta sendo verificada pelo Gerente..");
        System.out.println("Cliente pode abrir conta especial? " + verificacao);
        return verificacao;
    }
}

Está rodando certinho. Se você setar o salário do cliente para 1000 ou + ele se torna cliente especial.

Está muito simples e cru, tem pouco tempo que estou na OO.

Gostaria de críticas ou sugestões!

Além do que gostaria de organizar mais o projeto, implementar captura de dados por teclado, etc…

Alguma sugestão?!

Abraço!!!

Tente aprender utilizando TDD.

otimooo meu amigooooooo!
esta bem legal…

quer uma sugestão?

Utilize polimorfismo na CONTA

CONTA
CEsp - CSimp

abraços…
parabens por ter usado herança :wink: esqueci de falar isso hehehehe

Massa, massa! Muito obrigado cara, de verdade.

Então, como poderia usar polimorfismo? Eu passo um objeto Conta por parâmetro e instancio objetos que herdam de Conta (CEsp, CSimples) ?

Eu não compreendo muito bem o uso do Polimorfismo.

Obrigado novamente.

Ainda nao ta completo fiz agora; e to com sono. o superbowl foi até tarde ontem,. mas ta ai;

package com.funcionarios;

public class Funcionario {
	private String nome;
	private Long ri;
	private Double salario;
	
	public Funcionario(String nome, Long ri, Double salario) {
		this.nome = nome;
		this.ri = ri;
		this.salario = salario;
	}
	
	public String getNome() {
		return nome;
	}
	public Long getRi() {
		return ri;
	}
	public Double getSalario() {
		return salario;
	}
}

package com.funcionarios;

public class Gerente extends Funcionario {
	private String setor;

	public Gerente(String nome, Long ri, Double salario, String setor) {
		super(nome, ri, salario);
		this.setor = setor;
	}

	public String getSetor() {
		return setor;
	}

}
package com.funcionarios;

import br.com.caelum.stella.validation.CPFValidator;
import br.com.caelum.stella.validation.InvalidStateException;

import com.cliente.Cliente;

public class Atendente {
	private Gerente gerente;

	public Atendente(Gerente gerente) {
		this.gerente = gerente;
	}

	public Gerente getGerente() {
		return gerente;
	}

	public boolean aceitaCliente(Cliente c) {
		CPFValidator valida = new CPFValidator();
		try {
			valida.assertValid(c.getCpf());
		} catch (InvalidStateException e) {
			System.out.println(e.getInvalidMessages());
			System.err.println("CPF Invalido");
			return false;
		}
		if (c.getDataNascimento() >= 18) {
			System.out.println("Cliente Aceito com Sucesso");
			return true;
		} else {
			System.out.println("Cliente ainda não é maior de 18 anos; nao pode abrir conta");
			return false;
		}
	}

}
package com.conta;

import com.cliente.Cliente;

public abstract class Conta {
	private Integer numero;
	private String titular;
	protected Double saldo;
		
	public Conta(Cliente c) {
		this.titular = c.getNome();
		this.numero = (int) (Math.random() * 100);
	}
	public Double getSaldo() {
		return saldo;
	}
	public Integer getNumero() {
		return numero;
	}
	public String getTitular() {
		return titular;
	}
	
	public void deposita(double valor) {
		if(valor > 0) {
			this.saldo += valor;
		}
	}
	
	public abstract void saca(double valor);
	
}
package com.conta;

import com.cliente.Cliente;

public class ContaEspecial extends Conta {

	public ContaEspecial(Cliente c) {
		super(c);
	}

	public void saca(double valor) {
		if(saldo > 0) {
			this.saldo -= valor;
		}
	}

}
package com.conta;

import com.cliente.Cliente;

public class ContaSimples extends Conta {

	public ContaSimples(Cliente c) {
		super(c);
	}

	public void saca(double valor) {
		if(saldo > 0) {
			this.saldo -= valor;
		} else if(saldo - valor < 0) {
			System.out.println("Contas Simples nao podem ter 'Cheque Especial' ");
		}
	}

}
package com.cliente;

public class Cliente {
	private String nome;
	private String rg;
	private String cpf;
	private Integer dataNascimento;
	private Long rc;
	
	public Cliente(String nome, String rg, String cpf, Integer dataNascimento, Long rc) {
		this.nome = nome;
		this.rg = rg;
		this.cpf = cpf;
		this.dataNascimento = dataNascimento;
		this.rc = rc;
	}
	
	public String getNome() {
		return nome;
	}


	public String getRg() {
		return rg;
	}


	public String getCpf() {
		return cpf;
	}


	public Integer getDataNascimento() {
		return dataNascimento;
	}

	public Long getRc() {
		return rc;
	}
}
package com.mains;

import com.cliente.Cliente;
import com.conta.Conta;
import com.conta.ContaSimples;
import com.funcionarios.Atendente;
import com.funcionarios.Gerente;

public class Start {
	public static void main(String[] args) {
		Cliente c1 = new Cliente("Jeferson Lesbão de Siqueira", "48.774.823-2", "420.276.098-06", 17, (long) 001);
		Gerente g1 = new Gerente("Pedro", (long) 002, (double) 1241.12, "Chefia");
		Atendente at = new Atendente(g1);
		
		if(at.aceitaCliente(c1)){
			Conta conta = new ContaSimples(c1);
		}
		
		
	}

}

Estou analisando aqui e vendo como você fez o Polimorfismo, qualquer dúvida posto!

Obrigado, novamente.

Perfect…

parabens

Achei legal o exercício.

Você pode tentar fazer com Swing agora.