Professional Documents
Culture Documents
1.1Escolhertipodoprojeto.
ApsabriroNetBeanscliqueemarquivo/novo
1.2Escolheralocalizaodoprojeto.
Onomedoprojetodeversemprecomearcomaprimeiraletraemmaisculoeasdemaisem
minsculo.Casoonomesejacompostoporduaspalavras,asegundadever,tambm,comear
commaisculoeorestanteemminsculo.
1.3ConfiguraoinicialdoprojetoControleBibliotecario
1.4Criandoospacotes doprojetoMVC
Cliquecomo
botodireito
domousesobreooconedopacote
eapareceratela
CliqueemPacoteJavaealtereonomedopacotepara
controlebibliotecario.view
Repitaoprocedimentoanteriorparacriarospacotes
controlebibliotecario.controlecontrolebibliotecario.model.Aofinal
vocteraaseguinteconfiguraodepacotes:
1.5ContedodosPacotesparaaquiteturaMVC(Model,VieweControl)
Pacote
controlebibliotecario
Estepacoteconterapenasumaclasse.Estaclassesempreteronomedoprojeto
(
ControleBibliotecario.java
)eapenaso
mtodoprincipal
(
publicstaticvoidmain(String[]args))
Pacote
controlebibliotecario.control
Estepacoteconterasclassesdecontrole.
Classesdecontrolesoclassesquefazemumaponteentreospacotesda
viewe
model.
Estasclassesimplementamos
listeners
.
Pacote
controlebibliotecario.model
4
Estepacoteconterasclassesde
persistnciadedados
,ouseja,asclassesdede
controle(CRUDCreate,Read,UpdateeDelete)edeEntidadesdeBancodeDados.
Pacote
controlebibliotecario.view
Estepacoteconterasclassesde
telas
daaplicao.
2.1Anlise
2.1.1DescriotextualdoSistemaControleBibliotecrio
Umabibliotecaquerautomatizarseusregistrosdelivros,leitoreseemprstimos.Nessabibliotecao
prazodedevoluodeumasemana,nohmulta,enohlimitepararetiradadelivros.O
sistemadevepermitir,aoleitoroubibliotecria,amanutenodocadastrodelivros(incluso,
exclusoeconsulta)eregistrodeconsultas(paraverificarseolivroestdisponvelouemprestado).
OSistematambmdevefornecerconsultasausuriosematrasoelivrosdisponveiseretirados.
2.1.2CasosdeUso
Manter
(incluir,excluir,alterar)livros
Consultar
livros
Consultarusuriosematraso
Manter
usurios
Consultarlivrosdisponveis
Consultarlivrosemprestados
2.1.3CasodeUsoManterLivros
Sistema:
ControleBibliotecrio
NomedoCasodeUso:
Manter
Livros
Ator:
Bibliotecria
Prcondio:
MenudosistemadisponvelparaaBibliotecria
1)O
casodeusocomeaquando
aBibliotecriaacessaa
telaManterLivros
2)
OSistema
exibeumatelacomoscamposparacadastramento(cdigodolivro,ttulo,autor,
ISBN,Editora)
3)
ABibliotecria
digitaocdigodolivro
4)
ABibliotecria
clicanobotoconsultar
5)
OSistema
localizaolivroeexibeosdadosnatela.
5
6)
Abibliotecria
preencheosdadosnatela.
7)
Abibliotecria
clicanumdosbotes:Incluir,ExcluirouAlterar
8)
OSistema
validaosdados(exceo1)
9)
OSistema
fazamanuteno(inclui,excluioualtera)olivro.
Exceo1
OSistemaenviaaobibliotecrioumamensagemdizendoqualcampofoipreenchido
incorretamente.
TeladeMenu
TeladoCasodeUsoManterLivros
2.1.3CasodeConsultarLivros
Sistema:
ControleBibliotecrio
NomedoCasodeUso:
ConsultarLivros
Ator:
BibliotecriaeUsurio
Prcondio:
MenudosistemadisponvelparaaBibliotecria/usurio
1)O
casodeusocomeaquando
aBibliotecria/usuarioacessaa
consultarlivros
2)
OSistema
exibeumatelacomasopcesdeconsulta
3)
ABibliotecria
optaporumadasopesdeconsulta:autor,titurlo,editoraouano.
4)
ABibliotecria
clicanobotoconsultar
5)
OSistema
localizaoslivroseexibeosdadosnatela.
6)
Abibliotecria
clicanobotolimpar
6
7)
OSistema
lmpaatela
2.1.4EntidadedeBancodeDados
Biblioteca
(
cdigo
,nome,endereo,CEP,cidade,UF)
Livro
(
cdigo
,ttulo,autor,editora,ISBN,ano)
Leitor
(
cdigo
,nome,endereo,CEP,cidade,UF)
Emprstimo (
cdigoLivro
,
cdigoLeitor
,dataSaida,dataDevoluo)
DiagramadeClases
2.2DesenvolvimentodoprojetoemJavacomNetBeans
2.2.1CriandoatelaManterLivros(pacote
view
)
AbraoprojetoControleBibliotecario(
file/openproject)
Cliquecomobotodireitodomousesobreopacote
controlebibliotecario.view
Cliquenaopo
FormJFrame.
Casonoencontreestaopocliqueemoutros(others)e
optepelacotegoria
FormsGUISwing
etipodearquivo
FormJFrame.
Cliqueem
prximo(next)
eatribuaonomedaclasse
T
elaM
anutencaoL
ivros.
Verifiqueseo
pacote
controlebibliotecario.viewe
cliqueem
Finalizar.
10
Serexibidoaseguintetela:
Nocantoesquerdotemosaestruturadoprojeto.
Nocentroumatelaembrancoparaondeseroarrastadososcomponentes(Controles
Swing)
Nadireitatemososcomponentes(ControlesSwing)
Nestaprimeiraetapavamosusarapenasoscomponetes
Label
,
CampodeTexto
e
Boto.
Rtulo(Label)
Componenteutilizadoparaescreverumrtulonatela(Ttulodatela,
descriadocontedodeumcomponente,etc.)
CampodeTexto
(JTextField)Componentequepermiteaentradadeumalinhadetexto
(String).
Boto(Button)
Componentequeexecutaumaaoparaatela.
Inserindoottulodatela
CliquenocomponenteLabelecliquenatela(centro).
AparecerumcompoentejLabel1
Paraalteraraspropriedadesdestecomponente,cliquecomobotodadireitasobreele.
Apareceromenu:
Aopo
EditarTexto
permitealterarotextodoLabel.Cliquenestaopoeescrevaottulo
datela:
ManutenodeLivros.
Inserindooscamposdeentradadedados
11
PorenquantovamosusarapenasocomponteCampodeTexto(JTextField).
ParacadaCampodeTextoqueinserirmosnatelavamosacrescentarumLabel(JLabel)
descrevendooqueconterestecampo.
Cliquenocomponete
CampodeTexto
dapaleta
ControlesSwing
(direitadatela).
Agoracliquenaposiodatelaquevocquerqueestecomponenteaparea.
Agoracliquecomobotodadireitasobreeleparalimparotexto(EditarTexto)do
componenteedarumnomeparaestecomponente(AlteraroNomedaVarivel).O
Nomeda
Varivel
deverobedeceropadrodenomesparavariveisdojava.Nestecasousaremosonome
devarivel
codigoDoLivro
.
Repitaestaoperaoparaosdemaiscamposdetextodatela.
Inserindoosbotes
CliquenocomponenteBoto
dapaletadeControlesSwingcliquenaposiodatela
quevocquerqueestecomponenteaparea.Mudeortulodobotoclicandocomobotodadireta
sobreestecomponenteecliqueemEditarTexto(digiteottulodoboto:Consultar,Gravar,Alterar
ouExcluir).CliquecomobotodadireitasobreocomponenteecliqueemAlterarNomedaVarivel
(ex:botaoConsultar,botaoGravar,botaoAlterar,botaoExcluir).
2.2.2CriandoasclassesdeEntidadesdeBancodeDados(pacote
model)
NaanlisedosistemaControleBibliotecrio,identificamosasseguintesClassesdeEntidadesde
BancodeDados:
Biblioteca
(
cdigo
,nome,endereo,CEP,cidade,UF)
Livro
(
cdigo
,ttulo,autor,editora,ISBN,ano)
Leitor
(
cdigo
,nome,endereo,CEP,cidade,UF)
Emprstimo (
cdigoLivro
,
cdigoLeitor
,dataSaida,dataDevoluo)
CriandoaClasseEntidadedeBancodeDadosparaaclasse
Livro
.
12
Cliquecomobotodadireitasobreo
pacote
model
,NovoeClasseJava.
DonomeLivroparaaclasse.
Digiteocdigoabaixo:
packagecontrolebibliotecario.model
importjava.util.Objects
publicclassLivro{
privateStringcodigoLivro
privateStringtitulo
privateStringautor
privateStringeditora
privateStringISBN
privateIntegerano
13
publicLivro(StringcodigoLivro,Stringtitulo,Stringautor,Stringeditora,String
ISBN,Integerano){
//codigoLivroumavarivellocall
//this.codigoLivroumatributo
this.codigoLivro=codigoLivro
this.titulo=titulo
this.autor=autor
this.editora=editora
this.ISBN=ISBN
this.ano=ano
}
publicStringgetCodigoLivro(){
returncodigoLivro
}
publicvoidsetCodigoLivro(StringcodigoLivro){
this.codigoLivro=codigoLivro
}
publicStringgetTitulo(){
returntitulo
}
publicvoidsetTitulo(Stringtitulo){
this.titulo=titulo
}
publicStringgetAutor(){
returnautor
}
publicvoidsetAutor(Stringautor){
this.autor=autor
}
publicStringgetEditora(){
returneditora
}
publicvoidsetEditora(Stringeditora){
this.editora=editora
}
14
publicStringgetISBN(){
returnISBN
}
publicvoidsetISBN(StringISBN){
this.ISBN=ISBN
}
publicIntegergetAno(){
returnano
}
publicvoidsetAno(Integerano){
this.ano=ano
}
@Override
publicStringtoString(){
return"Livro{"+"codigoLivro="+codigoLivro+",titulo="+titulo+",autor="+
autor+",editora="+editora+",ISBN="+ISBN+",ano="+ano+'}'
}
@Override
publicinthashCode(){
inthash=5
hash=37*hash+Objects.hashCode(this.codigoLivro)
returnhash
}
@Override
publicbooleanequals(Objectobj){
if(obj==null){
returnfalse
}
if(getClass()!=obj.getClass()){
returnfalse
}
finalLivroother=(Livro)obj
if(!Objects.equals(this.codigoLivro,other.codigoLivro)){
returnfalse
}
returntrue
15
}
}
AgoravamoscriaraclasseContraladoraparaLivro.Estaclasseseraresponsvelporfazer
oCRUDdeLivro,ouseja,inserirumlivro,recuperarumlivro,atualizarosdadosdeumlivro
ouexcluirumlivro.
Cliquecomobotodadireitasobreo
pacote
model
,NovoeClasseJava.
Donomede
ControleLivros
paraestaclasse.
.
Digiteocdigoabaixo:
importcontrolebibliotecario.model.Livro
importjava.util.ArrayList
importjava.util.List
16
publicclassControleLivros{
ArrayList<Livro>livros=newArrayList<Livro>()
publicvoidincluirLivro(Livrox){
livros.add(x)
}
publicvoidexcluirLivro(Livrox){
for(Livroy:livros){
if(y.equals(x)){
livros.remove(y)
}
}
}
publicvoidalterarLivro(Livrox){
for(Livroy: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())
}
}
}
publicLivroconsultarLivro(StringcodigoLivro){
LivrolivroRetorno=null
for(Livroy:livros){
if(y.getCodigoLivro().equals(codigoLivro)){
livroRetorno=y
}
}
returnlivroRetorno
}
}
17
2.2.3ModeloUMLdaAplicaocomduascamadas(VieweModel)
DiagramadeClasses
Essediagramadeclassesexibecomoasclassesestorelacionadaseopacoteaque
pertencem.Hdoistiposderelacionamentos:
a)
Dependncia
(
)Estetipoderelacionamentosedatravsdeummtodo.Avarivelde
refernciadoobjetonocasoacima,umainstnciadaclasseTelaManterLivrosumavarivel
localdentrodeumamtododaclasseControleBibliotecario.Portanto,assimqueomtodonesse
casoomtodomaindaclasseControleBibliotecrioterminar,avarivelserdescartada.Esse
relacionamentoexistetambmentreaclasseTelaManterLivroseaclasseLivro(videexemplos
abaixo).
Exemplos:
publicstaticvoidmain(String[]args){
TelaManterLivros
tml
=newTelaManterLivros()
tml.setVisible(true)
}
privatevoidbotaoIncluirActionPerformed(java.awt.event.ActionEventevt){
Livro
umLivro
=newLivro(
this.codigoLivro.getText(),
this.tituloLivro.getText(),
this.autor.getText(),
this.isbn.getText(),
Integer.parseInt(this.ano.getText())
)
18
controleLivros.incluirLivro(umLivro)
b)
Associao
(
)Estetiporelacionamentosedatravsdeumatributodotipoumaclasse.Esse
relaciomentoexisteenquantooobjetoexistir.
Exemplos:
publicclassTelaManterLivrosextendsjavax.swing.JFrame{
privateControleLivros
controleLivros
publicclassControleLivros{
privateArrayList<Livro>
livros
2.2.4ComoConectarasClassesdesseSistema(relacionamentos)
publicclassControleBibliotecario{
publicstaticvoidmain(String[]args){
TelaManterLivrostml=newTelaManterLivros()
tml.setVisible(true)
}
}
19
publicclassTelaManterLivrosextendsjavax.swing.JFrame{
private
ControleLivroscontroleLivros
publicTelaManterLivros(){
controleLivros=newControleLivros()
initComponents()
}
Vamosassociaraosbotes(Consultar,Incluir,AlterareExcluir),mtodosqueseroacinados
quandoclicarmosnessesbotes.
Paraassociarumevento(clicar)sobreumcomponentedotipoboto(JButton):
a)
BotoConsultar
:Cliquecomobotodadireitadomousesobreooboto
Consultar.
b)Cliquenaopo
Eventos/Action/actionPerformed
.Sercriadoummtodoque
seracionado(videabaixo)semprequeclicarmosnoboto.
privatevoidbotaoConsultarActionPerformed(java.awt.event.ActionEventevt){
StringcodigoLivro=this.codigoLivro.getText()
LivroumLivro=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,"LivroInexistente")
c)
BotoIncluir
:CliquecomobotodadireitadomousesobreobotoIncluir.
privatevoidbotaoIncluirActionPerformed(java.awt.event.ActionEventevt){
LivroumLivro=newLivro(
this.codigoLivro.getText(),
this.tituloLivro.getText(),
this.autor.getText(),
20
this.isbn.getText(),
Integer.parseInt(this.ano.getText()))
controleLivros.incluirLivro(umLivro)
d)
BotoExcluir
packagecontrolebibliotecario.model
importjava.awt.List
importjava.util.ArrayList
publicclassControleLivros{
privateArrayList<Livro>livros
publicControleLivros(){
livros=newArrayList<Livro>()
}
publicvoidincluirLivro(Livrox){
livros.add(x)
}
publicvoidalterarLivro(Livrox){
for(Livroy:livros){
if(x.equals(y)){
y.setAno(x.getAno())
y.setAutor(x.getAutor())
y.setISBN(x.getISBN())
y.setTitulo(x.getTitulo())
}
}
}
21
publicvoidexcluirLivro(Livrox){
for(Livroy:livros){
if(x.equals(y)){
livros.remove(x)
}
}
}
publicLivroconsultarLivro(StringcodigoLivro){
LivrolivroRetorno=null
for(Livroy:livros){
if(y.getCodigoLivro().equals(codigoLivro)){
livroRetorno=y
}
}
returnlivroRetorno
}
}
2.3DiagramadeSequncia(UML)doCDUManterLivros
OsDiagramasdeSequnciasoutilizadosparamodelarosaspectosdinmicosde
sistemas.Essediagramamostraumainterao(geralmenteumCasodeUso),formadaporum
conjuntodeobjetoseseusrelacionametnos,incluindoasmensagensquepoderoserenviadas
entreeles.Essedigramaenfatizaordenaotemporaldasmensagens.
22
2.4ConceitosdeOrientaoaObjetosutilizadosnesteprojeto.
2.4.1CamadadeViso
2.4.1.1Componente
Umcomponenteumobjetoquetemumarepresentaogrficaquepodeserexibidonuma
telaGUI(GraphicalUserInterface)equepodeinteragir(respoderaeventoscomoclicar,arrastar,
etc.)comousurio.Exemplosdecomponentessoosbuttons,checkboxes,comboboxes,
radiobuttons,textfields,labels,frames,etc.
Oscomponentesqueforamutilizadosnessaaplicaopertencemaopacote
javax.swing
e
estoagrupadosemControlesSwingdapaletadecomponentesdoNetBeans:javax.swing.JButton,
javax.swing.JCheckBox,javax.swing.JComboBox,javax.swing.JRadioButton,javax.swing.JTextFiled,
javax.swing.JLabel,etc.
2.4.1.2Herana
Umoutrotipodecomponentessooscontineres.Oscomponentesdotipocontinerpodem
agruparoutroscomponentesnoseuinterior(Ex.JFrame,JPanel,JScrollPanel,etc.)
QuandocriamosatelaManterLivrosoptamospeloJFramequeumcomponentedotipo
continer.AocriarmosaclasseManterLivros,oqueaconteceufoiqueessaclassepassouaserum
JFrame,ouseja,herdouascaractersticas(atributos)ecomportamentos(mtodos)daclasse
JFrame.Podemosveressa
heranaexplcita
nocdigodaclasseManterLivros:
publicclass
TelaManterLivros
extends
javax.swing.
JFrame
{
EmUML
23
2.4.1.3Tratamentodeeventos
Umcomportamentoassociadoasclassesquedefinemoscomponentesacapacidadede
interagircomosusurios.Assim,umcomponentepodeserprogramado(mtodo)paraterumaao
quandoousrioclicanele,arrasta,entra,sai,etc.
Oseventossoobjetoscriadosquandoumaaosobreumcomponenteexecutada.Por
exemplo,quandoprogramamosobotoConsultarparaqueeleexecutasseumaconsultalistade
livros,optamospeloeventoActionPerformed(clicarsobreoboto)paraexecutaraaodesejada.
Vimosentoquefoicriadooseguintemtodo:
privatevoidbotaoConsultarActionPerformed(java.awt.event.ActionEventevt){
Nomedomtodo:botaoConsultarActionPerformed
Retornodomtodo:void
Parmetrosdomtodo:ActionEventevt
Percebemosque:
a)onomedomtodoestassociadoaonomedocomponente+onomedoevento,
b)omtodonodevolver(return)nenhumvalor,apsotrminodaexecuo,
c)omtodoreceberumobjetodotipoActionEventassociadoavarivelevt.
Ositensaebsoperfeitamenteentendidos.Aquestocomoassociaraumcomponente
umevento.SeexpandirmosomtodoinitComponents()veremosque:
a)foigeradoumainstnciadeJButton:
consultar=newjavax.swing.JButton()
b)foiacionadoomtodoaddActionListenerdobotoconsultar:
botaoconsultar.addActionListener(newjava.awt.event.ActionListener(){
publicvoidactionPerformed(java.awt.event.ActionEventevt){
consultarActionPerformed(evt)
}
})
Paraentenderestecomandoprecisoentenderque:
24
a)OmtodoaddActionListenerrecebeumparmetroqueumobjetodotipoActionListener.
b)Seobservamosadescriodoparmetroveremosocomando
new
indicandoquealiser
criadoumobjetodotipoActionListener.
c)Essaformadecriarumobjetodiretamentonoparmetrochamadode
innerclass
annima.
2.4.1.4Estadodeumobjeto.
Oestadodeumobjetoenvolvetodososatributos(propriedades)doobjetojuntamentecom
valoresatuaisdecadaumadessesatributos.Oestadodeumobjetodinmico.Assim,aovisualizar
seuestado,estamosrealmenteespecificandoovalordeseuestadoemumdeterminadomomento
notempoenoespao.
Umaclassequenotemnenhumatributoprprioouherdado,tersempreomesmoestado
paratodososobjetoscriados.Omesmovaleseosatributosforemtodosdotipo
static
.Nessecaso,
geralmenteosmtodosdaclassetmomodificador
static
indicandoqueomtodopodeser
chamadosemanecessidadedecriarumainstncia/objeto,bastandoapenasquesefaareferncia
aonomedaclasse,seguidodepontoeonomedomtodo.Asclassesqueagrupamfunescomoa
classe
Math
dopacote
java.lang
,tmseusmtodosdeclaradoscomo
static,
portantopodemos
acionarseusmtodosdiretamentepelonomedaclasse(Ex.
Math.cos(),Math.pow(doublea,
doubleb),Math.cos(doublea),Math.sqrt(doublea),Math.round(doublea),Math.random(),
etc.
).
2.4.2CamadaModelo
2.4.2.1ClassedeEntidade
2.4.2.2ClassedeControle
2.4.2.3Listas(ArrayList)
25