Sie sind auf Seite 1von 29

Dicas para o desenvolvimento de um software Parte 1

Postado por Andr Luis Celestino Publicado em Artigos, Desenvolvimento, Dicas

Embora a internet esteja repleta de tutoriais e dicas sobre desenvolvimento, sempre surge a dvida de como um sistema deve ser devidamente desenvolvido dentro de padres. Na verdade, no h uma regra geral ou um processo nico para o desenvolvimento de um sistema, mas existem boas prticas que, quando adotadas, podem trazer grandes vantagens em um software, tanto para o cliente quanto para o prprio desenvolvedor. Em muitas empresas de software, tais prticas so consideradas como uma metodologia de desenvolvimento, principalmente por facilitar a manuteno e atualizao, alm de garantir uma personalidade nica para o sistema. Este o primeiro de vrios artigos sobre este assunto, onde o objetivo transmitir um base slida sobre alguns pontos importantes para o desenvolvimento de um software envolvendo a implementao do cdigo e o visual da aplicao.

Facilidade de uso Colocar vrios botes e informaes em excesso em uma janela pode comprometer a usabilidade da aplicao. Simplicidade e objetividade devem estar casados com a funcionalidade do sistema para proporcionar um maior conforto ao usurio. Procure simplificar o visual das janelas, adicionando somente os componentes necessrios que o usurio de fato ir utilizar. Estruture a janela de forma que os campos fiquem em uma sequncia objetiva, agrupados por assunto ou categoria. Em um cadastro de clientes, por exemplo, divida os campos por sees, como dados pessoais, dados profissionais, contato e informaes adicionais. Assim a localizao de informaes fica bem mais fcil e evita que o usurio fique confuso em meio a tantos campos. Procure tambm organizar a ordem de tabulao, para que a digitao de dados se torne mais rpida atravs do TAB ou ENTER para avanar o cursor entre os campos. A questo do padro visual das janelas deve ser discutida na fase inicial do projeto durante a anlise de requisitos. Para garantir que o visual fique conforme a expectativa do usurio, os projetistas utilizam uma tcnica conhecida como Prototipao, que consiste em elaborar uma prvia da tela desenhando-a em um documento. Este desenho apresentado ao cliente para avaliao, e aps a aprovao finalmente o visual passa a ser desenvolvido.

Splash Screen Durante o desenvolvimento de um software, natural que haja a necessidade de executar uma srie de instrues e validaes durante a inicializao do sistema, como

verificar o caminho do banco de dados, criar backups, carregar mdulos e abrir tabelas. Essas instrues podem atrasar a inicializao e a exibio do sistema para o usurio. Consequentemente, o usurio pode pensar que o sistema no foi aberto e tentar abri-lo novamente, criando duas instncias distintas do sistema na memria. Para evitar este problema, desenvolvedores criam telas de inicializao, tambm conhecidas como Splash Screen. Essa tela geralmente contm o nome do software e uma barra de progresso indicando o andamento da inicializao enquanto todas as instrues necessrias so executadas em segundo plano.

Splash Screen do NetBeans 7

Backup Sem dvidas, este item indispensvel! Manter cpias do banco de dados garante maior confiabilidade no sistema quando for necessrio recuperar informaes. Porm, de nada adianta criar backups no prprio computador do cliente quando existir a possibilidade do disco rgido local ser danificado. Neste caso, o banco de dados e todos os seus backups sero perdidos, ao menos que exista uma cpia em outro computador. Portanto, procure disponibilizar no sistema a opo para criar backups em locais remotos, como discos externos ou em outro computador na rede local. Outra opo bastante segura salvar o backup em um diretrio virtual na internet, popularmente conhecido como nuvem. Mesmo que acontea uma falha geral na rede e nos dispositivos mveis do cliente, o backup estar armazenado na internet e poder ser recuperado atravs de um simples download.

Exemplo de tela para backup Embora este recurso esteja disponvel, provvel que o usurio esquea de salvar backups do banco de dados periodicamente. A soluo criar caixas de dilogo para avis-lo do backup ou realizar a cpia silenciosamente, sem a interveno do usurio. Um bom exemplo disso configurar o sistema para salvar o backup todas as vezes que o sistema for finalizado ao final do dia.

Visual da aplicao Este item no obrigatrio, mas com certeza um diferencial importante em uma aplicao. Um visual agradvel, com letras ntidas e cores leves gera comodidade para o usurio. A aplicao fica ainda mais rica quando dispe de opes para personalizao do visual, como aplicao de cores e temas. Atualmente comum encontrar componentes na web com a finalidade de aperfeioar o visual de uma aplicao. Por exemplo, a interface Ribbon, presente nas verses 2007 e 2010 do pacote Microsoft Office, uma das opes para modernizar a tela principal do sistema. O Ribbon pode ser utilizado no Visual Studio com o componente Elegant UI ou no Delphi com o pacote TMS Component Pack.

Exemplo de menu com interface Ribbon Procure tambm utilizar imagens bem definidas em menus e botes, de preferncia no formato PNG. Na internet h dezenas de sites com pacotes de cones e imagens para serem utilizadas em aplicaes desktop e pginas web, como o Icon Archive. Utilize imagens sugestivas de acordo com a funo e procure padroniz-las nas telas em comum. Por exemplo, atribua a mesma imagem para os botes de relatrios e a mesma imagem para os botes de Salvar, Alterar e Excluir, respectivamente. Essa prtica permite que o usurio associe a imagem funcionalidade do boto, minimizando a complexidade do sistema.

Bom, fico por aqui, pessoal! Um abrao!

Dicas para o desenvolvimento de um software Parte 2


Postado por Andr Luis Celestino Publicado em Artigos, Desenvolvimento, Dicas

Em continuidade ao artigo anterior, esta segunda parte abrange mais algumas boas prticas para o desenvolvimento de um sistema com qualidade. Provavelmente a maioria dessas prticas j so adotadas pelos desenvolvedores, mas vale ressalt-las aqui como contedo para base de conhecimento. Sintam-se vontade para postar comentrios ou crticas sobre o artigo!

Exportao de relatrios Criar relatrios bem elaborados fundamental, mas importante que exista opes para export-lo em formatos tradicionais, caso o usurio queira salv-lo no computador ou envi-lo por e-mail. O formato PDF um dos mais utilizados entre as opes de exportao, principalmente por ser um tipo de arquivo com tamanho pequeno e no permitir modificaes aps ser criado. A maioria dos componentes atuais para elaborao de relatrios j possuem mtodos que permitem a exportao para os formatos mais comuns, mas caso esta opo no exista, basta utilizar o software CutePDF Writer, que adiciona uma impressora virtual no computador para criar arquivos PDF a partir da impresso de qualquer documento.

Exemplo de opes para exportao de relatrios

Exportar dados de uma tabela ou de uma grade de registros tambm pode ser de grande utilidade para o usurio, como uma tabela de preos em formato XLS (Microsoft Excel) ou a ficha completa de um cliente em formato DOC (Microsoft Word). Esse tipo de recurso garante versatilidade do sistema por meio da integrao com aplicaes externas tambm utilizadas pelo cliente.

