Home

Anderson Pereira Ataides Desenvolvimento de sistemas

image

Contents

1. Figura 6 16 Designer O formul rio qrormaPagt o 69 Os nomes dos widgets est o obedecendo ao padr o widget Nome Assim o primeiro label vai se chamar labelDescricao a primeira linha de edi o lineDescricao e assim sucessivamente Merece destaque o segundo campo um KComboBox Para colocar as op es Sim e N o deve se dar um duplo clique sobre o widget e uma caixa de di logo como a da Figura 6 17 semelhante a usada para definir as colunas do KListView ser exibida Nessa caixa para acrescentar um novo item clica se em New Item e digitar o texto no campo Text Newltem Item Properties N o E Delete Item h Pixmap ES be Help Apply OK Cancel ZA Figura 6 17 Designer Definindo as op es de um KComboBox Para chegar forma final primeiro s o selecionados os widgets que representam os campos junto com os espa adores sua frente e aplica se o layout horizontal este passo foi feito um a um Depois seleciona se os campos junto com os r tulos e aplica se o layout em tabela on a grid Em seguida s o selecionados os bot es com o espa ador a sua esquerda e em seguida aplica se o layout horizontal Finalmente seleciona se o formul rio e aplica se o layout vertical Os textos dos widgets s o inseridos da mesma forma usada da cri a o de QListaFormaPagto No caso dos r tulos h uma observa o adicional Para conseguir a tecla r pid
2. Tabela Elemento do DER GRUPOPRODUTO Entidade GRUPOPRODUTO PRODUTO Entidade PRODUTO CLIENTE Entidade CLIENTE REFERENCIA Entidade REFERENCIA USUARIO Entidade VENDEDOR FORMAPAGTO Entidade FORMA PAGAMENTO VENDA Entidade VENDA ITEMVENDA Relacionamento ESTA entre as entidades VENDA e PRODUTO 44 Tabela Elemento do DER PAGAMENTO Relacionamento PAGA entre VENDA e FORMA PAGAMENTO 5 4 Gerando as tabelas no banco de dados Depois de especificadas as tabelas pode se partir para a cria o des sas tabelas no banco de dados poss vel fazer isso com qualquer ferra menta de administra o de banco de dados mas ao mudar o SGBD as tabelas ter o que ser recriadas uma a uma Existem ferramentas que criam as tabelas no banco de dados base ado no DER diretamente mas infelizmente o TCM n o implementa esse recurso Para amenizar a situa o poss vel aproveitar o fato de que os bancos de dados conhecem a linguagem SQL e criar um script para que a cria o das tabelas seja feita de uma forma menos traum tica Para este trabalho o banco de dados escolhido foi o MySQL e na Figura 5 4 mostrado um trecho de um script para montar as tabelas no MySQL Para gerar o script para outro SGBD deve se fazer algumas pe quenas altera es e ele vai continuar funcionando O trecho mostrado na Figura 5 4 gera a tabela FORMAPAGTO no banco de dados kk kk k k k k k k k k k k k k k kK k k k k kK K k k k k
3. Tabelas sega asd VENDA Elemento do DER Entidade Venda gt PUNHO une iate pia io Registro de vendas de produtos M DAS SM S DREHS MAC N DER A Ye DS REDDE AANE ME DE RED DEAS RED RAC RARA AA CREATE TABLE VENDA NUMERO INT NOT NULL AUTO_INCREMENT PRIMARY KEY DATA TIMESTAMP NOT NULL VENDEDOR TINYINT NOT NULL REFERENCES USUARIO CODIGO MATCH FULL ON UPDATE CASCADE ON DELETE RESTRICT CLIENTE SMALLINT NOT NULL REFERENCES CLIENTE CODIGO MATCH FULL ON UPDATE CASCADE ON DELETE RESTRICT TIPOPAGTO VARCHAR 1 NOT NULL DEFAULT V IPODOCUMENTO VARCHAR 1 NOT NULL DEFAULT O INFORMACOES VARCHAR 100 VENDAFINAL INT REFERENCES VENDA NUMERO MATCH FULL ON UPDATE CASCADE ON DELETE SET NULL USREGISTRO NYINT NOT NULL REFERENCES USUARIO CODIGO MATCH FULL ON UPDATE CASCADE ON DELETE RESTRICT DTESTORNO DATETIME USESTORNO TINYINT REFERENCES USUARIO CODIGO MATCH FULL ON UPDATE CASCADE ON DELETE SET NULL MOTIVOESTORNO VARCHAR 100 CREATE INDEX VEDATA ON VENDA DATA CREATE INDEX VEVENDEDOR ON VENDA VENDEDOR CREATE INDEX VECLIENTE ON VENDA CLIENTE CREATE INDEX VEVENDAFINAL ON VENDA VENDAFINAL CREATE INDEX VEUSREGISTRO ON VENDA USREGISTRO CREATE INDEX VEDTESTORNO ON VENDA DTESTORNO 121 BATE INDEX VEUSESTORNO ON VENDA USESTORNO kk kkk k k k k k k k k k k k k k k k k k kK kK k k k k k k k k k k k k k k k k k k k k k k k k AAA Tabela ITEM
4. Figura 6 5 KDevelop informando bibliotecas adicionais 6 3 Gerando c digos fonte com o Umbrello Voltar a falar de uma ferramenta de modelagem estando na fase de implementa o por mais estranho que possa parecer n o algo fora de contexto Principalmente por usar a orienta o a objetos a implementa o n o deve ser um processo independente da modelagem pois as classes que ser o implementadas foram concebidas na modelagem Mas o motivo maior de se voltar a falar sobre o Umbrello para mostrar como ele cria c digos fonte baseado nas classes que foram modeladas Os c digos fonte n o foram gerados antes porque para ger los necess rio saber onde eles ser o armazenados Somente agora depois do projeto criado no KDevelop conhecido o local onde os arquivos v o estar localizados Dessa forma pode se voltar ao Umbrello e faz lo gerar os arquivos contendo o c digo fonte das classes baseado no modelo De acordo com o diagrama de sequ ncia mostrado no Cap tulo 4 54 as classes necess rias para implementar o cadastro de formas de paga mento s o KListaFormaPagto DListaFormaPagto KFormaPagto e DFormaPagto Mas de acordo com o diagrama de classes mostrado no mesmo cap tulo pode se notar que as classes DListaFormaPagto e DFormaPagto s o filhas de Database Assim para implementar o ca dastro de formas de pagamento as cinco classes devem ser criadas no sis tema Para ilustrar o f
5. 91 6 42 Implementa o do m todo exclui e s esessessssesssressesseresseeesersse 92 6 43 Estrutura da classe KFormaPagtoO 22020200000000000000000es 93 6 44 Construtores de KFormaPagtO 22000000000000000000000 0000 93 6 45 Implementa o do m todo grava e sssessesssessssessseessesseresssessees 94 7 1 Trecho de um arquivo no formato SGML n se 100 7 2 Trecho de documenta o no estilo DOxygen 103 A 1 Manuten o do cadastro de formas de pagamento 109 A 2 Emiss o de lista de Pre o Samara beca DU apra saia actas sas 110 A 3 Negocia o da venda com cliente a 111 B 1 Synaptic ferramenta de gerenciamento de pacotes 113 B 2 Preparando o servidor MySQL a 114 B 3 Iniciando o servidor MySQL rea 115 B 4 Chamando o programa mysql sssssssessessesssseesssessersseresseessresseeseee 115 B 5 Criando o banco de dados e O usu rio iiciiciiciicciiciiciiciiccein 116 B 6 O script SQL para criar as tabelas do banco de dados 117 B 7 Executando o script SOL cearense 123 B 8 Listando as tabelas do banco de dados i 123 Cap tulo 1 Introdu o Nos dias de hoje onde as empresas est o sob press o constante seja dos fornecedores que querem vender mais caro seja dos clientes que que rem c
6. ccccccciiicciic ciii 21 4 3 Diagrama de casos de uso do sisteMa cccccccccccccccecesens 22 4 4 Umbrello Diagrama de classes icien 24 4 5 Umbrello documentando uma classe 25 4 6 Umbrello Criando um novo atributo 26 4 7 Umbrello documentando um atributo ccccciiiiciiciecins 26 4 8 Umbrello definindo um m todo ir 27 4 9 Trecho do diagrama de classes do sisteMa cciiiciiiiinns 28 4 10 Umbrello Diagrama de segii ncia 29 4 11 Umbrello Associando a mensagem a um m todo da classe 30 4 12 Diagrama de seq ncia para o cadastro de formas de pagamento 31 5 1 O diagrama entidade relacionamento ccccccccscccsiae ae 34 5 2 O Editor TESD Entity Relationship Diagram teres 35 5 3 Documenta o da entidade FORMA PAGAMENTO 36 5 4 Script para criar a tabela FORMAPAGTO cccccc ice iic ciccciiccsireas 45 5 5 Enviando o script SQL ao MySQL a 46 6 1 KDevelop tela prificipal usasse sa besdiscaapand quabian aaa f a Pasta 50 6 2 KDevelop assistente de cria o de projetO ccciinus 51 6 3 Acrescentando um include em um arquivo fONte 52 Vii 6 4 KDevelop a janela Automake Manager 52 6 5 KDevelop informando bibliote
7. if registros mysql_free_result registros registros mysql_store_result conexao if mysql_errno conexao 0 emit erro mysql error conexao return false Jelse return true Figura 6 25 Implementa o do m todo getResult Depois de executar a instru o SQL e obter o conjunto de registros deve se usar o m todo proximo mostrado na Figura 6 26 A cada cha mada a este m todo um registro obtido do banco de dados Quando o l timo registro for lido na pr xima leitura a fun o mysql fetch row vai retornar um valor NULL fazendo com que o m todo retorne o valor false Este valor de retorno pode ser usado como condi o de parada na leitura dos registros do conjunto bool QDatabase proximo DL return registro mysql fetch row registros true false Figura 6 26 Implementa o do m todo proximo Para obter os dados de cada registro deve ser usado o m todo obtemCampo mostrado na Figura 6 27 O m todo percorre a lista de campos que a instru o SQL retorna e ao encontrar o campo desejado retorna o seu valor N o necess rio conhecer a instru o executada para isso pois o conjunto de registros tem todas as informa es sobre os campos 81 QString QDatabase obtemCampo QString campo unsigned int numCampos unsigned int i MYSQL FIELD campos numCampos mysql num fields registros campos mysql fetch fields registros for i
8. es para o desenvolvimento desse trabalho foi o fato de existirem poucos ou nenhum aplicativo comercial para Linux Em se tratando de software livre o problema ainda mais grave pois os desenvolvedores desse tipo de aplicativo ganham dinheiro com a venda do software Existem pelo menos dois modelos de neg cio seguidos pelos fornecedores desse tipo de software venda e aluguel Na verdade o que quase sempre acontece que a empresa adquire o software e depois o fornecedor oferece uma manuten o em troca de uma taxa mensal para atualiza es do produto Concluindo acaba se comprando e alugando o software ao mesmo tempo Outro grande problema no modelo propriet rio que na maioria dos casos os fornecedores cobram por licen a de uso ou seja eles cobram a utiliza o em cada m quina da rede o que onera mais ainda o custo de informatiza o No caso de sistemas alugados a hist ria n o muito diferente pois geralmente o valor do aluguel calculado de acordo com o n mero de m quinas em que o sistema vai funcionar O modelo propriet rio ainda apresenta o problema de prender o usu rio a um nico fornecedor que det m o poder sobre o sistema Ao usu rio cabe apenas o direito de utilizar o sistema O usu rio depende do fornecedor para instalar dar treinamento e manuten o e ainda efetuar eventuais altera es que forem necess rias para que o sistema atenda me lhor s suas necessidades Se a altera o solicitada
9. o pode ser gerada em v rios formatos como p ginas HTML Hypertext Markup Language PDF Portable Document Format e RTF Rich Text Format Logicamente os coment rios na codifica o do sistema n o foram esquecidos mas a documenta o estilo DOxygen foi a que mereceu mais aten o pois as classes ficam documentadas facilitando o seu entendimento sem nem mesmo ver o c digo fonte Os dois motivos que levaram ado o do DOxygen foram a inte gra o do KDevelop e a sua utiliza o no projeto KDE O KDevelop pode usar outros sistemas como o kdoc ou javadoc para documentar a API do projeto mas como padr o ele sugere o DOxygen O fato do KDevelop usar o DOxygen como padr o provavelmente decorr ncia dele ter sido adota do pelo projeto KDE para documentar a sua pr pria API Para elaborar a documenta o do sistema manual do usu rio e at mesmo este trabalho poderia ter sido utilizado qualquer processador de texto como o OpenOffice http www openoffice org ou o Microsoft Word http www microsoft com products office Por m seguindo as especifica es da TLDP The Linux Documentation Project http www tldp org foi utilizado o DocBook http www docbook org que gera a documenta o em HTML PDF LaTeX PostScript entre outros formatos a partir de um mesmo fonte XML Extensible Markup Language ou SGML Standard Generalized Markup Language Notas 1 Conforme a Free Software Foundation http www fsf
10. replace comboPrazo gt setCurrentItem formaPagto obtemCampo PRAZO S 0 1 Figura 6 44 Construtores de KFormaPagt o O m todo grava faz seu trabalho dependendo do atributo codigo Se ele tiver um valor a forma de pagamento deve ser alterada e ent o criada uma inst ncia de DFormaPagto chamando seu construtor que recebe o c digo da forma de pagamento a alterar Caso o atributo esteja vazio a inst ncia de DFormaPagto criada usando o outro construtor Depois disso os campos da forma de pagamento s o alterados e enviados ao banco de dados Finalmente se a grava o foi bem sucedida o m todo accept que encerra o processamento da janela e indica seu resultado como QDialog accepted O m todo implementado de acordo com a Figura 6 45 94 void KFormaPagto grava DFormaPagto fp if codigo isEmpty fp new DFormaPagto else fp new DFormaPagto codigo fp gt alteraCampo DESCRICAO lineDescricao gt text fp gt alteraCampo PRAZO QString p comboPrazo gt currentText left 1 linePesoCom gt text p replace fp gt alteraCampo PESOCOM Pp p lineP soDesc gt text p replace t n fp gt alteraCampo PESODESC p bool resultado fp gt grava delete fp if resultado accept else reject Figura 6 45 Impl
11. sua escolha O Cap tulo 3 apresenta o ponto de partida para o desenvolvimento do sistema sua especifica o Ele detalha o processo de vendas de uma forma bem objetiva supondo em primeira an lise o funcio namento perfeito sem exce es a serem tratadas Descrito o problema e escolhidas as ferramentas parte se para o desenvolvimento do sistema O Cap tulo 4 apresenta os diagramas UML resultado da modelagem do sistema e o Cap tulo 5 mostra a modelagem de dados que representa a estrutura do banco de dados do sistema Al m de apresentar o resultado modelos tamb m feita uma breve explica o de como obter o resultado com a ferramenta utilizada O Cap tulo 6 aborda a implementa o do sistema Para este tra balho sup e se que se tenha um m nimo de conhecimento da linguagem C C Este cap tulo mostra que apesar de ser conhecida como uma lin guagem dif cil poss vel trabalhar com ela com relativa facilidade quando se usa as ferramentas adequadas O Cap tulo 77 apresenta como desenvolver a documenta o do sis tema tanto para o desenvolvedor como para o usu rio S o mostrados de forma bem resumida e objetiva como usar o DOxygen e o DocBook para gerar manuais e p ginas de ajuda para documentar um sistema Finalmente no Cap tulo 8 s o apresentadas as considera es finais sobre o trabalho algumas das dificuldades enfrentadas conslus es e pro jetos futuros Este trabalho foi escrito para que a leitura s
12. suficiente que as bibliotecas dele estejam instaladas independente de qual gerenciador de janelas o usu rio estiver usando 2 3 Banco de dados A escolha de um sistema gerenciador de banco de dados SGBD n o depende somente do desenvolvedor do sistema nem s de crit rios puramente t cnicos Dependendo do sistema escolhido o desenvolvedor pode tornar o seu software invi vel para algumas pequenas empresas que t m pouco ou quase nenhum recurso dispon vel para investimento 10 A Casa das Carretas empresa que serviu de modelo para o sistema descrito neste trabalho um bom exemplo desse fato Em meados de 2001 quando era feito um estudo para fazer um upgrade das m quinas e dos programas que seriam utilizados o sistema gerenciador de banco de dados foi um dos que entraram no or amento Segundo or amentos realizados diretamente da Microsoft Oracle e de revendas locais s o custo da infra estrutura para desenvolvimento sistema gerenciador de banco de dados linguagem de programa o e ferramentas de modelagem utrapassaria a casa dos vinte mil reais e a empresa n o teria condi es na poca de bancar esse custo Para fugir do alto custo das solu es propriet rias foi feita uma pesquisa para encontrar um software de baixo custo que conseguisse aten der as exig ncias t cnicas para o desenvolvimento dos sistemas Felizmen te as distribui es Linux fornecem pelo menos dois sistemas gerenciado res de banco de da
13. VALOR DECIMAL 10 2 NOT NULL PRIMARY KEY VENDA SEQUENCIA 122 CREATE INDEX PGFORMAPAGTO ON PAGAMENTO FORMAPAGTO CREATE INDEX PGVENCIMENTO ON PAGAMENTO VENCIMENTO Figura B 6 O script SQL para criar as tabelas do banco de dados B 4 Executando o script Para enviar o script so servidor a fim de que ele crie as tabelas pode se usar o mesmo shell usado para criar o banco de dados e o usu rio ou seja o programa my sql A diferen a que ao inv s de digitar cada um dos comandos ser usado o recurso de redirecionamento de entrada do Linux para que o shell receba os comandos de um arquivo no caso o script O primeiro passo para criar as tabelas no banco de dados ent o ser abrir uma janela de terminal Supondo que o nome do arquivo contendo os comandos SQL se chama kvendas sql deve se chamar o programa mysql da forma mostrada na Figura B 7 mysql u kvendas p kvendas lt kvendas sql Figura B 7 Executando o script SQL O comando mostrado diz ao shell do MySQL que ser usado o usu rio kvendas u kvendas que ele precisa pedir a senha do usu rio p que ele dever usar o banco de dados kvendas e que o conte do do arqui vo kvendas sql deve ser usado O programa ent o vai pedir a senha do usu rio e depois vai executar todos os comandos contidos no arquivo kvendas sql Depois de executar os comandos o programa vai finalizar e a p
14. 30 ESTADO VARCHAR 2 CEP VARCHAR 8 TEL1 VARCHAR 10 TEL2 VARCHAR 10 FAX VARCHAR 10 EMAIL VARCHAR 80 CPF VARCHAR 11 DENTIDADE VARCHAR 20 CNPJ VARCHAR 14 INSCEST VARCHAR 20 DATACADASTRO TIMESTAMP NOT NULL TIPO VARCHAR 20 CADASTRO NYINT NOT NULL REFERENCES USUARIO CODIGO MATCH FULL ON UPDATE CASCADE ON DELETE RESTRICT VENDEDOR TINYINT NOT NULL REFERENCES USUARIO CODIGO MATCH FULL ON UPDATE CASCADE ON DELETE RESTRICT SITUACAO VARCHAR 1 NOT NULL DEFAULT V 119 CREATE INDEX CLNOME ON CLIENTE NOME CREATE INDEX CLAPELIDO ON CLIENTE APELIDO CREATE INDEX CLCPF ON CLIENTE CPF CREATE INDEX CLCNPJ ON CLIENTE CNPJ CREATE INDEX CLCADASTRO ON CLIENTE CADASTRO CREATE INDEX CLVENDEDOR ON CLIENTE VENDEDOR kk kkk Kk k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k x Tabela REFERENCIA Elemento do DER Entidade Referencia Funi o Referencias de clientes kk kk k k k k k k k k kK kX k k k k k k k k kK RARA k k x CREATE TABLE REFERENCIA C N N T C D V D C A G O Pp ODIGO SMALLINT NOT NULL REFERENCES CLIENTE CODIGO MATCH FULL ON UPDATE CASCADE ON DELETE CASCA
15. B dosemu a 4096 04 02 2004 11 37 dr 3PHP Simp 4 036 25 03 2004 20 33 dr Por M kvendastarbz2 489 518 25 03 2004 20 38 n Ler Agent Accasslilly Guidelines 1 0 omonografiatarbez 1 390 791 25 03 2004 20 45 n s SLIBC um ed aitean tar bz2 91 220 25 03 2004 20 45 n BLBSTDC um ad ojumitar bz2 11 522 25 03 2004 20 45 n A GNUstep 3 GNOME 1 0 API Reference AKDE2 Development Book kde org Projeto Atual D Favoritos Mensagens PU Mensagens Aplicativo Difference Viewer Valgrind Pesquisa Konsole Figura 6 1 KDevelop tela principal 50 Para criar um novo projeto no KDevelop deve se selecionar o menu Projeto gt Novo projeto New Project se o KDevelop estiver em ingl s O KDevelop ent o inicia o assistente de cria o de projeto como mostrado na Figura 6 2 interessante notar que v rios tipos de projetos s o suportados pelo KDevelop incluindo scripts php No caso do proje to deste trabalho deve ser celecionada a op o C gt KDE Simple KDE Application Na primeira tela do assistente deve ser informado o nome do projeto e alguns dados adicionais para identifica o do autor e do projeto Clicando no bot o Pr ximo outras telas do assistente ser o abertas e para o projeto descrito deve se aceitar as op es padr o O KDe velop vai criar um diret rio para projeto e colocar nele todos os arquivos necess rios para
16. DFormaPagto void l atualiza void KFormaPagto void lt alteraQ void KFormaPagto fp QString void DFormaPagto void obtemDados void obtemCampo void l J DFormaPagto void grava void alteraCampo campo Qstgng valor QString void altera void DFormaPagtoQ void atualiza void KFormaPagto void ia DFormaPagto void KListaFormaPagto void om Figura 4 12 Diagrama de segii ncia para o cadastro de formas de pagamento 31 Notas 1 A vers o do Umbrello usada neste trabalho n o estava traduzida para o portugu s e por isso o texto do menu est em ingl s poss vel que o Umbrello j tenha uma vers o traduzida 32 Cap tulo 5 Modelagem de dados Neste cap tulo ser realizada a modelagem de dados do sistema Essa modelagem que vai definir o o esquema do banco de dados ou seja as tabelas e respectivas estruturas Primeiramente apresentado o DER Diagrama de Entidade Relacionamento obtido segundo a especifica o do sistema Depois ser mostrado como obt lo usando o TCM Toolkit for Conceptual Modeling Depois de apresentado o DER ser mostradas as estruturas das ta belas que dever o ser implementadas no banco de dados Tamb m ser mostrado como criar as tabelas no banco de dados de forma r pida
17. Para document lo clica se sobre ele e digita se a documenta o na rea de texto Documentation como mostrado na Figura 4 7 S Ainme Properties Modelador UM MPS E General Properties Type Name Initial value IC Classifier scope static r Visibility Public O Private O Protected L ter J v x Lae Cancel Figura 4 6 Umbrello Criando um novo atributo zais r Attributes n codigo a r _ New Attribute j Delete j Properties j p Documentation Descri o da forma de pagamento Operations O G a Assnriai tinne P Hep v Jl Apply Cancel Figura 4 7 Umbrello documentando um atributo Depois de inclu dos e documentados os atributos pode se incluir os m todos da classe Para isso o primeiro passo selecionar a p gina Ope 26 rations Selecionada a p gina dos m todos deve se clicar no bot o New Operation para criar um m todo Uma tela como a da Figura 4 8 aberta onde o m todo ser definido Na tela das propriedades do m todo pode se incluir tamb m os par metros que o m todo vai precisar para seu proces samento Para incluir um par metro deve se dar um clique no bot o New Parameter A tela de propriedades do par metro similar das proprieda des de atributo Ao confirmar os dados do par metros o Umbrello volta s propriedades do m to
18. a escolha da linguagem C tamb m sofreu influ nci as do pr prio Linux e seus aplicativos a maioria escrita em C J que a grande maioria dos programadores Linux usam C por que procurar outra linguagem Al m do mais o C vem acompanhando qualquer distribui o Linux do mercado 2 6 Documenta o do sistema Nenhum sistema realmente bem desenvolvido se n o tiver uma do cumenta o que facilite tanto ao desenvolvedor quanto ao usu rio a com preens o e utiliza o de todas as partes que formam o sistema Al m disso a forma na qual essa documenta o disponibilizada tamb m pode ser de fundamental importi cia na populariza o do sistema As ferramentas de modelagem e de implementa o escolhidas fa cilitam bastante o trabalho bra al mas n o s o t o eficientes para dispo nibilizar a documenta o Para se tornar um software popular e para atrair o interesse de programadores da comunidade open source todo o sistema deve ser documentado de modo que o desenvolvedor consiga entender o funcionamento e implementa o antes mesmo de ver o c digo fonte Para documentar as classes os arquivos header foram todos documentados de acordo com as especifica es do DOxygen http www stack nl dimitri DOxygen O DOxygen um sistema de documenta o para programas escritos em C C Java entre outras linguagens Ele l os arquivos fonte e gera uma documenta o para a API 15 do sistema Essa documenta
19. devem ser escolhidos os pacotes MySQL MySQL client e MySQL devel Se for de interesse instalar a documenta o para consulta e aprender mais sobre o MySQL o pacote MySQL doc tamb m deve ser instalado Para instalar um pacote deve se selecion lo e clicar no bot o Instalar direita da lista Depois dos pacotes selecionados e marcados para a instala o deve se dar um clique no bot o Proceder localizado na barra de ferramentas do Synaptic 113 4 Arquivo A es Pacote Fitos Visualizar Procurar Configura es Ajuda Lu Pa mbu L Atualizar Lista Atualizar tudo Atualizar EEE Proceder Vers o Instalada Vers o Disponivel Descri o Cl hotecas e cas para desenvolvimento pa rde banco de dados MySOL MySQL bench 3 23 58 20507U90 1cl Testes de performance do MySQL MySQL client 3 23 58 20507U90 1cl 3 23 58 20507U90 1cl Cliente MySQL MySQL devel 3 23 58 20507U90 1cl 3 23 58 20507U90 1cl Arquivos de inclus o e bibliotecas de desenve MySQL devel static 3 23 58 20507U90 1cl bibliotecas est ticas de desenvolvimento com MySQL doc 3 23 58 20507U90 1tcl 3 23 58 20507U90 1cl Documenta o do MySQL ORBit 0 5 17 10978cl 0 5 17 10978cl Corretor de requisi es de objetos CORBA de ORBitdevel 0 5 17 10978cl Bibliotecas arquivos de inclus o e utilit rios p ORBitdevel static 0 5 17 10978cl Bbliotecas est ticas para desenvolvimento co q Informa o Descri o Depend ncias MySQL um servidor de banco de dados SQL linguagem estr
20. es Linux acompanhando revistas de inform tica que s o vendidas em bancas de revista Portanto o projeto consegue dar contribui es importantes comu nidade principalmente a usu ria de software livre que tem disposi o mais um trabalho que trata do desenvolvimento de sistemas usando ferra mentas dessa natureza 8 3 Trabalhos futuros Existem alguns projetos que podem ser desenvolvidos e acrescenta dos ao prot tipo desenvolvido usando o conhecimento obtido a partir do estudo deste trabalho Entre eles pode se citar uma implementa o mais completa do sistema incluindo a parte de emiss o de documentos fiscais retirada do escopo deste trabalho para deixar o sistema desenvolvido mais gen rico Outra funcionalidade que falta no prot tipo o controle de esto que que para ser implementado deve ser inclu do no projeto o controle da entrada de mercadorias Saindo do escopo das vendas e estoque usando o prot tipo como modelo podem ser desenvolvidos sistemas para todos os setores de uma empresa como sistemas do departamento financeiro ou folha de pagamen to Como foi mostrado a simplicidade de desenvolver sistemas em Linux abre se um leque de possibilidades que atualmente pouco explorado pois a grande maioria dos sistemas tanto os j existentes como os novos s o de senvolvidos para o Windows 107 Uma implementa o interessante de se fazer tornar a interface di n mica ou seja gerada n o no momento
21. mainWin new KListaFormaPagto 0 listaFormaPagto app setMainWidget mainWin mainWin gt show args gt clear 96 int ret app exec delete mainWin return ret As linhas 1 a 5 foram geradas pelo KDevelop e s o necess rias devi do a utiliza o de algumas estrutruras que est o declaradas nestes headers O include da linha 7 j faz parte do projeto pois nesse arquivo que est declarada a classe KListaFormaPagto Da linha 9 linha 34 s o c digos gerados pelo KDevelop e s o necess rios porque o sistema um sistema KDE e ele vai precisar dessa implementa o Dessas linhas a mais importante a 32 onde criado o objeto app que representa a aplica o Na linha 36 criado o objeto que a janela de lista de formas de pagamento Na linha 37 informado ao aplicativo que o widget criado vai ser o principal Na linha 38 o widget se torna vis vel A linha 41 entra no loop da aplica o e o controle passa para a janela principal o widget mainWin Quando a janela for fechada a janela principal encerrada e a apli ca o sai do loop Na linha 43 ent o o widget desalocado e a execu o do aplicativo encerrada A implementa o do caso de uso ent o est completa Para ver o sistema funcionando s mandar o KDevelop compilar e executar o sis tema Como pode se ver na implementa o o conhecimento necess rio de C se resume ao necess rio para utilizar as bibliot
22. min sculo com as respectivas extens es h e cpp S o esses os arquivos que ser o manipulados depois da classe criada gsh lan t E Class Information Advanced Information r Class Nome KListaFormaPagto Namespace r Inheritance Base class QListaFormaPagto LE virtual public O protected Q private Adicionar Baseclass Name Inheritance Type public Remover CE tig r Elle Names Op es Header R Use file templates klistaformapagto h lR Class is Q OBJECT Implementation Rj Generate Qwidget child class d d Klistaformapagto cpp Documentation Manipula as formas de pagamento Esta classe permite ao usu rio manipular as formas de pagamento que H cor n araitae nala cictoma Ela anraconta uma lieta com ae farmac i Cancelar Figura 6 18 KDevelop criando uma nova classe direita da janela exite um grupo de op es da classe Das op es 72 dispon veis ser marcado Generate OWidget child class Ao marcar esta op o a op o Class is OQ OBJECT tamb m selecionada Isto neces s rio para que a classe consiga trabalhar com o mecanismo signal and slot do Qt O campo Documentation tamb m interessante ser preenchido Por enquanto pode se colocar exatamente a mesma documenta o colocada na modelagem Mais tarde ser visto como formatar esse texto para gerar uma documenta o da API do sistema em diversos form
23. na coluna Signal escolhe se clicked na coluna Receiver a op o QListaFormaPagto Agora vem a personaliza o criar um novo slot A cria o de um novo slot uma tarefa muito simples Na janela de conex es deve se clicar no bot o Edit Slots Uma segunda caixa de 67 di logo como a da Figura 6 15 aparece com uma lista que dever conter os slots personalizados Para criar um novo slot deve se clicar no bot o New Function Nesse momento os campos abaixo da tela ser o disponibilizados para que sejam digitados os dados do novo slot No campo Function deve ser digitado adicionar e os outros campos s o deixados como sugerido Depois clica se em Ok Ao voltar o slot criado vai aparecer na lista e ent o ele deve ser selecionado para confirmar a conex o Da mesma forma pode se criar os slots para os outros bot es Deve se criar ent o o slot modificar para associar ao bot o botaoModificar O slot apagar para associar a botaoApagar O slot atualizar para associar a botaoAtualizar Function Retum Type Specifier Access Type In Use gt B apagar void virtual public slot Yes BS atualizar void virtual public slot Yes gt modificarg void virtual public slot Yes IR Only display slots New Function Delete Function _Function Properties Eunction adicionarQ Return type void Specifier virtual Access public 5 Type slot Es Help Cancel Figura 6 15 Desi
24. 0 i lt numCampos amp amp QString campos 1i name campo i if i lt numCampos return QString registro 1i else FELUF MIE Figura 6 27 Implementa o do m todo obtemCampo Em algumas situa es pode ser necess rio saber o n mero total de registros que a instru o SQL retornou e isto a tarefa do m todo numeroRegistros implementado como mostrado na Figura 6 28 Este m todo apenas retorna o valor da fun o mysql num rows implemen tada na biblioteca do MySQL long QDatabase numeroRegistros return mysql_num_rows registros Figura 6 28 Implementa o do m todo numeroRegistros Finalmente mostrada na Figura 6 29 a implementa o do m todo msgErro Este m todo um slot de QDatabase que mostra na tela uma caixa de di logo contendo um texto representando um erro que passado como par metro Ele foi implementado para ser o slot padr o para mostrar mensagens de erro do SGBD 82 void QDatabase msgErro const char strErro QMessageBox warning 0 Banco de dados strErro Figura 6 29 Implementa o do slot msgErro Assim foi mostrada a implementa o completa da classe QDatabase Ficou evidente na implementa o dos m todos que a conex o com o SGBD n o uma tarefa dif cil A grande vantagem de implementar o acesso API do SGBD nessa classe que se ao inv s do MySQL for usado outro SGBD como o PostgreSQL a
25. 4 mostra o Umbrello modelando o diagrama de classes Da mesma forma que foi feito no diagrama de casos de uso pa ra ligar duas classes seleciona se o tipo de liga o desejado na barra de ferramentas direita e clica se nas duas classes que devem ser ligadas Atributos do relacionamento como multiplicidade e r tulo podem ser al terados clicando se sobre o relacionamento com o bot o direito do mouse e no menu que aparece selecionar a op o Properties Uma janela ent o se abre para que as propriedades do relacionamento sejam alteradas esquerda existem algumas op es que quando selecionadas mudam a p gina de propriedades do relacionamento A primeira p gina General permite alterar o nome do relacionamento e documentar o relacionamento Na p gina Roles poss vel alterar os atributos relativos a cada uma das 23 classes do relacionamento Para documentar uma classe bem como criar os seus atributos e seus m todos deve se dar um duplo clique sobre a classe desejada O Um brello mostra uma janela similar janela de propriedades do relacionamen to por m com op es diferentes Na p gina General poss vel alterar o nome da classe e escrever a sua documenta o Na p gina Attributes s o informados os atributos da classe Na p gina Operations s o criados os m todos da classe Se os relacionamentos j foram feitos no diagrama a p gina Associations vai exibi los cv e Kvendas zmi Modelador UML Umbr
26. DOxygen ser o criados subdiret rios adicionais dentro do diret rio onde est o os arquivos fontes do sistema Dentro desses subdiret rios o DOxygen coloca os arqui vos gerados a partir dos arquivos fontes do projeto Depois s disponi bilizar esses arquivos para que o futuro colaborador do sistema n o precise nem abrir os arquivos fontes para aprender como trabalham as classes do sistema Mais informa es sobre o DOxygen pode ser obtida a partir da leitura de DOXYGEN brief Manipula as formas de pagamento Esta classe permite ao usu 1 io manipular as formas de pagamento que seri aceitas pelo sistema Ela apresenta uma lista com as formas jic cadastradas e permite ao usu io incluir alterar e excluir formas de pagamento do banco de dados Ela uma subclasse de QListaFormaPagto que ea classe de interface gerada pelo Designer x NVauthor Anderson Pereira Ataides Figura 7 2 Trecho de documenta o no estilo DOxygen 103 Cap tulo 8 Considera es finais O desenvolvimento de sistemas em Linux assim como em qual quer outra plataforma somente ter sucesso se houverem ferramentas que auxiliem o trabalho desde a concep o at a implementa o Todas as fer ramentas que foram utilizadas facilitam bastante o trabalho de desenvolvi mento em todas as suas fases e portanto desenvolver sistemas em Linux n o pode ser considerado como
27. E Y TCM Tool for Entity Relationship Diagrams 2 20 Helix Fle Edit View Print Scale Page Properties Search Document Document Type Entity Relationship Diagram Name ider esd H modified m nodes GRUPO 1 O lt gt PRODUTO AGRUPA N Q amp o kao pa o gt l N r edges FORMA N D N N lt gt PAGAMENTO VENDA CLIENTE RLR L 075 PRODUTO v C V gt REALIZA POSSUI Q eee 1 VENDEDOR REFERENCIA i create curve L h gt l J pi al Scale 100 commited delete subjects dic y M autoresizing E in line editor _i hierarchic document Directory home anderson Meus documentos Figura 5 2 O Editor TESD Entity Relationship Diagram Para desenhar um elemento no diagrama deve se clicar sobre o co 35 ne correspondente ao elemento desejado e clicar na rea de desenho Para ligar dois elementos deve se selecionar o tipo de liga o e com o bot o central do mouse ligar os dois elementos O TCM faz algumas valida es nas liga es evitando ligar elementos incompat veis com o tipo de liga o selecionado poss vel documentar cada elemento do diagrama como mostrado na Figura 5 3 Para isso deve se clicar sobre o elemento desejado e sele cionar o menu Properties Node Edge Annotation Uma tela se abre permitindo f
28. Implementa o do construtor e o m todo atualiza 90 Os m todos inclui ealtera mostrados na Figura 6 41 s o muito parecidos Ambos criam uma inst ncia de DFormaPagt o para mani pular os dados da forma de pagamento diferindo apenas no construtor que usado A outra diferen a entre os m todos que em altera feito um teste para certificar que o usu rio selecionou um elemento da lista para ser alterado void KListaFormaPagto inclui KFormaPagto novaForma new KFormaPagto this novaFormaPagto Qt WDestructiveClose if novaForma gt exec QDialog Accepted atualiza delete novaForma void KListaFormaPagto altera if listaFormaPagto gt selectedItem QMessageBox warning this Forma de pagamento Vocic deve selecionar uma forma de pagamento da lista antes de modificar return KFormaPagto formaPagto new KFormaPagto listaFormaPagto gt selectedItem gt text 1 this alteraFormaPagto Qt WDestructiveClose if formaPagto gt exec QDialog Accepted atualiza delete formaPagto Figura 6 41 Implementa o dos m todos inclui e altera 91 O ltimo m todo de KListaFormaPagto o exclui Ele pri meiramente verifica se foi selecionada uma forma de paamento da lista depois avisa o usu rio que a forma de pagamento ser exclu da do sistema e finalmente cria uma inst nacia de DFormaPagto para excl
29. Imprime KListaPrecos void E l DListaPreco void Figura A 2 Emiss o de lista de pre o 111 lt KNovaVenda DPesquisaProduto KPesquisaCliente DVenda DitemVenda vendedor DFuncionario KNovaVenda void pesquisaProduto void KPesquisaProdutoQ void atualiza void pa DPesquisaProduto void obtemDados void obtemCampo void DPesquisaProduto void selecionaQ void ia gt codigoProdutoQ void incluiProdutoQ void KPesquisaProdutog void y pesquisaCliente void k KPesquisaCliente void atualizaQ void gt obtemDados void obtemCampo void DPesquisaCliente void seleciona void codigoCliente void KPesquisaClienteQ void conclui void l DVenda void alteraCampo campo QString valor QString void novoProduto codigo QString quantidade QString valor QString void h Ditemvendag void alteracampo campo Gitring valor QString void grava void grava void DVenda void KNovaVendaf void Ditemvendaq void E Figura A 3 Negocia o da venda com cliente 112 Ap ndice B Preparando o banco de dados MySQL Este ap ndice tem a finalidade de mostrar como preparar o banco de dados para funcionar junto com o sistema desenvolvido neste trabal
30. Umbrello lt lt bancodedados gt gt lt onexao MYSQL registros MVSQL_RES 0 registro MYSQL ROW QDatabased void QDatabase void executaSQL sal QString bool getResult bool proximo bool 0btemCampo campo QString QString numero Registros long lt lt bancodedados gt gt lt lt bancodedados gt gt DListaFormaPayto DFomaPayto codigo Q5fring DlisfaFormaPagio voii Z E Beber descricao QString obfemDados void R Dans pesocom QString pesodesc Q String situacao QString DFormaPagto void r4 DFormaPagto formaPagto Q String void alteraCampo campo Q String valor Q Sting bool obtemDados void f grava int emelui int lt lt ihm gt gt KListaFormaPayto KLisfaForma Pagtol voi KListaFormaPagto void afualiza void inclui void exclui void altera void Figura 4 9 Trecho do diagrama de classes do sistema 4 3 Diagramas de seqii ncia Sigunco FURLAN diagrama de segii ncia mostra intera es en tre objetos organizada em uma segii ncia de tempo e de mensagens troca das mas m o trata de associa es entre os objetos A defini o das mensa gens trocadas feita baseando se na documenta o dos casos de uso Para elaborar o diagrama de sequ ncia j se pode pensar na imple menta o Algumas classes n o criadas no dia
31. a classe KFormaPagto conecta o sinal erro a um slot implementado em sua pr pria estrutura Depois de mostrar a estrutura da classe QDatabase a partir de ago ra ser mostrada a implementa o de seus m todos A Figura 6 21 imple menta o construtor A sua primeira tarefa inicializar os atributos Depois 78 disto ele faz a conex o com o SGBD As linhas 8 e 10 ilustram a utiliza o do sinal erro Se um erro ocorre o sinal emitido QDatabase QDatabase Q0bject parent const char name Q0bject parent name initAttributes if conexao mysql init NULL usuario senha db 0 NULL 0 emit erro mysql error conexao else 1 2 3 4 5 6 if mysql_real_connect conexao host 7 8 9 0 emit erro mysql error conexao H Figura 6 21 O construtor da classe QDatabase O m todo initAttributes mostrado na Figura 6 22 um m todo criado pelo Umbrello para inicializar os atributos da classe com seus valores padr o Esta uma forma interessante de trabalho principalmente se a classe tem mais de um construtor e os valores padr o dos atributos forem o mesmo pois n o necess rio repetir para cada construtor as atri bui es mas apenas chamar o m todo initAttributes void QDatabase initAttributes conexao 0 registros 0 Figura 6 22 Implementa o do m todo initAttributes A Figura 6 23 implementa o destrutor da classe Ele primeira
32. a estrutura final do banco de dados depende de algumas an lises sobre o DER Os re lacionamentos um para muitos por exemplo s o mapeados exportando se a chave prim ria da entidade que est no lado um para a entidade do lado muitos Nos relacionamentos muitos para muitos s o criadas tabelas adici onais com as chaves de ambas as entidades que comp em o relacionamento bem como atributos adicionais requeridos pelo relacionamento Dessa forma foi definida a estrutura das tabelas do banco de dados que ser o mostradas nas tabelas Tabela 5 1 a Tabela 5 9 Para cada tabela do banco de dados apresentada uma breve descri o e para cada atributo h uma explica o de sua fun o no sistema Tabela 5 1 GRUPOPRODUTO Agrupa produtos semelhantes Campo Tipo de dados Descri o CODIGO Num rico Identifica o do grupo de produtos DESCRICAO Alfa num rico Descri o do grupo COMISS O Porcentagem Comiss o paga nas vendas de pe as do grupo GRUPOPAI Num rico C digo do grupo ao qual o grupo pertence se for um subgrupo Este atributo mapeia o relacionamento SUBGRUPO 37 Tabela 5 2 PRODUTO Cadastro de produtos Campo Tipo de dados Descri o CODIGO Num rico Identifica o produto no sistema GRUPO Num rico Grupo ao qual o produto pertence chave de GRUPOPRODUTO DESCRICAO Alfa num rico Descri o completa do produto APELIDO Alfa num rico Descri o resumi
33. arquivos ge rados ao projeto Para isso deve se usar o Automake Manager Na parte inferior deve se clicar no bot o Add Existing Files ou clicar sobre o alvo com o bot o direito e selecionar a op o com o mesmo nome do bot o Uma janela se abre para que sejam selecionados os arquivos que devem ser inclu dos no projeto Note que exstem na lista alguns arquivos que t m o mesmo nome das classes criadas no Umbrello por m todo escrito em min sculo e com duas extens es cpp e h Todos eles devem ser seleci onados pois representam a implementa o das classes O KDevelop a partir de agora conhece as classes criadas pelo Umbrello e o programador pode codificar os m todos bem como efetuar altera es espec ficas para a implementa o como adi o de instru es include por exemplo importante lembrar que depois de alterado pelo KDevelop os ar quivos n o podem ser gerados novamente pelo Umbrello pois ele vai so brescrever as altera es efetuadas Portanto qualquer altera o realizada no Umbrello deve ser feita manualmente no KDevelop 6 4 Criando os formul rios do caso de uso Para elaborar os formul rios do sistema n o ser usado o KDeve lop pois ele n o fornece uma ferramenta para desenho poss vel com o Kevelop gerar os formul rios como o KVendas criado pelo KDevelop mas ser via c digo fonte o que torna o desenvolvimento mais lento Ao inv s de trabalhar nos fontes mais f cil e intuit
34. atribui o valor do c digo da forma de pagamento que ser alterada Depois disso ele busca os seus dados no banco de dados chamando os m todos obtemDados e proximo DFormaPagto DFormaPagto Q0Object parent const char name QDatabase parent name DFormaPagto DFormaPagto QString formaPagto QObject parent const char name 85 QDatabase parent name codigo formaPagto obtembados proximo Figura 6 34 Construtores da classe DFormaPagto O m todo obtemDados implementado da mesma forma que em DListaFormaPagto alterando apenas a instru o SQL que enviada ao banco de dados e por isto n o ser mostrado A Figura 6 35 mostra a implementa o do m todo alteraCampo Ele altera o valor de um dos atributos da classe O atributo a ser alterado e seu valor s o os par metros que o m todo recebe bool DFormaPagto alteraCampo QString campo QString valor if campo DESCRICAO descricao valor else if campo PRAZO prazo valor else if campo PESOCOM pesocom valor else if campo PESODESC pesodesc valor e lse return false return true Figura 6 35 Implementa o do m todo alteraCampo O pr ximo m todo mostrado pela Figura 6 36 o grava que grava os dados da forma de pagamento no banco de dados Este m to do deve ser chamado sempre depois de alteraCampo que atualiza os atributos da classe com os
35. cio sendo poss vel dar lhes melhor condi o de vida Agrade o a meu pai por sempre estar me incentivando a seguir com meus estudos Tamb m o agrade o por me dar broncas na hora certa quan do me mostro desestimulado a cumprir uma tarefa Tamb m vai um agra decimento minha m e in memorian que de onde quer que ela esteja com certeza intercedeu para que eu tivesse sucesso em minha jornada de estudos Um agradecimento especial ao meu irm o Heberts pela sua insis t ncia para que eu esteja sempre buscando melhor qualifica o para poder entrar no meio acad mico Finalmente quero agradecer a Deus por ter me iluminado na busca de conhecimentos para desenvolver este trabalho ndice L Introduca0 Sos ssenipiosisiiorsscsbuiaces fosco ndo tar assia ceras ada in qtde ici 1 1 1 Y 015412 762 0 DO a AEE E Ee o TEE Oa S 3 Oo hA EEE EE E AE RO MRE A E ET 5 1 3 Organiza o deste trabalhO ccciciciiicciiicciicciccciiciieeas 6 2 A escolha das ferramentas 000000000000000000000000000000000000000000000e000ees 8 2 Crit rios de escolhas nean n eolo rni ee 8 2 2 0 6 1015 331 2200 0 A RR 9 2 34 Banco de dados O eee 10 2 4 Ferramentas de modelageM cciccccicciccicccccceceeceeee 11 2 5 Linguagem de programa o e ambiente de desenvolvimento 13 2 6 Documenta o do Sisiema pacas us na a nada aaa aaa 15 3 Descri o do sisteMa 0c00co0000000000000
36. classe o signal que deve ser capturado deve ser conectado ao slot criado na clas 65 se assim que a classe QListaFormaPagto responder aos cliques nos bot es acrescentados na interface Para maiores informa es sobre o meca nismo signal and slot recomenda se a leitura de QTMANUAL A partir de agora o Designer ser instru do a fazer essas conex es Para in ciar ser informado como o formul rio ir responder ao cli que do bot o Fechar Obviamente ao clicar no bot o fechar deseja se que a janela se feche e a escolha por iniciar com este bot o foi para mostrar um fato existem alguns slots implementados internamente pelo Qt para os widgets Para fazer a primeira conex o clicar em Fechar Fechar a janela deve se selecionar o menu Edit Connections Uma caixa de di logo como a da Figura 6 14 aberta mostrando uma lista com as colunas mostradas na Tabela 6 2 Tabela 6 2 Conexs o signal slot Coluna Descri o Sender Indica o widget que emite o sinal Signal Qual o sinal dever ser capturado Receiver Indica qual o widget que vai receber o sinal Slot Qual o slot ser processado quando o sinal for capturado Manipulando a lista de conex es pode se perceber que os mesmos sinais podem ser conectados a tantos slots quanto forem necess rios Dessa forma se houverem v rios widgets dependentes de um outro esse mecanis mo pode ser usado para atualizar os diversos widgets dep
37. com o nome do m todo seguido dos par metros se existir algum Para a classe modelada o campo deve ser preenchido com atualizar No campo Acesso deve ser escolhida a op o Public Slots e no campo Storage escolhe se a op o Virtual O acesso p blico se justifica porque ao clicar no bot o Atualizar O usu rio na verdade est chamando este m todo Da mesma forma s o criados os slots restantes inclui exclui ealtera Criadas as classes pode se ent o partir para a codifica o dos m todos ou seja trabalhar efetivamente com o C As classes de interface precisam das classes que acessam o banco de dados para funcionar e por tanto a implementa o do sistema vai ser iniciada por elas 6 7 Implementa o das classes Ao criar uma classe s o acrescentados ao projeto dois arquivos que t m o mesmo nome da classe por m em min sculo um com extens o h e outro cpp Se na janela de classes for dado um clique sobre o nome 74 da classe o KDevelop abre uma janela mostrando o header e se o clique for sobre um dos m todos o KDvelop abre o cpp na posi o onde est implementado o m todo Primeiramente ser o implmentadas as classes que acessam o ban co de dados e depois as classes de interface com o usu rio que fazem uso dessas classes Depois de tudo codificado ser modificado o c digo da fun o main para que ela chame a janela de cadastro de formas de pagamento ao inv s da janelinha criada junt
38. da compila o mas no momento da execu o do aplicativo Isto poss vel de se fazer ligando bibliotecas do Designer ao aplicativo fazendo com que os formul rios fiquem indepen dente do resto da aplica o Dessa forma a qualquer momendo mesmo depois do sistema compilado o layout das janelas pode ser completamente modificado sem ter que recompilar o sistema Este recurso interessante porque fica f cil personalizar o sistema Com rela o ao projeto do sistema podem ser criadas classes para tratar as regras de neg cio Do modo que o prot tipo foi criado essas regras foram incorporadas s classes de dados que validam os dados antes de envi los ao SGBD Com rela o s ferramentas existe a possibilidade de se mostrar tamb m outras que apesar de competentes foram descartadas no desen volvimento do prot tipo de sistema comercial Um exemplo a dupla GTK GNOME que na maioria das distribui es Linux s o oferecidas co mo alternativa ao Qt KDE usado neste trabalho Da mesma forma pode ser analisado o Glade como alternativa ao KDevelop e o PostgreSQL substi tuindo o MySQL Com uma an lise dessa o futuro desenvolvedor ter em suas m os pontos de vista diferentes sob alguns aspectos do desenvolvi mento de sistemas Linux mas convergentes em um ponto facilitar o seu trabalho de projetar sistemas completos para o Linux 108 Ap ndice A Diagramas de seqii ncia Neste ap ndice ser o mostrados alguns dos
39. gerar o sistema 2 lx KDE Application framework Application framework KParts Control Center module KDE DCOP Service KDE Screen Saver KHTMLPart plugin KIO slave Generates a simple KDE application with Kate plugin one widget Kicker Applet Konqueror Navigation Panel Plu ia Simple Hello world program 3 m Propriedades Nome do aplicativo kvendas Localiza o homefanderson Autor nderson Pereira Ataides Email tson pa persogo com br vers o 0 1 Licen a GPL Final location fhome anderson kvendas Figura 6 2 KDevelop assistente de cria o de projeto 51 O novo projeto j faz alguma coisa mostra uma janela com os dize res Hello World Para testar seu funcionamento deve se mandar o KDeve lop rodar o programa Compilar gt Executar programa O KDe velop vai detectar que o projeto novo e pergunta se voc quer executar o script configure ou seja ao criar o projeto o KDevelop se encarregou de criar os scripts de configura o Aceitando a execu o do script O sis tema vai compilar e logo ap s ser executado a janela do aplicativo ser exibida na tela O projeto rec m criado tem todas as liga es necess rias para com pilar usando as bibliotecas Qt e KDE mas falta uma que de fundamental import ncia ao projeto a biblioteca do MySQL No momento em que for preciso usar uma fun o do MySQL se
40. gerenciar a conex o com o MySQL s o os seguintes conex o Este atributo vai conter um ponteiro que ser o ponto de comunica o entre o sistema e o banco de dados Ele do tipo MYSQL que uma struct definida em mysgl h registros Este atributo ser um ponteiro inicializado com NULL e ser usado logo ap s executar uma instru o SQL do tipo SELECT para receber o conjunto de registros retornados pela instru o O tipo deste atributo MYSQL RES outra struct definida em mysql h registro Este atributo vai conter os dados de um nico registro do conjunto de regsitros registros O tipo MYSQL Row tamb m definido em mysql h Este atributo n o deve ser um ponteiro Os detalhes da conex o com o banco de dados ser o implementados na classe QDatabase sendo que as outras classes devem apenas conhecer a linguagem SQL e usar os m todos implementados em Database Por tanto os atributos mostrados s o da classe Database e n o ser o usados diretamente mas via m todos implementados nesta classe Todas as classes de banco de dados oDatabase QListaFormaPagto e DFormaPagto foram criadas pelo Umbrello e portanto a estrutura delas est pronta nos arquivos fontes gerado por ele Assim resta apenas o trabalho de alterar os arquivos fonte para implementar os m todos das classes 76 6 7 1 1 Classe oDatabase A classe QDatabase a que vai conversar diretamente com a API do SGBD ou seja as cha
41. instalar as bibliotecas do outro ambiente pode gerar um ponto de disc r dia entre os usu rios Entre os v ios ambientes dispon veis foi escolhido o KDE O primeiro grande motivo pela escolha do KDE que ele est presente em praticamente todas as distribui es Linux do mercado o que vai aumentar a compatibilidade do sistema O segundo motivo que o KDE o ambiente gr fico padr o adotado por v rias das distribui es mais populares como SuSE Novell http www suse com Mandrake http www mandrakesoft com Xandros http www xandros com e a brasileira Conectiva http www conectiva com br O terceiro e talvez o mais importante motivo pela escolha do KDE que a biblioteca na qual ele se baseia o Qt http www trolltech com totalmente orientada a objeto Um outro grande ponto a favor da dupla Qt KDE a documenta o Todas as classes s o bem documentadas e a documenta o n o se restringe apenas a descrever as classes seus m todos e seus atributos Principalmen te na biblioteca Qt existem in meros exemplos e tutoriais que ensinam como utilizar as classes o que facilita bastante para o desenvolvedor en tender como uma classe utilizada em conjunto com outras que comp em um software Assim foi escolhido o KDE lembrando que para utiliz lo no de senvolvimento e na hora de executar o sistema pronto n o significa que o ambiente gr fico utilizado tenha que ser o KDE Para que o sistema funci one
42. k k k kK kK k k k k k k k k k k k k k k k x x Tabela FORMAPAGTO Tabela contendo as formas de pagamento disponi eis para negociai h o Restri 1 es como nmero mi imo de parcelas e prazos m imos s 1 2 restri 12es de programa n 1 2 sendo implementadas no banco de dados kH kk k k k kkk kkk kk kk k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k x x CREATE TABLE FORMAPAGTO CODIGO TINYINT NOT NULL AUTO_INCREMENT PRIMARY KEY DESCRICAO VARCHAR 30 NOT NULL PRAZO VARCHAR 1 NOT NULL DEFAULT S PESOCOM DECIMAL 2 1 NOT NULL DEFAULT 1 0 45 PESODESC DECIMAL 2 1 NOT NULL DEFAULT 1 0 SITUACAO VARCHAR 1 NOT NULL DEFAULT A CREATE INDEX FPDESCRICAO ON FORMAPAGTO DESCRICAO Figura 5 4 Script para criar a tabela FORMAPAGTO Juntando as especifica es de todas as tabelas a seren geradas pode se criar um script para ser enviado ao SGBD criando todas as tabelas de uma s vez Usando o sistema operacional Linux com o MySQL e supondo que o banco de dados kvendas tenha sido criado pelo administrador do banco de dados e que exista o script SQL kvendas db sql contendo as instru es para cria o das tabelas deve se o usar o comando da Figura 5 5 para enviar o script ao MySQL mysql kvendas
43. k kkk kkk kkk k k k k k k k k k k k k k RARA k k k k x CREATE TABLE PRODUTO CODIGO INT NOT NULL PRIMARY KEY GRUPO TINYINT NOT NULL REFERENCES GRUPOPRODUTO CODIGO MATCH FULL ON DELETE RESTRICT ON UPDATE CASCADE DESCRICAO VARCHAR 80 NOT NULL APELIDO VARCHAR 20 NOT NULL UNIDADE VARCHAR 3 NOT NULL DEFAULT UNI FRACAO VARCHAR 1 NOT NULL DEFAULT N DESCONTO DECIMAL 10 2 NOT NULL DEFAULT 0 0 COMISSAO DECIMAL 5 2 NOT NULL DEFAULT 0 0 118 SITUACAO VARCHAR 1 NOT NULL DEFAULT A CREATE INDEX PRGRUPO ON PRODUTO GRUPO CREATE INDEX PRDESCRICAO ON PRODUTO DESCRICAO CREATE INDEX PRAPELIDO ON PRODUTO APELIDO Tabela Elemento do DER kk kk k k kK k k k k k k k k k k k k k k k kK k k k k k k k k k k k k k k k k k k k k k k k k k AA CLIENTE Entidade Cliente Clientes da empresa parq quem serichemitida a venda kk kk k k k k k k k k k k k k k k k k k k kK k k k k k k k k k k k k k k k k k k k k k k k k k k k k xk x CREATE TABLE CLIENTE CODIGO SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY NOME VARCHAR 80 NOT NULL APELIDO VARCHAR 50 NOT NULL ENDERECO VARCHAR 80 BAIRRO VARCHAR 40 CIDADE VARCHAR
44. lt kvendas db sqgl Figura 5 5 Enviando o script SQL ao MySQL Notas 1 Caso o mouse tenha apenas dois bot es deve se clicar no elemento usando os dois bot es simultaneamente 46 Cap tulo 6 A implementa o do sistema Neste capi 2ulo abordada a fase de implementa o Para a sua leitura pressup e se que se tenha conhecimento b sico de C e de pro grama o orientada a objetos Para mostrar a utiliza o das ferramentas foi escolhido um caso de uso para ser implementado e na descri o do processo buscou se colocar o m ximo de detalhes poss vel sobre a imple menta o do caso de uso escolhido Para n o correr o risco de ser cansativo nem alongar demais o texto foi escolhido um caso de uso simples mas que contempla boa parte dos conceitos que devem ser utilizados na implementa o do sistema O caso de uso escolhido foi Manter cadastro de formas de pagamento O desenvolvimento desse caso de uso ser mostrado desde o de senho da interface at o envio dos dados digitados pelo usu rio ao banco de dados Ser visto como o KDevelop integrado ao Designer e como fazer para incluir nos fontes a tela desenhada no Designer A partir desse exemplo qualquer um dos outros casos de uso poder ser implementado fazendo se os devidos ajustes e logicamente usando se widgets apropria dos para cada caso A cria o das classes do sistema pode ser feita de duas formas ge ra o de c digo pelo Umbrello ou c
45. n o for interessante para outros clientes do fornecedor do sistema pior ainda pois eles v o deixar a altera o em segundo plano sob a justificativa que eles t m outras mais priorit rias para desenvolver A filosofia do software livre muda o poder das m os do fornecedor para as m os do cliente principalmente pelos seguintes motivos O software livre tem c digo aberto Teoricamente qualquer programador com conhecimento na lingua gem de programa o na qual o sistema foi desenvolvido pode efetuar altera es e adapt lo a qualquer situa o O software livre pode ser instalado em outras m quinas A partir do momento em que o usu rio obt m o software ele pode instal lo onde desejar ou seja ele pode instalar o sistema em uma ou em todas as m quinas da empresa sem ter que pagar mais por isto Esse trabalho foi elaborado baseando na experi ncia passada em uma pequena empresa a Casa das Carretas localizada em Goi nia GO A Casa das Carretas se encaixa no perfil da maioria das pequenas empresas brasileiras com potencial de crescimento por m com caixa restrito o que dificulta gastos em investimentos Com o crescimento natural no volume de dados da empresa surgiu a necessidade de fazer um upgrade em uma m quina Na poca todos os sistemas eram legalizados desde o sistema operacional passando pelo sistema de rede at o sistema gerencial Co mo a m quina veio com um sistema operacional mais evolu do decidiu se
46. org o fato de o software ser gratuito n o implica que ele seja livre Para ser livre o software precisa no m nimo ter o c digo fonte dispon vel o que n o acontece com o Kylix 2 API um conjunto de rotinas que permitem a utiliza o de um software ou componente de software Assim ao dizer que um sistema gerenci ador de banco de dados disponibiliza sua API significa que existe uma biblioteca que implementa as rotinas que devem ser usadas para ter acesso ao banco de dados 16 Cap tulo 3 Descri o do sistema Este cap tulo descreve o sistema a ser desenvolvido conforme as informa es obtidas junto aos usu rios do sistema O processo de vendas que onde o sistema deve atuar pode ser dividido em tr s fases negoci a o acerto no caixa pagamento e expedi o A descri o apresentada ser usada para a modelagem do sistema 3 1 A negocia o Durante o expediente o vendedor atende os clientes via telefone ou diretamente no balc o O vendedor de acordo com as informa es passa das pelo cliente consulta a lista de mercadorias no computador verifica a quantidade dispon vel e o pre o da mercadoria Para realizar essa consul ta o vendedor pode pesquisar pela descri o pelo grupo ou pelo pr prio c digo do produto Os pre os dever o ser dependentes da forma de pagamento Existe um pre o de venda sugerido que considera um prazo de 30 dias e de pendendo da forma de pagamento pode ter mais
47. usado o menu Layout gt Lay Out Vertically Depois de informado o layout os bot es ficam organizados O pr ximo passo clicar na rea vazia do formul rio e selecionar o menu Layout gt Lsy Out Horizontally Agora todo o formul rio estar bem organizado Se o formul rio for redimensionado a organiza o dos widgets se mant m Para ter uma id ia de como o formul rio vai ficar no sistema pronto deve se abrir o menu Preview e selecionar um dos formatos da lista Outra op o para previsualizar o formul rio pressionar Control T A Figura 6 11 mostra essa previsualiza o A TRE Figura 6 11 Designer previsualiza o no formao Keramik 61 6 4 3 Alterando as propriedades dos elementos Agora que o formul rio est organizado os widgets devem ser alte rados para que tenham as caracter sticas desejadas para o sistema O pri meiro passo ser alterar o texto dos bot es Para isto deve se dar um clique duplo sobre o bot o Uma caixa de di logo se abre para que seja digitado o texto que vai aparecer no bot o Para que o bot o tenha uma tecla de acesso r pido aquela que aparece sublinhada e que o usu rio pressiona Alt letra para acess lo coloca se o s mbolo amp antes da letra que dever ser usada para acesso r pido Dessa forma o bot o Adicionar por exemplo ter o texto amp Adicionar Em seguida ser o definidas as colunas que ser o exibidas na lista No Designer poss
48. usando um script SQL 5 1 Diagrama de Entidade Relacionamento O diagrama entidade relacionamento expressa graficamente a estru tura global de um banco de dados Segundo SILBERSCHATZ O modelo de dados entidade relacionamento baseia se na percep o de um universo contitu do por um grupo b sico de objetos chamados entidades e por relacionamentos entre esses objetos Ele foi desenvolvido a fim de facilitar o projeto de bancos de dados permitindo a especifica o de um squema de empreendimento Tal esquema representa a estrutura l gica global do banco de dados A partir da especifica o do sistema que s o definidas as enti dades e como elas est o relacionadas Para o sistema descrito no Cap tulo 3 pode se considerar v lido o DER mostrado na Figura 5 1 claro que o modelo apresentado n o representa uma solu o nica mas foi a que melhor se encaixou nos requisitos apresentados O diagrama da Figura 5 1 bem simples assim como deve ser sim ples um sistema para vendas Uma particularidade no modelo que foge um pouco da especifica o do sistema que n o h nenhuma refer ncia aos documentos fiscais exigidos nota e cupom A explica o que cada empresa trabalha com um formul rio personalizado e pelo fato de que os produtos podem ser regidos por legisla es diferentes que alteram a forma 33 de calcular impostos Devido a essa complexidade e para deixar o sistema mais gen rico decidiu se por
49. vel deixar pronto o nome e a ordem em que os cam pos ser o exibidos na lista Para isso deve se dar um clique duplo sobre o widget criado para representar a lista Uma caixa de di logo como a da Fi gura 6 12 aberta para que sejam alteradas algumas propriedades da lista Agora deve ser selecionada a aba Columns para que as propriedades das colunas sejam alteradas Para criar novas colunas deve se clicar em New Column e digitar o seu nome na linha de texto Text JO j oo Tems Columns ENE Column Properties ES z Text Descri o elete Column Asim coumo Pixmap Es ts R Clickable R Resizable amp J Help apply ff QK D cance Figura 6 12 Designer Alterando as propriedades das colunas 62 Existem duas op es abaixo do nome da coluna onde a primeira clickable se for selecionada vai permitir ao usu rio clicar no nome da coluna e o ListView vai ordenar a lista por esta coluna Essa op o deve estar marcada apenas para os campos C digo e Descri o A segunda op o Resizable permite ao usu rio redimensionar a coluna de acordo com sua vontade Defindas as propriedades das colunas deve se clicar Ok e o KListView dever ser redesenhado de acordo com as modifica es realizadas nas colunas At agora foi feito apenas o desenho da tela n o houve nenhuma preocupa o de como os widgets ser o criados ou usados na implementa o do sistema A partir de agora
50. 00000 109 B Preparando o banco de dados MySQL ccccccccocccccococcccooccccocce 113 B 1 Instalando o MySQL asma iesaa asa Rad Usada 113 B 2 Criando o banco de dados rr 115 B 3 Elaborando o script para criar as tabelas 117 BA Executando O script an aa ca 123 Refer ncias bibliogr ficas cccccccooccoocccocco000e00c0000000000000000000000000 125 vi Lista de Tabelas 5 1 GRUPOPRODUTO Agrupa produtos semelhantes 37 5 2 PRODUTO Cadastro de produtos 37 5 3 CLIENTE Esta tabela cont m os dados de cadastro do cliente 38 5 4 REEFERENCIA Refer ncias do cliente iiccii 40 5 5 USUARIO Dados dos usu rios do sistema 41 5 6 FORMAPAGTO Formas de pagamento aceitas na empresa 41 5 7 VENDA Registro das vendas Or amento Ordem de venda e Venda 22 sina dec e n nat da PRA U co SE N 42 5 8 ITEMVENDA Rela o de pe as vendidas t 43 5 9 PAGAMENTO Desdobramento do pagamento da venda 43 5 10 Rela o entre o DER e as tabelas do banco de dados 44 6 1 Propriedades dos BOLOS sr O NE REGENTE n are 64 6 2 Conexs o ML EnalASO Qua neteado REA E RI RR do e ERR e 66 Lista de Figuras 4 1 Umbrello criando um diagrama de caso de uso 20 4 2 Umbrello documentando um caso de uso
51. 0000000000 4 79 6 24 Implementa o do m todo executaSql cciicriiiciin 80 6 25 Implementa o do m todo getResult iiiccciiccciccicccicccsineae 80 6 26 Implementa o do m todo proximo cicccccicccsieeae 81 6 27 Implementa o do m todo obtemCampo cciciccciiccsine 81 6 28 Implementa o do m todo numeroRegistros 82 6 29 Implementa o do slot msgErro sera 82 6 30 Estrutura da classe DListaFormaPagtO 2200000000000000000 83 6 31 O construtor de DListaFormaPagtO 220000000000000000000 83 6 32 Implementa o do m todo obtemDados ciiciicci cici 84 6 33 Estrutura da classe DFormaPagto 22020002000000000000000enes 84 6 34 Construtores da classe DFOrmaPagtO 2202000000000000000es 85 6 35 Implementa o do m todo alteraCampo 0200000 86 6 36 Implementa o do m todo grava 229055990909009000000000 04 87 6 37 Implementa o do m todo exclui e s ssssessssesssressesseresseeeseese 87 6 38 Implementa o do m todo valida e s ssssesssssrsseessesseeesseeessese 88 6 39 Estrutura da classe KListaFormaPagtO 20200000000000000000 89 viii 6 40 Implementa o do construtor e o m todo atualiza 90 6 41 Implementa o dos m todos inclui altera
52. 00000000000000000000000000000000000000e0se 17 3 1 A 1 53210 01 1 105 10 eraa e R 7 17 32 ACORDO CAIXA caio Dir OU ERR CESTO POR 18 3 3 EXpP dICAO PRA RNP RE RD RR AE EA Seat eonte eat Nanni 18 3 4 Relat rios de acompanhamento 19 4 Modelagem do sistema eoccoccocoo0co00e0000v0000000000e0eoeeoeuoesoeseoovosose 20 4 1 Diagrama de caso de USO espace assasananmaratavemae a cassar assada 20 42 Diagrama d classes hieer NETO e a AUGE PER 22 4 3 Diagramas de SEQU NCIA eum series amiassiscaseaca na Gon ds ar nagaata ad ua 28 5 Modelagem de dados ccccccoccoceo0o00000000000000000000000000000eu0esoeseosvosose 33 5 1 Diagrama de Entidade Relacionamento ieeu 33 5 2 Gerando o DER com o TCM ir 34 5 3 Estutura do banco de dados ir 37 5 4 Gerando as tabelas no banco de dados 45 6 A implementa o do SsisteMa 0 0 0 0 0000000000000000000000000000000000000 47 6 1 O que necess rio para implementar siciiee 47 6 2 Criando um projeto com o KDevelop l 50 6 3 Gerando c digos fonte com o Umbrello 54 6 4 Criando os formul rios do caso de uso s i 57 6 4 1 Desenhando a tela de cadastro de formas de pagamento 59 6 4 2 Organizando os widgets no formul rio 60 6 4 3
53. Agora o formul rio est pronto para responder a eventos resultan tes da intera o com o usu rio A pr xima etapa ser justamente informar quais os eventos ser o tratados pelo formul rio 6 4 4 Intera o com o usu rio Depois de pronto o formul rio com layout definido e com todos os widgets nomeados deve se pensar nos eventos que dever o ser tratados pe lo formul rio Alguns eventos como minimizar maximizar redimensionar dever o ser tratados pela pr pria biblioteca Qt a n o ser que seja necess rio algum tratamento especial Por m ao clicar no bot o Adicionar ser necess rio ter um c digo diferenciado para que seja acrescentada uma for ma de pagamento lista A codifica o do evento propriamente ser feita no KDevelop mas no Designer poss vel dizer pelo menos o caminho a tomar quando ocorrer algum evento O Qt trabalha com um mecanismo para tratamento de eventos que ele denomina de signal and slot onde um widget ao receber um evento emite um sinal que pode ser interceptado por outros widgets atrav s de um slot Tanto o signal como o slot s o m todos especiais implementados na classe que representa o widget Na verdade este mecanismo n o serve apenas para tratamento de eventos mas para fazer uma troca de mensagens entre classes sem que uma conhe a a estrutura da outra Para fazer com que um widget responda a um sinal emitido por ou tro deve ser implementado um slot na classe e ao instanciar a
54. Alterando as propriedades dos elementos 62 6 4 4 Intera o com O usu rio ea 65 6 5 O formul rio QFormaPaD tos asas sapiens as pap das dcaas 69 6 6 Cria o das classes no KDevelop iii 71 6 7 Implementa o das Classes ua na NT ca GS 74 6 7 1 Classes de acesso ao banco de dados 15 OL Classe ODATADASS seus ganasiaira ioga reta ess eisi 76 6 7 1 2 Classe DListaFormaPagto 83 6 7 1 3 A classe DFormaPagtO 84 6 7 2 Classes de interface com o USU TNiO eccciiiiiiee se 88 6 7 2 1 A classe KListaFormaPagtoO 89 6 7 2 2 A classe KFormaPagtO 92 6 737 A Tuncao nata O pas DDS ES SS 95 7 Documenta o do sistema coccocccocccoooocooocoscooooooeooocooeccooecosocse 99 7 1 Documentando o sistema com o DocBook 99 72 40 KDE DOcBO0K casas apra aaa h dene este adia 101 7 3 Documentando as classes com DOxygen cccciceccceecccireseresee 102 8 Considera es finais sespacecesessetesesc osteescsnte acucram cotesiastoatesetnies 104 BC ONCIUSOSS mn AS EL RELA Z 105 8 2 ContriDUI ES sancs dde dei adentra ETRS rabei 106 8 35 Trabalhos TOt ros sia es sao ds NS SAR esa R Ra ATT 107 A Diagramas de seqii ncia eecceccccocccoccooccoo0c000000000000000000000000
55. Anderson Pereira Ataides Desenvolvimento de sistemas em Linux Uma an lise das ferramentas de desenvolvimento para Linux por Anderson Pereira Ataides Desenvolvimento de sistemas em Linux Uma an lise das ferramentas de desenvolvimento para Linux Dedicat ria Dedico este trabalho ao meu amigo Anibal Santos Jukemura que em nossa segunda viagem a Lavras ao ver o que eu conseguia fazer no Linux pediu me que escrevesse sobre desenvolvimento em Linux descre vendo as ferramentas que utilizo para ter bons resultados Tamb m dedico ao prof Joaquim Quinteiro Uch a na esperan a que este trabalho possa contribuir em sua luta pela divulga o do software livre no mercado Agradecimentos Agrade o todos meus professores do ARL pelo conhecimento ad quirido durante o curso principalmente ao prof Joaquim que al m de pas sar conhecimento passou tamb m incentivo e est mulo para usarmos e di vulgarmos o software livre Agrade o meu orientador o prof Heitor pela paci ncia em orientar um aluno t o enrolado como sei que sou e pelas valios ssimas dicas de desenvolvimento sem as quais n o conseguiria concluir este trabalho Agrade o aos meus filhos e esposa pela toler ncia em me ver em casa e mesmo assim me deixar estudar para concluir meu curso e princi palmente este trabalho Tamb m os agrade o porque eles s o meu est mulo a buscar novos conhecimentos para consegiientemtente conseguir melho res oportunidades de neg
56. DE UMERO TINYINT NOT NULL AUTO INCREMENT OME VARCHAR 40 NOT NULL ELEFONE VARCHAR 10 NOT NULL ONTATO VARCHAR 20 NOT NULL TULTIMACOMPRA DATE NOT NULL LULTIMACOMPRA DECIMAL 10 2 NOT NULL TMAIORCOMPRA DATE NOT NULL LMAIORCOMPRA DECIMAL 10 2 NOT NULL NOCADASTRO SMALLINT ONCEITO VARCHAR 20 BSERVACAO VARCHAR 200 RIMARY KEY CODIGO NUMERO kk kkk k k k k k k k k k k k k k k k k k k k k RARA k xk x Tabela FORMAPAGTO Elemento do DER Entidade Forma Pagto Funi o Formas de pagamento aceitas na empresa kk kk k k k k k k k k k k k k k k k k k k kK kK k k k k k k k k k k k k k k k k k k k k k k k k k k k k x CREATE TABLE FORMAPAGTO C D P ODIGO TINYINT NOT NULL AUTO_INCREMENT PRIMARY KEY ESCRICAO VARCHAR 30 NOT NULL RAZO VARCHAR 1 NOT NULL DEFAULT S 120 CREAT PESOCOM PESODESC SITUACAO DECIMAL 5 2 NOT NULL DEFAULT 1 DECIMAL 5 2 NOT NULL DEFAULT 1 VARCHAR 1 DEFAULT A INDEX FPDESCRI CAO ON FORMAPAGTO DESCRICAO kk kk k k k k k k k k k k k k k k k k k k kK kK k k k k k k k k k k k k k k k k k k k k k k k k k k k k x
57. E S A 29 A A AE EN EAER eg Pushbutton Oro BEE E CheckBox E ButtonGroup E List8ox E LineEdit e spingox l Texte it ComboBox Buttons Objects Members Containers Views nesae bos o o q E r La Input Display Display KDE Property Editor Signal Handlers gt ER SS pe Properties Signal Handlers Buttons KDE Tea a de 1020 2222 Nere a g Views KDE E name Form1 EEE enabled True Eotemarj FDE sizePolicy Preferred Prefe Graphics KDE E minimumSize 0 0 E maximumSize 32767 32787 Custom Widgets Ready Figura 6 9 Designer tela principal 59 6 4 1 Desenhando a tela de cadastro de formas de pagamento A tela de cadastro de formas de pagamento deve apresentar uma lista onde ser o exibidas as formas de pagamento cadastradas no banco de dados e alguns bot es que permitem ao usu rio acrescentar excluir ou alterar formas de pagamento Para mostrar a lista de formas de pagamento ser usado o widget KListView Para cri lo deve se selecionar a guia Views KDE e ent o o elemento KListView Depois deve se clicar no meio do formul rio em branco N o preciso se preocupar com o layout da janela agora mas apenas acrescentar os seus elementos O Qt disp e de widgets especializados em layout e a organiza o da janela ser
58. FormaPagto 63 Acima da janela do editor na barra de ferramentas existem alguns bot es de formata o Ao clicar em qualquer um deles ser o adicionadas ao texto tags HTML correspondente formata o escolhida Esse recurso de suportar HTML muito interessante pois o texto pode ser formatado como se estivsse sendo montada uma p gina web PO Emi Mimo Etr ie NH Styles Layout Font BU dg geal m e a me e lt b Lista de formas de pagamento b gt OK pa Esta lista mostra as formas de pagamento que j amp aacute est amp atilde o cadastradas no b Cancel anco de dados Use os bot amp otilde es amp agrave direita para manipular os dados das for E mas de pagamento lt p gt Help Figura 6 13 Designer Di logo para digitar o texto What s this Para os bot es ser o alteradas apenas duas propriedades name e toolTip propriedade toolTip faz com que apare a um pequeno texto quando o mouse estaciona sobre o widget As propriedades para cada bot o ser o alteradas de acordo com a Tabela 6 1 Tabela 6 1 Propriedades dos bot es Bot o name toolTip Adicionar botao Adicionar Cria uma nova forma de pagamento 64 Bot o name toolTip Modificar botaoModificar Altera os dados da forma de pagamento selecionada Apagar botao Apagar Apaga uma forma de pagamento Atualizar botao Atualizar Atualiza a lista Fechar botaoFechar Fecha esta janela
59. VENDA Elemento do DER Relacionamento Esti hentre as entidades Venda e Produto Funi o Itens vendidos ARAL RARA VARK IK AAA CREATE TABLE ITEMVENDA VENDA INT NOT NULL REFERENCES VENDA NUMERO MATCH FULL ON UPDATE CASCADE ON DELETE CASCADE SEQUENCIA TINYINT NOT NULL AUTO_INCREMENT PRODUTO INT NOT NULL REFERENCES PRODUTO CODIGO MATCH FULL ON UPDATE CASCADE ON DELETE RESTRICT QUANTIDADE DECIMAL 10 2 NOT NULL DEFAULT 1 0 PRECOVENDA DECIMAL 10 2 NOT NULL PRECOLISTA DECIMAL 10 2 NOT NULL PRIMARY KEY VENDA SEQUENCIA CREATE INDEX IVPRODUTO ON ITEMVENDA PRODUTO kk kkk k k k k k k k k k k k k k k k k k k kX k k k k k k k k k k k k k k k k k k k k k k k k AAA Tabela PAGAMENTO Elemento do DER Relacionamento Paga entre Venda Forma Pagto Funi o Registra o pagamento da venda kkk k k k k k k k k k k k k k k k k k k k kK k k k k k k k k k k k k k k k k k k k k k k k k k k k k x x CREATE TABLE PAGAMENTO VENDA INT NOT NULL REFERENCES VENDA NUMERO MATCH FULL ON UPDATE CASCADE ON DELETE CASCADE SEQUENCIA TINYINT NOT NULL AUTO INCREMENT FORMAPAGTO TINYINT NOT NULL REFERENCES FORMAPAGTO CODIGO MATCH FULL ON UPDATE CASCADE ON DELETE RESTRICT VENCIMENTO DATE NOT NULL
60. YINT NOT NULL AUTO_INCREMENT PRIMARY KEY NOME VARCHAR 50 NOT NULL VENDEDOR VARCHAR 1 NOT NULL DEFAULT S TELEFONE VARCHAR 10 NOT NULL 117 SENHA VARCHAR 32 SITUACAO VARCHAR 1 NOT NULL DEFAULT A CREATE INDEX USNOME ON USUARIO NOME HX k k k kk kk kkk kkk kkk kkk kk kk k k k k k k k k k k k k k k k k k k k k k k k k k k k x x gt Tabela GRUPOPRODUTO Elemento do DER Entidade Grupo Produto Funi o Agrupar produtos semelhantes Tem E ligai o direta com a tabela PRODUTO X k k kk k k k X k kkk kkk kkk kkk kk kk k k k k k k k k k k k k k k k k k k k k k k k k k k k x x CREATE TABLE GRUPOPRODUTO CODIGO TINYINT NOT NULL AUTO_INCREMENT PRIMARY KEY DESCRICAO VARCHAR 40 NOT NULL COMISSAO DECIMAL 3 2 NOT NULL DEFAULT 0 0 GRUPOPAI TINYINT REFERENCES GRUPOPRODUTO CODIGO MATCH FULL ON UPDATE CASCADE ON DELETE RESTRICT CREATE INDEX GPDESCRICAO ON GRUPOPRODUTO DESCRICAO CREATE INDEX GPGRUPOPAI ON GRUPOPRODUTO GRUPOPAI X k k k kk kX k kkk kkk kkk kkk kk kk k k k k k k k k k k k k k k k k k k k k k k k k k k k x x Tabelas st ds ST PRODUTO Elemento do DER Entidade Produto Funi o Cadastro dos produtos que seri h vendidos pelo sistema kH k k k
61. a 39 Campo Tipo de dados Descri o TIPO Alfa num rico Tipo de cliente Oficina Revenda Consumidor Transportadora CADASTRO Num rico C digo do funcion rio que cadastrou o cliente VENDEDOR Num rico C digo do vendedor que solicitou o cadastro SITUACAO Alfa num rico Situa o de cadastro do cliente Vista Prazo Bloqueado Tabela 5 4 REEFERENCIA Refer ncias do cliente Campo Tipo de dados Descri o CODIGO Num rico C digo do cliente chave na tabela CLIENTE NUMERO Num rico Identifica a refer ncia do cliente NOME Alfa num rico Nome da refer ncia TELEFONE Alfa num rico Telefone da refer ncia CONTATO Alfa num rico Pessoa que forneceu informa o DTULTIMACOMPRA Data Data da ltima compra VLULTIMACOMPRA Moeda Valor da ltima compra DTMAIORCOMPRA Data Data da maior compra VLMAIORCOMPRA Moeda Valor da ltima compra 40 Campo Tipo de dados Descri o ANOCADASTRO Data Ano de cadastro do cliente CONCEITO Alfa num rico Conceito dado ao cliente pela refer ncia OBSERVACAO Alfa num rico Observa es adicionais sobre o cliente Tabela 5 5 USUARIO Dados dos usu rios do sistema Campo Tipo de dados Descri o CODIGO Num rico Identifica o do usu rio NOME Alfa num rico Nome do usu rio VENDEDOR Sim N o Indica se o usu rio u
62. a como um caso de uso mostrado na Figura 4 1 deve se selecionar o cone correspondente na barra de ferramentas localizada direita da janela do Umbrello e clicar na rea do diagrama A associa o entre os elementos feita selecionando o tipo de liga o na barra de ferramentas e clicando nos elementos que ser o conectados um ao outro Depois de criados os elementos do diagrama atores casos de uso e liga es pode ser feita a documenta o de cada um deles A documenta o feita em uma janela como a mostrada na Figura 4 2 que se abre ao dar um duplo clique sobre o elemento desejado 20 v File Edit Diagram Code Settings Help RA JAALA UML Diagrams views 2 Component View Deployment View Diagrams gt sa Logical View Use Case View S Enter class diagram EE 2 2x name kven das Clear Cancel E D D 2 TP EE E si Ready Figura 4 1 Umbrello criando um diagrama de caso de uso Os casos de uso devem ser documentados com o m ximo de deta lhes para que seja poss vel compreender claramente sua fun o no sistema Eles devem fornecer uma descri o consistente e clara sobre as tarefas que devem ser cumpridas pelo sistema sem contudo especificar como estas ta refas ser o implementadas PST Properties Modelador UML Umbrella QNE Color h y Font General Settings Use case nam
63. a deve ser feito como nos bot es coloca se o sinal amp antes da letra de acesso r pido Por m ao fazer ist 70 o pode se perceber que o s mbolo amp vai aparecer e a letra n o ser su blinhada O motivo porque o r tulo n o est associado a nenhum widget capaz de receber o foco Para ligar o r tulo com o widget que ele faz refe r ncia deve ser usado o comando Set Buddy algo como defina o compa nheiro Ao selecionar o menu Tools Set Buddy ou clicar no bot o Set Buddy o cursor do mouse se transformar em uma pequena cruz e com ele dessa forma o r tulo deve ser ligado ao widget referenciado Feita a liga o o s mbolo amp vai sumir e a letra logo ap s ser sublinhada Falta agora fazer as conex es signal slot Para QrormaPagto se r o feitas duas conex es a do bot o Grava botaoGrava com o slot grava que deve ser criado e o bot o Cancela botaoCancelar com o slot close Terminado o desenho de orormaPagto pode se encerrar o Desig ner e voltar ao KDevelop para que o sistema seja codificado Assim pode se considerar encerrado o trabalho no Designer a n o ser bvio que seja necess rio efetuar alguma altera o na interface Para maiores es clarecimentos sobre a utiliza o do Designer recomendada a leitura de QTMANUAL 6 6 Cria o das classes no KDevelop Ao fechar o Designer e voltar para o KDevelop nenhuma classe foi adicionada ao projeto mas apenas dois ar
64. a n o um software livre e ent o ele foi descartado Um dos grandes problemas na escolha da linguagem que as lin guagens propriamente n o proporcionam um ambiente de desenvolvimento r pido nem rotinas que tratam do desenho das telas ou de acesso ao ban co de dados de forma nativa Em tempos onde a produtividade tem que ser maximizada ter que se preocupar al m do layout das telas em escrever todas as rotinas de manipula o de telas e dados implica em uma perda de tempo muito grande por parte do programador Considerando as lin guagens de programa o dispon veis para Linux apenas o Kylix que foi descartado oferece esse tipo de facilidade ao programador Ent o o problema n o s a escolha da linguagem de programa o mas a escolha de um ambiente que proporcione ao programador uma maneira r pida de codificar o sistema Felizmente os desenvolvedores dos ambientes gr ficos como o Gnome http www gnome org e KDE http www kde org disponibilizaram as bibliotecas para que os programadores de aplicativos pudessem utiliz las em seus sistemas liberando os da tarefa de implementar rotinas para manipular janelas Como foi escolhido o KDE a linguagem escolhida foi o C utilizando o Qt http www trolltech com como biblioteca b sica para gerar a interface com o usu rio 13 Al m de fornecer um conjunto completo de classes para manipular janelas o Qt tamb m oferece o Designer http www trolltech com p
65. a na parte inferior deve se cicar no bot o Show Options ou ainda clicar com o bot o direito sobre o alvo kvendas e selecionar a op o Options Uma caixa de di logo se abre para que sejam informadas as op es do alvo selecionado Para informar uma biblioteca deve se selecionar a guia Bibliotecas e como a biblio teca do MySQL externa ao projeto deve ser usada a parte inferior Link libraries outside project LDADD Agora deve se dar um cli que no bot o Adicionar Uma caixa de di logo como a da Figura 6 5 se abre para que seja informada a biblioteca que se deseja incluir Nessa caixa deve aparecer o texto 1 e sem apagar o que est escrito deve ser acrescentado mysqlclient Ao fechar a caixa de di logo a biblioteca do MySQL vai aparecer na lista de bibliotecas utilizadas pelo sistema O projeto est agora pronto para implementa o Para ver como poss vel integrar o Umbrello com o KDevelop ser mostrado como gerar os arquivos fontes das classes no Umbrello e depois como incluir esses arquivos no projeto criado pelo KDevelop Por enquanto o KDevelop deixado de lado para que as classes sejam geradas pelo Umbrello 53 CI AV Target Options for kvendas 2 2D x Op es Link convenience libraries inside project LDADD Para Cima Para Baixo Link libraries outside project LDADD Imysqlclient LIB_KDEUI Adicionar N Bemover 8 Para Cima Para Baixo Cancelar
66. a classe definida pela biblioteca Qt Mais especificamente a classe KListaFormaPagto descendente de Qwidget e a classe KFormaPagto descendente de oDialog Por m elas n o s o descendentes diretas das classes do Qt mas de classes criadas pela interface concebida com o aux lio do Designer Na Se o 6 6 foi dito que a partir da interface criada no Designer s o geradas classes que a implementam Essas classes poderiam ser utilizadas para implementar o que foi modelado para o sistema mas se alguma altera o for realizada na interface pelo Designer ele recria os arquivos que implementam as classes e portanto a codifica o teria que ser refeita A melhor forma de trabalhar com classes de interface criando se classes filhas das criadas pelo Designer Assim mesmo que alguma modifica o seja feita no Designer a subclasse n o alterada e nenhum trabalho deve ser refeito Este o motivo pelo qual as classes KListaFormaPagto e KFormaPagto foram criadas como filhas de QListaFormaPagto e QFormaPagto criadas a partir da interface desenhada no Designer 6 7 2 1 A classe KListaFormaPagto A Figura 6 39 mostra a estrutura da classe KListaFormaPagto Ela declarada como filha de QListaFormaPagto que ser gerada no momento da compila o do sistema A sua fun o montar uma lista de formas de pagamento cadastradas no banco de dados e fornecer meios para que o usu rio possa incluir alterar e excluir elementos dest
67. a forma final O Docbook gera o documento em uma forma padr o que pode ser alterada Para fazer essa altera o deve se trabalhar com as folhas de estilo que define a forma final do documento Para aprender como escrever documentos usando o DocBook in dicada a leitura de DOCBOOK que um guia para o DTD Tamb re comendada a leitura de DSSSL e XSLT para aprender a trabalhar com folhas de estilo para gerar o documento final a partir de fontes SGML e XML respectivamente 7 2 O KDE DocBook O KDE DocBook um subconjunto do DocBook elaborado para gerar documenta o de aplicativos KDE Ao criar um projeto no KDeve lop um documento XML gerado como modelo para que o desenvolvedor 101 escreva o seu pr prio manual do sistema O KDevelop coloca este arquivo dentro do subdiret rio doc en e d a ele o nome de index docbook Dessa forma o manual do usu rio tamb m ser escrito usando uma varia o do DocBook e conseqiientemente o desenvolvedor deve se preo cupar apenas com seu conte do pois a forma final ser ditada pelo DTD definido pelo KDE DocBook Mais uma informa o importante que por conhecer o KDE DocBook o pr prio KDevelop chama os programas ne cess rios para gerar a documenta o final 7 3 Documentando as classes com DOxygen A cria o de uma documenta o da API do sistema pode parecer re dund ncia pois todas as classes do sistema foram devidamente documen tadas quando foram
68. a lista impor tante notar que seus m todos com exce o do construtor s o os mesmos m todos acrescentados no momento da cria o da interface no Designer e representam os slots que v o tratar os eventos decorrentes da intera o do usu rio class KListaFormaPagto public QListaFormaPagto Q OBJECT public KListaFormaPagto Qwidget parent 0 const char name 0 WFlags f QOt WDestructiveClose 89 public slots virtual void atualiza virtual void inclui virtual void exclui virtual void altera h Figura 6 39 Estrutura da classe KListaFormaPagto Como pode ser visto na Figura 6 40 o construtor apenas chama o m todo atualiza mostrado na mesma figura Esse m todo respons vel pela montagem da lista de formas de pagamento cadatradas no sistema Para obter os dados ela usa uma inst ncia de DListaFormapagto KListaFormaPagto KListaFormaPagto QWidget parent const char name WFlags f QListaFormaPagto parent name f atualiza void KListaFormaPagto atualiza listaFormaPagto gt clear DListaFormaPagto formaPagto if formaPagto obtembDados while formaPagto proximo new KListViewItem listaFormaPagto formaPagto obtemlampo DESCRICAO formaPagto obtemlCampo CODIGO formaPagto obtemlampo PRAZO formaPagto obtemlCampo PESOCOM formaPagto obtemlampo PESODESC Figura 6 40
69. adas na modelagem Rotinas de baixo n vel para manipular janelas ou acessar o banco de dados nada disso precisa ser implementado preciso saber apenas como usar as bibliotecas que est o prontas para utiliza o Entre os pr requisitos para implementar o sistema est o os seguin tes Orienta o a objetos Desde a modelagem do sistema feita com aux lio da UML os con ceitos da orienta o a objetos v m sendo utilizados Na implemen ta o tamb m n o diferente pois as classes modeladas na fase de an lise ser o criadas agora na codifica o do sistema O desenvolvedor deve estar familiarizado com os conceitos de heran a e polimorfismo pois eles s o usados extensivamente na im plementa o da interface com o usu rio e no acesso ao banco de da dos Ponteiros Talvez esse seja o conceito que mais assusta os programadores pois a sua manipula o requer alguns cuidados como alocar o ponteiro antes de utiliz lo e destru lo quando ele n o for mais necess rio Depois de alguma pr tica pode se verificar que a coisa n o complicada e 48 que o cuidado o mesmo necess rio quando se abre ou fecha uma conex o ao banco de dados Algoritmo Em linguagem mais popular l gica de programa o Qual linguagem n o necessita desse conhecimento Bibliotecas de desenvolvimento Como fazer para conectar ao banco de dados Como usar o Qt para de senhar as janelas preciso saber apenas usar as bib
70. ais de um arquivo em uma lista clica se no primeiro para selecion lo e com a tecla Ctr1 pressionada clca se nos outros arquivos 5 Para este trabalho convencionou se que todos os nomes de arquivos ser o escritos com caracteres min sculos seguindo o padr o Linux 6 Se ao inv s do Designer uma outra janela aparecer pedindo qual o aplicativo deve ser usado para abir o arquivo deve ser digitado designer Para que o KDevelop sempre abra o Designer automaticamente deve se clicar na op o Lembrar da associa o de aplicativo para este arquivo 7 Se a barra de propriedades n o estiver vis vel deve se clicar com o bot o direito na barra de ferramentas e marcar a op o Property Editor Signal Handler 8 Receber o foco significa tornar se o elemento ativo Por exemplo ao clicar em uma linha de texto o cursor passa a piscar nesta linha tornando a ativa 98 Cap tulo 7 Documenta o do sistema Neste cap tulo ser o mostradas as ferramentas de documenta o dispon veis no Linux Para documentar o sistema e elaborar um manual de usu rio foi adotado o DocBook e para documenta o das APT s das clas ses foi usado o DOxygen Essas ferramentas s o muito interessantes por que a partir de um nico c digo fonte elas geram documenta o em v rios formatos como p ginas web HTML PostScript PS Portable Document Format PDF entre outros 7 1 Documentando o sistema com o DocBook Para escrever a do
71. al a impress o pessoal tem muita influ ncia na escolha No sistema Windows relativamente f cil fazer essa avalia o pois existem ferramentas consagradas que facilitam muito o processo de desenvolvimento Entretanto no dom nio do software livre a escolha mais trabalhosa pois existem ferramentas timas mas in completas e outras completas mas dif ceis de usar A escolha das ferramentas se deu considerando as seguintes vari veis Mercado Quando se fala de mercado significa que verificado se a ferramenta disponibilizada pelas distribui es Linux se ela funciona nas dis tribui es e ambientes mais populares e se tem respaldo da comu nidade open source para continuidade de seu desenvolvimento Facilidade de instala o e uso Vari vel importante pois n o adianta ser eficiente se n o oferecer fa cilidade de uso e instala o Muitas pessoas desistem de usar sistemas livres principalmente Linux justamente por achar que eles s o dif ceis de usar Popularidade O quesito popularidade importante porque quanto mais pessoas uti lizam a ferramenta mais fontes de informa o existir o para solu cionar alguma d vida Opini o pessoal E importante deixar claro que esta vari vel foi considerada pois as sim fica mais f cil compreender a ado o de uma ferramenta em detri mento de outra que tamb m atenda s outras vari veis Para o completo desenvolvimento do sistema foram adotadas cinc
72. are livre http www fsf org ou ainda do software open source http www opensource org ficou bem mais f cil le galizar esses sistemas b sicos A empresa n o precisa mais se preocupar com as licen as de uso ou com o medo de instalar um programa em v rias m quinas sob o risco de violar os contratos de tais licen as Na filosofia do software livre ao obt lo seja gratuitamente atrav s de um download ou pela bondade de um amigo ou mesmo pela compra o software do usu rio e com o software ele pode fazer o que desejar inclu sive alter lo desde que as altera es mantenham o software livre Assim diferentemente do software propriet rio onde necess ria uma licen a de uso para cada instala o ao adquirir o software livre o usu rio adquire tamb m o direito de instal lo em quantas m quinas ele achar necess rio Portanto pode se concluir que a utiliza o de software livre pode trazer para a empresa grandes vantagens dentre as quais pode se destacar a economia e a independ ncia do fornecedor Reduzindo os gastos com a informatiza o fica mais f cil para empresas pequenas colocar a inform tica disposi o de seus colaboradores a fim de ganhar produtividade e aumentar sua efici ncia Para empresas maiores o caixa extra gerado pela economia obtida pela ado o de sistemas livres pode ser direcionado para reas realmente afins com o neg cio da empresa 1 1 Motiva o Uma das grandes motiva
73. artir desse momento as tabelas estar o criadas no banco de dados Para se certificar de que as tabelas realmente foram criadas deve se chamar o programa mysql novamente e digitar o comando para listar as tabelas do banco de dados como mostrado na Figura B 8 123 S mysql u kvendas p kvendas Enter password Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with A Welcome to the MySQL monitor Commands end with or Ag Your MySQL connection id is 5 to server version 3 23 58 log Type help or h for help Type c to clear the buffer mysql gt SHOW TABLES Tables in kvendas CLIENTE FORMAPAGTO GRUPOPRODUTO TEMVENDA PAGAMENTO PRODUTO REFERENCIA USUARIO VENDA 9 rows in set 0 00 sec mysql gt Figura B 8 Listando as tabelas do banco de dados Assim o banco de dados est pronto para uso Mais uma vez bom lembrar que extremamente recomend da a instala o do pacote MySQL doc que cont m a documenta o do MySQL O que foi mostrado neste ap ndice sobre o MySQL apenas o necess rio para conseguir fazer o sis tema desenvolvido neste trabalho trabalhar com dados do banco de dados Num ambiente de produ o ser o necess rias informa es extra acerca de seguran a bem como aprender mais sobre os comandos SQL suportados pelo MySQL e tamb m a
74. as apresentadas realmente produzem bons resultados ser descrito um sistema de vendas simples e a partir dessa descri o ser mostrado co mo usar as ferramentas para desenvolver o sistema desde a modelagem de dados e do sistema at a implementa o Portanto neste trabalho ser visto que h como produzir sistemas em Linux de forma f cil r pida e econ mica pois todas as ferramentas uti lizadas s o livres Aliando a facilidade decorrente do uso das ferramentas certas com a economia obtida por elas serem livres a inten o conven cer os desenvolvedores que perfeitamente vi vel e vantajoso desenvolver sistemas para Linux Vi vel pela facilidade e economia pela utiliza o das ferramentas descritas e vantajoso porque apresentar um sistema feito para Linux pode se tornar um diferencial competitivo para o desenvolvedor tan to pelo pioneirismo como pela possibilidade de gerar economia para seus clientes 1 3 Organiza o deste trabalho Este trabalho descreve com o m ximo de detalhes poss vel o pro cesso de desenvolvimento de um sistema em Linux Ele contempla desde a sua especifica o obtida em conversas com o usu rio passando pela mo delagem at a implementa o do sistema propriamente Al m da documen ta o do sistema tamb m procurou se descrever de uma forma resumida e objetiva as ferramentas utilizadas em cada fase do projeto O Cap tulo 2 apresenta as ferramentas escolhidas e os motivos que levaram
75. atos HTML PDF en tre outros Preenchidos todos os campos ao clicar em 0k o KDevelop vai criar dois arquivos implementando a classe KListaFormaPagto A classe criada com dois m todos o construtor KListaFormaPagto e o destrutor KListaFormapagto Para ver que a classe foi incorporada estrutura do projeto s abrir a janela de classes do KDevelop que ela vai aparecer dentro do grupo Classes Criada a classe devem ser acrescentados os seus m todos conforme a modelagem da classe Para isso deve se clicar sobre o nome da clas se com o bot o direito e no menu que aparece selecionar a op o Add Method Uma caixa de di logo como a mostrada pela Figura 6 19 se abre para que sejam digitados os dados do m todo 73 TEDA j aim Inine Acesso Storage Retum Type Declarator False Public Normal _ void adicionar False Public Normal void apagar False Public Normal _ void atualizarQ Add Method Delete Method p Method Properties Retum Type Declarator void E modificard Acesso Storage Public E Normal E O Inine Implementation File momeyanderson meus documentos projetos kvendas src Wlstaformapagto cpp 2 L Ar cancer Figura 6 19 KDevelop cria o de m todos O primeiro m todo que ser acrescentado o m todo atualiza Este m todo n o vai retornar nenhum valor e portanto o campo Return Type ser void O campo Declarator deve ser preenchido
76. azer a documenta o do elemento Esse recurso po de ser usado no caso do diagama entidade relacionamento para colocar a estrutura de cada elemento atributos PST Amotation of subject FORMA PAGAMENTO File Edit Search Annotation of subiect FORMA PAGAMENTO A entidade FORMA PAGAMENTO contem as formas de pagamento que sao aceitas pelo sistema Dinheiro Cheque Os atributos que conpoen a entidade sao os seguintes Identifica a forma de Descreve nome a EEA SSA pagamento F indicando se pode ser usada para a prazo Indica o peso da forna de paganento na conissao ica o peso da forna de pagamento no Figura 5 3 Documenta o da entidade FORMA PAGAMENTO Depois de desenhado o diagrama ele pode ser impresso ou expor tado como uma figura para que ele possa fazer parte de um documento contendo a especifica o do sistema como neste trabalho O TCM conse gue exportar o diagrama para v rios formatos entre eles o PNG PostScript PS e Encapsulated PostScript EPS Para converter o formato da imagem deve ser usado um editor gr fico como o Gimp http www gimp org 36 Para maiores informa es sobre a utiliza o do TCM recomenda se a leitura de TCMMANUAL 5 3 Estutura do banco de dados Depois de elaborado o DER que mostra uma vis o global do banco de dados pode se definir a estrutura do banco de dados A grosso modo deve se criar uma tabela para cada entidade do diagrama mas
77. bjetivos Existem alguns motivos que emperram a prolifera o do Linux pe los computadores das empresas Na grande maioria delas o sistema usado apenas nos servidores enquanto as esta es continuam com o sistema pro priet rio anterior na maioria dos casos o Windows Isso porque apesar de ter in meros aplicativos dispon veis n o tem o principal para a empresa um software de gerenciamento Um dos objetivos desse projeto incentivar os programadores a completar a gama de software livre para empresas comerciais J existe o sistema operacional o banco de dados as linguagens de programa o as su tes office todos livres mas ainda n o existem ofertas de software de gerenciamento livre Existem muitos sistemas eficientes mas nenhum distribu do sob a filosofia do software livre Para atingir esse objetivo a proposta deste trabalho mostrar que o desenvolvimento de sistemas em Linux pode ser t o f cil como o desen volvimento em Windows a plataforma mais adotada pelos fornecedores de software comercial Essa facilidade por m s pode ser confirmada se for poss vel mostrar ferramentas que ajude o desenvolvedor em suas tarefas No desenvolvimento deste trabalho ser o apresentadas algumas das v rias ferramentas dispon veis em Linux para auxiliar no desenvolvimen to de sistemas Al m de mostrar a exist ncia da ferramenta tamb m ser mostrado como trabalhar com tais ferramentas Para mostrar que as fer rament
78. cas adicionais eec 53 6 6 Umbrello sele o das classes para codifica o 55 6 7 Umbrello definindo as op es de cria o dos fontes 56 6 8 KDevelop criando um novo arqUiVO cccccccccciccicccscccseeeae 58 6 9 Designer tela principal a a asaesaanesdagprdeadas quelndads agudos reduce ua stasigtcasd 59 6 10 Designer formul rio faltando layout iciiiiiiiiiiin 60 6 11 Designer previsualiza o no formao Keramik 61 6 12 Designer Alterando as propriedades das colunas 62 6 13 Designer Di logo para digitar o texto What s this 64 6 14 Designer conectando signal e slot errar 67 6 15 Designer incluindo novos slots 68 6 16 Designer O formul rio QFormaPagtO 5590905008 69 6 17 Designer Definindo as op es de um KComboBox 70 6 18 KDevelop criando uma nova ClaSSe ccccciicciicciccciiccsieeae 72 6 19 KDevelop cria o de m todos ccc ccccicccccccccccssccsene ae 73 6 20 Estrutura da classe QDatabase 90090000000000000000000 00 4 71 6 21 O construtor da classe QDatabase errar 79 6 22 Implementa o do m todo initAttributes 79 6 23 Destrutor de QDat abas 992999929090099009900900000000
79. char name 0 6 QDatabase TEE 8 bool proximo 9 QString obtemCampo QString campo 10 long numeroRegistros pra LTL 77 12 bool executaSQL QString sql 1 32 bool getResult 14 15 private 16 void initAttributes T 18 MYSQL conexao 19 MYSQL RES registros 20 MYSQL ROW registro 2d 22 signals 233 void erro const char 24 25 public slots 26 void msgErro const char strErro ZT V Figura 6 20 Estrutura da classe QDatabase A linha 3 da Figura 6 20 uma macro da biblioteca Qt necess ria para toda classe descendente de QObject O m todo initAttributes foi criado pelo Umbrello para que os atributos da classe sejam inicializados com os seus valores padr o A linha 24 declara um sinal para a classe que ser emitido todas as vezes que ocorrer um erro na conex o com o SGBD importante notar que este m todo n o implementado A macro Q OBJECT cuida da convers o desta declara o de sinal em um c digo que o compilador entende Por fim a linha 27 declara um slot que recebe um texto Ele ser usado nas classes filhas de QDatabase para exibir as mensagens de erro emitidas pela classe Na verdade n o necess rio que este slot espec fi co seja usado mas qualquer um que receba uma string implementado em qualquer classe Este slot foi criado para ser o padr o Para ilustrar este fato a classe DListaFormaPagto usa este slot e
80. co de dados para que seja elaborada uma lista que ser exibida ao usu rio Depois de criada a classe deve se dar um duplo clique sobre ela para abrir a janela de propriedades Figura 4 5 que onde s o informados os atributos m todos e documenta o da classe A primeira tarefa documentar a classe indicando para que ela ser ve e fornecendo uma vis o geral sobre seu funcionamento N o necess rio neste momento entrar em detalhes sobre os atributos e m todos porque eles ter o sua pr pria documenta o gi Properties Modelador DMI Umbrefio O General Settings Class name DListaF ormaPagto Stereotype name class Attributes q O Private O Protected 2 E Operations Obt m uma lista de formas de pagamentos do banco de dados A fui lesta classe obter as formas de pagamento d de ar KListaFormaP agt para montar a lista de formas de pagamento que ser exibida po Templates usu rio O Asenriatians e P Hep Apply Cancel Figura 4 5 Umbrello documentando uma classe Feita a documenta o da classe pode se informar os seus atributos Para isso deve se selecionar a p gina Attributes e clicar no bot o New Attri 25 bute Uma janela como a da Figura 4 6 aberta para definir o novo atributo Agora s definir as propriedades do atributo e confirm lo O Umbrello volta tela anterior com o atributo criado na lista
81. com comiss o por vendedor 19 Cap tulo 4 Modelagem do sistema Neste cap tulo ser apresentada a modelagem do sistema elaborada a partir de sua descri o Ser o mostrados alguns dos diagramas elaborados para o sistema e como obt los usando a ferramenta escolhida o Umbrello 4 1 Diagrama de caso de uso Segundo FURLAN a partir da especifica o do sistema poss vel montar cen rios que ajudam a compreender melhor as exig ncias do siste ma Esses cen rios na orienta o a objetos s o modelados com a ajuda dos diagramas de caso de uso Os diagramas de caso de uso fornecem um modo de descrever o funcionamento do sistema e como ele interage com o mundo externo em uma vis o de alto n vel No momento da elabora o dos diagramas de caso de uso n o necess rio saber como o sistema im plementa o caso de uso mas apenas que ele vai responder a uma requisi o de usu rio A partir de agora ser mostrado como criar um diagrama de caso de uso com o Umbrello Ao abrir o Umbrello ele est pronto para desenhar um diagrama de classes Para criar um novo diagrama de caso de uso deve se ir ao menu Di agram _ gt New gt Use Case Diagram Uma caixa de di logo ser exibida para seja digitado o nome do diagrama de caso de uso O nome dado ao diagrama deste trabalho foi kvendas Informado o nome do diagrama o Umbrello estar pronto para de senhar o diagrama de caso de uso Para criar um elemento no diagram
82. criadas no Umbrello Por m nem sempre o usu rio tem o Umbrello instalado para ver essa documenta o muito mais provavel que ele tenha um navegador ou um leitor de arquivos PDF instalado em seu computador Um outro ponto que no momento da implementa o pode surgir a necessidade de explicar o motivo de um par metro ter tal formato ou como ser em detalhes o funcionamento da classe Esse tipo de documenta o geralmente feito no pr prio arquivo fonte e assim o pr prio arquivo deve ser aberto para ver tal documenta o Para evitar abrir os fontes existem ferramentas como o KDoc e DOxygen que conseguem ler esses coment rios e gera assim como o Doc Book documentos em v rios formatos para facilitar o acesso a essa docu menta o Al m da documenta o escrita no caso do DOxygen tamb m gerada a hierarquia das classes e na documenta o de cada classe mos trado um pequeno diagrama de classes mostrando onde a classe est na hierarquia Entre as duas ferramentas foi escolhido o DOxygen O KDevelop conhece tanto o KDoc como o DOxygen e consegue executar qualquer uma delas gerando a documenta o das classes Como padr o o KDevelop usa o DOxygen fato que influenciou bastante na sua escolha Outro motivo que 102 influiu na escolha foi que o KDE usa o DOxygen para documentar sua API Portanto para gerar a documenta o da API do sistema deve se pe dir para o KDevelop rodar rodar o DOxygen Ao rodar o
83. cumenta o do sistema bem como criar manual de utiliza o poder a ser escolhido qualquer processador de texto dispon vel no mercado por m isso deixa o desenvolvedor preso ao formato que o processador escolhido disponibiliza al m do que no momento de escrever o texto deve se estar preocupado com a formata o do documento Para que o sistema possa ser mais flex vel a documenta o deve es tar dispon vel nos mais variados formatos que podem ser do gosto de quem vai usar ou estudar essa documenta o Felizmente existe o DocBook uma ferramenta para escrever textos t cnicos que a partir de um arquivo ou conjunto de arquivos escritos em formato XML ou SGML ele conse gue gerar o documento nos formatos mais populares entre a comunidade do software livre Um outro motivo que levou a adotar essa ferramenta foi que ela recomentada pela TLDP The Linux Documentation Project http www tldp org entidade que padroniza a documenta o em sistemas Linux O DocBook n o um programa nem um processador de textos Ele na verdade um DTD Document Type Definition Defini o de Tipo de Documento Assim como o HTML ele uma linguagem de marca o definida em SGML XML Ao instalar o DocBook no sistema devem ser instaladas tamb m algumas ferramentas que v o ler o arquivo SGML XML e de acordo com o DTD e as folhas de estilo v o gerar o documento final Essa convers o feita usando um dos scripts disponibilizado
84. da do produto UNIDADE Alfa num rico Identifica a unidade em que vendida o produto FRACAO Sim N o Indica se pode vender quantidades fracionadas DESCONTO Porcentagem Desconto m ximo permitito ao produto COMISS O Porcentagem Comiss o sobre o valor de venda SITUACAO Alfa num rico Indica se um produto est dispon vel para negocia o A Ativo I Inativo Tabela 5 3 CLIENTE Esta tabela cont m os dados de cadastro do cliente Campo Tipo de dados Descri o CODIGO Num rico Identifica o cliente no sistema 38 Campo Tipo de dados Descri o NOME Alfa num rico Nome do cliente para jur dica representa a raz o social APELIDO Alfa num rico Apelido do cliente para jur dica representa o nome fantasia ENDERECO Alfa num rico Endere o completo da pessoa rua n mero complemento BAIRRO Alfa num rico Bairro CIDADE Alfa num rico Cidade ESTADO Alfa num rico Sigla do estado CEP Num rico N mero do CEP TEL1 Num rico Telefone completo incluindo DDD TEL2 Num rico Telefone completo incluindo DDD FAX Num rico Fax incluindo DDD EMAIL Alfa num rico Caixa postal na Internet CPF Num rico N mero do CPF da pessoa pessoa f sica IDENTIDADE Num rico N mero da identidade CNPJ Num rico N mero CNPJ pessoa jur dica INSCEST Num rico N mero da inscri o estadual DATACADASTRO Data Data de cadastro da pesso
85. dados da forma de pagamento que devem ser en viados ao banco de dados Antes de gravar os dados o m todo valida chamado para verificar se os dados da forma de pagamento s o v lidos 86 Depois de validados os dados feito um teste no atributo codigo para ver se ele tem algum valor Se estiver vazio significa que uma nova forma de pagamento est sendo criada Caso contr rio uma forma de paga mento est sendo alterada Para o primeiro caso elaborada uma instru o INSERT e no segundo uma instru o UPDATE bool DFormaPagto grava QString sql if valida if codigo isEmpty sql INSERT INTO FORMAPAGTO DESCRICAO PRAZO sql PESOCOM PESODESC VALUES sql descricao prazo pesocom pesodesc else sql UPDATE FORMAPAGTO SET DESCRICAO descricao PRAZO prazo RTM PESOCOM pesocom PESODESC pesodesc WHERE CODIGO codigo return executaSQL sql Jelse return false Figura 6 36 Implementa o do m todo grava O m todo exclui mostrado na Figura 6 37 faz a exclus o de uma forma de pagamento O comportamento da classe depende de ela ter sido usada em uma venda Se a forma de pagamento ela j foi usada alguma vez ela n o exclu da mas apenas marcada como inativa e se nunca foi utilizada ela excl
86. deixada a cargo desses elementos Agora s o acrescentados os bot es que v o fazer o formul rio responder aos comandos do usu rio Para criar os bot es seleciona se a guia Buttons KDE na lista de widgets e e acrescenta se o widget KPushButton Dever o ser acrescentados ao formul rio cinco bot es um abaixo do outro direita do formul rio Esses cinco bot es ser o Adicionar Modificar Apagar Atualizar e Fechar 6 4 2 Organizando os widgets no formul rio Depois de todos os widgets criados no formul rio deve se ent o organiz los na tela Nesse ponto o projetista da interface pode ser tenta do a organizar o formul rio manualmente mas dessa forma n o poss vel garantir que a forma da janela se mantenha caso o usu rio decida redimen sionar a janela Ao inv s de organizar os widgets manualmente ser o usa dos widgets pr prios para organizar a janela automaticamente A primeira tarefa acrescentar dois espa adores verticais um acima e outro abaixo do quarto bot o na ordem informada para cria o dos bot es o quarto bot o corresponde a Atualizar Os dois espa adores criados v o separar o bo t o dos outros A figura Figura 6 10 mostra como ficaria o formul rio com os widgets criados 60 Fon TETE Figura 6 10 Designer formul rio faltando layout Depois de acrescentados os espa adores todos os bot es juntamente com os espa adores devem ser selecionados e em seguida deve
87. deram os requisitos de facilidade de instala o e utiliza o As quatro ferramentas analisadas foram o dia http www lysator liu se alla dia o TCM Toolkit for Conceptual Modeling http www cs utwente nl tem o ArgoUML http www argouml org e o Umbrello http www umbrello org Das ferramentas analisadas foram usados o TCM para a modelagem de dados e o Umbrello para desenhar os diagramas UML O TCM foi escolhido principalmente por permitir documentar cada elemento do diagrama mesmo que de forma prim ria e gerar diagramas em v rios formatos entre eles o PostScript 12 A escolha do Umbrello se deu basicamente por dois motivos O primeiro deles que das ferramentas analisadas s o Umbrello implementa o diagrama de segii ncia O outro motivo que o Umbrello parte do projeto KDE a partir da vers o 3 2 e consequentemente disponibilizado junto com o ele Assim o Umbrello se torna a ferramenta mais conveniente para utiliza o 2 5 Linguagem de programa o e ambiente de desenvolvimento Para decidir qual a linguagem de programa o a ser utilizada v rios fatores precisam ser considerados e ainda assim a escolha pode n o ser a ideal Entre as linguagens dispon veis para o Linux est o o Kylix http www borland com kylix index html Free Pascal http www freepascal org GNU Pascal http www gnu pascal org GNU C C http www gnu org entre outras O Kylyx apesar de ter uma vers o gratuit
88. diagramas de segii ncia modelados no sistema Para poupar tempo e agilizar o processo de desen volvimento nem tudo precisa ser modelado Devido s semelhan as entre v rios diagramas apenas alguns precisam ser modelados para entender a l gica e orientar a implementa o Nos outros casos a implementa o po de seguir a mesma l gica e o que iria mudar no diagrama seriam apenas as classes que o comp em O primeiro diagrama Figura A 1 modela a manuten o das formas de pagamento do sistema Ele pode ser usado para entender a l gica de todos os cadastros do sistema pois s o todos parecidos Apresenta se uma tela com uma lista do que j est cadastrado e o usu rio ent o pode incluir alterar ou excluir elementos no sistema O diagrama mostrado na Figura A 3 modela a negocia o com o cliente O diagrama da Figura A 2 modela a emiss o da lista de pre os de produtos Este diagrama serve de modelo para todos os outros relat rios que tem uma l gica bem parecida o sistema exibe uma tela pedindo os par metros do relat rio os dados s o lidos do banco de dados e enviados impressora Os diagramas mostrados podem n o estar totalmente em conformi dade com a implementa o pois pode ser que haja a necessidade de incluir algum m todo ou atributo para melhorar a codifica o do sistema FUR LAN diz na modelagem de um estudo de caso Conforme a modelagem avan a rumo a uma impoementa o f sica h um aumento co
89. do e ao terminar de definir o m todo necess rio confirmar para que o Umbrello volte tela de defini o da classe EK Operation Properties Modelador UMP Umbrello ONT p General Properties Name exclui Type boo C Abstract operation C Classifier scope static F Visibility Public O Private O Protected r Parameters CASS New Parameter Delete j Properties 9 Help X Cancel Figura 4 8 Umbrello definindo um m todo Assim como na cria o de atributos depois de confirmado um m todo o Umbrello vai acrescent lo lista e para documentar o m todo criado deve se clicar sobre ele e preencher o texto Documentation Da mesma forma que foi criada a classe DListaFormaPagto tamb m ser o criadas as outras classes do sistema Nos diagramas de sequ ncia a cria o das classes feita de forma semelhante descrita Para ilustrar o funcionamento do Umbrello tanto na modelagem como na gera o de c digos fonte foi elaborado apenas um trecho do di agrama de classes que mostra as classes criadas para manter o cadastro de formas de pagamento Com a an lise dos casos de uso v rias outras clas 27 ses dever o ser criadas mas para o prop sito deste trabalho que mostrar o funcionamento das ferramentas o diagrama de classes da Figura 4 9 suficiente para ilustrar como ficaria o resultado final do trabalho realizado com o aux lio do
90. do que no Linux existem ferramentas competentes e que facilitam muito o desenvolvimento de sistemas por que existem t o poucos programadores desenvolvendo para Linux A resposta est justa mente na dificuldade enfrentada para escolher as ferramentas pouca divul ga o A partir do momento em que existe um trabalho que descreve pelo menos algumas dessas ferramentas existe a possibilidade de que o n mero de desenvolvedores Linux aumente facilitando assim que o Linux saia dos servidores das empresas para ocupar lugar tamb m nas mesas de trabalho dos seus funcion rios Al m da contribui o para a populariza o do Linux tamb m pode se dizer que h uma importante contribui o para usu rios Linux no Brasil pois a maioria das documenta es e estudos sobre o Linux e seus aplicati 106 vos est o em ingl s o que dificulta sua utiliza o por grande parte dos seus poss veis usu rios Apesar de existirem projetos de tradu o de documen ta o de manuais e documenta o dos sistemas existem poucos trabalhos em portugu s de avalia o de ferramentas como este trabalho Ao convencer os desenvolvedores da viabilidade de se projetar e implementar sistemas em Linux tamb m consegue se contribuir para o mercado j que as empresas poder o reduzir seus custos com aquisi o de software pois o Linux assim como as ferramentas apresentadas s o livres e podem ser obtidas a um custo muito baixo visto que existem distribui
91. dos sendo eles o MySQL http www mysql com e o PostgreSQL http www postgresql org Ambos s o timos candidatos a serem adotados no desenvolvimento de um sistema pois implementam instru es SQL padr es e bons recursos de seguran a Depois de uma an lise nas empresas que ministram cursos em Goi nia como SENAC http www go senac br Sistemas Abertos http www sistemasabertos com br entre outras pode se observar que a maioria delas ofereciam curso de MySQL e poucas ofereciam PostgreSQL O MySQL era oferecido em curso separado ou em conjunto com alguma linguagem de programa o como PHP ou Java Dessa forma concluiu se que escolhendo o MySQL seria mais f cil encontrar profissionais no mercado para solucionar algum problema que pudesse surgir no desenvolvimento dos sistemas da Casa das Carretas Apesar de ter escolhido o MySQL n o h muita dificuldade na ado o de outro sistema Devido forma como o sistema foi projetado f cil de alterar o SGBD Para isso deve se alterar o c digo de algumas classes para fazer a conex o com outro SGBD N o necess rio alterar as classes de mais alto n vel que tratam das interfaces com o usu rio ou alguma outra que usa o banco de dados 1 2 4 Ferramentas de modelagem Para desenvolver um bom sistema n o suficiente ter uma boa id ia sentar frente do computador e come ar a implementar o sistema partindo diretamente para sua codifica o Para sistemas s
92. e Manter cadastro de formas de pagamento r Visibility Public OF QProfoctd r Documentatign_ gt 7 gt T gt O cadastro de formas de pagamento cont m o que a as dinheiro e pagamento n o a forma de utiliza o Help Figura 4 2 Umbrello documentando um caso de uso C voy Jj _cencet J m 21 Depois de criado o diagrama poss vel imprimi lo ou export lo como uma imagem O fato de poder exportar o diagrama como uma ima gem interessante pois fica f cil inclui lo em outros documentos como neste trabalho O Umbrello consegue exportar o diagrama para os for matos de imagens mais populares como PNG JPG e BMP Para criar a imagem deve se clicar com o bot o direito do mouse no meio do diagrama e selecionar a op o Export as Picture Depois s dar um nome figura para criar o arquivo A Figura 4 3 apresenta o diagrama de casos de uso completo do sistema Rela o de vendas por forma de pagamento Alterar informa es de cr dito Q E ca Gerente financeiro Manipular dados de clientes Manter cadastro de formas de pagamento A Negociar venda com cliente Expedi o de mercadoria _a Pesquisar cat logo de produtos a Estoquista Rela o de vendas por grupo e produtos A Rela o de vendas com comiss o PN Ca fela o de vendas por cliente p E Gerente Recurs N Vendedor Caixa Figura 4 3 Diagrama de casos de us
93. e informatiza o Falta de tempo para treinamentos Com tantas escolas de inform tica oferecendo cursos em v rios hor rios diferenciados n o h como usar a falta de tempo para n o informatizar Algumas destas escolas v o mais al m fecham turmas dentro da empresa cobrando mais barato pelo pacote e d o o treinamento in loco ou seja dentro da empresa Mas a maior dificuldade realmente o investimento inicial para a in formatiza o A grande maioria das empresas brasileiras pequena e n o tem caixa suficiente para bancar essa informatiza o Mesmo vencida a barreira do custo dos equipamentos existem os custos da m o de obra dos pr prios treinamentos e um outro custo que quase sempre deixado de la do mas que representa a maior fatia dos investimentos o do software Na maioria dos casos apenas o custo do software de gerenciamento conside rado no levantamento de custos Os custos com outros tipos de software como sistema operacional e su tes office geralmente s o desprezados sendo estes sistemas considera dos b sicos e que uma obriga o do fabricante do equipamento fornec los instalados Realmente os fabricantes fornecem os sistemas mas com um pequeno detalhe piratas Se a empresa tentar fugir dessa pirataria ser preciso desembolsar alguns milhares de reais para ter sua m quina legali zada Felizmente com o surgimento do Linux http www linux org que popularizou a filosofia do softw
94. ecas escolhidas Em nenhum momento foi necess rio implementar rotinas de tratamento de te la manipula o de arquivos ou conex es em baixo n vel Foram usadas apenas apenas fun es pr definidas nas bibliotecas A partir de agora a tarefa seria implementar cada um dos outros casos de uso e finalmente a janela principal do aplicativo para chamar cada uma das janelas que implementam os outros casos de uso Para aprender mais sobre o KDevelop e como programar aplicativos usando a biblioteca Qt recomenda se a leitura de KDEVM ANUAL e QTMANUAL 97 Notas 1 widget um elemento vis vel na interface como uma linha de texto um bot o e at mesmo a pr pria janela contendo os elementos Corre sponde ao conceito de controle no jarg o Windows 2 O KDeveop pode ser configurado para apresentar as janelas de difer entes modos como em forma de abas ou MDI Multiple Document In terface Interface de mltiplos documentos O modo de exibi o pode ser alterado em Configura es Configurar Gideon 3 A partir da vers o 3 o KDevelop pode gerenciar mais de um alvo para implementar um sistema Seria como se houvessem subsistemas den tro do sistema Esses targets ent o representam os subsistemas e ao criar um novo arquivo o KDevlop pergunta a qual subsistema o novo arquivo vai pertencer Como no projeto descrito neste trabalho n o ex istir nenhum subsistema sempre dever ser usado o target atual 4 Para selecionar m
95. eilo File Edit Diagram Code Settings Help DFormaPagto UML Diagrams codigo views descricao i WwW Component View Deployment View Diagrams Logical View Banco de dados 2 Cadastro de Formas E DListaFormaPa EE KAlteraFormaP gt EH KFormaPagto E KFormaPagto EE KListaFormaPa KAlteraFormaPagto ormaPagto E EE i Manter cadastro grava KaAlteraFormaPagto canastro de produtos valida gravai Funcion rio H E QDatabase A vendas DListaFormaPagto JA Use Case View codigo descricao DI istaFormaPantof Ready Figura 4 4 Umbrello Diagrama de classes A defini o das classes no Umbrello muito importante porque ba seado nestas informa es ele gera o c digo fonte contendo o esqueleto da classe restando ao programador apenas codificar cada m todo da classe 24 e efetuar alguns ajustes para acessar as bibliotecas necess rias para com pilar o sistema Como foi escolhida a linguagem de programa o C o Umbrello vai gerar os arquivos headers h e os arquivos fonte cpp Ao gerar os arquivos o Umbrello inclui tamb m toda a documenta o que foi inserida na defini o da classe no formato reconhecido pelo DOxygen Para ilustrar o funcionamento do Umbrello ser mostrado como de finir a classe DListaFormaPagto Esta classe respons vel por obter os dados das formas de pagamento do ban
96. eja no m nimo interes sante e que ajude a derrubar alguns mitos sobre o desenvolvimento de sis temas em Linux Se esse material incentivar o desenvolvimento de um sis tema em Linux mesmo que n o seja livre pode se considerar que foi dado um grande passo no rumo do cumprimento de seu objetivo pois convenceu algu m que realmente poss vel adotar o Linux tamb m nas esta es de trabalho das empresas Notas 1 Download o processo de baixar ou copiar arquivos de um computador remoto no caso a Internet 2 How to um guia que explica como fazer alguma coisa Existem in meros documentos how to dispon veis na Internet que ensinam desde a configura o b sica de um computador at a constru o de clusters A maioria deles pode ser vista na p gina The Linux Documentation Project http www ldp org Cap tulo 2 A escolha das ferramentas Este cap tulo mostra como foi feita a escolha das ferramentas uti lizadas no desenvolvimento do sistema Ser o apresentados os crit rios de escolha uma breve apresenta o das ferramentas e uma justificativa pela sua escolha 2 1 Crit rios de escolha At chegar ao ponto de come ar o desenvolvimento do sistema existe um processo que geralmente gera pol micas a escolha das ferra mentas A pol mica est no fato de que n o h como dizer que uma ferra menta melhor que a outra mas que uma ferramenta para mim foi mais adequada ou seja por mais que se tente ser imparci
97. ementa o do m todo grava 6 7 3 A fun o main Depois de implementadas as classes deve se alterar a fun o main criada pelo KDevelop para chamar a classe KListaFormaPagto que vai dar acesso ao cadastro de formas de pagamento Uma parte do c digo gerado pelo KDevelop dever ser ignorada pois ele est chamando a classe Kvendas que ele criou junto do projeto Para implementa o do sistema completo esse c digo pode ser usado co mo modelo para chamar a classe que vai representar a janela principal do aplicativo 95 finclude kvendas h finclude lt kapplication h gt finclude lt kaboutdata h gt finclude lt kcmdlineargs h gt finclude lt klocale h gt finclude klistaformapagto h static const char description I18N NOOP A KDE KPart Application static const char version 0 1 static KCmdLineOptions options 4 URL I18N NOOP Document to open O 3 0505040 5009 H int main int argc char argv KAboutData about kvendas I18N NOOP KVendas version description KAboutData License GPL C 2004 Anderson Pereira Ataides 0 O anderson pafpersogo com br about addAuthor Anderson Pereira Ataides 0 anderson pafpersogo com br KCmdLineArgs init argc argv amp about KCmdLineArgs addCmdLineOptions options KApplication app KListaFormaPagto mainWin O KCmdLineArgs args KCmdLineArgs parsedArgs
98. endentes Primei ramente ser feita a conex o do sinal clicked do widget botaoFechar com o slot close do widget QListaFormaPagto Resumindo est sendo informado que quando o bot o Fechar for pressionado o m todo close do formul rio representado pela classe QListaFormaPagto dever ser executado Para fazer a conex o clique no bot o New Na coluna Sender vai ter uma lista com todos os widgets dispon veis no formul rio da a im 66 port ncia de dar nome a todos os widgets Na coluna Sender escolhe se o widget botaoFechar na coluna Signal escolhido o sinal clicked na coluna Receiver escolhe se o widget QListaFormaPagto e na coluna Slot seleciona se o slot close Se o formul rio for visualizado agora o bot o Fechar vai funcionar corretamente porque ele est conectado a um slot implementado pelo Qt fd C evr and Edit Connections e 7 ix Connections Sender Signal Receiver Slot New botsoFechali Jclcked0 gt GListaFormaPagto claseQ gt gt gt Delete Edit Slots Cancel Figura 6 14 Designer conectando signal e slot Para os outros bot es dever haver um procedimento personalizado pois o Qt n o sabe o que fazer para manipular formas de pagamento O Designer pode deixar definidos os slots que dever o ser usados ao clicar nos bot es do formul rio Agora ser mostrado em detalhes a conex o do bot o Adicionar Na coluna Sender escolhe se botaoAdicionar
99. ent View red S Darloymont View z KListaFormaPagto DListaFormaPagto KFormaPag ER Diagrams N 18 Logical View Gerente financeiro Funcion rio DEG Banco de dados atualizaf void gt 1 Cadastro de Formas obtemDados voi Q Cadastro de for An A EM E DF ormaPagto obtemCampo campg int void a EE DListaFormaPa proximo void Ej KAlteraFormaP incluiQ void E KFormaPagto exibir void EE KListaFormaPa grava void Q Manter cadastro alte 8 Cadastro de produtos k r E Funcion rio atualiza void QDatabase fed Vendas Ta Ww t Use Case Vier l A C PE EA Ready Figura 4 10 Umbrello Diagrama de seq ncia 29 Da mesma forma do diagrama de classes para criar uma classe deve se clicar no cone correspondente a classe na barra de ferramentas e clicar na rea do diagrama Para usar uma classe existente arrasta se a classe da rvore esquerda da janela do Umbrello para a rea do diagrama de segii ncia Para criar um ator deve se criar ou usar uma classe e dizer ao Umbrello que ela deve ser exibida no diagrama como um ator Isto feito dando um duplo clique na classe desejada e na janela que se abre marcar a op o Draw as actor A troca de mensagens entre as classes s o modeladas selecionando o cone correspondente a mensagem na barra de ferramentas direita da janela do Umbrello e depois clicando nas linhas de vida das duas clas
100. ero da venda que agrupa esta e outras vendas para o mesmo cliente USREGISTRO Num rico Usu rio que registrou a venda DTESTORNO Data Data de estorno da venda USESTORNO Num rico C digo do funcion rio que fez o estorno davenda MOTIVOESTORNO Alfa num rico Motivo do estorno da venda Tabela 5 8 ITEMVENDA Rela o de pe as vendidas Campo Tipo de dados Descri o VENDA Num rico N mero da venda chave na tabela VENDA SEQUENCIA Num rico Sequencial da pe a na venda PRODUTO Num rico C digo do produto vendido QUANTIDADE Num rico Quantidade vendida do produto PRECOVENDA Moeda Pre o negociado na venda PRECOLISTA Moeda Pre o de venda na lista 43 Tabela 5 9 PAGAMENTO Desdobramento do pagamento da venda Campo Tipo de dados Descri o VENDA N mero N mero da venda qual este pagamento se refere SEQUENCIA N mero Sequencial da forma de pagamento para a venda FORMAPAGTO N mero Forma de pagamento utilizada VENCIMENTO Data Data de vencimento da parcela VALOR Moeda Valor da parcela As tabelas mostraram apenas a estrutura do banco de dados mas n o informaram o que elas est o representando do DER A Tabela 5 10 mostra a rela o entre as tabelas do banco de dados e o DER ou seja ela diz qual elemento do DER gerou a tabela no banco de dados Tabela 5 10 Rela o entre o DER e as tabelas do banco de dados
101. evoluir toda a infra estrutura da empresa Em pouco tempo houve a neces sidade de um novo upgrade e ap s um minucioso levantamento decidiu se pela utiliza o do software livre Ao partir para uma plataforma livre surgiu outro dilema o sistema gerencial era escrito para o outro sistema operacional Tentou se faz lo funcionar sob um emulador mas diferen as no tratamento do sistema de arquivos levaram a corrup o dos arquivos e conseq ente perda de dados Como o fornecedor do sistema n o mostrou muita disposi o em elaborar um sistema que funcionasse na plataforma adotada pela empresa decidiu se ent o partir para o desenvolvimento de um novo sistema com funciona lidade similar Tomada a decis o foi feita uma busca para encontrar ferramentas que facilitassem o processo de desenvolvimento em Linux de forma que fosse t o r pido como no Windows No sistema da Microsoft existem fer ramentas consagradas de desenvolvimento e devido essa disponibilida de n o h como negar que relativamente f cil desenvolver sistemas para Windows Depois de muita leitura e pesquisa em sites na Internet leitura de documentos how to e de alguns livros foi poss vel aprender a utilizar al gumas ferramentas e ent o elas foram adotadas no desenvolvimento dos sistemas da Casa das Carretas Para mostrar aos programadores que de senvolver aplicativos em Linux pode ser t o f cil como no Windows foi desenvolvido esse trabalho 1 2 O
102. g sql SELECT CODIGO DESCRICAO PRAZO PESOCOM sql PESODESC FROM FORMAPAGTO WHERE SITUACAO A return executaSQL sqgl getResult false Figura 6 32 Implementa o do m todo obtemDados 6 7 1 3 A classe DFormaPagto A classe DFormaPagto foi criada para manipular os dados de uma forma de pagamento Para isso ela tem al m dos atributos usados para conectar ao banco de dados atributos que representam as colunas da tabe la FORMAPAGTO A Figura 6 33 mostra a sua estrutura A classe tem dois construtores sendo um chamado quando for para criar uma nova forma de pagamento e o outro que recebe o c digo da forma de pagamento co mo par metro chamado quando for para alterar uma forma de pagamento existente 84 class DFormaPagto public QDatabase public DFormaPagto QObject parent 0 const char name 0 DFormaPagto QString formaPagto QObject parent 0 const char name 0 bool alteraCampo QString campo QString valor bool obtemDados Jus bool grava bool exclui bool valida private QString codigo QString descricao QString prazo QString pesocom QString pesodesc QString situacao H Figura 6 33 Estrutura da classe DFormaPagto A Figura 6 34 mostra a implementa o dos dois m todos da classe o primeiro n o faz nada a n o ser em seu cabe alho chamar o construtor de QDatabase O segundo construtor
103. gner incluindo novos slots Depois de criados os slots pode se perceber uma particularidade os seus nomes correspondem s mensagens trocadas pela classe KListaFormaPagto no diagrama de seq ncia Manter cadastro de formas de pagamento Isto porque obviamente deve haver coer ncia 68 entre o modelo e a implementa o Depois de criados todos os slots deve se fazer a conex o com os respectivos widgets Finalmente o formul rio QListaFormaPagto est pronto para a codifica o ou seja a interface est pronta faltando apenas implementar os slots que foram criados 6 5 O formul rio QFormaPagto Depois de mostrar em detalhes a cria o do formul rio QListaFormaPagto ser criado o segundo que manipula os dados da forma de pagamento Mais uma vez no KDevelop deve se criar um novo arquivo O nome do arquivo ser qformapagto ui e o tipo do arquivo ser Dialog ui O tipo dialog se justifica porque este formul rio ser mostrado como uma caixa de di logo para que sejam digitados os dados da forma de pagamento O formul rio ficar na forma mostrada na Figura 6 16 A seqii n cia para sua cria o semelhante do formul rio QListaFormaPagto Primeiro cria se os widgets depois o o formul rio organizado as propri edades s o alteradas e finalmente s o definidos os slots que respondem aos eventos Descri o Prazo sm Ps Peso comiss o oq PIIIIIII IIIS SSAA A SASSA Peso desconto CUIDADA
104. grama de classes preliminar ser o criadas agora para modelar a troca de mensagens no sistema tanto do usu rio com o sistema como mensagens trocadas entre as classes Como 28 tamb m est o sendo modeladas as mensagens trocadas com o usu rio no m nimo dever o ser criadas as classes de interface O ponto de partida para a elabora o dos diagramas de sequ ncia a documenta o dos casos de uso Dessa forma para cada caso de uso existe pelo menos um diagrama de segii ncia correspondente Como s o v rios casos de uso no sistema ser mostrado a modelagem de apenas um diagrama de segii ncia os outros diagramas ser o mostrados no Ap ndice A No Cap tulo 6 foi escolhido implementar o caso de uso Manter cadastro de forma de pagamento e por isto ser mostrado como criar o diagrama de seqii ncia correspondente a este caso de uso Para criar um diagrama de sequ ncia no Umbrello seleciona se o menu Diagram gt New gt Sequence Diagram A rea de trabalho do Umbrello limpa e fica pronta para iniciar a cria o do diagrama de sequ ncia A Figura 4 10 mostra o Umbrello trabalhando em um diagrama de sequ ncia Cz 0000000000 2 MSN e File Edit Diagram Code Settings Help 4 Q Qa 7 AQ nx Te UML Diagrams Views Compon
105. ho Ser mostrado como instalar o MySQL no Conectiva Linux 9 e como gerar as tabelas de acordo com a especifica o do modelo de dados B 1 Instalando o MySQL Todo o desenvolvimento deste trabalho foi feito em uma distribui o padr o no caso o Conectiva Linux 9 Todas as ferramentas utilizadas foram escolhidas tentando obedecer ao que disponibilizado pela distribui o O MySQL fornecido na distribui o e a partir de agora ser mostrado como instalar o sistema gerenciador de banco de dados a partir dos pacotes RPM da Conectiva O MySQL pode tamb m ser baixado do site oficial do MySQL http www mysql com por m ao escolher esta op o os arquivos po dem ser armazenados em locais que n o s o o padr o da Conectiva e assim pode ser necess rio fazer algumas altera es no sistema para que os pro gramas do MySQL bem como as bibliotecas sejam encontradas Para o projeto deste trabalho devem ser instalados pelo menos dois pacotes o MySQL e o respectivo pacote de desenvolvimento MySQL devel A maneira mais f cil de instalar estes pacotes no Conectiva Linux 9 atrav s do Synaptic Figura B 1 uma ferramenta de gerenciamento de pacotes Ao entrar no Synaptic ele pede a senha do usu rio root e depois mostra uma lista de pacotes Neste momento necess rio estar de posse dos CD s do Conectiva ou estar conectado internet para que o Synaptic possa fazer o download dos pacotes Na lista que o Synaptic exibe
106. i vel podendo inclusive oferecer vantagens tanto para o desenvolvedor como pa ra o usu rio Sob o ponto de vista econ mico a utiliza o de ferramentas livres vai ajudar a diminuir a rela o custo x benef cio pois a produtivi 105 dade aumenta e o custo diminui O custo por m n o pode ser considerado zero pois o tempo de aprendizado deve ser contado no c lculo de custos Por apresentar interfaces simples e por serem bem documentadas as ferramentas apresentadas n o v o impor um grande tempo de aprendi zado o que vai possibilitar que em pouco tempo o desenvolvedor consiga produzir sistemas bem projetados e documentados Com a escolha do C como linguagem de programa o usando o KDevelop para gerenciar os arquivos fonte foi poss vel mostrar que apesar de ser considerada uma linguagem dif cil relativamente f cil utiliz la para codificar as classes de um sistema Talvez a maior dificuldade seja aprender a usar as ferramentas mas a pr pria documenta o ajuda a vencer esta dificuldade Portanto pode se considerar que este trabalho consegue cumprir seu objetivo de provar que o desenvolvimento de sistemas em Linux pode ser t o simples e prazeroso como desenvolver em plataformas mais popu lares como o Microsoft Windows Ao mostrar essa simplicidade poss vel convencer os fornecedores de sistemas comerciais a desenvolver uma ver s o de suas aplica es para o Linux 8 2 Contribui es Se ficou prova
107. imples essa es trat gia pode funcionar mas para sistemas maiores uma boa documenta o deve ser elaborada para orientar a implementa o al m de possibilitar a va lida o com o usu rio de uma forma mais clara e consistente O desenvol vimento de um sistema de computador deve funcionar como na constru o de uma casa onde existem os projetos de arquitetura que s o aprovados pe los donos e os projetos de estrutura funda o entre outros que direcionam a constru o Atualmente dois modelos s o adotados pelos desenvolvedores de sistema a an lise estruturada e a an lise orientada a objetos Ambas pos suem suas vantagens e desvantagens mas optou se pela ado o da an lise orientada a objetos por dois motivos a biblioteca do ambiente escolhido e a disponibilidade de ferramentas Com rela o biblioteca o KDE fun damentado no Qt que orientado a objetos e assim usando a an lise tam b m orientada a objetos ela fica mais consistente com a implementa o do sistema No caso da disponibilidade de ferramentas todas as ferramen tas analisadas ou oferecem recursos para ambos modelos ou apenas para o modelo orientado a objetos Dentro da an lise orientada a objetos a modelagem do sistema feita usando se a UML Unified Modeling Language http www uml org e portanto a ferramenta escolhida deve oferecer os recursos necess rios para essa modelagem Das v rias ferramentas dispon veis chegou se a quatro que aten
108. ivo elaborar o desenho da interface visualmente usando o Designer Depois de desenhados os for mul rios o KDevelop os incorpora ao projeto restando apenas a tarefa de fazer as devidas chamadas para que ele seja exibido na tela 37 Conforme a modelagem do sistema duas classes fazem a interface com o usu rio no cadastro de formas de pagamento KListaFormaPagto e KrormaPagto KListaFormaPagto a primeira classe com a qual o usu rio vai interagir e atrav s dela ser invocada a outra classe Mas se os formul rios n o ser o gerados no KDevelop porque as classes foram cria das Na verdade KListaFormaPagto e KFormaPagto ser o sub classes de classes geradas a partir dos formul rios desenhados no Designer Poste riormente esse processo ser explicado em mais detalhes Portanto para o cadatro de formas de pagamento ser preciso criar dois formul rios Para criar um formul rio deve ser selecionado o menu Arquivo gt Novo ou clicar no bot o New file da barra de ferramentas Uma caixa de di logo como a da Figura 6 8 se abre para que seja escolhido o tipo de arquivo que ser adicionado ao projeto O campo Diret rio deve estar preenchido com o camninho completo do diret rio onde o projeto foi criado Sem apagar o que est escrito acrescenta se src que o subdiret rio do projeto onde os arquivos com os fontes est o armazenados No campo Filename ser informado o nome de qlistaformapagto ui e posteriormente ser exp
109. licado porque n o foi dado o nome de klistaformapagto o nome da classe modelada Na lista que tem abaixo ser usada a op o widget ui e depois deve se clicar em ok Se o KDevelop perguntar sobre o target s aceitar as sugest es que o arquivo ser acrescentado ao target atual esp Nile KDevelop S0 New file creation Diret rio cumentos projetos kvendastsrc y Filename alistaformapagto ui Widget ul E R Add to project TMg G X Cancelar Figura 6 8 KDevelop criando um novo arquivo 58 Nesse momento o Designer deve ser aberto e se ele perguntar no vamente o tipo de interface que ser criada deve ser selecionado widget Um formul rio m branco aberto para que seja desenhada a nova interface esquerda da tela do Designer est a janela Toolbox onde s o selecionados os widgets que ser o acrescentados ao formul rio direita est o outras ja nelas das quais a principal a Property Editor Signal Handlers onde s o definidas as propriedades dos widgets A figura Figura 6 9 mostra a tela principal do Designer Como o aplicativo est sendo desenvolvido para funcionar com o KDE se estiverem dispon veis os widgets espec ficos para o KDE devem ser usados Vs 7 Pat Designer By Trolitech Ts x File Edit Project Search Tools Layout Preview Window Help D S E eno sp Ws B D BB _ E B va E 83 mall qu E r es L 2 j gt ProjectOverview os to Common Widgets E32 T
110. liotecas disponi bilizadas pela maioria das distribui es Linux do mercado Conectar ao banco de dados mysql connect Criar uma nova interface Deve se criar uma classe filha de wi dget ou similar Criar uma linha de edi o na janela Acrescentar um QLineEdit Nada complicado O mais dif cil dizer para o compilador onde procurar as bibliotecas Mas com o aux lio do KDevelop nem esse trabalho t o complicado assim Criatividade A criatividade um requisito importante no desenho da interface com o usu rio para elabora o de janelas bem planejadas com bom apelo visual que n o cansem o usu rio e que sejam de f cil utiliza o Tam b m muito importante a criatividade para conseguir resolver prob lemas de l gica de linguagem Mais uma vez Qual linguagem n o necessita desse conhecimento A lista apresentada contempla os principais pr requisitos para im plementar um sistema em Linux O programador com experi ncia na lin guagem C C pode estranhar o fato de n o ser citado a capacidade de trabalhar com Makefiles O programador que tem conhecimento em pro grama o em Linux vai perguntar sobre o script configure usado para gerar Makefiles Para se ter desenvolvimento r pido preciso ocultar o m ximo de detalhes b sicos para que o programador se concentre na im plementa o apenas do que foi modelado A tarefa de criar esses scripts de configura o deixada para o KDevelop que sabe o que nece
111. m vendedor para permitir ou n o vendas registradas em seu nome TELEFONE Alfa num rico Telefone do usu rio incluindo DDD SENHA Alfa num rico Senha de acesso ao sistema SITUACAO Alfa num rico Situa o do usu rio Ativo Inativo Tabela 5 6 FORMAPAGTO Formas de pagamento aceitas na em presa Campo Tipo de dados Descri o CODIGO Num rico Identifica a forma de pagamento 41 Campo Tipo de dados Descri o DESCRICAO Alfa num rico Descri o da forma de pagamento PRAZO Sim N o Indica se pode usar esta forma em vendas prazo PESOCOM Porcentagem Indica o redutor aplicado sobre a comiss o PESODESC Porcentagem Indica o redutor aplicado sobre o desconto m ximo SITUACAO Alfa num rico Situa o da forma de paga mento Ativo Inativo Tabela 5 7 VENDA venda e Venda Registro das vendas Or amento Ordem de Campo Tipo de dados Descri o NUMERO Num rico N mero da venda DATA Data Data da venda VENDEDOR Num rico C digo do vendedor que realizou a venda CLIENTE Num rico C digo do cliente para o qual a venda foi realizada TIPOPAGTO Alfa num rico Tipo do pagamento Vista Prazo TIPODOCUMENTO Alfa num rico Indica o tipo de documento gerado Or amento Venda 42 Campo Tipo de dados Descri o INFORMACOES Alfa num rico Informa es complementares sobre a venda VENDAFINAL Num rico N m
112. madas s rotinas implementadas na biblioteca do MySQL ser o feitas por esta classe As classes filhas de QDatabase n o precisam saber conversar com o MySQL pois QDatabase vai cuidar dessa conex o Z A figura Figura 6 20 mostra a estrutura da classe QDatabase E importante notar que ela filha de oobject Na verdade n o era neces s rio que ela fosse filha de Qobject mas isto foi feito por dois motivos Um deles que praticamente todas as classes da biblioteca Qt s o filhas de Qobject e seus construtores recebem um objeto desta classe ou de um de seus descendentes Quando um objeto destru do ele destr i tamb m os objetos que o receberam como filho Se por exemplo for instanciada uma classe de interface e em seguida for instanciada outra classe recebendo a interface quando a insta ncia da interface for destru da automaticamente o segundo objeto tamb m ser destru do Dessa forma n o h o perigo de esquecer de destruir um objeto pois a biblioteca Qt vai fazer isto auto maticamente O segundo motivo pelo qual Database filha de object para ilustrar a utiliza o do mecanismo signal and slot do Qt mais especifica mente a implementa o de um sinal Em QDatabase sempre que ocorrer um erro na comunica o com o SGBD um sinal de erro ser emitido e que pode ser conectado a um slot 1 class QDatabase public QObject 2877 A 3s Q_OBJECT 4 public 5 QDatabase Q0bject parent 0 const
113. mente garante que o conjunto de registros ser fechado e depois fecha a conex o com o SGBD 79 QDatabase QDatabase if registros mysql free result registros mysql close conexao Figura 6 23 Destrutor de Database Na Figura 6 24 est implementado o m todo executaSOQL que respons vel pelo envio de instru es SQL ao SGBD Ele recebe uma string contendo a instru o SQL e se o SGBD conseguir execut la retornado true caso contr rio o m todo retorna false Tamb m neste m todo caso ocorra um erro um sinal emitido bool QDatabase executaSOL QString sql bool retorno retorno mysql real query conexao sql sgl length 0 if lretorno emit erro mysql error conexao return retorno Figura 6 24 Implementa o do m todo executaSgl1 Depois de executar uma instru o SQL do tipo SELECT o primeiro passo obter o conjunto de registros que o SGBD vai retornar Isto feito pelo m todo getResult mostrado na Figura 6 25 A primeira provi d ncia do m todo confirmar se a conex o com o banco de dados est aberta e em seguida verificado se o conjunto de registros est aberto Se o conjunto de registros estiver aberto ele fechado antes Depois dos testes o resultado da instru o SQL executada obtido do SGBD Mais uma vez se ocorrer algum erro o sinal emitido 80 bool QDatabase getResult if conexao return false
114. nsider vel na quantidade de detalhes a serem cobertos sendo dif cil trat los de maneira est tica como o onte do de um livro 109 T KListaFormaPagto lt DListaFormaPagto KFormaPagto DFomaPagto DFuncionario KListaFormaPagto void JKT L Set mD idoi ivoa L atualiza de KListaForma Pagto invocado obtemCampog void P proximo _ _ fecha Es exclui void exclui formaPagto Qptring QString inclui void KFormaPagto void grava void gt DFormaPagto void H t araco neba valor QString void inclui void DFormaPagto void atualiza void KFormaPagto void 1 L 5 8 lt E Z KFormaPagto fp QString void creme obtemDados void obtemCampo void DFormaPagto void grava void P L DFormaPagto void DFormaPagto void alteraCampo campo AStying valor QString void altera void L www DFormaPagto void atualiza void KFormaPagto void KListaFormaPagtoi void L i Figura A 1 Manuten o do cadastro de formas de pagamento 110 T KListaPrecos DListaPreco Impressora DFuncionario KListaPrecos void emite void DListaPreco void obtemDados void obtemCampo void
115. o ferramentas al m do ambiente nativo do sistema e do sistema gerenciador de banco de dados Para todas elas foram feitos alguns testes e analisadas as vari veis descritas A escolha foi feita tentando o m ximo de imparcia lidade e deixando a opini o pessoal apenas como crit rio de desempate 2 2 O ambiente Diferentemente do que acontece no Windows o Linux por si s n o oferece um ambiente de trabalho um gerenciador de janelas nico Existe um servidor gr fico que oferece as rotinas b sicas de manipula o da tela um cliente que acessa o servidor gr fico e diversos gerenciadores de janela que oferecem ao usu rio um ambiente de trabalho Entre esses gerenciadores de janela est o o WindowMaker http www windowmaker org o Blanes http labdid if usp br blanes o AfterStep http www afterstep org o Gnome http www gnome org e o KDE http www kde org Na verdade desde que se tenha as bibliotecas requeridas instaladas um aplicativo pode funcionar em qualquer um dos gerenciadores dispon veis ou seja um aplicativo feito especificamente para o KDE roda no Blanes desde que as bibliotecas do KDE estejam instaladas no sistema A escolha do ambiente gr fico pol mica porque a opini o pessoal tem um peso muito forte na decis o Talvez esse seja o ponto onde a opi ni o pessoal tem peso mais forte Como o sistema funciona independente do ambiente a pol mica pode ser amenizada mas o simples fato de ter que
116. o com o projeto Para cada classe ser o mostrados os fontes de cada m todo e ser explicado o que ele est fazendo Nessa explica o ficar expl cito que o que se precisa de C apenas o necess rio para implementar os m todos Nada de rotinas de baixo n vel ou chamadas complicadas de sistema mas apenas o que as bibliotecas utilizadas exigem para funcionar Ao gerar os arquivos com os c digos fonte tanto o Umbrello como o KDevelop geram v rias linha de coment rios no formato do DOxygen al m de outras informa es adicionais Para mostrar a implementa o das classes todas as linhas adicionais foram removidas e assim os fontes que ser o mostrados cont m apenas as linhas v lidas para o compilador 6 7 1 Classes de acesso ao banco de dados Antes de come ar a implementar as classes de banco de dados ne cess rio entender como o MySQL funciona Basicamente a tarefa de obter dados do banco de dados consiste na seguinte segii ncia de passos 1 Abrir uma conex o com o banco de dados 2 enviar uma instru o SQL 3 receber o conjunto de registros resultado da instru o SQL 4 obter os dados de cada registro do conjunto 5 desalocar o conjunto de registros 75 6 e finalmente fechar a conex o com o banco de dados Para cada passo deve existir uma vari vel para armazenar o resul tado da opera o realizada Estas vari veis ser o os atributos da classe Portanto os atributos necess rios para
117. o do sistema 22 4 2 Diagrama de classes A elabora o do diagrama de classes n o pode ser feita em um nico passo e nem um processo isolado na modelagem do sistema FURLAN diz que inicialmente s o determinadas as classes principais do sistema e seus atributos Essas classes s o obtidas a partir do estudo da especifica es do sistema e dos casos de uso Depois de criar essas classes preliminares elas passam por um processo de normaliza o do modelo visando sua es tabilidade e integridade Al m disso deve se buscar modelar classes mais simples para que elas possam ser mais f ceis de copreender documentar e principalmente implementar Continando o processo de desenvolvimento saindo da an lise ini cial e partindo para o projeto do sistema pode haver necessidade de criar novas classes que n o foram previstas no modelo preliminar As novas clas ses tamb m devem integrar o diagrama de classes para que ele n o fique inconsistente com a implementa o que deve seguir o que foi concebido no projeto Para criar um diagrama de classes no Umbrello o primeiro passo selecionar o menu Diagram gt New gt Class Diagram Para cri ar uma nova classe deve se selecionar o cone correspondente a classe na barra de ferramentas direita da janela do Umbrello e clicar na rea do diagrama Para usar uma classe esistente deve se arrast la da rvore mos trada esquerda do Umbrello para a rea do diagrama A figura Figura 4
118. o seu sistema de privil gios e controle de acesso Criado o banco de dados e os usu rios que v o utiliz lo pode se criar as tabelas que foram concebidas na an lise B 3 Elaborando o script para criar as tabelas No Cap tulo 5 foi mostrado um trecho de um script SQL para criar a tabela de forma de pagamento Nesta se o ser apresentado o script completo para cria o de todas as tabelas do banco de dados O script cria n o s as tabelas mas tamb m os ndices que melhoram a performance de consultas e dos relacionamentos Outra coisa que pode ser notado que pode se inserir coment rios para explicar alguma coisa no script Este recurso muito interessante pois poss vel tornar o script auto explicativo ou seja ao ler o seu conte do consegue se entender o que ele est fazendo O script mostrado na Figura B 6 deve ser salvo em um arquivo texto puro sem nenhuma formata o Ele foi preparado especificamente para funcionar com o MySQL Para faz lo funcionar em outro sistema deve se efetuar algumas altera es X k k k kk k X k kkk kkk kkk kkk kk kk k k kk k k k k k k k k k k k k k k k k k k k k k k k x x TAV LA eti reset USUARIO Elemento do DER Entidade Usuario 7 Funi o Usuarios do sistema ARAL kkk kkk kkk kkk kk kk k k k k k k k k k k k k k k k k k k k k k k k k AAA CREATE TABLE USUARIO CODIGO TIN
119. omprar mais barato qualquer economia que se consiga obter pode ser fundamental para se manterem funcionando e principalmente dando lucros Atentos a essas exig ncias e em busca de produtividade a baixo custo muitos diretores buscaram na inform tica um ponto de apoio para auxili los em suas estrat gias de neg cios Mesmo com esta press o e mesmo com a necessidade de aumento de produtividade muitas empresas a maioria pequena ainda n o conse guiram fazer esse investimento Entre os motivos alegados pelos diretores est o os seguintes Pre o do equipamento Com a r pida e constante evolu o das m quinas e consegiiente press o para vender as obsoletas o que se v s o equipamentos de inform tica cada vez mais baratos e com muitas facilidades para pagamento Portanto esta justificativa n o deve mais assustar tanto o empres rio Falta de m o de obra Em uma r pida busca em jornais e em institui es como SENAC SENAI entre outras que oferecem treinamento pode se constatar que h in meros cursos t cnicos que est o despejando profissionais no mercado Contando tamb m as faculdades somente em Goi nia s o mais de dez que anualmente formam mais turmas observa se que na verdade h um excesso de profissionais dispon veis no mercado claro que entre tanta gente existem os bons e os maus profission ais mas sabendo escolher poss vel conseguir um profissional que consiga realmente auxiliar no processo d
120. os negocia o e cadastramento o vende dor faz o registro da venda gerando uma ordem de venda que impressa no estoque e fica aguardando o pagamento no caixa O cliente ent o enca minhado ao caixa para efetuar o pagamento e posteriormente expedi o para retirada da mercadoria Nas vendas por telefone em que ser feita uma entrega o entregador deve antes se dirigir ao caixa para entregar uma via da ordem de venda que fica como pend ncia para acertar na sua volta 3 2 Acerto no caixa Depois de conclu da a negocia o por parte do vendedor o cliente encaminhado ao caixa para fazer o acerto da venda No caixa o sistema dever exibir uma lista das vendas que foram negociadas e que ainda n o foram acertadas O cliente fornece o nome e a venda que dever estar re lacionada na lista ser baixada e liberada para expedi o Feito o acerto uma nota ou cupom fiscal emitida para a venda Caso o cliente queira mudar a forma de pagamento ele deve ser encaminhado de volta ao vende dor para ver se poss vel a altera o lembrando que os pre os dependem da forma de pagamento escolhida Para o caso de entregas o entregador dever informar ao caixa quais as vendas que ele est levando para que elas sejam marcadas como parci almente acertadas Quando o entregador retornar ele entrega ao caixa o recebimento propriamente dito De posse do recebimento a venda dever ser acertada e ent o eliminada da lista de
121. os podem ser criadas usando um script SQL Por m antes de executar o script O banco de dados deve ser criado para receber as tabelas Depois de criado o banco de dados deve se informar ao MySQL qual o usu rio que ter permiss o de acesso ao banco de dados rec m criado A maneira mais f cil de se criar o banco de dados e dar permiss o de acesso a um usu rio usando o programa mysql que um shell para enviar comandos ao servidor MySQL Para executar o programa deve se abrir uma janela de terminal proceder como mostrado na Figura B 4 S mysql u root p Enter password Welcome to the MySQL monitor Commands end with or g Your MySQL connection id is 2 to server version 3 23 58 log Type help or h for help Type c to clear the buffer mysql gt Figura B 4 Chamando o programa mysql 115 Quando o programa my sq1 invocado ele vai pedir a senha de aces so e neste ponto deve ser digitada a senha que foi criada para o usu rio root Informada a senha o shell vai mudar e fica pronto para receber comandos SQL O primeiro comando SQL que ser digitado o que vai criar o banco de dados no qual as tabelas ser o armazenadas Logo em seguida ser criado o usu rio e respectiva senha para usar o banco de dados criado como mostrado na Figura B 5 mysql gt CREATE DATABASE kvendas Query OK 1 row affected 0 00 sec mysql gt GRANT ALL PRIVILEGES ON kvendas TO kvendasflocalhost g
122. ou menos descontos Para n o prender o vendedor a pre os e descontos pr fixados o sistema deve permitir que ele conceda descontos at o limite m ximo estabelecido para vendas a vista e para vendas a prazo Para conceder o desconto o vendedor pode digitar o pre o da mercadoria diretamente ou ainda conceder desconto ao final da venda desconto no rodap da nota O cadastramento dos dados do cliente tamb m est condicionado forma de pagamento Para vendas em dinheiro o cadastramento opcional e o vendedor tem orienta o para oferecer o cadastro para posteriormente o cliente poder comprar faturado Para vendas a prazo ou em cheque a vista ou pr datado feito um cadastro criterioso do cliente Para fazer o cadastro do cliente al m dos dados completos nome endere o telefo ne etc s o exigidas 3 refer ncias comerciais onde o cliente tem cadastro para compras a prazo O vendedor tem autoriza o para fazer o cadastro completo do cliente mas n o tem autoriza o para liberar o cr dito Dependendo da situa o do cliente inadimpl ncia o departamen to financeiro pode bloquear o seu cadastro de forma a n o permitir vendas 17 a prazo Em casos extremos pode ser desej vel bloquear por completo a venda para um determinado cliente o departamento financeiro usa esse artif cio para obrigar o cliente a no m nimo conversar com o gerente fi nanceiro antes de efetuar qualquer compra Conclu dos todos os pass
123. penas a classe QDatabase precisa ser alterada pois as suas filhas apenas trabalham com instru es SQL que funcionam para qualquer SGBD 6 7 1 2 Classe DListaFormaPagto A Figura 6 30 mostra a estrutura da classe DListaFormaPagto Na declara o da classe importante notar que ela uma filha de QDatabase que implementa o acesso API do MySQL Ela cont m apenas dois m todos o construtor e obtemDados class DListaFormaPagto public QDatabase public DListaFormaPagto Q0bject parent 0 const char name 0 bool obtembados l Figura 6 30 Estrutura da classe DListaFormaPagto A Figura 6 31 mostra a codifica o do construtor DListaFormaPagto Ele muito simples apenas conectando o sinal emitido quando um erro ocorre a um slot 83 DListaFormaPagto DListaFormaPagto Q0bject parent const char name QDatabase parent name connect this SIGNAL erro const char this SLOT msgErro const char Figura 6 31 O construtor de DListaFormaPagto A Figura 6 32 mostra a implementa o do m todo obtemDados Este m todo define a instru o SQL que deve ser enviada ao SGBD pa ra obter uma lista com as formas de pagamento cadastradas no sistema Definida a instru o SQL executa se o m todo executaSQL e se ele executar com sucesso executado tamb o m todo get Result ambos definidos na classe Database bool DListaFormaPagto obtemDados QStrin
124. pend ncias no caixa 3 3 Expedi o Quando a venda negociada pelo vendedor uma ordem de venda emitida no estoque para que os estoquistas possam separar as pe as para expedi o Se a venda for para ser entregue o estoquista convoca um en 18 tregador informa as vendas que ele vai entregar e o encaminha ao caixa para fazer o acerto preliminar das vendas Quando a mercadoria for para despachar o estoquista deve informar o n mero de volumes que a venda gerou a nota fiscal cont m essa informa o Como alternativa o pr prio estoquista pode emitir a nota fiscal que ser impressa no caixa Na expedi o o sistema deve exibir uma lista das vendas que foram acertadas no caixa O estoquista somente poder expedir a mercadoria se a venda estiver na rela o apresentada pelo sistema ou seja vendas acer tadas No caso de entregas o acerto parcial suficiente para o estoquista fazer a expedi o pois o acerto real ser feito no retorno do entregador De pois de expedida a mercadoria o estoquista ent o faz a entrega da venda removendo a da lista de pend ncias 3 4 Relat rios de acompanhamento Para acompanhamento e totaliza es o sistema dever ser capaz de emitir pelo menos os seguintes relat rios e Lista de pre os por grupo por descri o e Relat rio de vendas por grupo e produtos e Relat rio de vendas por cliente e Relat rio de vendas por forma de pagamento e Totaliza o de vendas
125. prender mais sobre a API C usada para imple mentar um sistema que acessa um servidor MySQL 124 Refer ncias bibliogr ficas SILBERSCHATZ Henry F Korth e Abraham Silberschatz Sistemas de banco de dados 1989 McGraw Hill FURLAN Jos Davi Furlan Modelagem de objetos atrav s da UML 1998 Makron Books TCMMANUAL Frank Dehne Roel J Wieringa e Henk R van de Zandschulp Toolkit for Conceptual Modeling TCM User s Guide and Reference 2003 Dispon vel na Internet em http wwwhome cs utwente nl tem QTMANUAL Trolltech team Qt Reference Documentation 2002 Dispon vel na Internet em http doc trolltech com 3 1 index html KDEVMANUAL Bernd Gehrmann Caleb Tennis e Bernd Pol KDevelop User Manual 2004 Dispon vel na Internet em http docs kde org en 3 2 kdevelop kdevelop DOCBOOK Norman Walsh e Leonard Muellner DocBook The Defini tive Guide 2002 O Reilly amp Associates Inc XSLT Bob Stayton DocBook XSL The Complete Guide 2003 Sagehill Enterprises DSSSL Norman Walsh The Modular DocBook Stylesheets 2000 Dispon vel na Internet em http docbook sourceforge net release dsssl current doc DOXYGEN Dimitri van Heesch Doxygen Manual 2004 Dispon vel na Internet em http www stack nl dimitri doxy gen manual html 125
126. quivos com exten o ui user interface No momento da compila o os arquivos gerados no Designer ser o convertidos em fontes C e suficiente saber que ser o criados os arquivos qlistaformapagto h e qformapagto h onde estar o decla radas as classes QListaFormaPagto e QFormaPagto Na modelagem foram concebidas as classes KListaFormaPagto e KFormaPagto e pa ra que elas representem os formul rios criados no Designer ser usado o conceito de heran a as classes ser o filhas de QListaFormaPagto e QFormaPagto Para que a classe funcione de acordo com a modelagem devem ser reimplementados os m todos correespondentes aos slots que fo ram definidos no Designer A classe KFormaPagto foi gerada pelo Umbrello mas o Umbrello 71 n o sabe que ela deve ser filha de orormaPagto Assim deve se alte rar sua declara o para que ela se torne filha da classe gerada pelo De signer Depois s partir para a codifica o de seus m todos A classe KFormaPagto foi deixada para ser criada no KDevelop para ilustrar o seu funcionamento Para criar uma classe no KDevelop deve se selecionar o menu Projeto gt New Class Uma caixa de di logo como a da Figura 6 18 ir se abrir Esta caixa de di logo cont m duas abas para que sejam informados os dados da classe No campo Nome deve se colocar o nome da classe KListaFormaPagto Ao colocar o nome da classe os campos Header e Implementation s o preenchidos com o nome da classe todo em
127. r necess rio informar duas coisas os headers onde est o declarados os prot tipos das fun es e estruturas do MySQL e a biblioteca para a gera o do execut vel do sistema O arquivo header que deve ser usado o mysq1 h Geralmente as distribui es Linux colocam esses arquivos no diret rio usr include No caso espec fico do Conectiva Linux os headers do MySQL s o coloca dos em usr include mysqgl por m ele vem configurado para procurar os headers apenas no diret rio usr include Para contornar esse pro blema deve se informar o subdiret rio onde est o MySQL e a linha com o include ficar como mostrado na 4Figura 6 3 finclude lt mysql mysqgl h gt Figura 6 3 Acrescentando um include em um arquivo fonte Curiosamente no Conectiva Linux a biblioteca 1libmysqlclient est localizada no diret rio padr o usr lib n o sendo necess rio como no caso do header informar o subdiret rio onde o arquivo se localiza Para informar ao KDevlop que ele precisa usar a biblioteca libmysqlclient so deve se abrir a janela Automake Manager mostrada na Figura 6 4 52 ESC ey D homerandersoniMeus documentos projetos kvendas kve Bdoc apo ogepuawnoog E ESTES a Dados em shellre D Dados em shelldesktop 9 Cabe alho em noinst llcon data in kde icon Ja BEUN SUN Figura 6 4 KDevelop a janela Automake Manager Com a janela Automake Manager abert
128. r os dados das formas de pagamento do banco de dados para que seja elaborada uma lista que ser amp aacute exibida ao usug amp aacute rio Depois de criada a classe deve se dar um duplo clique sobre ela para abrir a janela de propriedades que amp eacute onde s amp atilde o informados os atributos m amp eacute todos e documenta amp ccedil atilde o da classe lt para gt lt para gt A primeira tarefa amp eacute documentar a classe indicando para qu la serv fornecendo uma 100 vis amp atilde o geral sobre seu funcionamento N amp atilde o amp eacute necess amp aacute rio neste momento entrar em detalhes sobre os atributos e m amp eacute todos porque eles ter amp atilde o sua pr amp oacute pria documenta amp ccedil amp atilde o lt para gt lt figure gt lt title gt Umbrello documentando uma classe lt title gt lt graphic format png align center scale 25 fileref figuras umbrello08 png gt lt figure gt Figura 7 1 Trecho de um arquivo no formato SGML Para escrever o arquivo SGML pode ser usado qualquer editor de texto que consiga gravar texto puro Se for usado processador de texto co mo OpenOffice ou Word deve se ter o cuidado de ao gravar o arquivo selecionar o formato texto para que ele n o seja gravado no formato pro priet rio do processador escolhido Depois do documento todo digitado deve se usar um dos scripts dispon veis para gerar o documento em su
129. ret rio deve ser colocado o caminho onde os fontes ser o armazenados ou seja no diret rio onde se localiza o projeto criado no KDevelop Como padr o o KDevelop coloca os fontes dentro do subdiret rio src e justamente o caminho que deve ser infor mado ao Umbrello para que ele gere os fontes Na parte inferior da janela do assistente a linguagem selecionada deve ser cpp Ao abrir a lista pode se notar que o Umbrello consegue trabalhar com v rias linguagens de programa o Informado o diret rio e a linguagem deve se clicar em Next JOE Code Generation Options IC Write comments for sections even if section is empty r Directories Write all generated files to directory home anderson uml generated code Browse C Include heading files from directory E30 r Overwrite Policy If a file with the same name as the name code generator wants to use as output file already exists Overwrite O Ask Q Use a different name r Language cep F n nass Figura 6 7 Umbrello definindo as op es de cria o dos fontes 56 A pr xima p gina do assistente apenas mostra as classes que ser o geradas Para gerar os fontes deve se clicar no bot o Generate Depois de conclu da a gera o dos arquivos o bo o muda para Finish e ent o deve se clicar nele para fechar o assistente Agora falta fazer com que o KDevelop acrescente os
130. retirar essa funcionalidade do escopo deste trabalho GRUPO PRODUTO 1 AGRUPA PRODUTO N FORMA PAGAMENTO CUENTE 1 1 N VENDEDOR REFERENCIA Figura 5 1 O diagrama entidade relacionamento Como dito no Cap tulo 2 foi escolhido o TCM para elaborar o mo delo de dados e agora ser mostrado como obt lo usando o TCM 5 2 Gerando o DER com o TCM O TCM Toolkit for Conceptual Modeling uma ferramenta que fornece diversos editores gr ficos para a modelagem de diferentes diagra mas usados na especifica o de sistemas Esses diagramas representam a estrutura conceitual do sistema da o nome da ferramenta 34 Para cada diagrama o TCM oferece um editor espec fico O TCM consegue gerar diagramas para a an lise estruturada an lise orientada a objetos diagramas UML e tamb m tem uma s rie de diagramas adicio nais gen ricos A tela principal do TCM dividida em se es contendo os diagramas espec ficos para cada metodologia de desenvolvimento Pa ra elaborar o diagrama de Entidade Relacionamento deve se usar o editor TESD Entity Relationship Diagram Selecionado o editor uma janela como a da Figura 5 2 se abre para que o diagrama seja desenhado A tela do TESD apresenta os elementos do diagrama e as liga es poss veis esquerda da janela S o mostradas algu mas informa es sobre o documento na parte de baixo e direita ocupando a maior parte da tela est a rea de desenho fe T
131. ria o direta no KDevelop Para de monstrar o potencial das ferramentas algumas classes ser o criadas pelo Umbrello e uma outra ser criada diretamente no KDevelop Assim o de senvolvedor poder escolher qual o modo que achar mais conveniente 6 1 O que necess rio para implementar Ap s ter modelado o sistema com a UML o desenvolvedor tem em suas m os as especifica es das classes que dever o ser implementadas no sistema Nesta se o ser mostrada a implementa o de um dos casos de uso modelados para mostrar a facilidade com que se pode implementar o sistema no Linux As ferramentas utilizadas s o o Designer para o desenho das telas do sistema e o KDevelop para manipular os c digos fonte O fato de dizer que a aplica o escrita em C poderia causar 47 um certo p nico pois ela possui a fama de ser dif cil e que por ser de baixo n vel nada est pronto para ser utilizado e assim o programador deve implementar tudo para que o sistema funcione Um dos objetivos de adotar o C neste trabalho justamente mudar essa vis o pois o C pode ser t o simples de usar quanto linguagens de mais alto n vel como o VisualBasic da Microsoft E o que preciso saber de C para implementar o sistema A res posta para essa pergunta parece ser complexa mas os requisitos b sicos para implementar um sistema em C usando as ferramentas que escolhi das se limitam ao m nimo necess rio para implementar as classes cri
132. roducts qgt designer html um aplicativo que possibilita o desenvolvimento da interface com o usu rio de forma visual ou seja poss vel desenhar as telas sem precisar se preocupar como ser o c digo fonte que ser gerado para compila o Usando apenas o Qt e as ferramentas que ele disponibiliza poss vel gerar um sistema completo No entanto para desenvolver um sistema dessa forma o programador precisa saber como utilizar todas as ferramen tas para gerar o projeto completo Al m disto ele tamb m ter que saber trabalhar com Makefiles para adicionar outras bibliotecas como as de aces so ao banco de dados e para fazer a instala o do sistema Para que a programa o seja feita de forma mais f cil e r pida o programador deve concentrar todo seu trabalho no sistema modelado e de talhes b sicos como manipular os Makefiles deveriam ser exclu dos do es copo de seu trabalho Na busca por facilitar o trabalho de programa o foram encontradas algumas ferramentas muito interessantes como o Anju ta http anjuta sourceforge net o KDevelop http www kdevelop org e o KDEStudio http freshmeat net projects kdestudio O Anjuta foi des cartado porque ele pr prio para desenvolver aplicativos para o Gnome e o ambiente escolhido foi o KDE O KDEStudio um timo candidato mas ele n o disponibilizado em algumas distribui es Linux o que restringe a sua utiliza o A escolha ent o foi o KDevelop O KDe
133. s o Umbrello perde o que 104 foi digitado no campo Documentation Este problema ocorre princi palmente com o ltimo elemento acrescentado classe m todo ou atributo O problema foi parcialmente contornado acrescentando um elemento por vez fechando a janela e salvando o arquivo Ainda falando sobre a documenta o ao gerar o c digo fonte o Umbrello n o respeita os saltos de linha digitados na documenta o Assim nos c digos fonte o Umbrello junta toda a documenta o ficando como se fosse um nico par grafo KDevelop Ao usar o Automake manager para acrescentar os arquivos gerados pelo Umbrello ao projeto o KDevelop terminou inesperadamente Ao entrar novamente os arquivos n o foram acrescentados e a opera o teve que ser repetida O problema ocorreu eventualmente e pode ser que tenha ocorrido por falha no sistema de arquivos ou outro motivo externo ao KDevelop O gerenciador de classes do Umbrello com fregqii ncia perdeu a refer ncia da defini o dos m todos das classes Assim ao clicar sobre o nome de um m todo ele sempre abria a estrutura da classe ao inv s de abrir o ponto onde o m todo implementado Apesar dos problemas as ferramentas se comportaram muito bem e ajudaram bastante tanto a modelagem como a implementa o do sistema 8 1 Conclus es Depois de ver a facilidade na utiliza o das ferramentas analisadas poss vel concluir que o desenvolvimento de sistemas em Linux v
134. s pelas 99 distribui es Linux Para gerar o documento em formato HTML usa se o docbook2html Para gerar em Postscript usado O docbook2ps A grande vantagem de usar esse tipo de ferramenta para escrever a documenta o que n o preciso se preocupar com a forma com que o documento ser gerado mas apenas com seu conte do Ao escrever um par grafo n o informado ao DocBook o espa amento ou o tamanho das letras apenas dito onde come a e onde termina o par grafo Tamb m n o necess rio se preocupar em montar ndices lista de tabelas e figu ras Quando as ferramentas forem processar o arquivo estes elementos s o criados automaticamente Um exemplo de documento escrito usando o DocBook este traba lho Ele foi escrito em formato SGML e depois foi processado para gerar o documento final Esse modo de escrever pode poupar um bocado de tempo do autor que tem a nica preocupa o de escrever o texto de entender o conte do A formata o toda feita pelo DTD com as folhas de estilo Na Figura 7 1 mostrado um trecho do fonte deste documento em formato SGML Note que s o usadas tags similares s do HTML para in dicar o in cio e o fim de um tipo de texto par grafo texto it lico lt para gt Para ilustrar o funcionamento do Umbrello sergaacute mostrado como definir a classe lt classname gt DListaFormaPagto lt classname gt Esta classe amp eacute respons amp aacute vel por obte
135. ser o trabalhadas as propriedades dos widgets para que eles funcionem de acordo com as necessidades do siste ma modelado e que sejam f ceis de identificar na hora de trabalhar com os c digos fonte O primeiro widget que ser alterado ser o pr prio formul rio Para trabalhar nas propriedades do formul rio nenhum outro widget pode estar selecionado A primeira propriedade listada na barra de propriedades o nome do formul rio O nome mostrado deve ser Form1 que ser alterado para QListaFormaPagto Outra propriedade que deve ser alterada cap tion que o t tulo da janela Esse valor que deve estar Form1 deve ser alterado para Cadastro de formas de pagamento Alteradas as propriedades do formul rio ser o agora alteradas as propriedades do KListView O nome do widget ser alterado para listaFormaPagto e a propriedade allColumnsShowFocus para true Esta ltima propriedade faz com que ao clicar um elemento na lista a linha inteira seja selecionada A ltima propriedade que ser alterada para listaFormaPagto note que agora a lista tem um nome conhecido e ele pode ser udaso para referenciar o widget what sThis Esta propriedade faz com que a fun o What s this O que isto seja ativada Logo direita da linha de texto existe um bot o com retic ncias Ao clicar sobre ele um editor de texto como o da Figura 6 13 aberto para que seja digitado o texto de ajuda para o widget selecionado no caso lista
136. ses que v o trocar a mensagem Depois da linha criada deve se dar um duplo clique sobre a mensagem para poder informar o seu r tulo em uma janela como a da Figura 4 11 Se a classe tiver algum m todo declarado o Um brello os apresenta para que seja escolhido qual deles implementa a men sagem poss vel ainda modelar uma mensagem diferente selecionando a op o Custom operation opera o personalizada 1 Select Operation gt Modelador UML Umbreiio Select Operation Sequence number Class operation grava bool O Custom operation Figura 4 11 Umbrello Associando a mensagem a um m todo da classe Depois do diagrama de seqii ncia estar completo ele pode ser ex portado como uma figura para ser incorporado documenta o do sistema 30 Este foi o procedimento usado na elabora o deste trabalho A Figura 4 12 mostra o diagrama completo para o cadastro de formas de pagamento DFuncionario KListaFormaPagtoQ void FT obtemDados void FZ fode as vaza aa Lad EE 32 TEET AEEA TEES DE a Zu lizal a istaFormaP obtemCampog v ida invocado fecha 3 proximo _ _ exclui void inclui void KFormaPagto void grava void i exclui formaPagto Qftring QString DFormaPagtoQ void alteraCampo campo QString valor QString void inclui void
137. ss rio para o sistema compilar Bibliotecas adicionais que n o fazem parte do KDE 49 podem ser informadas ao KDevelop e ele trata de junt las ao projeto 6 2 Criando um projeto com o KDevelop Independente do tamanho da aplica o para usar o KDevelop o primeiro passo criar um projeto Na cria o do projeto que o KDevelop colhe as informa es necess rias para gerar os scritps de configura o res pons veis pela cria o dos Makefiles que dizem ao compilador onde buscar as bibliotecas e quais s o os pr requsitos para gerar o programa final A Figura 6 1 mostra a tela principal do KDevelop configurada no modo IDEAL Depois do projeto criado s o acrescentadas abas nas laterais da janela como Classes e File Groups EG Arquivo Editar Ver Projeto Compilar Ir Window Ferramentas Configura es Ajuda E RI O A Seletor de Arquivos Documenta o om E silos Er E Ee l GLS Er lt D qmake User Guide z 2 Arren r 7 Data TP R Documentation S 5 esigner Manual El 3 Desktop 4 096 25 03 2004 00 25 dr C Oo Assoan Manual aj aial AOR a aA D Guide to the Qt Translation Tools geen documentos 4 086 25 03 2004 29 55 dr ADocument Object Model DOM Level 2 HTML Specif 8 BOpenoffce org1 0 2 4 098 paia AScalable Vector Graphics SVG 1 1 Specification Windows documentos 16 384 25 03 2004 20 55 dr E BST sgicom Solippeis 4 096 14 02 2004 19 32 dr Pyton
138. t IDENTIFIED BY kvendas WITH GRANT OPTION Query OK 0 rows affected 0 02 sec mysql gt GRANT ALL PRIVILEGES ON kvendas TO kvendas gt IDENTIFIED BY kvendas WITH GRANT OPTION Query OK 0 rows affected 0 02 sec mysql gt Figura B 5 Criando o banco de dados e o usu rio A primeira instru o SQL cria o banco de dados kvendas no MySQL Note que o nome do banco de dados est em min sculo Deve se tomar muito cuidado com os nomes dos bancos de dados e de tabelas pois o MySQL faz distin o de letras mai sculas e min sculas para os nomes do banco de dados das tabelas Os dois pr ximos comandos criam um usu rio para acesso local e outro para acesso via rede Os comandos mostrados criam usu rio com acesso completo e dessa forma ele vai poder fazer qualquer coisa no banco de dados inclusive alterar a estrutura das tabelas ou mesmo apag las Para o prop sito deste trabalho esse modo de criar usu rios satisfat rio mas em um ambiente de trabalho real deve se preocupar mais com a seguran a criando um banco de dados reservado ao desenvolvimento e outro para 116 a produ o Da mesma forma deve se restringir o acesso aos usu rios de forma que eles possam fazer apenas o necess rio para seu trabalho extre mamente recomendada a instala o do pacote MySQL doc e a sua leitura para aprender como trabalhar com
139. te Ostring codigo Figura 6 43 Estrutura da classe KFormaPagto O primeiro construtor da classe mostrado na Figura 6 44 deve ser chamado quando uma nova forma de pagamento estiver sendo adicionada ao sistema Ele apenas cria validadores para impedir que o usu rio digi te dados inv lidos O segundo construtor al m de criar estes validadores obt m a forma de pagamento cujo c digo foi passado como par metro e atualiza os campos da janela KFormaPagto KFormaPagto Qwidget parent const char name WFlags f QFormaPagto parent name f codigo hn QRegExp rx d d 2 S linePesoCom gt setValidator new QRegExpValidator rx linePesoCom linePesoDesc gt setValidator new QRegExpValidator rx linePesoDesc 93 KFormaPagto KFormaPagto QString fp QWidget parent const char name WFlags f QFormaPagto parent name f codigo fp QRegExp rx d d 2 8S linePesoCom gt setValidator new QRegExpValidator rx linePesoCom linePesoDesc gt setValidator new QRegExpValidator rx linePesoDesc Obt os dados da forma de pagamento cujo cicbigo Lepfp DFormaPagto formaPagto codigo lineDescricao gt setText formaPagto obtemCampo DESCRICAO linePesoCom gt set Text formaPagto obtemCampo PESOCOM replace linePesoDesc gt set Text formaPagto obtemCampo PESODESC
140. u da do sistema bool DFormaPagto exclui QString sql QDatabase dbVerifica 87 sql SELECT FORMAPAGTO FROM PAGAMENTO WHERE FORMAPAGTO codigo if dbVerifica executaSQL sql amp amp dbVerifica getResult if dbVerifica numeroRegistros gt 0 sql QString UPDATE FORMAPAGTO SET SITUACAO IT WHERE CODIGO codigo else sql DELETE FROM FORMAPAGTO WHERE CODIGO codigo return executaSQL sql Jelse return false Figura 6 37 Implementa o do m todo exclui Finalmente para a classe DFormaPagto mostrado o m todo valida implementado como na Figura 6 38 Ele muito simples porque a valida o da forma de pagamento consiste em apenas verificar o preenchimento ou n o de seus campos Para fazer a verifica o usada uma nica express o l ca que retorna true se os dados s o v lidos bool DFormaPagto valida return descricao isEmpty amp amp pesocom isEmpty amp amp pesodesc isEmpty amp amp prazo S prazo N Figura 6 38 Implementa o do m todo valida 6 7 2 Classes de interface com o usu rio Depois de implementadas as classes que v o fazer a comunica o com o SGBD s o mostradas as classes que possibilitam ao usu rio intera gir com o sistema Todas as classes mostradas a partir de agora s o filhas 88 de um
141. uir a forma de pagamento A Figura 6 42 mostra a sua implementa o void KListaFormaPagto exclui if listaFormaPagto gt selectedItem QMessageBox warning this Forma de pagamento Vocic deve selecionar uma forma de pagamento da lista antes de apagar return if QMessageBox information this Forma de pagamento A forma de pagamento abaixo n n listaFormaPagto gt selectedItem gt text 0 n nser apagada do banco de dados n Voc igl4confirma a exclus 1 2 Sim amp N i 0 0 1 0 DFormaPagto formaPagto listaFormaPagto gt selectedItem gt text 1 if formaPagto exclui atualiza Figura 6 42 Implementa o do m todo exclui 6 7 2 2 A classe KFormaPagto A classe KFormaPagto monta uma janela que permite ao usu rio digitar os dados de uma forma de pagamento e grav la no sistema Ela tem dois construtores sendo um chamado quando uma forma de pagamento deve ser inclu da e outro quando a forma de pagamento deve ser alterada 92 O atributo codigo ir armazenar o c digo da forma de pagamento que deve ser alterada A Figura 6 43 mostra a sua estrutura class KFormaPagto public QFormaPagto public KFormaPagto QWidget parent const char name 0 WFlags f Qt WDestructiveClose KFormaPagto QString fp QwWidget parent 0 const char name 0 WFlags f QOt WDestructiveClose void grava priva
142. uma tarefa que s pode ser executada por hacker Como foi apresentado sabendo como usar as ferramentas e tendo o m nimo de conhecimento em C para implementar as classes poss vel implementar sistemas em Linux com muita facilidade Em um sistema comercial a complexidade se encontra muito mais nas regras de neg cio do que na implementa o do sistema e devido a essa caracter stica saber usar as ferramentas de modelagem acaba tendo um peso maior sobre o desenvolvimento pois como foi visto depois de modelado a implementa o exigiu apenas saber o m nimo da linguagem de programa o para implement lo Apesar de as ferramentas utilizadas serem bem elaboradas elas apresentaram alguns problemas durante a utiliza o que foram os seguintes Umbrello Algumas vezes ao tentar mover elementos entre pastas o Umbrello n o faz a movimenta o sendo necess rio repetir a opera o Alguns movimentos realmente n o s o poss veis como passar um diagrama de caso de uso de Use case view para Logical view mas os movimen tos restritos s o sinalizados pelo pr prio Umbrello O problema que ele n o respeitou movimentos que ele sinaliza como sendo permitidos No diagrama de segii ncia ao criar uma mensagem se for se lecionado um dos m todos descritos para associar a mensagem de pois de fechar o Umbrello n o se lembra da associa o e coloca a opera o selecionada como custom operation Ao documentar alguns elemento
143. uncionamento das duas ferramentas Umbrello e KDevelop as classes QDatabase DListaFormaPagto DFormaPagto e KFormaPagto ser geradas pelo Umbrello A classe KListaFormaPagto ser criada diretamente no KDevelop O procedimento para gerar os c digos fonte com o Umbrello inicia se selecionando o menu Code sCode Generation Wizard Uma janela como a mostrada pela Figura 6 6 aberta mostrando todas as classes modeladas Como padr o o Umbrello sugere a gera o do c digo de todas as classes mas como apenas algumas devem ser implementadas devem ser mantidas na lista Classes Selected apenas as classes desejadas 5 Cole Generation Wizard 2 2 x Select Classes Place all the classes you want to generate code for in the right hand side list Classes Available gt Classes Selected DFuncionario DFormaPagto Ditemvenda DListaFormaPagto DListaPreco KFormaPagto DListavendas i batabase DPesquisaCliente DPesquisaProduto Dvenda Impressora 12 KListaFormaPagto KListaPrecos KListavendas KNovavVenda q KPesquisaCliente KPesquisaProduto Cancel l j gt Herp Figura 6 6 Umbrello sele o das classes para codifica o 33 Escolhidas as classes deve se clicar no bot o Next para o assistente passar para a pr xima p gina Na segunda p gina mostrada pela Figura 6 7 as informa es mais importantes que ser o alteradas s o o diret rio e a linguagem Na linha de texto do di
144. uturada de consulta O MySQL foi escrito por Michael monty Widenius Veja o arquivo CREDITS para mais informa es 5639 pacotes listados 812 instalados 0 corrompidos O para instalaratualizar O para remover OB ser o usados Figura B 1 Synaptic ferramenta de gerenciamento de pacotes Depois que o Synaptic concluir sua tarefa o MySQL estar instala do no sistema mas ainda n o poss vel trabalhar com o servidor do banco de dados Antes de iniciar o servidor deve se abrir uma janela de console logar no sistema como usu rio root e digitar os comandos mostrados na Figura B 2 para preparar o servidor MySQL mysql install db mysql createdb Figura B 2 Preparando o servidor MySQL O primeiro comando vai inicializar o reposit rio do MySQL crian do o banco de dados que gerencia o controle de acesso e suas respectivas 114 tabelas O segundo comando vai criar a senha do usu rio root do MySQL Este usu rio root n o tem nada a ver com o root do Linux Ele o superu su rio do banco de dados Se poss vel ele deve ter uma senha diferente da senha do root do Linux Depois do sistema estar preparado pode se iniciar o servidor con forme mostrado na Figura B 3 e assim o sistema est pronto para criar a base de dados de acordo com o modelo de dados service mysql start Figura B 3 Iniciando o servidor MySQL B 2 Criando o banco de dados Como foi visto no Cap tulo 5 as tabelas do banco de dad
145. velop oferece bons recursos para auxiliar o programador a codificar o sistema Ele integrado ao Qt e portanto f cil acrescentar novas interfaces criadas com o Designer ao sistema que est sendo de senvolvido Ele tamb m muito competente para trabalhar com classes oferecendo um navegador onde ao clicar sobre o nome de um m todo ou atributo o arquivo fonte correspondente aberto na posi o onde o ele mento selecionado est definido Com rela o aos Makefiles o KDevelop deixa para o programador apenas a tarefa de informar as bibliotecas que ele necessita e onde localiz las Ao acrescentar uma classe ou uma bi blioteca o projeto modificado para que os Makefiles sejam corretamente ajustados para compilar o sistema corretamente Al m dos recursos citados o KDevelop ainda tem a grande vantagem de fazer parte do projeto KDE 14 e consegiientemente est presente na maioria das distribui es Linux Resolvido o problema da interface sobrou apenas a dificuldade de acesso ao banco de dados com o C Assim como nos ambientes gr ficos os sistemas gerenciadores de banco de dados disponibilizam uma APP Application Program Interface nativa em C para ser usada no de senvolvimento de um sistema Para usar essa API com o C deve se in formar no arquivo contendo o fonte qual o header contendo os prot tipos das fun es e no KDevelop qual a biblioteca necess ria para compilar o aplicativo corretamente Finalmente

Download Pdf Manuals

image

Related Search

Related Contents

A2 Flight Control System User Manual V 1.08  東之セミオー〝ダーライトシリ ーズ取扱説明書  Mode d`emploi kiosque orientation avec l`ONISEP  Manuale Utente User Manual BATPAR180  Desktop Hard Disk 1 TB User Manual  PROCÉDURE VALIDATION D`ÉTUDES (EQUIV)  VODN46xx_user manual - monitoring  2701 GoCard  

Copyright © All rights reserved.
Failed to retrieve file