Exercícios com Java e OO

27 respostas
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.

27 Respostas

M

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.

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

d34d_d3v1l

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.

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

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!

d34d_d3v1l

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!

Pode contar sempre com a gente …
abraços

urieljuliatti

Muito obrigado novamente!!

d34d_d3v1l

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

urieljuliatti

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

Já estou começando aqui :smiley:

Obrigado!

AlissonSchneider

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

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

aajjbb

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?

urieljuliatti

Fique à vontade!

urieljuliatti

Então, comecei aqui meu Banco.

O projeto segue o que o Dead Devil falou.

Então vamos as classes:

Main.java
/*
 * 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);
        
    }

}
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
/*
 * 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;
    }


}
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!!!

R

Tente aprender utilizando TDD.

d34d_d3v1l

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

urieljuliatti

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.

aajjbb

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", "[CPF removido]", 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);
		}
		
		
	}

}
urieljuliatti

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

Obrigado, novamente.

d34d_d3v1l

Perfect…

parabens

S

Achei legal o exercício.

Você pode tentar fazer com Swing agora.

urieljuliatti

Shaft:
Achei legal o exercício.

Você pode tentar fazer com Swing agora.

Como seria ele feito em Swing?

d34d_d3v1l

Ele quis dizer para você fazer uma interface gráfica …

mas preocupa com isso agora não… domine bem os conceitos de OO
antes de partir pra GUI…

abraços…

urieljuliatti

Fala Dead_Devil, como faria para fazer aquele polimorfismo na Conta??

Só para eu ter uma idéia!

Abraço!

d34d_d3v1l

urieljuliatti:
Fala Dead_Devil, como faria para fazer aquele polimorfismo na Conta??

Só para eu ter uma idéia!

Abraço!

crie uma classe Abstrata “Conta”… e suas filhas (herança) devem ser
ContaSimples - ContaEspecial

mais ou menos assim … Ai aplique o conceito de polimorfismo.
abraços

urieljuliatti

A partir daí, posso dar iniciação ao Swing? Para mexer com interfaces gráficas e até mesmo registro em Banco de Dados?

Abraço!

d34d_d3v1l

urieljuliatti:
A partir daí, posso dar iniciação ao Swing? Para mexer com interfaces gráficas e até mesmo registro em Banco de Dados?

Abraço!

Poder pode sim…
Mas o recomendado é dar um passo de cada vez… Eu não sou o mais apropriado para falar isso… Pois eu também dei saltos maiores que a perna…

Quer estudar ? Vá em frente…

Uma sugestão referente a GUI?

Aprenda a fazer “na unha” antes de ir pruma IDE…
É importante saber como as coisas funcionam…
Abraços

urieljuliatti

Bacana cara, obrigado pelas valiosas informações!

Um grande abraço.

Atenciosamente,

Uriel.

R

Eae pessoal! Estou treinando meus conceitos de OO agora. Pena que entrei nesta conversa um ‘pouco tarde’ hehehe

Para quem continua vindo aqui buscando informações, possue um video no youtube muito bom com exemplo legal de Orientação a Objeto, Herança, Polimorfismo é do curso da Universidade XTI que é um excelente material para quem não conhece (e de graça):

Abraços, Rapha

Criado 7 de fevereiro de 2011
Ultima resposta 5 de abr. de 2013
Respostas 27
Participantes 9