Teclas de Atalho Quando um menu acessado com bastante frequncia, pode ser interessante associar teclas de atalho para acess-lo com mais agilidade. Quem utiliza o Microsoft Windows j deve conhecer algumas combinaes de teclas disponveis para abrir as janelas mais comuns do sistema, como o Windows + E para abrir o Windows Explorer e o Windows + F que abre a janela para pesquisa de arquivos. O mesmo pode ser adaptado a um sistema, por exemplo, para abrir a tela de cadastro de clientes e a tela de consulta de vendas. As teclas de atalho tambm podem ser atribudas a determinados eventos do sistema, como recalcular a soma de valores ou preencher um campo automaticamente. Usurios mais experientes geralmente preferem utilizar teclas de atalho ao invs de acessar as funes do sistema utilizando o mouse, principalmente por agilizar as operaes rotineiras.

Exemplo de teclas de atalho em um menu Porm, atribuir teclas de atalho em todos os menus e sub-menus no sistema desnecessrio, alm de confundir a memria do usurio. Procure atribu-las somente nas principais funes do sistema e utilizar combinaes de teclas simples para facilitar a memorizao.

Utilitrios Quanto mais recursos teis o sistema possuir, mais ele atender as necessidades eventuais do usurio. A ideia incluir calendrio, calculadora, campo de anotaes e telas informativas dentro do sistema, para evitar que o usurio tenha que recorrer a outros aplicativos com essas funes. Uma boa prtica associar teclas de atalho globais essas funcionalidades, como o F6 para Calculadora e F7 para Calendrio, por exemplo. Outra utilidade importante permitir que o usurio configure o sistema conforme o seu perfil, ou seja, o sistema pode apresentar uma tela de configurao e armazenar as preferncias do usurio em um arquivo do tipo INI. Todas as vezes que o sistema for inicializado, as preferncias contidas neste arquivo so carregadas e aplicadas ao sistema. O arquivo de configurao pode conter o diretrio do banco de dados, ordenao padro dos registros de uma tabela, agendamento de backup e outras configuraes internas do sistema.

Este arquivo se torna ainda mais til quando existe mais de um usurio utilizando o sistema e cada um possui preferncias diferentes. Assim, no preciso criar uma verso exclusiva para cada usurio, basta apenas guardar as configuraes em um arquivo INI. Aqui no SubRotina h um artigo sobre como trabalhar com arquivos INI pelo Delphi.

Exemplo de configuraes em um arquivo INI

Threads e telas de espera Algumas operaes do sistema podem demorar um certo tempo para serem processadas, principalmente instrues SQL complexas que envolvam clculos ou consultas em tabelas com vrios registros. Quando isso ocorre, normalmente o sistema congela ou pra de responder durante o processamento at que a operao seja finalizada. Porm, o usurio pode imaginar que a aplicao parou de funcionar e forar o encerramento do processo, comprometendo a instruo em execuo. Para evitar este tipo de transtorno, conveniente criar telas de espera para informar o usurio de que um processamento est em execuo. Essa tela fica ainda mais intuitiva quando h alguma imagem animada (GIF) ou uma barra de progresso indicando o processamento. Entretanto, como a tela de espera e a instruo SQL compartilham o mesmo processo na memria, provvel que a aplicao fique travada da mesma forma, sem resposta. A soluo implementar unidades chamadas Threads, capazes de criar fluxos paralelos ao processo principal para executar uma operao em segundo plano. Basta ento exibir uma tela de espera e transferir o processamento (como uma instruo SQL) dentro de uma Thread para que o sistema no se torne instvel. A verificao automtica de ortografia no Microsoft Word um exemplo de Thread. Repare que o programa no trava enquanto a verificao realizada paraa cada palavra digitada. No Microsoft Outlook, observe tambm que possvel utilizar normalmente o software ao mesmo tempo que novos e-mails so baixados na caixa de entrada. Portanto, Threads no servem apenas para desenvolver telas de espera, mas sempre quando for necessrio executar instrues em paralelo sem afetar o desempenho do sistema. A figura abaixo (em ingls) apresenta uma breve demonstrao de como as Threads se comportam dentro de um processo:

Ilustrao do funcionamento de uma Thread

Bom, as prximas dicas ficam para outro artigo! Muito obrigado pela leitura. At a prxima!

Dicas para o desenvolvimento de um software Parte 3


Postado por Andr Luis Celestino Publicado em Artigos, Desenvolvimento, Dicas

Este o terceiro artigo sobre algumas dicas para o desenvolvimento de um software com qualidade e uma funcionalidade. Aproveito a oportunidade para agradecer a todos que leram e compartilharam o primeiro e o segundo artigo sobre este assunto. Espero que as dicas neste artigo tragam um pouco mais de conhecimento aos leitores e, mais uma vez, sintam-se vontade para expressar qualquer opinio sobre este texto.

Padronizao de cdigo Este item bastante importante quando o projeto desenvolvido por mais de uma pessoa, ou melhor, por uma equipe de desenvolvimento. Definir uma padronizao do cdigo auxilia na legibilidade e na compreenso do que est sendo executado na aplicao. Identar o cdigo nos blocos de condio if-else e nos laos de repetio so uma das prticas que ajudam os desenvolvedores a identificar facilmente a execuo de um mtodo. Identao significa estruturar as linhas do cdigo em tabulaes de

acordo com o nvel da instruo. A figura abaixo exemplifica um cdigo bem identado utilizando a linguagem C++:

Exemplo de identao de cdigo Quando h uma grande quantidade de aninhamento de blocos no cdigo-fonte, a identao se torna ainda mais importante para associar o incio e o fim de cada bloco aninhado. Algumas ferramentas de desenvolvimento, como o NetBeans e o Visual Studio, possuem o recurso de destacar o aninhamento quando o cursor do mouse posicionado na chave que abre ou fecha o bloco. Desenvolvedores em Delphi tambm podem adquirir essa funcionalidade com os addons cnPack ou GExperts, ambos gratuitos. As variveis, classes, objetos e mtodos tambm devem possuir nomes sugestivos de acordo com o seu objetivo. Portanto, uma varivel com o nome SomaTotalPedidos bem mais fcil de ser assimilada do que uma varivel chamada vSTotPed. O cdigo fica mais legvel quando se trabalha com esse tipo de nomenclatura, mesmo que o nome fique ligeiramente maior.

Tratamento

de

excees

Por mais que o desenvolvedor faa testes na aplicao antes de liberar a verso, natural que alguns erros ainda possam ocorrer inesperadamente para o usurio. Estes erros so decorrentes de problemas de semntica, gravao de dados inconsistentes, falhas de acesso memria ou at mesmo eventos inesperados do sistema operacional. No ambiente de programao, os erros so conhecidos tecnicamente como excees. Uma boa prtica de programao exige que exista um tratamento de excees em todos os pontos mais sensveis do cdigo. Inseres e atualizaes no banco de dados so exemplos de operaes que possivelmente podem retornar algum erro para o usurio. A recomendao envolver este cdigo em um bloco de tratamento de exceo e executar uma operao de rollback (desfazer as alteraes no banco de dados) caso algum erro seja encontrado. Ao utilizar tratamento de excees, tambm possvel criar mensagens mais significativas para reportar a exceo ao usurio. Dessa forma, faz mais sentido exibir a mensagem Ocorreu um

erro. Verifique os dados. ao invs de An error occurred. Access violation at address 004068EC.. Estes tipos de mensagens em ingls tcnico geralmente so desconhecidas para o usurio e no trazem nenhum tipo de informao para auxili-lo.

