Escolar Documentos
Profissional Documentos
Cultura Documentos
Sistema de Biblioteca Java Compress
Sistema de Biblioteca Java Compress
1.2 Escolher a localização do projeto.
O nome do projeto deverá sempre começar com a primeira letra em maiúsculo e as demais em
minúsculo. Caso o nome seja composto por duas palavras, a segunda deverá, também, começar
com maiúsculo e o restante em minúsculo.
1
DASS - Programação Orientada a Objetos com Java - Prof Gilmar Carvalho
1.3 Configuração inicial do projeto ControleBibliotecario
2
DASS - Programação Orientada a Objetos com Java - Prof Gilmar Carvalho
1.4 Criando os pacotes do projeto MVC
● Clique com o
botão direito
do mouse sobre o o ícone do pacote
e aparecerá a tela
3
DASS - Programação Orientada a Objetos com Java - Prof Gilmar Carvalho
● Clique em Pacote Java e altere o nome do pacote para
controlebibliotecario.view
● Repita o procedimento anterior para criar os pacotes
controlebibliotecario.control e controlebibliotecario.model. Ao final
você tera a seguinte configuração de pacotes:
1.5 Conteúdo dos Pacotes para aquitetura MVC (Model, View e Control)
● Pacote controlebibliotecario
Este pacote conterá apenas uma classe. Esta classe sempre terá o nome do projeto
(ControleBibliotecario.java
) e apenas o método principal public static void main(String[] args))
(
● Pacote controlebibliotecario.control
Este pacote conterá as classes de controle.
Classes de controle são classes que fazem uma ponte entre os pacotes da view e
model.
Estas classes implementam os listeners
.
● Pacote controlebibliotecario.model
4
DASS - Programação Orientada a Objetos com Java - Prof Gilmar Carvalho
Este pacote conterá as classes de
persistência de dados
, ou seja, as classes de de
controle (CRUD Create, Read, Update e Delete) e de Entidades de Banco de Dados.
● Pacote controlebibliotecario.view
Este pacote conterá as classes de
telas
da aplicação.
5
DASS - Programação Orientada a Objetos com Java - Prof Gilmar Carvalho
6)
A bibliotecária
preenche os dados na tela.
7)
A bibliotecária
clica num dos botões: Incluir, Excluir ou Alterar
8)
O Sistema valida os dados (exceção 1)
9)
O Sistema faz a manutenção (inclui, exclui ou altera) o livro.
Exceção 1
O Sistema envia ao bibliotecário uma mensagem dizendo qual campo foi preenchido
incorretamente.
Tela de Menu
Tela do Caso de Uso Manter Livros
2.1.3 Caso de Consultar Livros
Sistema: Controle Bibliotecário
Nome do Caso de Uso: Consultar Livros
Ator: Bibliotecária e Usuário
Précondição: Menu do sistema disponível para a Bibliotecária/usuário
1) O
caso de uso começa quando a Bibliotecária/usuario acessa a
consultar livros
2)
O Sistema exibe uma tela com as opcções de consulta
3)
A Bibliotecária
opta por uma das opções de consulta: autor, titurlo, editora ou ano.
4)
A Bibliotecária
clica no botão consultar
5)
O Sistema localiza os livros e exibe os dados na tela.
6)
A bibliotecária
clica no botão limpar
6
DASS - Programação Orientada a Objetos com Java - Prof Gilmar Carvalho
7)
O Sistema
lmpa a tela
2.1.4 Entidade de Banco de Dados
Biblioteca (
código
, nome, endereço,CEP, cidade, UF)
Livro (
código
, título, autor, editora, ISBN, ano)
Leitor (
código
, nome, endereço, CEP, cidade, UF)
Empréstimo (
códigoLivro
,
códigoLeitor
, dataSaida, dataDevolução)
Diagrama de Clases
7
DASS - Programação Orientada a Objetos com Java - Prof Gilmar Carvalho
8
DASS - Programação Orientada a Objetos com Java - Prof Gilmar Carvalho
2.2 Desenvolvimento do projeto em Java com NetBeans
view
2.2.1 Criando a tela Manter Livros (pacote )
● file/open project)
Abra o projeto ControleBibliotecario (
● Clique com o botão direito do mouse sobre o pacote controlebibliotecario.view
9
DASS - Programação Orientada a Objetos com Java - Prof Gilmar Carvalho
● Form JFrame.
Clique na opção Caso não encontre esta opção clique em outros(others) e
Forms GUI Swing
opte pela cotegoria e tipo de arquivo
Form JFrame.
● próximo(next)
Clique em e atribua o nome da classe T
elaM
anutencaoLivros.
Verifique se o
pacote é clique em
controlebibliotecario.view e Finalizar.
10
DASS - Programação Orientada a Objetos com Java - Prof Gilmar Carvalho
● Será exibido a seguinte tela:
No canto esquerdo temos a estrutura do projeto.
No centro uma tela em branco para onde serão arrastados os componentes (Controles
Swing)
Na direita temos os componentes (Controles Swing)
● Nesta primeira etapa vamos usar apenas os componetes Label Campo de Texto
, Botão.
e
Rótulo (Label)
Componente utilizado para escrever um rótulo na tela (Título da tela,
descriçaõ do conteúdo de um componente, etc.)
Campo de Texto (JTextField) Componente que permite a entrada de uma linha de texto
(String).
Botão (Button) Componente que executa uma ação para a tela.
● Inserindo o título da tela
Clique no componente Label e clique na tela (centro).
Aparecerá um compoente jLabel1
Para alterar as propriedades deste componente, clique com o botão da direita sobre ele.
Aparecerá o menu:
A opção Editar Texto
permite alterar o texto do Label. Clique nesta opção e escreva o título
Manutenção de Livros.
da tela:
● Inserindo os campos de entrada de dados
11
DASS - Programação Orientada a Objetos com Java - Prof Gilmar Carvalho
Por enquanto vamos usar apenas o componte Campo de Texto (JTextField).
Para cada Campo de Texto que inserirmos na tela vamos acrescentar um Label (JLabel)
descrevendo o que conterá este campo.
Clique no componete Campo de Texto Controles Swing
da paleta (direita da tela).
Agoraclique na posição da tela que você quer que este componente apareça.
Agora clique com o botão da direita sobre ele para limpar o texto (Editar Texto) do
componente e dar um nome para este componente (Alterar o Nome da Variável). O Nome da
Variável
deverá obedecer o padrão de nomes para variáveis do java. Neste caso usaremos o nome
codigoDoLivro
de variável .
Repita esta operação para os demais campos de texto da tela.
● Inserindo os botões
Clique no componente Botão da paleta de Controles Swing clique na posição da tela
que você quer que este componente apareça. Mude o rótulo do botão clicando com o botão da direta
sobre este componente e clique em Editar Texto (digite o título do botão: Consultar, Gravar, Alterar
ou Excluir). Clique com o botão da direita sobre o componente e clique em Alterar Nome da Variável
(ex: botaoConsultar, botaoGravar, botaoAlterar, botaoExcluir).
model)
2.2.2 Criando as classes de Entidades de Banco de Dados (pacote
Na análise do sistema Controle Bibliotecário, identificamos as seguintes Classes de Entidades de
Banco de Dados:
Biblioteca (
código
, nome, endereço,CEP, cidade, UF)
Livro (
código
, título, autor, editora, ISBN, ano)
Leitor (
código
, nome, endereço, CEP, cidade, UF)
Empréstimo ( códigoLivro
,
códigoLeitor
, dataSaida, dataDevolução)
Criando a Classe Entidade de Banco de Dados para a classe Livro
.
12
DASS - Programação Orientada a Objetos com Java - Prof Gilmar Carvalho
● pacote
Clique com o botão da direita sobre o model
, Novo e Classe Java.
● Dê o nome Livro para a classe.
● Digite o código abaixo:
package controlebibliotecario.model;
import java.util.Objects;
public class Livro {
private String codigoLivro;
private String titulo;
private String autor;
private String editora;
private String ISBN;
private Integer ano;
13
DASS - Programação Orientada a Objetos com Java - Prof Gilmar Carvalho
public Livro(String codigoLivro, String titulo, String autor, String editora, String
ISBN, Integer ano) {
// codigoLivro é uma variável locall
// this.codigoLivro é um atributo
this.codigoLivro = codigoLivro;
this.titulo = titulo;
this.autor = autor;
this.editora = editora;
this.ISBN = ISBN;
this.ano = ano;
}
public String getCodigoLivro() {
return codigoLivro;
}
public void setCodigoLivro(String codigoLivro) {
this.codigoLivro = codigoLivro;
}
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
public String getAutor() {
return autor;
}
public void setAutor(String autor) {
this.autor = autor;
}
public String getEditora() {
return editora;
}
public void setEditora(String editora) {
this.editora = editora;
}
14
DASS - Programação Orientada a Objetos com Java - Prof Gilmar Carvalho
public String getISBN() {
return ISBN;
}
public void setISBN(String ISBN) {
this.ISBN = ISBN;
}
public Integer getAno() {
return ano;
}
public void setAno(Integer ano) {
this.ano = ano;
}
@Override
public String toString() {
return "Livro{" + "codigoLivro=" + codigoLivro + ", titulo=" + titulo + ", autor=" +
autor + ", editora=" + editora + ", ISBN=" + ISBN + ", ano=" + ano + '}';
}
@Override
public int hashCode() {
int hash = 5;
hash = 37 * hash + Objects.hashCode(this.codigoLivro);
return hash;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Livro other = (Livro) obj;
if (!Objects.equals(this.codigoLivro, other.codigoLivro)) {
return false;
}
return true;
15
DASS - Programação Orientada a Objetos com Java - Prof Gilmar Carvalho
}
}
● Agora vamos criar a classe Contraladora para Livro. Esta classe será a responsável por fazer
o CRUD de Livro, ou seja, inserir um livro, recuperar um livro, atualizar os dados de um livro
ou excluir um livro.
● Clique com o botão da direita sobre o pacote model
, Novo e Classe Java.
● Dê o nome de
ControleLivros
para esta classe.
.
● Digite o código abaixo:
import controlebibliotecario.model.Livro;
import java.util.ArrayList;
import java.util.List;
16
DASS - Programação Orientada a Objetos com Java - Prof Gilmar Carvalho
public class ControleLivros {
ArrayList<Livro> livros = new ArrayList<Livro>();
public void incluirLivro (Livro x){
livros.add(x);
}
public void excluirLivro (Livro x){
for (Livro y:livros){
if (y.equals(x)){
livros.remove(y);
}
}
}
public void alterarLivro (Livro x){
for (Livro y: livros){
if (y.equals(x)){
y.setAutor(x.getAutor());
y.setTitulo(x.getTitulo());
y.setEditora(x.getEditora());
y.setISBN(x.getISBN());
y.setAno(x.getAno());
}
}
}
public Livro consultarLivro (String codigoLivro){
Livro livroRetorno=null;
for (Livro y: livros){
if (y.getCodigoLivro().equals(codigoLivro)){
livroRetorno = y;
}
}
return livroRetorno;
}
}
17
DASS - Programação Orientada a Objetos com Java - Prof Gilmar Carvalho
2.2.3 Modelo UML da Aplicação com duas camadas (View e Model)
Diagrama de Classes
Esse diagrama de classes exibe como as classes estão relacionadas e o pacote a que
pertencem. Há dois tipos de relacionamentos:
a) Dependência ( ) Este tipo de relacionamento se dá através de um método. A variável de
referência do objeto no caso acima, uma instância da classe TelaManterLivros é uma variável
local dentro de uma método da classe ControleBibliotecario. Portanto, assim que o método nesse
caso o método main da classe ControleBibliotecário terminar, a variável será descartada. Esse
relacionamento existe também entre a classe TelaManterLivros e a classe Livro (vide exemplos
abaixo).
Exemplos:
public static void main(String[] args) {
TelaManterLivros tml = new TelaManterLivros();
tml.setVisible(true);
}
private void botaoIncluirActionPerformed(java.awt.event.ActionEvent evt) {
Livro umLivro = new Livro(
this.codigoLivro.getText(),
this.tituloLivro.getText(),
this.autor.getText(),
this.isbn.getText(),
Integer.parseInt(this.ano.getText())
);
18
DASS - Programação Orientada a Objetos com Java - Prof Gilmar Carvalho
controleLivros.incluirLivro(umLivro);
}
b) Associação ( ) Este tipo relacionamento se dá através de um atributo do tipo uma classe. Esse
relaciomento existe enquanto o objeto existir.
Exemplos:
public class TelaManterLivros extends javax.swing.JFrame {
private ControleLivros controleLivros ;
public class ControleLivros {
private ArrayList<Livro> livros
;
2.2.4 Como Conectar as Classes desse Sistema (relacionamentos)
19
DASS - Programação Orientada a Objetos com Java - Prof Gilmar Carvalho
public class TelaManterLivros extends javax.swing.JFrame {
private
ControleLivros controleLivros;
public TelaManterLivros() {
controleLivros = new ControleLivros();
initComponents();
}
Vamos associar aos botões (Consultar, Incluir, Alterar e Excluir), métodos que serão acinados
quando clicarmos nesses botões.
Para associar um evento (clicar) sobre um componente do tipo botão (JButton):
a)
Botão Consultar : Clique com o botão da direita do mouse sobre o o botão
Consultar.
b) Clique na opção Eventos/Action/actionPerformed . Será criado um método que
será acionado (vide abaixo) sempre que clicarmos no botão.
private void botaoConsultarActionPerformed(java.awt.event.ActionEvent evt) {
String codigoLivro = this.codigoLivro.getText();
Livro umLivro = controleLivros.consultarLivro(codigoLivro);
if (umLivro != null){
this.autor.setText(umLivro.getAutor());
this.ano.setText(umLivro.getAno().toString());
this.isbn.setText(umLivro.getISBN());
} else {
JOptionPane.showMessageDialog (null,"Livro Inexistente");
}
}
c) Botão Incluir : Clique com o botão da direita do mouse sobre o botão Incluir.
private void botaoIncluirActionPerformed(java.awt.event.ActionEvent evt) {
Livro umLivro = new Livro(
this.codigoLivro.getText(),
this.tituloLivro.getText(),
this.autor.getText(),
20
DASS - Programação Orientada a Objetos com Java - Prof Gilmar Carvalho
this.isbn.getText(),
Integer.parseInt(this.ano.getText()));
controleLivros.incluirLivro(umLivro);
}
d)
Botão Excluir
21
DASS - Programação Orientada a Objetos com Java - Prof Gilmar Carvalho
public void excluirLivro (Livro x){
for (Livro y : livros){
if (x.equals(y)){
livros.remove(x);
}
}
}
public Livro consultarLivro(String codigoLivro){
Livro livroRetorno = null;
for (Livro y : livros){
if (y.getCodigoLivro().equals(codigoLivro)){
livroRetorno = y;
}
}
return livroRetorno;
}
}
2.3 Diagrama de Sequência (UML) do CDU Manter Livros
Os Diagramas de Sequência são utilizados para modelar os aspectos dinâmicos de
sistemas. Esse diagrama mostra uma interação (geralmente um Caso de Uso), formada por um
conjunto de objetos e seus relacionametnos, incluindo as mensagens que poderão ser enviadas
entre eles. Esse digrama enfatiza à ordenação temporal das mensagens.
22
DASS - Programação Orientada a Objetos com Java - Prof Gilmar Carvalho
2.4.1.2 Herança
Um outro tipo de componentes são os contêineres. Os componentes do tipo contêiner podem
agrupar outros componentes no seu interior (Ex. JFrame, JPanel, JScrollPanel, etc.)
Quando criamos a tela ManterLivros optamos pelo JFrame que é um componente do tipo
contêiner. Ao criarmos a classe ManterLivros, o que aconteceu foi que essa classe passou a ser um
JFrame, ou seja, herdou as características (atributos) e comportamentos (métodos) da classe
JFrame. Podemos ver essa herança explícita no código da classe ManterLivros:
public class
TelaManterLivrosextends
javax.swing.
JFrame
{
…
Em UML
23
DASS - Programação Orientada a Objetos com Java - Prof Gilmar Carvalho
2.4.1.3 Tratamento de eventos
Um comportamento associado as classes que definem os componentes é a capacidade de
interagir com os usuários. Assim, um componente pode ser programado (método) para ter uma ação
quando o usário clica nele, arrasta, entra, sai, etc.
Os eventos são objetos criados quando uma ação sobre um componente é executada. Por
exemplo, quando programamos o botão Consultar para que ele executasse uma consulta à lista de
livros, optamos pelo evento ActionPerformed (clicar sobre o botão) para executar a ação desejada.
Vimos então que foi criado o seguinte método:
private void botaoConsultarActionPerformed(java.awt.event.ActionEvent evt) {
}
Nome do método: botaoConsultarActionPerformed
Retorno do método: void
Parâmetros do método: ActionEvent evt
Percebemos que:
a) o nome do método está associado ao nome do componente + o nome do evento,
b) o método não devolverá (return) nenhum valor, após o término da execução,
c) o método receberá um objeto do tipo ActionEvent associado a variável evt.
Os itens a e b são perfeitamente entendidos. A questão é como associar a um componente
um evento. Se expandirmos o método initComponents() veremos que:
a) foi gerado uma instância de JButton: consultar = new javax.swing.JButton()
b) foi acionado o método addActionListener do botão consultar:
botaoconsultar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
consultarActionPerformed(evt);
}
});
Para entender este comando é preciso entender que:
24
DASS - Programação Orientada a Objetos com Java - Prof Gilmar Carvalho
a) O método addActionListener recebe um parâmetro que é um objeto do tipo ActionListener.
b) Se observamos a descrição do parâmetro veremos o comando new indicando que ali será
criado um objeto do tipo ActionListener.
c) Essa forma de criar um objeto diretamento no parâmetro é chamado de inner class
anônima.
2.4.1.4 Estado de um objeto.
O estado de um objeto envolve todos os atributos (propriedades) do objeto juntamente com
valores atuais de cada uma desses atributos. O estado de um objeto é dinâmico. Assim, ao visualizar
seu estado, estamos realmente especificando o valor de seu estado em um determinado momento
no tempo e no espaço.
Uma classe que não tem nenhum atributo próprio ou herdado, terá sempre o mesmo estado
para todos os objetos criados. O mesmo vale se os atributos forem todos do tipo static
. Nesse caso,
geralmente os métodos da classe têm o modificador static
indicando que o método pode ser
chamado sem a necessidade de criar uma instância/objeto, bastando apenas que se faça referência
ao nome da classe, seguido de ponto e o nome do método. As classes que agrupam funções como a
classe Math java.lang
do pacote , têm seus métodos declarados como static, portanto podemos
acionar seus métodos diretamente pelo nome da classe (Ex. Math.cos(), Math.pow(double a,
double b), Math.cos(double a), Math.sqrt(double a), Math.round(double a), Math.random(),
etc.
).
2.4.2 Camada Modelo
2.4.2.1 Classe de Entidade
2.4.2.2 Classe de Controle
2.4.2.3 Listas (ArrayList)
25