Upload
vitor-marcal
View
14
Download
1
Embed Size (px)
DESCRIPTION
Um sistema de blioteca em java com documentações
Citation preview
DASS - Programao Orientada a Objetos com Java - Prof Gilmar Carvalho
1. Como criar projetos na IDE NetBeans 1.1Escolhertipodoprojeto.ApsabriroNetBeanscliqueemarquivo/novo
1.2Escolheralocalizaodoprojeto.Onomedoprojetodeversemprecomearcomaprimeiraletraemmaisculoeasdemaisemminsculo.Casoonomesejacompostoporduaspalavras,asegundadever,tambm,comearcommaisculoeorestanteemminsculo.
1
DASS - Programao Orientada a Objetos com Java - Prof Gilmar Carvalho
1.3ConfiguraoinicialdoprojetoControleBibliotecario
2
DASS - Programao Orientada a Objetos com Java - Prof Gilmar Carvalho
1.4Criandoospacotes doprojetoMVC
Cliquecomobotodireitodomousesobreooconedopacoteeapareceratela
3
DASS - Programao Orientada a Objetos com Java - Prof Gilmar Carvalho
CliqueemPacoteJavaealtereonomedopacoteparacontrolebibliotecario.view
Repitaoprocedimentoanteriorparacriarospacotescontrolebibliotecario.controlecontrolebibliotecario.model.Aofinalvocteraaseguinteconfiguraodepacotes:
1.5ContedodosPacotesparaaquiteturaMVC(Model,VieweControl)
PacotecontrolebibliotecarioEstepacoteconterapenasumaclasse.Estaclassesempreteronomedoprojeto
(ControleBibliotecario.java)eapenasomtodoprincipal(publicstaticvoidmain(String[]args))
Pacotecontrolebibliotecario.controlEstepacoteconterasclassesdecontrole.Classesdecontrolesoclassesquefazemumaponteentreospacotesdaviewemodel.
Estasclassesimplementamoslisteners.
Pacotecontrolebibliotecario.model
4
DASS - Programao Orientada a Objetos com Java - Prof Gilmar Carvalho
Estepacoteconterasclassesdepersistnciadedados,ouseja,asclassesdedecontrole(CRUDCreate,Read,UpdateeDelete)edeEntidadesdeBancodeDados.
Pacotecontrolebibliotecario.viewEstepacoteconterasclassesdetelasdaaplicao.
2. Exemplo de uma aplicao com apenas duas camadas (view e model) 2.1Anlise2.1.1DescriotextualdoSistemaControleBibliotecrioUmabibliotecaquerautomatizarseusregistrosdelivros,leitoreseemprstimos.Nessabibliotecaoprazodedevoluodeumasemana,nohmulta,enohlimitepararetiradadelivros.Osistemadevepermitir,aoleitoroubibliotecria,amanutenodocadastrodelivros(incluso,exclusoeconsulta)eregistrodeconsultas(paraverificarseolivroestdisponvelouemprestado).OSistematambmdevefornecerconsultasausuriosematrasoelivrosdisponveiseretirados.2.1.2CasosdeUso
Manter(incluir,excluir,alterar)livros Consultarlivros Consultarusuriosematraso Manterusurios Consultarlivrosdisponveis Consultarlivrosemprestados
2.1.3CasodeUsoManterLivros
Sistema: ControleBibliotecrioNomedoCasodeUso: ManterLivrosAtor: BibliotecriaPrcondio: MenudosistemadisponvelparaaBibliotecria1)OcasodeusocomeaquandoaBibliotecriaacessaatelaManterLivros2)OSistemaexibeumatelacomoscamposparacadastramento(cdigodolivro,ttulo,autor,ISBN,Editora)3)ABibliotecriadigitaocdigodolivro4)ABibliotecriaclicanobotoconsultar5)OSistemalocalizaolivroeexibeosdadosnatela.
5
DASS - Programao Orientada a Objetos com Java - Prof Gilmar Carvalho
6)Abibliotecriapreencheosdadosnatela.7)Abibliotecriaclicanumdosbotes:Incluir,ExcluirouAlterar8)OSistemavalidaosdados(exceo1)9)OSistemafazamanuteno(inclui,excluioualtera)olivro.Exceo1OSistemaenviaaobibliotecrioumamensagemdizendoqualcampofoipreenchidoincorretamente.TeladeMenuTeladoCasodeUsoManterLivros
2.1.3CasodeConsultarLivros
Sistema: ControleBibliotecrioNomedoCasodeUso: ConsultarLivrosAtor: BibliotecriaeUsurioPrcondio: MenudosistemadisponvelparaaBibliotecria/usurio1)OcasodeusocomeaquandoaBibliotecria/usuarioacessaaconsultarlivros2)OSistemaexibeumatelacomasopcesdeconsulta3)ABibliotecriaoptaporumadasopesdeconsulta:autor,titurlo,editoraouano.4)ABibliotecriaclicanobotoconsultar5)OSistemalocalizaoslivroseexibeosdadosnatela.6)Abibliotecriaclicanobotolimpar
6
DASS - Programao Orientada a Objetos com Java - Prof Gilmar Carvalho
7)OSistemalmpaatela
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
7
DASS - Programao Orientada a Objetos com Java - Prof Gilmar Carvalho
8
DASS - Programao Orientada a Objetos com Java - Prof Gilmar Carvalho
2.2DesenvolvimentodoprojetoemJavacomNetBeans2.2.1CriandoatelaManterLivros(pacoteview)
AbraoprojetoControleBibliotecario(file/openproject) Cliquecomobotodireitodomousesobreopacotecontrolebibliotecario.view
9
DASS - Programao Orientada a Objetos com Java - Prof Gilmar Carvalho
CliquenaopoFormJFrame.Casonoencontreestaopocliqueemoutros(others)eoptepelacotegoriaFormsGUISwingetipodearquivoFormJFrame.
Cliqueemprximo(next)eatribuaonomedaclasseTelaManutencaoLivros.Verifiqueseo
pacotecontrolebibliotecario.viewecliqueemFinalizar.
10
DASS - Programao Orientada a Objetos com Java - Prof Gilmar Carvalho
Serexibidoaseguintetela:
Nocantoesquerdotemosaestruturadoprojeto.Nocentroumatelaembrancoparaondeseroarrastadososcomponentes(Controles
Swing)Nadireitatemososcomponentes(ControlesSwing)
NestaprimeiraetapavamosusarapenasoscomponetesLabel,CampodeTextoeBoto.Rtulo(Label)Componenteutilizadoparaescreverumrtulonatela(Ttulodatela,
descriadocontedodeumcomponente,etc.)CampodeTexto(JTextField)Componentequepermiteaentradadeumalinhadetexto
(String).Boto(Button)Componentequeexecutaumaaoparaatela.
InserindoottulodatelaCliquenocomponenteLabelecliquenatela(centro).
AparecerumcompoentejLabel1 Paraalteraraspropriedadesdestecomponente,cliquecomobotodadireitasobreele.
Apareceromenu: AopoEditarTextopermitealterarotextodoLabel.Cliquenestaopoeescrevaottulodatela:ManutenodeLivros.
Inserindooscamposdeentradadedados
11
DASS - Programao Orientada a Objetos com Java - Prof Gilmar Carvalho
PorenquantovamosusarapenasocomponteCampodeTexto(JTextField).ParacadaCampodeTextoqueinserirmosnatelavamosacrescentarumLabel(JLabel)
descrevendooqueconterestecampo.CliquenocomponeteCampodeTextodapaletaControlesSwing(direitadatela).Agoracliquenaposiodatelaquevocquerqueestecomponenteaparea.Agoracliquecomobotodadireitasobreeleparalimparotexto(EditarTexto)do
componenteedarumnomeparaestecomponente(AlteraroNomedaVarivel).ONomedaVariveldeverobedeceropadrodenomesparavariveisdojava.NestecasousaremosonomedevarivelcodigoDoLivro.
Repitaestaoperaoparaosdemaiscamposdetextodatela. Inserindoosbotes
CliquenocomponenteBoto dapaletadeControlesSwingcliquenaposiodatelaquevocquerqueestecomponenteaparea.MudeortulodobotoclicandocomobotodadiretasobreestecomponenteecliqueemEditarTexto(digiteottulodoboto:Consultar,Gravar,AlterarouExcluir).CliquecomobotodadireitasobreocomponenteecliqueemAlterarNomedaVarivel(ex:botaoConsultar,botaoGravar,botaoAlterar,botaoExcluir).2.2.2CriandoasclassesdeEntidadesdeBancodeDados(pacotemodel)NaanlisedosistemaControleBibliotecrio,identificamosasseguintesClassesdeEntidadesdeBancodeDados:
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)
CriandoaClasseEntidadedeBancodeDadosparaaclasseLivro.
12
DASS - Programao Orientada a Objetos com Java - Prof Gilmar Carvalho
Cliquecomobotodadireitasobreopacotemodel,NovoeClasseJava.
DonomeLivroparaaclasse.
Digiteocdigoabaixo:
packagecontrolebibliotecario.model
importjava.util.ObjectspublicclassLivro{privateStringcodigoLivroprivateStringtituloprivateStringautorprivateStringeditoraprivateStringISBNprivateIntegerano
13
DASS - Programao Orientada a Objetos com Java - Prof Gilmar Carvalho
publicLivro(StringcodigoLivro,Stringtitulo,Stringautor,Stringeditora,StringISBN,Integerano){//codigoLivroumavarivellocall//this.codigoLivroumatributothis.codigoLivro=codigoLivrothis.titulo=titulothis.autor=autorthis.editora=editorathis.ISBN=ISBNthis.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
DASS - Programao Orientada a Objetos com Java - Prof Gilmar Carvalho
publicStringgetISBN(){returnISBN}publicvoidsetISBN(StringISBN){this.ISBN=ISBN}publicIntegergetAno(){returnano}publicvoidsetAno(Integerano){this.ano=ano}@OverridepublicStringtoString(){return"Livro{"+"codigoLivro="+codigoLivro+",titulo="+titulo+",autor="+autor+",editora="+editora+",ISBN="+ISBN+",ano="+ano+'}'}@OverridepublicinthashCode(){inthash=5hash=37*hash+Objects.hashCode(this.codigoLivro)returnhash}@Overridepublicbooleanequals(Objectobj){if(obj==null){returnfalse}if(getClass()!=obj.getClass()){returnfalse}finalLivroother=(Livro)objif(!Objects.equals(this.codigoLivro,other.codigoLivro)){returnfalse}returntrue
15
DASS - Programao Orientada a Objetos com Java - Prof Gilmar Carvalho
} }
AgoravamoscriaraclasseContraladoraparaLivro.EstaclasseseraresponsvelporfazeroCRUDdeLivro,ouseja,inserirumlivro,recuperarumlivro,atualizarosdadosdeumlivroouexcluirumlivro.
Cliquecomobotodadireitasobreopacotemodel,NovoeClasseJava.
DonomedeControleLivrosparaestaclasse.
. Digiteocdigoabaixo:
importcontrolebibliotecario.model.Livroimportjava.util.ArrayListimportjava.util.List
16
DASS - Programao Orientada a Objetos com Java - Prof Gilmar Carvalho
publicclassControleLivros{ArrayListlivros=newArrayList()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=nullfor(Livroy:livros){if(y.getCodigoLivro().equals(codigoLivro)){livroRetorno=y}}returnlivroRetorno} }
17
DASS - Programao Orientada a Objetos com Java - Prof Gilmar Carvalho
2.2.3ModeloUMLdaAplicaocomduascamadas(VieweModel)
DiagramadeClasses
Essediagramadeclassesexibecomoasclassesestorelacionadaseopacoteaquepertencem.Hdoistiposderelacionamentos:a)Dependncia( )Estetipoderelacionamentosedatravsdeummtodo.Avarivelderefernciadoobjetonocasoacima,umainstnciadaclasseTelaManterLivrosumavarivellocaldentrodeumamtododaclasseControleBibliotecario.Portanto,assimqueomtodonessecasoomtodomaindaclasseControleBibliotecrioterminar,avarivelserdescartada.EsserelacionamentoexistetambmentreaclasseTelaManterLivroseaclasseLivro(videexemplosabaixo).Exemplos:publicstaticvoidmain(String[]args){TelaManterLivrostml=newTelaManterLivros()tml.setVisible(true)}privatevoidbotaoIncluirActionPerformed(java.awt.event.ActionEventevt){ LivroumLivro=newLivro(this.codigoLivro.getText(),this.tituloLivro.getText(),this.autor.getText(),this.isbn.getText(),Integer.parseInt(this.ano.getText()))
18
DASS - Programao Orientada a Objetos com Java - Prof Gilmar Carvalho
controleLivros.incluirLivro(umLivro) } b)Associao( )Estetiporelacionamentosedatravsdeumatributodotipoumaclasse.Esserelaciomentoexisteenquantooobjetoexistir.Exemplos:publicclassTelaManterLivrosextendsjavax.swing.JFrame{privateControleLivroscontroleLivrospublicclassControleLivros{privateArrayListlivros2.2.4ComoConectarasClassesdesseSistema(relacionamentos)
1. Classe ControleBibliotecrio com TelaManterLivros AClasseManterLivrosaclasseapartirdoqualosistemaserinicializado.EssaclassetemapenasomtodomainmtodoqueexecutadopelamquinavirtualJava.
Essemtodocriarumainstncia/objeto(new)daclasseTelaManterLivroseexecutaromtodosetVisible(true)desseobjeto.OrelacionamentodaclasseControleBibliotecariocomaTelaManterLivrosserdotipodependncia( ),quesignificaumrelacionamentoacionadoatravsdeummtodo,portanto,temporrio.
publicclassControleBibliotecario{ publicstaticvoidmain(String[]args){ TelaManterLivrostml=newTelaManterLivros() tml.setVisible(true) }
}
2. Classe TelaManterLivros com ControleLivros EssaclassetersempreassociadoaelaumatributodotipoControleLivros,queservirparafazeroCRUDdeLivro.Essarelaodotipoassociaao( )significaqueessaclassetemumatributodotipoControleLivros.
19
DASS - Programao Orientada a Objetos com Java - Prof Gilmar Carvalho
publicclassTelaManterLivrosextendsjavax.swing.JFrame{privateControleLivroscontroleLivros
publicTelaManterLivros(){
controleLivros=newControleLivros() initComponents()
}Vamosassociaraosbotes(Consultar,Incluir,AlterareExcluir),mtodosqueseroacinadosquandoclicarmosnessesbotes.Paraassociarumevento(clicar)sobreumcomponentedotipoboto(JButton):
a)BotoConsultar:CliquecomobotodadireitadomousesobreoobotoConsultar.
b)CliquenaopoEventos/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
DASS - Programao Orientada a Objetos com Java - Prof Gilmar Carvalho
this.isbn.getText(), Integer.parseInt(this.ano.getText())) controleLivros.incluirLivro(umLivro)
}
d)BotoExcluir
3. Classe ControleLivros de Livro AclasseControleLivrosterumconjunto(ArrayList)deobjetosdotipoLivro.EssaclasseterosmtodosquepermirofazeroCRUD(incluir,consultar,alterareexcluir)deobjetosdotipoLivrodoArrayListdeLivro.EssarelaoentreControleLivroseLivrodotipoassociaoessaclasseterumatributodotipoArrayList.Temos,atravsdaclasseArrayList,umrelacionamentodotipoumparamuitos,oumelhor,umobjetodaclasseControleLivrosterumconjuntodezeroounobjetosdotipoLivro.packagecontrolebibliotecario.modelimportjava.awt.Listimportjava.util.ArrayListpublicclassControleLivros{privateArrayListlivrospublicControleLivros(){livros=newArrayList()}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
DASS - Programao Orientada a Objetos com Java - Prof Gilmar Carvalho
publicvoidexcluirLivro(Livrox){for(Livroy:livros){if(x.equals(y)){livros.remove(x)}}}publicLivroconsultarLivro(StringcodigoLivro){LivrolivroRetorno=nullfor(Livroy:livros){if(y.getCodigoLivro().equals(codigoLivro)){livroRetorno=y}}returnlivroRetorno}}
2.3DiagramadeSequncia(UML)doCDUManterLivrosOsDiagramasdeSequnciasoutilizadosparamodelarosaspectosdinmicosde
sistemas.Essediagramamostraumainterao(geralmenteumCasodeUso),formadaporumconjuntodeobjetoseseusrelacionametnos,incluindoasmensagensquepoderoserenviadasentreeles.Essedigramaenfatizaordenaotemporaldasmensagens.
22
DASS - Programao Orientada a Objetos com Java - Prof Gilmar Carvalho
No exemplo acima vemos um trecho de diagrama de sequncia para o caso de uso ManterLivro. Os retngulos representam os objetos (varivel de referncia : Classe). As setas so as mensagens (mtodos) que um objeto requisita de outro. As mensagens (chamadas de mtodos de um objeto por outro) pode ser sncronas ou assncronas. Quando a mensagem assncrona (sem retorno), a seta fina, quando sncrona (chamada com retorno) a linha tem uma seta retangular cheia. Uma resposta deumamensagemsncronarepresentadaporumalinhatracejadacomumasetafina.2.4ConceitosdeOrientaoaObjetosutilizadosnesteprojeto.2.4.1CamadadeViso2.4.1.1Componente
UmcomponenteumobjetoquetemumarepresentaogrficaquepodeserexibidonumatelaGUI(GraphicalUserInterface)equepodeinteragir(respoderaeventoscomoclicar,arrastar,etc.)comousurio.Exemplosdecomponentessoosbuttons,checkboxes,comboboxes,radiobuttons,textfields,labels,frames,etc.
Oscomponentesqueforamutilizadosnessaaplicaopertencemaopacotejavax.swingeestoagrupadosemControlesSwingdapaletadecomponentesdoNetBeans:javax.swing.JButton,javax.swing.JCheckBox,javax.swing.JComboBox,javax.swing.JRadioButton,javax.swing.JTextFiled,javax.swing.JLabel,etc.
2.4.1.2Herana
Umoutrotipodecomponentessooscontineres.Oscomponentesdotipocontinerpodemagruparoutroscomponentesnoseuinterior(Ex.JFrame,JPanel,JScrollPanel,etc.)
QuandocriamosatelaManterLivrosoptamospeloJFramequeumcomponentedotipocontiner.AocriarmosaclasseManterLivros,oqueaconteceufoiqueessaclassepassouaserumJFrame,ouseja,herdouascaractersticas(atributos)ecomportamentos(mtodos)daclasseJFrame.PodemosveressaheranaexplcitanocdigodaclasseManterLivros:
publicclassTelaManterLivrosextendsjavax.swing.JFrame{EmUML
23
DASS - Programao Orientada a Objetos com Java - Prof Gilmar Carvalho
2.4.1.3Tratamentodeeventos
Umcomportamentoassociadoasclassesquedefinemoscomponentesacapacidadedeinteragircomosusurios.Assim,umcomponentepodeserprogramado(mtodo)paraterumaaoquandoousrioclicanele,arrasta,entra,sai,etc.
Oseventossoobjetoscriadosquandoumaaosobreumcomponenteexecutada.Porexemplo,quandoprogramamosobotoConsultarparaqueeleexecutasseumaconsultalistadelivros,optamospeloeventoActionPerformed(clicarsobreoboto)paraexecutaraaodesejada.Vimosentoquefoicriadooseguintemtodo:
privatevoidbotaoConsultarActionPerformed(java.awt.event.ActionEventevt){
}Nomedomtodo:botaoConsultarActionPerformedRetornodomtodo:voidParmetrosdomtodo:ActionEventevtPercebemosque:a)onomedomtodoestassociadoaonomedocomponente+onomedoevento,b)omtodonodevolver(return)nenhumvalor,apsotrminodaexecuo,c)omtodoreceberumobjetodotipoActionEventassociadoavarivelevt.Ositensaebsoperfeitamenteentendidos.Aquestocomoassociaraumcomponenteumevento.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
DASS - Programao Orientada a Objetos com Java - Prof Gilmar Carvalho
a)OmtodoaddActionListenerrecebeumparmetroqueumobjetodotipoActionListener.b)SeobservamosadescriodoparmetroveremosocomandonewindicandoquealisercriadoumobjetodotipoActionListener.c)Essaformadecriarumobjetodiretamentonoparmetrochamadodeinnerclassannima.
2.4.1.4Estadodeumobjeto.
Oestadodeumobjetoenvolvetodososatributos(propriedades)doobjetojuntamentecomvaloresatuaisdecadaumadessesatributos.Oestadodeumobjetodinmico.Assim,aovisualizarseuestado,estamosrealmenteespecificandoovalordeseuestadoemumdeterminadomomentonotempoenoespao.
Umaclassequenotemnenhumatributoprprioouherdado,tersempreomesmoestadoparatodososobjetoscriados.Omesmovaleseosatributosforemtodosdotipostatic.Nessecaso,geralmenteosmtodosdaclassetmomodificadorstaticindicandoqueomtodopodeserchamadosemanecessidadedecriarumainstncia/objeto,bastandoapenasquesefaarefernciaaonomedaclasse,seguidodepontoeonomedomtodo.AsclassesqueagrupamfunescomoaclasseMathdopacotejava.lang,tmseusmtodosdeclaradoscomostatic,portantopodemosacionarseusmtodosdiretamentepelonomedaclasse(Ex.Math.cos(),Math.pow(doublea,doubleb),Math.cos(doublea),Math.sqrt(doublea),Math.round(doublea),Math.random(),etc.).
2.4.2CamadaModelo2.4.2.1ClassedeEntidade2.4.2.2ClassedeControle2.4.2.3Listas(ArrayList)
25