Atualizao do sistema A cada atualizao do sistema, normalmente necessrio substituir o executvel no computador do cliente, rodar scripts SQL e alterar parmetros de configurao. Sendo assim, preciso ir at o cliente e fazer todo o processo manualmente no computador local. Para evitar a viagem, uma alternativa realizar a atualizao remotamente atravs de softwares como o TeamViewer, LogMeIn ou VNC. Porm, bastante inconveniente quando h dezenas ou at centenas de computadores para serem atualizados. Se a atualizao for feita em um computador por vez, pode demorar dias para terminar a atualizao em todos as mquinas. Portanto, ao invs de realizar a atualizao manualmente, crie um mdulo exclusivo para automatizar este processo. O objetivo permitir que o prprio sistema verifique novas verses, baixe o arquivo de atualizao e realize todo o processo automaticamente, sem a interveno do usurio. Observe que a atualizao automtica est presente na maioria dos softwares atuais, como navegadores e antivrus. Este tipo de mdulo no simples de ser desenvolvido, mas plenamente funcional e reduz o trabalho de atualizar vrios computadores simultaneamente.

Exemplo de tela de atualizao

Programao Orientada a Objetos No mundo da programao, a maioria dos mtodos e componentes so modelados em classes para proporcionar a reutilizao de cdigo e a manipulao de objetos. A princpio, trabalhar com classes e objetos pode ser relativamente complexo, mas sem dvida garante maior controle de tudo o que acontece dentro da aplicao. Atravs da Programao Orientada a Objetos (POO), possvel reaproveitar ou reduzir vrias linhas de cdigo por meio de tcnicas como abstrao, herana e polimorfismo. Alm disso, definir a visibilidade dos atributos de uma classe e criar mtodos privados para manipulao de valores permitem que a estrutura interna da aplicao no seja exposta a outros nveis. H muito o que se falar sobre Programao Orientada a Objetos, visto que o seu conceito bem abrangente diante do ponto de vista da Engenharia de Software.

Principais elementos da P.O.O. Durante a fase de projeto, a Programao Orientada a Objetos amplamente praticada por projetistas e analistas de sistemas atravs da linguagem UML para modelagem de dados. O Diagrama de Classes, por exemplo, fornece um grande detalhamento de informaes para simplificar a modelagem das classes e das tabelas do banco de dados. Em concluso, pode-se dizer que a utilizao da POO evita que o sistema sofra considerveis alteraes e adaptaes aps a implantao, reduzindo o tempo de desenvolvimento e minimizando os erros de implementao. Muito obrigado mais uma vez pela leitura! Um abrao a todos!

Dicas para o desenvolvimento de um software Parte 4


Postado por Andr Luis Celestino Publicado em Artigos, Desenvolvimento, Dicas

O quarto artigo sobre dicas para desenvolver um software funcional abrange alguns conceitos ligeiramente mais avanados. Aps as doze dicas abordadas nos trs primeiros artigos, este envolve aspectos relacionados ao aperfeioamento das funcionalidades de um sistema. Agradeo novamente a todos os leitores que esto acompanhando os artigos, e espero que de alguma forma essas dicas tenham agregado um pouco mais de conhecimento.

Normalizao

de

dados

Na maioria dos cursos relacionados a desenvolvimento de sistemas, comum encontrar uma disciplina que mencione a Normalizao de Dados, fundamental para a formao de analistas e programadores. Este assunto sugere uma srie de procedimentos aplicados modelagem de dados para garantir a boa estruturao de um banco de dados. Essa modelagem responsvel pela integridade, confiabilidade e desempenho das operaes realizadas nas tabelas. Alguns dos pontos mais importantes abordados pela normalizao de dados envolve a utilizao imprescindvel de chaves primrias, chaves estrangeiras, criao de tabelas intermedirias para relacionamentos muitos-para-muitos (N:N) e criao de tabelas para campos multivalorados, como e-mails e telefones. Alm de ser uma prtica essencial para o projeto de um sistema, a normalizao de dados tambm garante a motivao dos relacionamentos entre as tabelas e facilita futuras manutenes na estrutura. A modelagem do banco de dados de um sistema devem passar basicamente por trs formas normais da normalizao de dados, que consistem em eliminar campos repetitivos entre tabelas, impedir valores redundantes e relacionar as tabelas por meio de chaves estrangeiras. muito importante estudar a aplicar este conceito dentro do desenvolvimento de um sistema.

Consultas compostas Boa parte dos sistemas atuais possuem uma padronizao para consultas de dados, normalmente pelos campos mais comuns da tabela. Por exemplo, em um cadastro de clientes, a consulta pode ser realizada por nome, cidade ou CPF. No entanto, h situaes em que pode ser necessrio consultar clientes por endereo, telefone, estado, profisso ou estado civil. Ok, basta ento adicionar estes campos s opes de consulta, correto? Bem, uma alternativa, mas imagine que o usurio tambm queira pesquisar os clientes que moram no estado de So Paulo, so do sexo masculino e tambm trabalhem como motorista. Neste caso, a soluo criar uma consulta composta, que consiste em uma busca por vrios campos ao mesmo tempo. Uma ideia para implementar essa funcionalidade seria utilizar os mesmos campos de cadastro para a consulta de dados, ou seja, o usurio pode preencher quaisquer campos por quais deseja consultar, e ao clicar no boto de pesquisa o sistema verifica os campos preenchidos e concatena uma SQL internamente para enviar ao banco de dados. uma funcionalidade bem interessante, mas caso for utiliz-la, atente-se s clusulas where e and, e confira se a busca realmente corresponde ao que foi solicitado pelo usurio.

Exemplo de SQL Composta

Integrao com servios web Com o crescimento da internet e de recursos online, tornou-se comum a integrao de sistemas desktop com servios web para facilitar ou agilizar operaes. Um exemplo bem prtico o envio de arquivos de Nota Fiscal Eletrnica. Nos primrdios de sua utilizao, os usurios geravam um arquivo XML pelo sistema, acessavam outro aplicativo para envio do arquivo, validavam o XML e por fim imprimiam a DANFE. Todo este processo era trabalhoso e gerava dificuldades para os usurios. Felizmente, a integrao dos sistemas desktop com os chamados WebServices possibilitou que este procedimento fosse realizado diretamente pela aplicao principal, sem a interveno do usurio para manipular os arquivos XML. Alm deste exemplo, outros servios web tambm podem ser agregados aplicao, como consulta de endereos por CEP, mapas de localizao (Google Maps), feed de notcias e outros tipos de informaes online. Os desenvolvedores podem ainda disponibilizar um mdulo do sistema na web interligado com o sistema desktop, permitindo, por exemplo, que os usurios tenham acesso aos dados do sistema pela internet, sem necessariamente utilizarem o sistema desktop. A imagem abaixo ilustra o funcionamento do WebService da Serasa para consulta de CPF:

Exemplo de integrao com WebService (Clique para ampliar) Fonte: http://www.consultacpf.com/integracao.aspx

Cuidado com o que o seu cliente pede H muito que ser abordado neste ltimo item, por tratar-se de uma questo mais voltada para anlise do que desenvolvimento. Normalmente, os usurios que operam o sistema no dia-a-dia sentem necessidade de novos campos nas telas, botes para novas funcionalidades ou atalhos para agilizar as operaes. muito comum ouvirmos frases como: H possibilidade de colocar um botozinho aqui? Eu precisava de um campo aqui para digitar tal informao Preciso de uma tela nesse menu pra ficar mais fcil

