Construir metodos

Na o Anayami,é um extends sim…
sente só:
Monte um programa para cadastrar livros de uma livraria. Para esta tarefa utilize as classes disponíveis no moodle para gerar o sistema conforme os passos abaixo:

  1. Crie no eclipse um pacote denominado avaliacao1E5Questao01 (sem ?ç? e sem ?~? e sem espaços em branco.);

  2. Crie uma classe denominada Livro.java com os seguintes atributos (não esqueça dos métodos GET, SET e construtor com parâmetros:

    private String titulo;
    private String assunto;
    private String autor;
    private String paginas;
    private String tipo;

  3. Copie do moodle as classes Mapa.java e TelaLivraria.Java (arquivo Questao01.zip)

  4. Crie uma classe EstoqueLivros.java que seja uma herança de Mapa.

  5. Implemente os métodos herdados na classe EstoqueLivros.Java.

  6. Utilize a classe TelaLivraria.java como sua interface.

Obs.: A classe TelaLivraria.java está totalmente pronta, não é necessário fazer qualquer modificação. Esta tarefa consiste em trabalhar com as classes Livro.java e EstoqueLivros.java.

as classes que eu estou mandando já estao trabalhadas por mim…(tentativa e erro…rs),
class TeleLivraria:

package avaliacaoE5Questao01;

import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.Rectangle;
import java.awt.Font;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

import javax.swing.JTextField;
import javax.swing.JComboBox;
import javax.swing.JButton;
import javax.swing.JList;


public class TelaLivraria extends JFrame {

	private static final long serialVersionUID = 1L;

	private JPanel jContentPane = null;

	private JLabel lbTitulo = null;

	private JLabel lbTituloLivro = null;

	private JLabel lbAssunto = null;

	private JLabel lbAutor = null;

	private JLabel lbPaginas = null;

	private JLabel lbTipo = null;

	private JTextField txTituloLivro = null;

	private JComboBox txComboAssunto = null;

	private JTextField txAutor = null;

	private JTextField txPaginas = null;

	private JComboBox txComboTipo = null;

	private JButton btIncluir = null;

	private JButton btExcluir = null;

	private JButton btImprimir = null;
	
	private EstoqueLivros acervo = new EstoqueLivros();  //  @jve:decl-index=0:

	private JButton btLimpar = null;

	private JList jlLivros = null;
	
	private int keyFilme;
	
	public int getKeyFilme() {
		return keyFilme;
	}

	public void setKeyFilme(int keyFilme) {
		this.keyFilme = keyFilme;
	}

	public EstoqueLivros getAcervo() {
		return acervo;
	}

	public void setAcervo(EstoqueLivros acervo) {
		this.acervo = acervo;
	}

	/**
	 * This method initializes txNomeFilme	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getTxTituloLivro() {
		if (txTituloLivro == null) {
			txTituloLivro = new JTextField();
			txTituloLivro.setBounds(new Rectangle(115, 60, 431, 26));
		}
		return txTituloLivro;
	}

	/**
	 * This method initializes txComboGenero	
	 * 	
	 * @return javax.swing.JComboBox	
	 */
	private JComboBox getTxComboAssunto() {
		if (txComboAssunto == null) {
			txComboAssunto = new JComboBox();
			txComboAssunto.setBounds(new Rectangle(115, 95, 186, 26));
			txComboAssunto.addItem("Artes");
			txComboAssunto.addItem("Ciências");
			txComboAssunto.addItem("Ciência da Computação");
			txComboAssunto.addItem("Direito");
			txComboAssunto.addItem("Estatística");
			txComboAssunto.addItem("Ficção");
			txComboAssunto.addItem("Filosofia");
			txComboAssunto.addItem("Geografia");
			txComboAssunto.addItem("História");
			txComboAssunto.addItem("Línguas");
			txComboAssunto.addItem("Literatura Infantil");
			txComboAssunto.addItem("Lógica");
			txComboAssunto.addItem("Matemática");
			txComboAssunto.addItem("Religião");
		}
		return txComboAssunto;
	}

	/**
	 * This method initializes txAtorPrincipal	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getTxAutor() {
		if (txAutor == null) {
			txAutor = new JTextField();
			txAutor.setBounds(new Rectangle(115, 130, 431, 26));
		}
		return txAutor;
	}

	/**
	 * This method initializes txDuracao	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getTxPaginas() {
		if (txPaginas == null) {
			txPaginas = new JTextField();
			txPaginas.setBounds(new Rectangle(115, 165, 96, 26));
		}
		return txPaginas;
	}

	/**
	 * This method initializes txComboMidia	
	 * 	
	 * @return javax.swing.JComboBox	
	 */
	private JComboBox getTxComboTipo() {
		if (txComboTipo == null) {
			txComboTipo = new JComboBox();
			txComboTipo.setBounds(new Rectangle(115, 200, 116, 26));
			txComboTipo.addItem("DIDÁTICO");
			txComboTipo.addItem("LITERATURA");
			txComboTipo.addItem("TÉCNICO");
		}
		return txComboTipo;
	}

	/**
	 * This method initializes btIncluir	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBtIncluir() {
		if (btIncluir == null) {
			btIncluir = new JButton();
			btIncluir.setBounds(new Rectangle(40, 240, 106, 31));
			btIncluir.setText("Incluir");
			btIncluir.addMouseListener(new java.awt.event.MouseAdapter() {
				public void mouseClicked(java.awt.event.MouseEvent e) {
					//System.out.println("mouseClicked()"); // TODO Auto-generated Event stub mouseClicked()
					Livro liv = new Livro( getTxTituloLivro().getText(),
										   getTxComboAssunto().getSelectedItem().toString(),
										   getTxAutor().getText(),
										   getTxPaginas().getText(),
										   getTxComboTipo().getSelectedItem().toString()
										   );
					
					getAcervo().adicionar(liv);
					
					montaJListaLivro(jlLivros);
					limparCampos();
					JOptionPane.showMessageDialog(null, "Filme incluído!");
				}
			});
		}
		return btIncluir;
	}

	/**
	 * This method initializes btExcluir	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBtExcluir() {
		if (btExcluir == null) {
			btExcluir = new JButton();
			btExcluir.setBounds(new Rectangle(150, 240, 111, 31));
			btExcluir.setText("Excluir");
			btExcluir.addMouseListener(new java.awt.event.MouseAdapter() {
				public void mouseClicked(java.awt.event.MouseEvent e) {
					getAcervo().excluir(getKeyFilme());
					montaJListaLivro(jlLivros);
					limparCampos();
					JOptionPane.showMessageDialog(null, "Registro excluído com sucesso !!");
				}
			});
		}
		return btExcluir;
	}

	/**
	 * This method initializes btImprimir	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBtImprimir() {
		if (btImprimir == null) {
			btImprimir = new JButton();
			btImprimir.setBounds(new Rectangle(385, 240, 116, 31));
			btImprimir.setText("Imprimir");
			btImprimir.addMouseListener(new java.awt.event.MouseAdapter() {
				public void mouseClicked(java.awt.event.MouseEvent e) {
					//System.out.println("mouseClicked()"); // TODO Auto-generated Event stub mouseClicked()
					getAcervo().imprimir();
					JOptionPane.showMessageDialog(null, "Relatório impresso no console !");
				}
			});
		}
		return btImprimir;
	}

	/**
	 * This method initializes btLimpar	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBtLimpar() {
		if (btLimpar == null) {
			btLimpar = new JButton();
			btLimpar.setBounds(new Rectangle(265, 240, 116, 31));
			btLimpar.setText("Limpar");
			btLimpar.addMouseListener(new java.awt.event.MouseAdapter() {
				public void mouseClicked(java.awt.event.MouseEvent e) {
					limparCampos();
				}
			});
		}
		return btLimpar;
	}

	
	public JList montaJListaLivro(JList jlFilmes){
		Set<String> filmes = new TreeSet<String>();
		Set<Integer> listaDeChaves = getAcervo().estoque.keySet();
		for (Iterator<Integer> it = listaDeChaves.iterator(); it.hasNext();) {
			Integer chave = it.next();
			Livro liv = getAcervo().estoque.get(chave);
			filmes.add(chave + " - " + 
					   liv.getTitulo() + " - " + 
					   liv.getAssunto() + " - " +
					   liv.getAutor() + " - " +
					   liv.getPaginas() + " - " +
					   liv.getTipo()
					   );
		}
		jlFilmes.setListData(filmes.toArray());
		
		return jlFilmes;
	}
	
	
	public void buscaLivro(int chave){
		Livro liv = getAcervo().estoque.get(chave);
		txTituloLivro.setText(liv.getTitulo());
		txComboAssunto.setSelectedItem(liv.getAssunto());
		txAutor.setText(liv.getAutor());
		txPaginas.setText(liv.getPaginas());
		txComboTipo.setSelectedItem(liv.getTipo());
	}
	
	public void limparCampos(){
		getTxAutor().setText("");
		getTxComboAssunto().setSelectedItem("Artes");
		getTxPaginas().setText("");
		getTxTituloLivro().setText("");
		getTxComboTipo().setSelectedItem("DIDÁTICO");
	}
	
	
	/**
	 * This method initializes jlFilmes	
	 * 	
	 * @return javax.swing.JList	
	 */
	private JList getJlLivros() {
		if (jlLivros == null) {
			jlLivros = new JList();
			jlLivros.setBounds(new Rectangle(5, 280, 541, 131));
			jlLivros
					.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
						public void valueChanged(javax.swing.event.ListSelectionEvent e) {
							try {
								String[] filSelecArray = jlLivros.getSelectedValue().toString().split(" - ");
								setKeyFilme(Integer.parseInt(filSelecArray[0])); //recuperando a primeira parte da string (chave do filme)
								
								buscaLivro(getKeyFilme());
							}
							catch (Exception e1){
								
							}
						}
					});
			
			montaJListaLivro(jlLivros);
		}
		return jlLivros;
	}

	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				TelaLivraria thisClass = new TelaLivraria();
				thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				thisClass.setVisible(true);
			}
		});
	}

	/**
	 * This is the default constructor
	 */
	public TelaLivraria() {
		super();
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setSize(570, 458);
		this.setContentPane(getJContentPane());
		this.setTitle("Trabalho de AVALIAÇÃO da turma E5 - FACNET ANHANGÜERA - 2º semestre de 2008");
	}

	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			lbTipo = new JLabel();
			lbTipo.setBounds(new Rectangle(10, 200, 101, 26));
			lbTipo.setText("Tipo:");
			lbPaginas = new JLabel();
			lbPaginas.setBounds(new Rectangle(10, 165, 101, 26));
			lbPaginas.setText("Páginas");
			lbAutor = new JLabel();
			lbAutor.setBounds(new Rectangle(10, 130, 101, 26));
			lbAutor.setText("Autor:");
			lbAssunto = new JLabel();
			lbAssunto.setBounds(new Rectangle(10, 95, 101, 26));
			lbAssunto.setText("Assunto:");
			lbTituloLivro = new JLabel();
			lbTituloLivro.setBounds(new Rectangle(10, 60, 101, 26));
			lbTituloLivro.setText("Título do Livro:");
			lbTitulo = new JLabel();
			lbTitulo.setBounds(new Rectangle(10, 10, 428, 36));
			lbTitulo.setFont(new Font("Dialog", Font.BOLD, 24));
			lbTitulo.setText("Livraria Estoque do Saber - Ltda");
			jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(lbTitulo, null);
			jContentPane.add(lbTituloLivro, null);
			jContentPane.add(lbAssunto, null);
			jContentPane.add(lbAutor, null);
			jContentPane.add(lbPaginas, null);
			jContentPane.add(lbTipo, null);
			jContentPane.add(getTxTituloLivro(), null);
			jContentPane.add(getTxComboAssunto(), null);
			jContentPane.add(getTxAutor(), null);
			jContentPane.add(getTxPaginas(), null);
			jContentPane.add(getTxComboTipo(), null);
			jContentPane.add(getBtIncluir(), null);
			jContentPane.add(getBtExcluir(), null);
			jContentPane.add(getBtImprimir(), null);
			jContentPane.add(getBtLimpar(), null);
			jContentPane.add(getJlLivros(), null);
		}
		return jContentPane;
	}

}  //  @jve:decl-index=0:visual-constraint="10,10"