claro, bons analistas e desenvolvedores devem prestar o mximo de suporte, visando suprir qualquer necessidade do cliente. Mas h casos em que preciso rejeitar a sugesto do cliente para garantir a integridade e simplicidade do software. Quando o cliente pede um novo campo na tela, deve-se fazer um estudo da real utilidade de sua incluso, e se este tambm ser til para outros clientes que operam o mesmo sistema. possvel tambm que o campo j exista, mas no de conhecimento do usurio. Neste ponto vale ressaltar a importncia dos treinamentos do sistema para os usurios, alm da capacitao da equipe de suporte para identificar esse tipo de situao. Uma simples orientao fornecida ao cliente pode evitar que a equipe de desenvolvimento adicione uma nova funcionalidade sem objetivo algum. Alm disso, adicionar um novo campo, boto ou funcionalidade no sistema pode comprometer o visual, trazer inconsistncias no cadastro ou causar redundncia de informaes. Analisar detalhadamente as sugestes de clientes sempre ser uma atividade essencial durante o ciclo de vida de um software.

Obrigado novamente pela ateno, leitores! At breve!

Dicas para o desenvolvimento de um software Parte 5


Postado por Andr Luis Celestino Publicado em Artigos, Desenvolvimento, Dicas

Alguns leitores do blog me perguntaram sobre a continuao dos artigos sobre boas prticas de desenvolvimento de software. Na verdade, a inteno inicial era elaborar apenas quatro artigos sobre este assunto, mas logo notei que no seriam suficientes para abranger todas as dicas. Agradeo a todos os leitores que acompanharam e divulgaram essa srie de artigos, me motivando a escrever os prximos. Bom, essa a quinta parte dessa srie, abordando mais algumas prticas avanadas de desenvolvimento. Voil!

Liberao de objetos da memria Quando um aplicativo iniciado, o sistema operacional se encarrega de alocar o espao necessrio na memria para a sua execuo. Esse espao varivel, e depende da quantidade de recursos que o aplicativo possui. Ao abrir uma tela do aplicativo, todos os campos de edio, botes e rtulos (labels) so criados na memria em runtime (tempo de execuo), e permanessem nela at que sejam liberados. O problema surge quando o desenvolvedor esquece ou deixa de liberar esses objetos, acumulando recursos desnecessrios na memria do computador. Por exemplo, supe-se que instanciamos um objeto chamado objCliente da classe Cliente na inicializao de um formulrio. Ao terminar de manipul-lo, necessrio desaloc-lo da memria, j que ele no estar mais em uso. Caso no o fizer, o objeto permanecer alocado na memria, muitas vezes sem o consenso do desenvolvedor. E mais: na prxima vez que o formulrio for inicializado, uma nova instncia do objeto ser criada em outro endereo de memria. Ento imagine: ao abrir o formulrio 10 vezes, teramos 10 objetos objCliente criados, ao passo de que somente um seria necessrio. por isso que alguns usurios reclamam que o aplicativo comea a ficar lento aps um tempo de uso. Cada linguagem de programao tem uma forma distinta de liberar objetos da memria. No Delphi, basta utilizar o comando FreeAndNil para essa finalidade:
var objeto: TClasse; begin objeto := TClasse.Create; try // operaes com o objeto finally FreeAndNil(objeto); // libera o objeto da memria end; end;

Criao de componentes Se o seu objetivo reduzir cdigo e padronizar a aplicao, criar componentes uma tima prtica. Suponha que em determinado projeto decidimos modificar os campos de texto da seguinte forma: ao receber o foco, ele mudar de cor o campo no pode possuir contedo em branco - ao sair do campo, se o valor for uma data, a aplicao deve valid-la Para que essas funcionalidades tenham efeito, necessrio codificar cada campo de texto em toda a aplicao, no ? Oras, por qu no criar um componente com essas caractersticas? Dessa forma, utilizaramos esse componente ao invs do campo de texto nativo da ferramenta e no precisaramos codificar cada um deles, j que as funcionalidades estariam implcitas no componente criado. Alm disso, se futuramente for necessrio adicionar uma caracterstica (por exemplo, trocar a fonte de texto), basta modificar o componente e a alterao ser refletida em todos as instncias do componente inseridas na aplicao. Quando o desenvolvedor cria vrios componentes personalizados, pode-ser dizer que ele est definindo um Framework de desenvolvimento.

Triggers

Stored

Procedures

Implementar algumas regras de negcio no banco de dados pode trazer grandes vantagens para a aplicao, tanto no sentido de automao de operaes como no desempenho. Na verdade, Triggers e Stored Procedures nunca deixaram de ser recursos essenciais no desenvolvimento de um software. Vou citar apenas uma das vantagens: em uma aplicao Cliente/Servidor ou Multicamadas, criar Triggers e Stored Procedures no banco de dados evita que vrias chamadas sejam feitas ao servidor. Imagine que, ao excluir um pedido, seja necessrio tambm excluir os itens do pedido (no sentido master/detail). Pela aplicao, faramos duas solicitaes ao banco de dados: uma para excluir os itens e outra pra excluir o pedido em questo, certo? Pois bem, se centralizarmos essa operao em uma Trigger no banco de dados, apenas uma solicitao ser feita, ou seja, a Trigger se encarregar de excluir os itens antes de excluir o pedido, tornando-se um processo automatizado. Para aplicaes de pequeno porte pode no surtir tanta diferena, mas em uma aplicao com vrios usurios conectados simultaneamente a vantagem notvel, inclusive pelo motivo de reduo de trfego na rede. S para efeito de conhecimento, segue o exemplo da criao de uma Trigger no Firebird:
CREATE OR ALTER TRIGGER EXCLUIR_PEDIDO FOR PEDIDOS ACTIVE BEFORE DELETE POSITION 0 AS BEGIN DELETE FROM ITENSPEDIDO WHERE NUMPEDIDO = OLD.NUMERO; END

Busca

por

fonema

Essa dica bem interessante, embora a implementao dessa funcionalidade seja complexa. Antes de continuar, vale lembrar que um fonema, grosso modo, a unidade de som produzida ao pronunciar uma determinada letra. Por exemplo, na lngua portuguesa, as letras i e y possuem o mesmo som (mesmo fonema), e isso causa alguns problemas na busca de dados em um aplicativo. Sabe por qu? Imagine que o sistema tenha vrios clientes cadastrados, e trs deles tenham o nome de rica, Erica e rika, respectivamente. Ao atender a ligao de uma dessas clientes, o

usurio solicita o nome, ouve, e digita Erica (sem acento) no campo de dados para localizar o registro. Obviamente, apenas um dos nomes aparecer na tela. Porm, a cliente que ligou a rika (com acento e com k)! J que o resultado no apareceu na busca, o usurio ir informar que ela no est cadastrada no sistema. Bom, a voc j viu, rsrs. Busca por fonema consiste em agrupar letras que tenham o mesmo som em uma mesma consulta. No exemplo acima, ao digitar Erica, os trs registos seriam exibidos na tela, j que o acento e os fonemas de c e k, neste caso, produzem o mesmo som. Como disse anteriormente, a implementao complexa e portanto leva muitos desenvolvedores a procurarem por solues j codificadas.

Por enquanto isso, pessoal! Obrigado mais uma vez pela visita!

Dicas para o desenvolvimento de um software Parte 6


Postado por Andr Luis Celestino Publicado em Artigos, Desenvolvimento, Dicas

Prezar pela usabilidade e funcionalidade do software sempre foi um aspecto importante a ser considerado. A sexta parte sobre dicas de desenvolvimento traz alguns conceitos mais bsicos em comparao com as outras partes dessa srie de artigos. As quatro dicas a seguir envolvem caractersticas visuais, mas que no deixam de ser importantes na usabilidade do software. Confira tambm as outras partes dessa srie no final deste artigo!

Dicas de tela As dicas de tela, tambm conhecidas como Hints, so textos que aparecem quando voc posiciona o cursor do mouse em um componente da tela, como um campo ou boto. Esses textos trazem uma breve definio da funo do componente, extremamente til para barras de ferramentas que possuem apenas imagens nos botes.

O problema que s vezes esses hints no esto disponveis. Eu j fui vtima de colocar o cursor em um boto e ficar um bom tempo esperando o hint aparecer, rsrs. Por isso, procure adicionar hints bem explicativos na maioria dos componentes visuais da tela. Uma dica dessas pode evitar que o usurio execute uma operao incorreta ou entre em contato com o suporte para questionar sobre a funcionalidade.

Exibio dos dados Quem j no visualizou uma Grid dessa forma?

na

Grid

Cortar informaes na Grid desconfortvel para o usurio, que normalmente precisa redimensionar as colunas para visualizar todo o contedo. Porm, qual a melhor soluo quando h vrias colunas para serem exibidas? Na verdade, h 3 solues. A primeira fixar o tamanho das colunas em tempo de projeto, de modo que todos os valores possveis da tabela sejam exibidos na ntegra. Em contrapartida, isso pode gerar a necessidade de uma barra de rolagem horizontal para visualizar todas as colunas. A segunda soluo criar uma funo que redimensione automaticamente as colunas em tempo de execuo com base no maior valor de cada campo. Portanto, os tamanhos sero variveis conforme os valores que forem exibidos na Grid. Assim como a soluo anterior, provavelmente ser necessrio ativar a barra de rolagem horizontal tambm. Enfim, a terceira soluo, que em minha opinio bem interessante, consiste em dividir o formulrio em duas abas: uma que exiba a Grid somente com as colunas que identifiquem o registro (como cdigo e nome, por exemplo) e ao clicar no registro, todos os dados so carregados em campos de texto na outra aba. Em outras palavras, em uma aba o usurio navega entre os registros e na outra aba ele visualiza os dados do registro selecionado.

Imagem de fundo da aplicao S para fazer um teste, crie um papel de parede verde fluorescente e coloque como imagem de fundo na sua aplicao. Eu aposto que em dois dias a maioria dos usurios iro marcar uma consulta com o oftalmologista, rsrs. Para os desenvolvedores que eventualmente rodam a aplicao pode no parecer to cansativo, mas, para os usurios que convivem com o sistema praticamente o dia todo, desagradvel. A dica utilizar cores leves dispensando grficos avanados, talvez apenas com o nome do sistema bem pequeno no canto da imagem.

Outra dica manter a imagem de fundo dinmica, ou seja, permitir que o prprio usurio selecione um arquivo no computador, assim como acontece com o papel de parede do Windows.

Ordem

de

tabulao

No primeiro artigo, mencionei a importncia da ordem de tabulao dos campos no tpico sobre facilidade de uso. Imagine que o usurio est no primeiro campo de uma tela e ao pressionar TAB o foco vai para o ltimo? Ruim, no ? Neste caso, nem possvel adivinhar a ordem infelizmente a soluo utilizar o mouse. Bom, eu mesmo devo assumir que muitas vezes j esqueci de ajustar a ordem de tabulao dos campos, rsrs. Portanto, aqui eu reforo essa dica: a tabulao deve ocorrer de cima para baixo sem pular campos, ao menos que estejam desabilitados ou sejam read-only. E sobre a questo de utilizar o ENTER ao invs do TAB? Bem, eis que chegamos a mais um dilema entre programadores Em minha opinio, o ENTER uma tecla de confirmao, e no de entrada de dados. Partindo deste raciocnio, eu sempre configuro o ENTER para simular o clique de um boto, confirmar uma mensagem ou selecionar um registro, enquanto o TAB avana entre os campos. Observe que a tecla TAB j possui essa funcionalidade de modo tradicional, utilizada em vrios outros sistemas, como o prprio Windows. Inclusive, para retroceder um campo, basta pressionar SHIFT + TAB, o que no possvel com o ENTER. Alm disso, reflita: no campo de observaes em uma tela de cadastro, o ENTER dever pular a linha ou avanar para o prximo campo? Bom, essa apenas minha opinio, ok?

Pessoal, obrigado pela ateno! Grande abrao a todos!

Dicas para o desenvolvimento de um software Parte 7


Postado por Andr Luis Celestino Publicado em Artigos, Desenvolvimento, Dicas

Opa! Estou de volta com a stima parte sobre dicas de desenvolvimento de software! Nesse artigo, continuo tratando de alguns pequenos ajustes no software, mas que fazem diferena para o usurio. Afinal, ele quem convive diariamente com o produto do nosso trabalho. Lembre-se de que um bom desenvolvimento certamente garante uma boa satisfao.

Submenus infinitos Imagine que o usurio tenha que acessar 5 submenus para emitir um relatrio?

At ele chegar no ltimo submenu j acabou o expediente, rsrs. Recomenda-se que um menu tenha, no mximo, 2 submenus. Mais do que isso pode atrapalhar o acesso tela ou funcionalidade, alm de confundir as opes em meio a tantos itens. comum encontrar tambm submenus desnecessrios, como a seleo da impressora para imprimir um relatrio. No meu ponto de vista, essa opo pode ser adequadamente includa na prpria tela de visualizao do relatrio ou no dilogo de impresso. Uma alternativa criar uma barra de ferramentas com botes de acesso para as telas mais utilizadas, evitando que o usurio tenha que percorrer vrios submenus para abrilas. Se essa barra de ferramentas for personalizvel ainda melhor, ou seja, o prprio usurio poder escolher os botes que ficaro na barra. muito til para sistemas que integram dois ou mais departamentos de uma empresa, j que em cada departamento as telas acessadas com mais frequncia so diferentes. Assim como comentei na primeira parte dessa srie de artigos, alguns softwares mais modernos apresentam menus do tipo Ribbon, parecidos com as verses mais recentes do Microsoft Office. Esse tipo de menu, por possuir abas e botes de opo, podem facilmente substituir os menus tradicionais de um sistema.

Formato da data e valores Essa clssica! H muitos softwares por a que exibem datas no formato americano (ms/dia/ano) e confundem a cabea do pobre cidado. Quando o usurio encontra a data 12/15/2013, alm de tentar interpret-la, normalmente ele toma uma atitude: reclama do sistema ou liga para o suporte. H um grande risco quando a data se parece comum, como por exemplo, o dia