classe Livro:

import java.util.Map;


public class Livro {
private String titulo;
private String assunto;
private String autor;
private String paginas;
private String tipo;

public Livro(String titulo, String assunto, String autor, String paginas, String tipo) {
	super();
	this.setTitulo(titulo);
	this.setAssunto(assunto);
	this.setAutor(autor);
	this.setPaginas(paginas);
	this.setTipo(tipo);
}

public String getTitulo() {
	return titulo;
}
public void setTitulo(String titulo) {
	this.titulo = titulo;
}
public String getAssunto() {
	return assunto;
}
public void setAssunto(String assunto) {
	this.assunto = assunto;
}
public String getAutor() {
	return autor;
}
public void setAutor(String autor) {
	this.autor = autor;
}
public String getPaginas() {
	return paginas;
}
public void setPaginas(String paginas) {
	this.paginas = paginas;
}
public String getTipo() {
	return tipo;
}
public void setTipo(String tipo) {
	this.tipo = tipo;
}
}

as outras duas classes já foram postadas.
suponho eu que o meu erro se encontra na classe EstoqueLivros…

Não sei se expliquei mal, mas Implements também é um tipo de herança… na qual todos os métodos herdados pela classe filha devem ser obrigatoriamente implementados…
Na verdade, eu não tenho 100% de segurança sobre a definição correta desses conceitos de Extends/Implements - se alguém mais experiente puder dar uma luz, agradeço muito :slight_smile:

Pelo enunciado e o código da classe Mapa, me parece um caso de Implements.
A respeito da pergunta que você fez no post anterior sobre a utilidade da “chave”, essa chave é um valor numérico associado a cada elemento da lista…
A lista de chaves facilita a manipulação da lista.

Eu vou dar uma saída… tenho que trabalhar nos meus projetos também~
Tou apanhando demais, mas tá indo :smiley:

Po Valeu pelos esclarecimentos,de qualquer modo.
Vou tentar ver isso,eu tmb num tenho noçao alguma sobre implements,ou como exercitar corretamente um extends.

E bom trabalho ai com seus projetos!!

alguma ajuda??

é verdade, a implementaçao é um tipo de Herança.
e parece que ela possibilita mudar a classe herdada,ao inves de somente obter as suas caracteristicas.
Mas apesar do meu enunciado estar falando que é para trabalhar somente com o EstoqueLivros e o Livro…
os meus erros estao aparecendo em Mapa…
alguem sabe me explicar porq??

Oie…
Muito café… :wink:

Se eu errar em algo do que vou dizer a seguir, me corrijam…
vou só dar uns comentários e ponteiros:

Pra mim, parece que o principal objetivo dessa questão é mostrar o funcionamento de heranças.
Quanto a declaração das classes, fica: Livro extends EstoqueLivros que implements Mapa.
A classe Mapa pode e deve ficar como está.
EstoqueLivros implements Mapa, então você deveria implementar todos os métodos descritos em Mapa nessa classe… porém, como EstoqueLivros é abstract, você ainda pode deixar métodos sem implementação. heeh Se não fosse abstract, você obrigatoriamente teria que implementar todos os métodos nessa.
Livro extends EstoqueLivros. Se você deixou métodos sem implementação em EstoqueLivros, agora sim você deve obrigatoriamente implementá-los…