03/06/2013 ser exibido como 06/03/2013. Embora esteja errada, o usurio pode interpret-la como o dia 06 de maro. Se o sistema trabalhar com histricos, movimentaes ou agendamentos, essas datas podem trazer srios problemas! Isso tambm vale para formatos de valores monetrios. Procure sempre manter o ponto como separador de milhares e a vrgula como separador decimal. Caso o banco de dados exija que o armazenamento seja no formato americano, cabe ao software realizar a converso necessria para gravar e exibir corretamente os valores. No Delphi, pode-se adicionar as linhas abaixo no arquivo DPROJ (ou DPR, nas verses antigas) para garantir essa padronizao em qualquer ambiente Windows em que o software for executado:
FormatSettings.ThousandSeparator FormatSettings.CurrencyFormat FormatSettings.DecimalSeparator FormatSettings.ShortDateFormat FormatSettings.DateSeparator := := := := := '.'; 2; ','; 'dd/mm/yyyy'; '/';

Mensagens em excesso

As mensagens acima so irnicas, mas na realidade alguns sistemas parecem fazer uma entrevista com o usurio: para qualquer operao existe uma tela de confirmao, at para as operaes mais rotineiras. Mensagens so necessrias sim, mas no em excesso. H operaes que so bvias, e no precisam ter uma mensagem de informao ou confirmao para serem realizadas. claro que isso no ir afetar o desempenho do software, mas j me deparei com muitos usurios que solicitaram a remoo de algumas mensagens pelo motivo de atrapalhar a usabilidade. Se a inteno exibir uma mensagem informativa, considere exibi-la no formulrio de forma esttica, utilizando uma Label, por exemplo. Mensagens de validao tambm podem ser substitudas por bales com hints (hint balloons), que, alm de no exigir interao do usurio (para pressionar o OK), tambm so bem modernos.

S pra complementar, j trabalhei com sistemas que no mostram nenhuma mensagem ao gravar um registro, apenas limpam os campos para a insero de novos dados. Se for uma tela que permite inseres sucessivas, essa prtica pode ser bem adequada. Basta orientar o usurio de que, se o sistema limpar o contedo dos campos ao gravar o registro, significa que ele foi gravado com sucesso.

Gravao

de

imagens

no

banco

de

dados

Nos fruns de programao comum encontrar dvidas relacionadas gravao de imagens em tabelas no banco de dados. Bom, antes de implementar essa funo no seu sistema, lembre-se de que os dados binrios das imagens so extensos e podem sobrecarregar o banco de dados. Para compreender melhor, acompanhe a prtica: imagine que voc tenha um cadastro de clientes que permita associar uma foto do cliente ao registro. Em um dos cadastros, o usurio carrega uma imagem no formato BMP de 2MB. Imagem grande, no ? Pois bem, ao grav-la no banco de dados, significa que estes 2MB sero inseridos na tabela. Portanto, se o usurio repetir essa operao para os prximos 100 clientes, o banco de dados armazenar 200MB s por causa das imagens! Alm de pesar o banco de dados, isso pode afetar o tempo de retorno dos dados ao consultar o registro, j que o banco de dados ir selecionar todo o conjunto binrio referente imagem e trazer para a aplicao. Considere tambm que no caso de uma aplicao cliente/servidor, essa consulta pode ainda congestionar o trfego na rede. Oras, basta controlar o tamanho da imagem a ser carregada, como por exemplo, somente imagens JPG de tamanho menor que 50KB! Certo, essa uma alternativa, mas mesmo assim ainda tenho trs argumentos: 1) No deixa de ser uma imagem, ento ela ter que ser gravada em um campo de um tipo especial na tabela, como o BLOB do Firebird; 2) Voc ter que implementar um cdigo especfico tanto para a gravao quanto para a leitura da imagem; 3) E o mais impactante: o usurio ter que utilizar um aplicativo externo para redimensionar e converter a imagem para que atenda os requisitos da sua aplicao. Para muitos, isso pode se tornar entendiante. O que voc sugere ento, infeliz? Na verdade, eu j me deparei com a necessidade de armazenar imagens no banco de dados e realmente fui infeliz, rsrs. A soluo que encontrei (na qual a soluo que

muitos desenvolvedores adotam) copiar a imagem para uma subpasta dentro do diretrio da aplicao. Por exemplo, pode-se criar uma pasta chamada Imagens e ao carregar uma foto do cliente na aplicao, voc simplesmente copia o arquivo para dentro dessa pasta ao invs de gravar a imagem no banco de dados. Para ler a imagem ainda mais simples: basta carregar o arquivo que est na pasta! Mas e se o arquivo j existir nessa pasta? Simples! Durante a cpia, voc pode renomear o arquivo conforme algum dado que identifique o cliente, como o prprio cdigo. Por exemplo, no cadastro do cliente n 10, o usurio ir carregar o arquivo Andre.jpg na aplicao, mas este arquivo ser salvo como 00010.jpg dentro da pasta de imagens. Bom, ento j deu pra perceber que pra fazer a leitura ser bem fcil, no ? Basta carregar a imagem que tenha o nome igual ao cdigo do cliente selecionado. No Delphi, possvel copiar o arquivo da seguinte forma:
var ImagemOrigem: string; ImagemDestino: string; begin // este arquivo pode ser selecionado com um TOpenDialog ImagemOrigem := 'C:\Clientes\Fotos\Andre.jpg'; // o nome da imagem de destino ser "00010.jpg" ImagemDestino := 'C:\Aplicativo\Imagens\' + CodigoCliente + '.jpg'; CopyFile(PChar(ImagemOrigem), PChar(ImagemDestino), False); end;

E por fim, para carregar:


Image1.Picture.LoadFromFile('C:\Aplicativo\Imagens\' + CodigoCliente + '.jpg');

Pessoal, caso queiram sugerir ideias ou discutir algo, deixe um comentrio ou entre em contato. Obrigado novamente!

Dicas para o desenvolvimento de um software Parte 8


Postado por Andr Luis Celestino Publicado em Artigos, Desenvolvimento, Dicas

A qualidade de software sempre foi um tema imensamente discutido na rea profissional e acadmica, alm de ser um dos maiores focos das empresas de desenvolvimento. Leitores, convido-os a conferir o oitavo artigo da srie sobre dicas para desenvolvimento de um software, no qual destaco mais quatro tpicos relevantes sobre o assunto. Aproveitando, gostaria tambm de agradecer os feedbacks!

Estatsticas Embora o software seja importante para armazenar informaes, interessante que ele tambm possua boas rotinas de minerao de dados (Data Mining) para compor estatsticas e apresentar dados histricos. Essas funcionalidades so bastante apreciadas pelos stakeholders principalmente por contribuir para a definio de estratgias de negcio da empresa. Entre essas informaes, podemos apresentar os clientes potenciais, produtos emergentes, clculo de variaes e faturamento por perodo, alm de grficos e relatrios bem elaborados. Bons profissionais ressaltam que um software deve trazer valor agregado ao negcio do cliente, e no apenas servir como um continer de informaes. Portanto, programe o seu software para ser capaz de transformar os dados armazenados em informaes estratgicas para o negcio. Mas vale ressaltar: para que isso seja possvel, o banco de dados deve estar bem modelado e com relacionamentos corretamente definidos. Caso contrrio, os dados levaro uma eternidade para serem compostos e exibidos, ou, no pior dos casos, no ser possvel interligar as tabelas de modo a trazer dados relacionados consulta solicitada. Apenas para efeito de conhecimento, este conjunto de procedimentos em um software est intimamente ligado a conceitos na rea de negcios, como Business Intelligence, OLAP, ETL e Data Warehouse. Vale a pena conhecer estes conceitos e a sua importncia no apoio tomada de deciso do cliente.

Formulrios integrados Vamos supor que, aps aplicar a normalizao de dados, voc criou um cadastro de cidades no software com o objetivo de registrar as cidades utilizadas por outras tabelas, como clientes, fornecedores e funcionrios. Assim sendo, no cadastro de clientes, por exemplo, haver uma lista de opes (combobox) para que o usurio selecione a cidade do cliente, correto? Pois bem, imagine que o usurio est preenchendo os dados de um novo cliente e ao selecionar a cidade ops, a cidade no est cadastrada! Como so telas diferentes, o usurio ter que:

Fechar a tela de cadastro de clientes; Abrir a tela de cadastro de cidades; Cadastrar a cidade; Voltar na tela de clientes;

Preencher os dados novamente.

Chato, no? Para simplificar este procedimento, procure integrar os cadastros, adicionando um boto prximo ao campo para abrir a tela quando necessrio. No exemplo acima, adicionaramos um atalho ao lado do campo Cidade, permitindo o cadastro de uma nova cidade sem necessariamente sair do cadastro de clientes.

Opcionalmente, para manter o visual mais enxuto, muitos desenvolvedores adicionam essa opo na prpria combobox, conforme a imagem abaixo:

Porm, atente-se que se houver muitas cidades cadastradas pode no ser vivel exibi-las em uma lista de opes, j que, alm da demora para carregar todas as cidades na lista, levaria um tempo para o usurio encontrar a cidade desejada. Uma alternativa abrir uma tela de pesquisa ao invs de utilizar uma lista, de modo que o usurio possa procurar a cidade diretamente pelo nome. Essa opo fica ainda mais interessante quando h uma tecla de atalho para abrir a tela de pesquisa, como uma das teclas de funo (F1 a F12). claro, essa dica vale para qualquer situao que envolva relacionamento entre tabelas.

Validaes Uma validao a funo de evitar que um dado invlido, inconsistente ou incorreto seja processado ou gravado no banco de dados. Considere a validao como um firewall que analisa os dados digitados pelo usurio: se alguma informao no estiver condizente com os padres ou regras do sistema, ento no processada. Quanto mais validaes voc programar no software, maior ser o nvel de confiabilidade.

Para exemplificar, imagine uma regra de negcio que envolva perodos de vigncia sobre um determinado requisito funcional. O perodo de vigncia

exige que a data de incio de um registro deve ser imediatamente a sequncia da data de trmino do registro anterior. Por exemplo, se a data de trmino for 20/07/2013, a data de incio do registro seguinte deve ser 21/07/2013. Alm disso, no permitida a sobreposio de datas, ou seja, dois registros diferentes no podem compreender o mesmo perodo. Para controlar a complexidade dessa regra de negcio, imprescindvel que haja uma validao de datas a cada novo registro inserido, evitando que perodos incorretos sejam armazenados na tabela. A validao ter que comparar as datas para encontrar possveis sobreposies e identificar furos entre vigncias de dois registros consecutivos. Tradicionalmente, a implementao pode ser uma funo que retorne um valor booleano como resultado dessas verificaes. Validaes geralmente so realizadas antes da insero do registro de modo que, se os dados no estiverem corretos, a aplicao cancele a operao em transao e permita que o usurio corrija os dados. Porm, existem ainda outras validaes que dizem respeito ao comportamento dos controles na tela, como a quantidade de caracteres permitida em um componente ou campos que obrigatoriamente devem aceitar somente nmeros. E volto a repetir: quanto mais voc cobrir o sistema com validaes, menos haver brechas para falhas, garantindo confiabilidade e integridade dos dados armazenados.

Testes, testes a mais testes! E por falar em validaes, necessrio test-las, concorda? Talvez essa seja uma das fases mais importantes no desenvolvimento de um software: testar as funcionalidades, validaes e operaes de forma intensa, desafiando o seu prprio software a manipular corretamente cada caminho de execuo. Teste de software pode ser definido como o acompanhamento da execuo de um software em um ambiente controlado para verificar se as sadas e o desempenho correspondem ao esperado.

Acredito que voc j tenha recebido algum erro reportado pelo usurio e logo pensou: Caramba, eu testei essa tela vrias vezes, como esse erro aconteceu?. Isso natural. A causa deste problema que ns, desenvolvedores, temos um probleminha conhecido como vcio de programao. Esse vcio faz com que nossos testes sejam bvios, uma vez que, como ns mesmos fizemos a programao, j conhecemos o comportamento do software e no testamos todas as condies que podem ocorrer. Em outras palavras, o desenvolvedor no consegue pensar com a cabea do usurio, ao menos que ele j tenha experincia com testes ou realmente saiba interpretar o papel de quem est utilizando o software. Para contornar esse tipo de vcio, desenvolvedores autnomos colocam uma pessoa no relacionada rea desenvolvimento para testar o software. Alm de identificar os erros, o desenvolvedor pode ainda observar as dvidas que surgem quando um novo usurio comea a utilizar o sistema pelas primeiras vezes. J no mbito de empresas de desenvolvimento, h outras solues mais slidas:

Contratar analistas de testes para elaborar roteiros que descrevem as possveis condies que podem ocorrer na tela ou no mdulo desenvolvido. Dessa forma, estes analistas podem cobrir as possibilidades de falhas a partir do conhecimento que j tm do sistema e das tcnicas de elaborao de testes; Orientar os desenvolvedores a implementar testes automatizados para cobrir o cdigo-fonte. Os testes automatizados so bastante teis para executar uma bateria de testes pr-definidos de modo rpido e sequencial, sem a interveno de um usurio para a entrada de dados. Uma vez implementados os testes, a vantagem a possibilidade de execut-los sempre quando a unidade de cdigo for modificada.

H vrios frameworks funcionais para apoiar desenvolvedores na criao de testes automatizados, como o DUnit para Delphi e o JUnit para Java, assim como outras ferramentas especializadas, como o TestComplete, TestLink e o Mantis. Pessoal, hoje fico por aqui. Agradeo mais uma vez pela visita!

Dicas para o desenvolvimento de um software Parte 9


Postado por Andr Luis Celestino Publicado em Artigos, Desenvolvimento, Dicas

Ol, leitores! Nos artigos anteriores sobre dicas de desenvolvimento, foquei bastante em aspectos tcnicos, visuais e comportamentais de um software. Neste artigo, vou abordar assuntos mais conceituais que fazem parte da minha paixo por TI: Engenharia e Arquitetura de Software. A partir do momento que tomei conhecimento e comecei a praticar os conceitos citados neste artigo, notei uma grande diferena na minha produtividade. Provavelmente estes conceitos no sero novidade para muitos, mas interessante deix-los registrados aqui no SubRotina como parte dessa srie de artigos.

Design

Patterns

Os Design Patterns, ou Padres de Projeto, como so conhecidos, so conceitos ou modelos orientados a objetos visando solucionar problemas no desenvolvimento de softwares. Estes padres possuem finalidades particulares que podem ser aplicadas para controlar a estrutura, a criao e o comportamento das classes e dos objetos em uma aplicao. Dependendo da situao em que esses projetos forem aplicados, possvel notar uma reduo considervel no tamanho do software em virtude da reutilizao de cdigo-fonte. Este ano, por exemplo, acompanhei a implementao dos padres de projeto Strategy, Observer, Builder e Factory Method em um projeto na empresa em que trabalho e pude observar as vantagens que estes padres trouxeram ao cdigo-fonte, bem como a facilidade para compreender e documentar o software. Apesar de existir 23 padres de projeto, praticamente invivel implementar todos eles em uma nica soluo, afinal, utilizar padres de projeto sem um propsito uma m prtica. preciso haver um motivo real para a implementao, ou seja, uma situao em que se pode comprovar de que o padro de projeto ser uma soluo exequvel para o problema. Caso contrrio, a implementao pode aumentar a complexidade do cdigofonte e afetar tambm o desempenho da aplicao. Uma das dvidas mais frequentes relacionadas a padres de projeto saber onde, quando e como utiliz-los. Em primeiro lugar, o engenheiro de software deve ter slidos conhecimentos em programao orientada a objetos e um bom nvel de abstrao. A orientao a objeto a base essencial para compreender os padres de projeto. Em segundo lugar, necessrio conhecer o objetivo principal de cada padro de projeto para que seja possvel fazer um estudo da viabilidade buscando solucionar um problema no software. Porm, mesmo com esse conhecimento tcnico, comum alguns engenheiros no conseguirem identificar as situaes ou os mdulos que devem receber a implementao dos padres. Portanto, em terceiro lugar, o profissional tambm deve ter um domnio satisfatrio da regra de negcio do cliente. A consolidao de todas essas experincias o que permite a seleo e a aplicao consciente dos padres de projeto no desenvolvimento do software.

Padro

de

arquitetura

Um bom software deve proporcionar flexibilidade e facilidade de manuteno. So inmeros os casos de softwares que foram desenvolvidos sem uma estrutura bem definida e, aps algum tempo, apresentaram complicaes nas atividades de manuteno. Por conta disso, os padres de arquitetura so modelos que surgiram para definir a estrutura do software visando no somente a facilidade da manuteno, mas tambm outros aspectos, como a modularizao, desempenho, agilidade no build e a diviso de responsabilidades em camadas. S para efeito de conhecimento, j publiquei dois artigos aqui no SubRotina sobre o

MVC (Model-View-Controller), um dos padres de arquitetura disponveis no mercado no qual me identifiquei bastante. Alm do MVC, h tambm outros padres populares, como o MVP (Model-View-Presenter) e o MVVM (Model-View-View-Model). Apesar da diferena nas nomenclaturas, a ideia central desses trs padres de arquitetura basicamente a mesma: separar a lgica e a apresentao dos dados em camadas (ou nveis) diferentes. Enquanto a camada Model representa a modelagem dos dados (classes, mtodos, persistncia), a camada View responsvel por exibir estes dados ao usurio. Por fim, a camada intermediria, diferente para cada padro (Controller, Presenter ou View-Model), tem a funo de gerenciar a comunicao entre a Model e a View. Deixo aqui a minha recomendao: procurem estudar e conhecer melhor sobre estes padres de arquitetura. Os conceitos so bastante interessantes e a implementao definitivamente traz bons resultados!

Clean Uma vez li a seguinte frase em um frum Cdigo ruim no ruim, apenas mal compreendido.

de

Code programao:

Francamente, no concordo com essa frase. Se todos os programadores pensarem dessa forma, teremos tanto cdigo ruim nos softwares que, em certo momento, ser impossvel compreend-los. Analogicamente, o mesmo que misturar um ingrediente vencido na receita de um bolo: o sabor no ser o mesmo, alm do risco de fazer mal sade. Que analogia sem sentido, no? Rsrs Para evitar o cdigo ruim, existe um conceito conhecido como Clean Code. Em linhas gerais, como o prprio nome sugere, Clean Code significa cdigo limpo e orienta a como escrever um cdigo estruturado, organizado e compreensvel. O conceito de Clean Code envolve vrias prticas que podem ser aplicadas por qualquer desenvolvedor para escrever um cdigo melhor. Entre essas prticas, h recomendaes sobre como definir nomes de funes, nomes de variveis, responsabilidades de mtodos (um mtodo deve ter uma e somente uma responsabilidade), indentao de cdigo, parmetros e at mesmo orientaes de como comentar (e tambm anotar) o cdigo-fonte.

H um timo livro escrito por Robert C. Martin chamado Clean Code A Handbook of Agile Software Craftsmanship que aborda todas essas prticas de forma bem detalhada e didtica, inclusive com bastantes exemplos. Ainda no tive a oportunidade de l-lo por completo, mas j consultei algumas pginas para estudar melhores formas de aprimorar alguns pontos do meu cdigo e me identifiquei com o contedo. Na verdade, depois de conhecer este livro e ler vrios artigos na internet sobre este assunto, pude perceber o quanto o comprometimento na escrita do cdigo-fonte importante para o desenvolvimento de software. Isso nos leva a refletir sobre aquela famosa frase: Voc responsvel pelo seu cdigo!.

Interfaces Se voc tem conhecimento ou experincia com Programao Orientao a Objetos, provavelmente j ouviu falar ou trabalhou com Interfaces. Na verdade, essa palavra tem uma ambiguidade na rea de TI e pode confundir o profissional que trabalha com programao. A palavra Interface pode ser usada para se referir ao visual de uma aplicao, um componente de hardware (por exemplo, interface de rede), como tambm um recurso na Orientao a Objetos, no qual o objetivo deste tpico. Uma Interface um recurso que nos permite determinar comportamentos em comum entre classes que a implementam. Por meio de sua utilizao, possvel estabelecer um padro na implementao de mtodos entre classes como se houvesse um tipo de contrato. Em outras palavras, as classes que implementam uma determinada Interface deve obedecer todos os mtodos assinados por ela, garantindo um nvel adequado de padronizao. J sei, ficou complicado, no ? Vamos para um exemplo terico!

Suponha que criamos uma Interface e definimos duas assinaturas de mtodos que sero utilizados no formulrio de clientes: DescontarValor e ValidarDocumento. Vale ressaltar que na Interface no h implementao destes mtodos, apenas a assinatura. Pois bem, em seguida, criamos as classes ClienteFisico e ClienteJuridico que implementam a Interface que acabamos de criar. Por conveno, essas duas classes devem obrigatoriamente implementar os mtodos DescontarValor e ValidarDocumento, j que elas possuem um contrato com a Interface. Porm, como as classes so diferentes, a implementao destes mtodos ser diferente para cada uma delas. Para a pessoa fsica, o desconto do valor ser de 2% e a validao do documento dever ocorrer pelo CPF da pessoa. Por outro lado, para a pessoa jurdica, o desconto ser de 4% e a validao ir verificar a veracidade do CNPJ da empresa. Mesmo que sejam finalidades diferentes, os nomes dos mtodos so os mesmos e a implementao obrigatria. Se futuramente for necessrio incluir um novo mtodo na Interface, como, por exemplo, VerificarCredito, este dever ser codificado em cada classe que implementar a Interface. Bacana, no? As vantagens de se utilizar Interfaces se resumem essencialmente na organizao e nivelamento de classes, na reutilizao de componentes do software e na facilidade de manuteno (em virtude da flexibilidade). O conceito de Interfaces utilizado com bastante frequncia na implementao de Design Patterns e de padres de arquitetura, portanto, muito importante conhec-lo. Assim como disse em outro artigo, estes conceitos esto estritamente ligados um ao outro, o que facilita a compreenso e expande a linha de raciocnio para profissionais que trabalham com orientao a objetos.

Agradeo novamente pela visita, leitores! Abrao!

Das könnte Ihnen auch gefallen