Lembre-se que, como Livro extends EstoqueLivros, você pode usar alegremente na Livro os métodos e atributos que você implementou na EstoqueLivros.

Acho que já passei umas idéias…
Esse eu não vou fazer para você :wink:

Para entender mais, olhe este link… as idéias dos extends/implements mostradas nos exemplos são bem parecidas (para não dizer iguais) às do exercício.

Mas Ayanami,
a classe Livro nao herda a classe EstoqueLivros nao…
será que vc nao viu errado naum??
Me explique melhor
(e dessa eu nao vou precisar q ninguem faça nao,pode admitir…já estou um pouquinho melhor do q naquele primeiro problema…hehehe)
PS.(cuidado,café vicia…rsrs)

Livro não é um EstoqueLivros, portanto Livro não extends de EstoqueLivro.

EstoqueLivro pode ter Livros. É uma relação de agregação, e não herança.

Oops… correto.
meldels, o que eu escrevi? Livro herda as características de EstoqueLivro? sorry, hard nonsense :oops:

Thanks :slight_smile: Delirei legal :stuck_out_tongue:
Corrigindo… sendo uma agregação, você deve ter métodos para gerenciar Livro na sua classe EstoqueLivros (que parece bem a maneira como o professor já apresentou o problema)
Talvez você deveria falar mais com ele, esses exercícios são bem didáticos :wink:

é,parece que estou melhorando mesmo…rsrs
já estou ate conseguindo enxergar o problema com mais clareza,e diferenciar o q é,do q nao é…rssr
Valeu toda a ajuda.
Alguem pode me dar maiores explicaçoes e mais exemplos de Agregaçao??

:oops:e como é que funciona a agregaça a nivel de codigo,
tipo como ela fica,como inicia…enfim :oops:

Aprenda também a usar o Google. :wink:

Para esse tipo de pesquisa, tenho certeza que você pode encontrar em português mesmo exemplos melhores e mais detalhados do que algo que eu tentar explicar aqui :wink:

era exatamente o q eu estav fazendo!!!
hehehe

// composição
public class Empresa
{
  // Caso a empresa deixe de existir,
  // teus departamentos também deixarão.
  // Departamento precisa da Empresa para existir.
  List<Departamento> departamentos;
  
}

//agregação
public class Departamento
{
  // Mesmo que o departamento deixe de existir
  // o funcionário ainda continuará a existir.
  // Funcionário não depende de Departamento para existir.
  List<Funcionario> funcionarios;
}

Claro que isso vale para as regras de negócio que fiz. Se os teus funcionários dependessem do departamento para existir, então seria composição.

Valeu Bruno,
já era desse jeito que eu estava fazendo…so num tinha entendido a diferenciaçao entre composiçao e agregaçao…
na verdade ainda acho eles bem parecidos…
vou estudar mais um pouco por aqui…ai eu vejo como coloca-lo no meu projeto!!

MoçOOO vc já conseguiu fazer esse seu programa ai??
eu to precisando ajuda,me AjudAAAAa…

:oops: :oops: :oops:

ainda naum,mas em breve,acho que ele vai funcionar.
Pq??
dependendo do problema posso tentar te ajudar…
mas se nao tem muita gente aqui q é super habilitada p responder as suas duvidas!!!

Heh… a respeito dessas relações, dá uma olhada nesse tópico bem esclarecedor no JavaFree.
O tópico fala a respeito de como implementar Associação, Composição e Agregação… deve te esclarecer alguns pontos :wink:

belezinhAA
valeus Anayami!!

ei é só comigo,
ou esse link que você postou ai nao vai direto??
Tipo,tenho q copiar e colar ele no browser p ir…mas ta valendo!!