revista programar - n24

Upload: sandro-luis-vieira

Post on 29-May-2018

228 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/9/2019 Revista Programar - n24

    1/26

  • 8/9/2019 Revista Programar - n24

    2/26

    editorial

    ndice

    3

    4

    5

    10

    12

    19

    notcias/links

    a tua pgina

    tema de capa- Introduo a Bases deDados para Objectos

    a programar- Padres de DesenhoProjectos Corporativos- LUA - Linguagem deProgramao - Parte IV- Introduo ao WindowsC o m m u n i c a t i o nFoundation

    equipa PROGRAMAR

    coordenadoresFernando MartinsJoel RamosPedro Abreu

    editorAntnio Silva

    capaSrgio Alves

    redaco

    Augusto ManzanoJoo BrandoJoo DiasSrgio Lopes

    equipa de revisoBruno OliveiraFernando MartinsJos OliveiraLiliana BaptistaMiguel Rentes

    Srgio Lopes

    [email protected]

    websitewww.revista-programar.info

    issn1647-0710

    Os meus trs anos...

    com imensa pena que me despeo de todos os leitores desta revista. Esta foi a ltima

    edio na qual participei como coordenador da Revista PROGRAMAR.

    Foram 3 anos de experincias. Desde o convite inicial do Srgio Santos - altura, ocoordenador - para editor, passagem ara coordenador adjunto e depois acoordenao conjunta com o Pedro Abreu.

    Foram 3 anos de experimentao. Lembro-me de experimentar vrios modelos decoordenao. Desde o cada um faz o que pode, passando pelo melhor algum,quem tiver tempo, rever este artigo at chegar ao actual modelo que temos umaequipa de reviso fixa e com um responsvel definido e um artista convidado em cadaedio, alm dos autores que se mantm uma equipa dinmica e de uma equipa dedivulgao. Lembro-me ainda da experimentao de vrios programas e das pequenas

    alteraes que o design da revista foi sofrendo - embora nunca uma grandereestruturao.

    Foram 3 anos de contactos. Desde o Srgio Santos, o Miguel Pais e o Pedro Abreu (osdois ltimos, tive o prazer de finalmente os conhecer pessoalmente o ano passado) actual equipa formada pelo Antnio Silva e pelo Fernando Martins (mantendo-se aindao Pedro Abreu tambm), passando pelos vrios designers das nossas capas, como oDaniel Correia, o Jos Fontainhas e o Srgio Alves, entre outros, e ainda das dezenas deautores com os quais tive o prazer de contactar por email. No esquecendo ainda osemails que recebemos quase semanalmente a elogiar a revista.

    Foram ainda 3 anos de dores de cabea. Desde que a revista saa com um dia de atrasoat ao dia em que uma edio saiu quase com um ms de diferena at ao momento

    em que fomos obrigados a mudar aperiodicidade. Ainda pelos autores que andeiatrs para conclurem os seus artigos a tempopois, ao contrrio do que possa parecer, nofim de escritos os artigos ainda h muito afazer na revista.

    Foram 3 anos de discusses. pode fazer-seisto, aquilo; isto pode ser melhorado; aquilo est mal... Um infinidade de discusses,gravadas na minha memria e algures entre o Portugal-a-Programar, o Messenger, oGMail e ainda num local que no sei onde, mas nos meus backups que incluam logs docanal de IRC.

    Foram ainda 3 anos de edies lanadas aps a meia-noite. Um facto curioso, que no me lembrar de momento de uma edio que tenha sido lanada antes dessa hora -parece que no mas h tanto que fazer nessa altura...

    Foram os meus 3 anos de Revista PROGRAMAR, nos quais atingi tanto o topo como ofundo. Foram 3 anos com a magnifica equipa que c continua e que se vai certificar quedaqui a 3 anos eu ainda leia editoriais - de preferncia melhor escritos que os meus - eque vai levar ainda mais longe e torn-la cada vez melhor.

    Foram 3 anos. Acabam aqui oficialmente, embora tencione manter-me na retaguardaa ajudar quando puder, e quando a minha vida pessoal assim o permitir.

    Foi um prazer.Joel Ramos

    Foram os meus 3 anos de

    Revista PROGRAMAR, nosquais atingi tanto o topocomo o fundo.

  • 8/9/2019 Revista Programar - n24

    3/26

    notcias/links

    Google tem novo sistema de indexaohttp://googleblog.blogspot.com/2010/06/our-new-

    search-index-caffeine.htmlA Google lanou um novo sistema de indexao,

    denominado Caffeine, e que segundo a empresa consegueuma eficcia 50% superior ao sistema anterior:

    Com o Caffeine, podemos analisar a Internet por partes eprocurar ou actualizar o nosso ndice de modo contnuo eglobal. medida que encontramos novas pginas ou novainformao em pginas existentes, podemos adicion-lasimediatamente ao ndice. Isso significa que quandoprocurar, vaiestar a faz-l o o m a i sp r x i m opossvel daverso maisrecente da

    i n f o r m a oque pretende - independentemente de quando e onde foipublicada.

    FCCN muda regras de atribuio de dominiosh t t p : / / w i n d o w s . m i c r o s o f t . c o m / p t -

    PT/windows7/products/homeEntre as alteraes destacam-se a descida de 50% dos

    nos custos anuais que as entidades especilaizadas no registode endereos tm, e tambm a possiblidade de indivduos eempresas venderem endereos que esto na sua posse.. Noentanto ainda no foi desta que os endereos .pt foramliberalizados. Ao no liberalizar o registo de endereos, as

    autoridades portuguesas optam por uma posiopreventiva, que evita os litgios causados pela usurpao deendereos por pessoas ou entidades que no so aslegtimas proprietrias das marcas ou denominaescomerciais, todavia na UE apenas Portugal e Malta aindano liberarizaram o registo de endereos.

    IE6 abaixo dos 5% de quota de mercado nos EUAO browser, que at a prpria Microsoft tem vindo a

    tentar matar, baixou para 4,7% em Maio, acompanhadopelo irmo mais velho Internet Explorer 7 que tambmperdeu expressividade, para os 16,6%. Do conjunto debrowsers da Microsoft, apenas o IE8 ganhou quota,passando para os 30,5%.

    Ao mesmo tempo que o IE6 est a caminho dasepultura (um browser, recorde-se, de 2001 e cheio de falhasde segurana), o Google Chrome continua a crescer.O Firefox perdeu quota de mercado, e est, agora, com29,3%, enquanto que o Safari se manteve praticamente comos mesmo nmeros, nos 9,1%.

    Apesar de estas tendncias se verificaram tambm a nvelmundial, a verdade que o envelhecido Internet Explorer 6continua a ter muita expressividade em algumas zonas doglobo, especialmente nos pases em vias dedesenvolvimento.

    IOI 2010 - International Olympiad in Informaticshttp://www.ioi2010.org/index.shtmlhttp://www.dcc.fc.up.pt/oni/2010/A ser realizado este ano no Canad, ir tambm

    receber a participao portuguesa, composta pelos 4primeiros classificados na ONI (Olimpadas Nacionais deInformtica), e so eles: Rafael Schimassek, RodrigoGomes, David Ferreira e Francisco Huhn. Aps a suas boasprestaes na final nacional, temos a certeza que tudofaro para representar Portugal com orgulho, com brio ecom vontade de trazer resultados de sucesso nasOlimpadas Internacionais.

  • 8/9/2019 Revista Programar - n24

    4/26

    a tua pgina

    No te esqueas, esta pgina pode ser tua!

    http://www.revista-programar.info/front/yourpage

  • 8/9/2019 Revista Programar - n24

    5/26

    Introduo a Bases de Dadospara Objectos

    Quando falamos de bases de dados, os sistemas de Gestode Bases de Dados Relacionais (MySQL, SQLite, Postegres,DB2, etc) so sem dvida os sistemas que todos osprogramadores conhecem. Desde o seu aparecimento nosanos 70, e com o desenvolvimento da linguagem Structured

    Query Language (SQL), os sistemas relacionaisconquistaram uma posio dominante no mundo da gestode dados.

    Criados em torno do principio simples de que os dadospodem ser representados em pequenas entidades tabularesde 2 dimenses, compostas por linhas e colunas, que sodepois relacionadas entre si atravs de chavesidentificadoras, os sistemas relacionais mostraram, vezessem conta, o seu valor. Este um facto indiscutvel.

    Programao Orientada a Objectos (POO) tambm, e por

    mrito prprio, um sistema largamente adoptado e comprovas dadas no mercado de aplicaes. Com uma evoluoestvel e utilizado por uma fatia significativa deprogramadores, disponvel atravs de uma vasta seleco delinguagens de programao, com ferramentas, mtodos dedesenvolvimento e os mais diversos acessrios para a suacorrecta utilizao, POO um paradigma que veio para ficare triunfar. Este um facto indiscutvel.

    Com os dois factos anteriores, chegamos ao ponto onde comum a unio das duas reas, de um lado o poder dasbases de dados relacionais e de outro a fora daprogramao orientada a objectos. E talvez esta afirmaonos faa roar o grande problema: ligar um sistemadesenvolvido com base em objectos a um sistema que vtodos os dados como seres bi-dimensionais exige umesforo de tal forma significativo que, efectivamente, existeum fosso entre os dois paradigmas.

    Consideremos o desenvolvimento tpico de uma aplicaousando tecnologias que implementem os dois paradigmas:

    O arquitecto do sistema ir pegar nos requisitos que osclientes indicaram, atravs de uma qualquer mtodo,possivelmente UML, vai transformar esses requisitos num

    modelo de objectos que no s um monumento utilizao de herana, polimorfismo e os demais conceitos

    de POO, como ainda torna os requisitos do cliente algocativante de implementar. Munido desta obra prima, oarquitecto passa o fruto do seu trabalho ao administrador dabase de dados que o ir dissecar, transformar num diagramaEntidade-Relacionamento, ou outro qualquer que lhe sejafamiliar, rever relaes, criar tabelas e configurar um

    servidor que, em muitos casos, uma pea de tecnologia toafinada e sensvel como um relgio suo.

    Findo estas duas etapas, o arquitecto e o administradorrenem-se para perceber como que dois modelos, todiferentes podem comunicar como esperado e dessareunio nasce, tipicamente, uma classe para cada tabela, umconjunto de quatro procedimentos base por cada tabela (ocomum CRUD: create, retrieve, update e delete) e umaimensa framework de cdigo para gerir tudo isto.

    Mesmo usando ferramentas de apoio, como as tecnologias

    de Object/Relational Mapping (ORM), todo este processo moroso e complexo, e ainda no comemos a implementaro produto que o cliente pediu.

    Para tornar o processo mais simples, um dos lados poderiaser alterado. Ou alteramos a linguagem de programao oualteramos a base de dados. Se pensarmos em alterar alinguagem facilmente chegamos concluso que, qualquerque seja a linguagem, nunca ser perfeitamente compatvelcom a viso tabular das bases de dados relacionais. Poroutro lado, remover a base de dados poder ser uma boaopo: e se, de alguma forma, pudssemos ter uma base dedados que aceitasse os objectos que to teis nos so e noprecisasse de os transformar?

    Linguagem + Persistncia

    Sistemas de Bases de Dados para Objectos (OODBMS) sosistemas nos quais a representao da informao feitaatravs de objectos, tal como em POO, e aos quais adicionada a facilidade de acesso por linguagens Orientadasa Objectos (OO) atravs da adio de capacidades de POO.Estes sistemas esto sempre associados a uma linguagemPOO existente (ex: Java ou C#), fazendo uso da mesmarepresentao interna de um objecto, e guardamdirectamente os objectos que os programadores usam nodesenvolvimento. Embora ligadas a uma linguagemespecfica, muitos destes sistemas possuem mecanismos deconverso de modo a que uma aplicao feita numalinguagem possa ser convertida para outra linguagemdiferente mantendo todos os registos existentes na base dedado.

    Como tantas outras tecnologias, OODBMS surgem dainvestigao acadmica em meados dos anos 80, eprogridem at actualidade de forma algo atribulada. Sem

    grande adopo pelo mercado, vm ser criada umaorganizao que pretendia desenvolver um standard que

    tema de capa

  • 8/9/2019 Revista Programar - n24

    6/26

    promovesse a sua utilizao. Essa organizao, Object DataManagement Group (ODMG), veio a ser substituda pelaactual Object Management Group (OMG) que se torna assimna organizao responsvel por desenvolver e promover umstandard para a tecnologia de bases de dados para objectos.

    Neste momento, o OMG, pretende apresentar um standardque ajude o mercado de bases de dados para objectos, masembora um standard definitivo e oficialmente adoptadoainda no exista, do esforo surgiram vrias tecnologiasactualmente em uso, tais como as Queries Nativas usadasem vrios motores de bases de dados para objectos, ousistema LINQ da plataforma .Net.

    Vantagens

    Bases de dados orientadas a objectos so ideais em conjunto

    com linguagem OO porque eliminam qualquer processo deconverso para a persistncia dos dados. O modelo que oarquitecto do sistema desenvolveu ser exactamente omesmo que ser usado na base de dados, as relaes, osobjectos, os atributos, tudo se manter igual e para osprogramadores no h mais a necessidade de decorarestruturas de tabelas ou procedimentos de acesso, bastaenviar os objectos para o motor de bases de dados e rever osmesmos objectos quando necessrio se aplicar qualquerconverso. Isto acontece porque o motor usa exactamente omesmo modelo de dados que a linguagem de programao.

    Com o uso destas bases de dados ultrapassamos vriosproblemas:

    1. Relaes e objectos complexos. possvel guardarvrios objectos relacionados por herana ou composio ecom vrios nveis de complexidade sem qualquerinterveno do programador;

    2. No h duas linguagens (uma para a BD e uma paraa aplicao). H apenas uma linguagem comum quefunciona em todo o projecto. Menos linguagens traduzem-se em melhor desenvolvimento, facilidade de depurao ede eliminao de erros, necessidade de menoresconhecimentos que se podem transformar em custosmenores, etc.;

    3. Remoo do problema de Impedence Mismatch. Otempo perdido a mapear objectos para tabelas e osproblemas quando um objecto no relacionadodirectamente para uma tabela (ver ponto 1), completamente eliminado. Esta caracterstica ajuda naperformance final da aplicao;

    4. Existe apenas um modelo de dados. Como podemosver na introduo, dois modelos de dados distintos

    oferecem muitos problemas que aumentam a complexidadedo projecto ou os seus custos;

    5. No h necessidade de identificadores nicos paracada objecto, como existe para cada registo de uma tabelaatravs das chaves primrias, toda a identificao dosobjectos transparente ao programador.

    OODBMS so tambm sistemas excelentes para guardar

    informao com relaes e/ou representaes complexas,que iro tirar todo o partido da linguagem OO econsequentemente da facilidade de utilizao do motor bemcomo das optimizaes que os motores contmpossibilitando um nvel de performance superior ao dosRDBMS, tida por alguns autores como 10 a 1000 vezessuperior.

    Esta performance pode ser explicada, principalmente, pordois pontos:

    A falta de Impedence Mismatch, como mencionado

    acima; Optimizao para Traversal. Este o processo peloqual se percorre o grafo que representa as relaes dosnossos objectos, indo de n a n para obter os dados.

    Na seco da bibliografia so apresentados recursos onde oleitor pode aprofundar o tipo de benchmarks e os resultadoscomparativos entre OODBMS e RDBMS, e do acesso nativoque os OODBMS oferecem em detrimento de acesso comORMs e outras tcnicas para RDBMS. No entanto, qualquerbenchmark feito dependente da tarefa a testar e se emalguns pontos os OODBMS podem mostrar ganhossignificativos, noutros as diferenas sero negligenciveis ouat demonstrar perdas.

    Olhando para a globalidade dos valores, podemos aceitarque os OODBMS oferecem boas perspectivas deperformance quando comparados com outros mtodos deacesso a RDBMS e como regra geral devemos ter emateno o tipo de dados e se estamos ou no a trabalharcom objectos. Quanto mais simples for o tipo de dados,maiores podero ser as vantagens em usar um RDBMS eSQL, mas medida que a complexidade aumenta, avelocidade obtida com OODBMS vantajosa. Setrabalharmos com objectos no deveremos descartar os

    OODBMS.

    Cdigo/Exemplo

    Vamos desenvolver uma pequena aplicao de gesto decontactos usando um motor de bases de dados paraobjectos livre, disponibilizado sob a licena GPL, chamadoDB4O.

    Descrio: Pretendemos uma aplicao desktop para gerircontactos pessoais. Dever ser possvel guardar nomes,

    nmeros de telefone, moradas e datas de nascimento doscontactos. Precisamos de fazer algumas pesquisas pelo que

    tema de capa

  • 8/9/2019 Revista Programar - n24

    7/26

    valorizado a existncia de um sistema simples que permitaencontrar os contactos. Dever ser possvel guardar a listade contactos para uso futuro. (O cdigo completo estardisponvel para download em: http://wiki.sergio-lopes.org/index.php?n=Projects.AgendaDB4O)

    Com a descrio anterior criamos duas classes: a nossaclasse principal, Agenda, responsvel por fornecer todos osmtodos de uma agenda digital, e a classe que representa osnossos contactos, Contacto.

    Transformando em cdigo:

    A classe que nos interessa e que regista os dados a classeAgenda. O nosso motor est acessvel atravs de umainstncia de ObjectContainer. Esta classe oferece osmtodos base para guardar, remover e pesquisar objectoguardados e o nosso ponto de ligao com o motor. Comopodem reparar um objecto Java, no um mtodo para

    injectar SQL a ser executado num servidor.

    Neste exemplo estamos a usar uma base de dadosrepresentada por um ficheiro. Seria possvel usar umservidor remoto e aceder por rede, no entanto, parasimplificar o cdigo e porque apenas uma apresentao,ser usado o acesso embutido e um ficheiro local.

    Estamos tambm a usar o motor como parte da nossaaplicao, ele executar enquanto a aplicao estiver abertae terminar quando a aplicao fechar. Todos os parmetrosde configurao so os de omisso. Se o ficheiro no existirser criado, se existir sero usados os dados j guardados.

    Ao abrirmos a base de dados obtemos a instncia deObjectContainer que precisamos para trabalhar os nossosdados.

    E chegamos ao primeiro mtodo que nos dar controlosobre os dados, o mtodo store permite guardar ouactualizar o nosso objecto. Se o objecto novo ento motorvai inserir o objecto, se um objecto que j existe na base dedados e foi modificado, ento o motor vai actualizar osdados na base de dados. A par com o mtodo store, temostambm o mtodo delete, que como seria de esperarpermite remover o objecto que passado como parmetro.

    public class Contacto {

    privatelong id; privateString nome;

    privateString apelido; privateString dataNascimento; privateString telefone; privateString telemovel; privateString endereco; privateString codigoPostal; privateString localidade;

    publicContacto() { //DO NOTHING

    }

    publicContacto(String nome,String apelido, String dataNascimento, String telefone, Stringtelemovel, String endereco, String codigoPostal, Stringlocalidade) {

    this.nome = nome; this.apelido = apelido; this.dataNascimento =dataNascimento; this.telefone = telefone;

    this

    .telemovel = telemovel; this.endereco = endereco; this.codigoPostal =codigoPostal; this.localidade = localidade;

    id = hashCode();}

    //Restantes getters, setters,equals e hashCode

    (...)}

    public class Agenda { private ObjectContainer db; //

  • 8/9/2019 Revista Programar - n24

    8/26

    Estes mtodos mostram uma vantagem no uso deste tipo

    de motores de bases de dados. Neste caso o programadorno precisa de saber SQL ou outra linguagem especial paramanipulao de dados, lembrem-se: o motor est a guardaros nosso objectos Java e est ligado nossa linguagem deprogramao Java.

    Podemos usar directamente a linguagem para a pesquisa dedados e dentro do mtodo de pesquisa podemos colocar algica que precisarmos para determinar se o objecto que nos mostrado o que queremos ou no.

    O motor vai executar o mtodo match para os objectos

    existentes e se o mtodo devolver true coloca o objecto emquesto numa lista que nos devolvida no fim. Essa listacontm todos os objectos que o algoritmo de pesquisaidentificou.

    Este tipo de pesquisas chamado de native queries, oupesquisas nativas, porque faz uso directo da linguagem deprogramao que estamos a usar. Existem outros mtodosque veremos mais a diante.

    Alm das pesquisas nativas existem tambm as queries byexample, ou pesquisas por comparao, e pesquisasespeciais que fazem uso da definio da classe para obterresultados. As pesquisas por comparao recebem umobjecto do mesmo tipo do que pretendemos pesquisar, comos campos que queremos usar na comparao preenchidos,e devolve objectos que sejam similares. Por exemplo, sequisssemos procurar todos os contactos com o nomeJoo, seria necessrio cria um objecto do tipo Contacto,colocar o nome que pretendemos pesquisar e fornecer esseobjecto ao motor. Depois de terminada a pesquisa iramosreceber uma lista com todos os contactos que tinham Joono atributo nome.

    As pesquisas especiais podero ser dependentes do motorde bases de dados que estamos a usar, neste caso o DB4Ooferece um mecanismo que nos permite obter todos osobjectos de uma determinada classe. O mtodo seguintedevolve todos os objectos do tipo Contacto que estejamguardados na bases de dados.

    E com este exemplo simples conseguimos criar todo osistema de persistncia, tudo isto com dois mtodos e um ououtro mecanismo de pesquisa. Usmos um mtodo paraguardar e actualizar dados, store, um para remover, delete,uma pesquisa nativa que faz uso da linguagem Java, e ummtodo de pesquisa especial por classe. O restante cdigo,que pode ser visto nos ficheiros do artigo, no maiscobertura de acar para criar uma interface e oferecer

    alguns botes com cones agradveis.

    publicvoidadicionarContacto(Contactocontacto) {

    db.store(contacto);}

    publicvoidremoverContacto(Contactocontacto) {

    db.delete(contacto);}

    publicvoidactualizarContacto(Contacto contacto){

    db.store(contacto);}

    publicList pesquisar(finalString termo) { return db.query(newPredicate() {

    publicbooleanmatch(Contactocontacto) { if(contacto.getApelido().contains(termo)|| contacto.getNome().contains(termo)||contacto.getLocalidade().contains(termo)||contacto.getEndereco().contains(termo)||contacto.getNome().contains(termo)

    ||contacto.getTelefone().equals(termo)||contacto.getTelemovel().equals(termo)

    ) { return true;

    }

    return false;}

    });}

    publicList queryByExample(){ //Numa situao real receberamoso objecto como parmetro do mtodo

    Contacto exemplo = newContacto();exemplo.setNome("Joo");

    return db.queryByExample(exemplo);}

    publicList

    listarTodosContactos() { return db.query(Contacto.class);}

    tema de capa

  • 8/9/2019 Revista Programar - n24

    9/26

    Formado no curso de Eng Informtica pela Escola Superior deTecnologia e Gesto de Leiria, actualmente formador eprogramador freelancer e empreendedor, especializado nodesenvolvimento de aplicaes WEB, desenvolvimento paraDesktop na plataforma Java e na rea de usabilidade. Tem umapaixo especial por tudo o que esteja relacionado com a tecnologia

    Java e um forte apoiante de software livre. Colabora com vriosprojectos de software livre no papel de programador, de tradutor oude qualquer tarefa onde possa ser til.

    Srgio Lopes

    Problemas

    Mas se isto to bom porque que no to usado nomercado de aplicaes?

    Esta uma pergunta difcil de responder. Naturalmente noexistem sistemas perfeitos, e as bases de dados paraobjectos possuem algumas desvantagens. Se olharmos parao factor humano, podemos apontar alguns pontos que,subjectivos em natureza, afectam a escolha da tecnologia:

    Falta de conhecimento. Como foi dito no incio doartigo, quase todos os programadores sabem o que soSGBDs, fazem parte das cadeiras base dos cursos deinformtica, quer na rea geral quer na rea deprogramao. O mesmo no acontece com OODBMs;

    Inercia e comodismo. mais simples usar o que jconhecemos;

    Medo da tecnologia. O desconhecimento datecnologia leva a que se tenha receio da sua utilizao.

    Medo empresarial. Muitas das empresas quedesenvolvem bases de dados para objectos so pequenas ecom pouca expresso ou publicidade no mercado, e issotorna provoca algum medo quando necessrio decidir oque usar. O risco de apostar numa empresa pequena parecemaior do que o risco de apostar, por exemplo, na Oracle.

    Nota: Estes pontos podem tambm ser vistos como notendo efeito ou at como vantagens uma vez que as pessoasenvolvidas respondem de modo diferente a cada situao

    apresentada.

    Se nos focarmos nos factores tcnicos deparamo-nos com: Falta de interoperabilidade. Em parte devido fraca

    adeso e falta de um standard competente (ver tambmponto seguinte);

    Forte ligao linguagem de programaoassociada. Implica que os dados presentes num OODBMS spossam ser acedidos de uma linguagem de programaoespecfica. Este problema pode ser eliminado em algunsmotores que oferecem ferramentas para converso domodelo de dados para outras linguagens;

    Falta de capacidade para pesquisas Ad-hoc. EmRDBMS possvel criar pesquisas que do origem a novastabelas atravs da juno de tabelas existentes (utilizaode JOINs, implcitos ou explcitos e criao de tabelas

    tema de capa

    temporrias). Este processo no possvel em OODBMS,no possvel juntar dois objectos de modo a que a suacombinao origine um novo objecto.

    Resumindo

    Este artigo teve como objectivo despertar interesse nossistemas de bases de dados para objectos e demonstrar umexemplo prtico da sua utilizao. No se pretende que oleitor considere o motor usado no exemplo como a nicaopo ou como a melhor opo. Existem muitos outrosmotores, para as mais variadas linguagens.

    Como qualquer outra tecnologia, esta oferece vantagens edesvantagens que devem, sempre, ser avaliadas luz doobjectivo do projecto. Os resultados de testes deperformance mostram que a tecnologia tem um bomdesempenho face s alternativas existentes e que deve ser

    considerada, especialmente quando lidamos com objectos elinguagens POO.

    Como objectivo principal, esperamos que o leitor tenhaficado sensibilizado para a existncia da tecnologia de basesde dados para objectos e que a considere aquando daavaliao de tecnologias para os projectos que desenvolve.

    Recursos consultados

    Barry & Associates. Consultado a 12/04/2010.http://www.service-architecture.com/index.html

    Obasanjo, Dare. Consultado a 12/04/2010.http://www.25hoursaday.com/WhyArentYouUsingAnOODBMS.html

    Stanford Linear Accelerator. 12/04/2010.http://www.slac.stanford.edu/BFROOT/www/Public/Computing/Databases/index.shtml

    Wikipedia. Consultado a 12/04/2010.http://en.wikipedia.org/wiki/Object_database

    Kratville, William C. Paper Selecting an RDBMS orOODBMS For use in a Distributed Voice Processing System.Webster University. 2, Julho 2000

    Benchmark db4o Open Source Object Database.

    http://www.db4o.com/s/benchmarkdb.aspxKopteff, Mikael. The Usage and Performance ofObject Databases compared with ORM tools in a Javaenvironment. Haaga-Helia University of Applied Sciencesand Floobs Ltd.

  • 8/9/2019 Revista Programar - n24

    10/26

    Trabalhando em Camadas

    A diviso da aplicao em camadas uma tcnica muito

    utilizada e difundida pelos projectistas de software e queusualmente pode ser til para projectos de mdio a grandeporte. A pensar na sua utilidade podemos destacar:

    Facilidade de implementao: Podemos escrever umservio que consumir dados oriundos de uma base dedados qualquer sem conhecernecessariamente a sua estrutura, assimcomo, podemos modificar a base dedados sem que o nosso servio sejaalterado;

    Reutilizao de cdigo: Uma vez construdo o nossoservio, o mesmo poder ser usado em alto nvel pelosclientes que o consumiro em outras aplicaes;

    Esses factores so relevantes mas no podemos esquecerque h tambm aspectos negativos na utilizao decamadas como:

    Alteraes em cascata: As camadas encapsulammuito do desenvolvimento, mas por vezes uma simplesalterao implica alteraes em toda a estrutura acoplada.Para o caso de uma adio de uma coluna no banco dedados a camada lgica seria alterada, o nosso serviotambm seria se o mesmo actuasse como Objecto Valorpara persistncia de informaes e por conseguinte osclientes consumidores tambm o seriam;

    Desempenho: Abstraco para uso em camadas temum custo no factor desempenho, que muitas vezes crucialpara determinadas reas do projecto;

    Para atenuar os pontos-contra desta tcnica convm:

    Usar Baixo Acoplamento: J que as camadas estaroaninhadas, melhor que seja somente pelos seus dados

    referentes, camadas acopladas em alto nvel dedependncia directa devero ter suas dependncias

    exportadas para outros projectos, dificultando assim areutilizao de cdigo e alteraes em cascata de mais doque se deve alterar;

    No ser um projectista purista: O modelo de projectodivido em camadas bom, mas no uma verdade

    absoluta. Negcios requerem desempenho e em reas ondea curva de desempenho cai necessrio buscar estruturasmenos custosas, um Proxy (Proxy GOF) uma boa sada sevoc precisa de instncias de memrias constantes de reascrticas, contudo, na maioria das vezes necessrio buscarestruturas de dados mais rpidas, e envolv-las em umAdaptador (Adapter GOF);

    Cabe salientar que padres, quaisquer que sejam,demonstram imperfeio no paradigma que utilizado, ouque o mesmo no completo, o que por si s gera umconceito mais abrangente que foge do escopo deste artigo.

    A estrutura mnima de funcionamento

    A estrutura mnima de funcionamento corresponde sseguintes camadas:

    Apresentao: Camada onde os dados so

    visualizados e alterados pelo usurio, nessa camada ficatoda a experincia do usurio com o que ele tem comosendo o software;

    Domnio: Modelo de negcio, aqui o local ideal paramantermos representaes lgicas do nosso modelo dedados e todo comportamento inerente a ele;

    Modelo de Dados: Aqui est nosso repositrio dedados, geralmente representao fsica de um banco dedados;

    Convm alertar para no confundir estas camadas base como difundido MVC, (Model, View, Controller). Uma estruturaMVC, se utilizada, estaria entre o Domnio (que correspondeao Model) e a Apresentao (correspondente a View) tendoo Controle da Aplicao (Controller) entre elas;

    plausvel que estas camadas podem ser estendidas deacordo com a necessidade sumria do projecto, masdevemos ter cuidado para no ferir a utilidade do modeloque estamos criando. Um bom medidor para tal seriaanalisar uma interface de apresentao totalmenteimprpria para o modelo original, como uma aplicao delinha de comando para um comrcio electrnico. Se aindaassim essa implementao parecer vivel no modelo actualtem um provvel indicador que a sua arquitectura vai bem.

    Padres de Desenho ParaProjectos Corporativos

    a programar

  • 8/9/2019 Revista Programar - n24

    11/26

    Organizao do Domnio:

    Ento, como organizar o modelo de dados? H algumasmaneiras das quais se destacam:

    Modelo Procedimental: De fcil implementao pelasua simplicidade, funciona bem quando se tem como acessouma estrutura fazendo o papel de gateway por cada tupla ouem estruturas desconectadas multi valoradas. O aspectonegativo que fcil ter cdigo duplicado a partir domomento que o cenrio passa a requerer lgica maiscomplexa. Essa duplicidade pode ser revista, mas aindaassim fcil ter cdigo virulento;

    Modelo de Domnio: A mudana de paradigma queos projectistas que saltaram para o mundo OO tanto falamparece nascer aqui. Em um modelo de domnio para umsistema de comrcio electrnico, por exemplo, seria

    pertinente ter classes para clientes, produtos, tributaes,arredondamentos, internacionalizao, etc. Esta abordagemsuper valora o modelo, contudo, acentua a curva deaprendizagem. comum ver projectistas trabalhando mesesem projectos pequenos ou mdios para habituar-se a talmodelo. Outra dificuldade inerente desse modelo apersistncia do seu modelo de domnio. Um modelo dedomnio rico tende a ser bem diferente do modelo relacionaldisposto na sua camada de dados, o que implica emcomplexidade na persistncia com gateways de dados e aprovvel necessidade de uso de uma camada adicional pararealizar o mapeamento objecto relacional;

    Mdulo tabela desconectado: Este um intermdioentre as duas maneiras. Organizar os dados em estruturasdesconectadas que representem tabelas alivia a repetiodesnecessria de escrita das operaes CRUD, alm do que,possibilita o uso dos conceitos OO neste mesmo modelo.Outro factor implicante que a maioria dos ambientes

    corporativos reluta em adoptar uma camada de dadosorientada a objectos devido a instabilidade e relativaimaturidade dos produtos comerciais para tal fim existentes,comparando os mesmos a bancos de dados relacionais.Alm disso vrias ferramentas comerciais tendem a utilizarconceitos de objectos e estruturas desconectadas, o que,facilita a utilizao deste modelo com tais ferramentas.Porm esse modelo s tem tais facilidades de uso emambientes projectados para isso, com frameworks ebibliotecas para trabalhar com tais estruturas;

    Cada modelo tem seus aspectos que o favorecem ou no.

    Cabe a ns projectistas perante o problema, a experincia daequipa, os factores de tempo, recursos e retorno provvelsobre o investimento, avaliar e escolher a melhor forma deorganizar a lgica de um projecto organizado em camadas.

    No ser extremista nas suas concepes, ouvir e valorizar asideias de cada um da sua equipa, estudar e contar com errose acertos do passado, o ajudar a no tropear no alvorooque entorna a arquitectura de software e ter projectosrealmente escalveis utilizando com sapincia cada recursotecnolgico disponvel.

    a programar

    Joo Dias de Carvalho Neto, Bacharelando em Cincia daComputao, apaixonado por arquitectura, Padres de Desenho

    Corporativos, Gerncia de equipas e projectos. Trabalha comoAnalista de Aplicaes em Pernambuco Brasil desde 2006.

    Joo Dias

  • 8/9/2019 Revista Programar - n24

    12/26

    No artigo anterior desta srie (terceiro artigo) foramapresentadas informaes sobre a utilizao dos recursos delaos de repetio. Desta forma, foram abordados os laos

    de repetio while, repeat e for. O tema central deste artigorelaciona-se ao uso de variveis indexadas, alm de abordaros temas sobre concatenaes e precedncias deoperadores.

    Concatenao

    A linguagem Lua efectua operaes de concatenaoatravs do operador .. (ponto, ponto) que foi indicado noprimeiro artigo desta srie.

    As operaes de concatenao so feitas exclusivamentecom dados do tipo carcter na formao de cadeias (strings).Se algum valor numrico for utilizado, a linguagem Luatratar automaticamente este valor como sendo umcarcter.

    O programa seguinte demonstra o uso do efeito deoperaes de concatenao:

    Escreva o cdigo do programa num editor de texto,gravando-o em seguida com o nome concatena.lua eexecute-o com a linha de comando lua 5.1 concatena.lua..

    O programa far a apresentao das cadeias: ProgramaoLua, 12 e Lua 2010 em trs linhas de texto distintas.

    LUA - Linguagem deProgramao - Parte 4

    Precedncias

    Nos artigos j publicados foram mostrados os conjuntos deoperadores usados em Lua, que so:

    Operadores aritmticos; Operadores relacionais; Operadores lgicos.

    Cabe ressaltar a ordem de precedncia de operadores que alinguagem Lua usa, sendo:

    (exponencial) not (negao) - (unrio negativo) (multiplicao) / (diviso) + (adio) (subtraco) .. (concatenao)

    < > = = == (relacionais) and (conjuno) or (disjuno)

    A alterao de precedncia pode ser feita com o uso dossmbolos de parnteses.

    Variveis Indexadas

    No primeiro artigo desta srie foi abordado o conceito sobrevariveis na forma mais ampla. Na ocasio foi comentadoque uma varivel caracteriza-se por ser uma regio dememria que tem por finalidade armazenar um determinadovalor por um determinado espao de tempo. E que umavarivel pode assumir dois comportamentos operacionaisem um programa: o comportamento de aco e ocomportamento de controlo.

    J foi tambm comentado o facto de que uma varivelarmazenar apenas um valor cada vez, o que restritivo,sendo esta a caracterstica de uma varivel simples. A

    restrio operacional de uma varivel simples pode seratenuada com o uso de variveis indexadas.

    As variveis indexadas so conhecidas por outras formas dereferncia, como: vectores, arranjos, tabelas, listas, variveissubscritas, matrizes, variveis compostas, variveisdimensionadas, entre outras denominaes encontradas.

    De forma sucinta, uma varivel indexada a definio deuma regio de memria com um s nome de identificao,que possibilita o armazenamento de mais de um valor numadeterminada regio de memria.

    O funcionamento de uma varivel indexada ocorre com adefinio do tamanho da dimenso que esta varivel

    -- inicio programa CONCATENA

    print("Linguagem " .. "Lua")

    print(1 .. 2) print("Lua " .. 2010)

    -- fim programa CONCATENA

    a programar

  • 8/9/2019 Revista Programar - n24

    13/26

    possuir.

    Na linguagem de programao Lua o uso de variveisindexadas ocorre por meio do uso de vectores associativos,onde o vector pode ser indexado por valores numricos, porcadeias de caracteres ou por qualquer valor dos demais tipos

    suportados pela linguagem. O nico valor que no se podeindexar em um vector o valor nil.

    Matrizes Unidimensionais

    Uma matriz representada por um nome de identificao epela definio da dimenso de seu tamanho entre ossmbolos de chavetas, tendo a seguinte sintaxe:

    O identificador tabela dever ser o nome da varivelindexada a se fazer uso, e os smbolos { } so os construtoresque criam e definem uma varivel indexada.

    Para se fazer uso de matrizes na linguagem de programaoLua necessrio declarar a tabela no incio do cdigo doprograma antes de us-la. Note que no necessrio indicara quantidade de elementos (valores) que seroarmazenados na tabela, pois a prpria linguagem efectuadinamicamente o ajuste da tabela medida em que ela utilizada.

    A ttulo de ilustrao, considere um programa que efectue aleitura de dez elementos de uma tabela denominada A. Emseguida, construa uma tabela denominada B, em que atabela B seja formada de acordo com a seguinte lei deformao: se o valor do ndice da tabela for par, o valor deveser multiplicado por 5; sendo o ndice da tabela mpar, deveser somado com 5. No final, mostrar os contedos dastabelas A e B. Este exemplo demonstra como fazer otratamento da condio do ndice.

    tabela = {}

    -- inicio programa TABELA 1

    A = {}B = {}io.write("Indice de Tabela")

    print()

    for I = 1, 10, 1doio.write("Informe o ",

    string.format("%2d", I), "o. valor: ")A[I] = io.read("*number")

    end

    for I = 1, 10, 1doR = I - 2 * math.floor(I / 2)

    if (R == 0) then

    Em seguida escreva o cdigo do programa num editor detexto, gravando-o com o nome tabela01.lua e execute-ocom a linha de comando lua 5.1 tabela01.lua.

    No programa so utilizados trs laos de repetio for: oprimeiro lao controla a entrada dos dados, o segundoverifica se cada elemento da matriz A par ou mpar e faz asoperaes, implicando os elementos calculados na matriz B,

    e o terceiro lao utilizado para apresentar as duasmatrizes.

    A definio das matrizes A e B foram feitas com o estilo maissimples de definio, sendo: A = {} e B = {}.

    No lao de processamento, utilizada a instruo if (R == 0)then, sendo a varivel R carregada com o resultado daequao I - 2 * math.floor(I / 2) que possibilita extrair oresultado do resto da diviso de inteiros do valor I sobre ovalor 2. Qualquer valor dividido por 2 que resultar zero par;

    se o resto for diferente de zero, o valor mpar.

    Na sequncia ser desenvolvido um programa que efectua aleitura de cinco elementos de uma tabela A. No final,apresenta o total da soma de todos os elementos que sejam mpares. Em relao ao primeiro exemplo este apresentauma diferena: o primeiro pedia para verificar se o ndice erapar ou mpar. Neste exemplo, solicitado que se analise acondio do elemento e no do ndice. J foi alertadoanteriormente para tomar cuidado e no confundirelemento com ndice. Veja o programa.

    B[I] = A[I] * 5 else

    B[I] = A[I] + 5 end end

    print() for I = 1, 10, 1do

    io.write("A[",string.format("%2d", I), "] = ")

    io.write(string.format("%4d",A[I]), " - ")

    io.write("B[",string.format("%2d", I), "] = ")

    io.write(string.format("%4d",B[I]), "\n") end

    -- fim programa TABELA 1

    a programar

  • 8/9/2019 Revista Programar - n24

    14/26

    Em seguida escreva o cdigo do programa num editor detexto, gravando-o com o nome tabela02.lua e execute-ocom a linha de comando lua 5.1 tabela02.lua.

    No lao de processamento, utilizada a instruo if (R = 0)then, para verificar se o elemento informado pelo teclado um valor mpar; sendo mpar, ele acumulado na varivelSOMA, que no final apresenta o somatrio de todos oselementos mpares digitados durante a execuo doprograma.

    Matrizes Bidimensionais

    Com o conhecimento adquirido possvel criar umprograma que efectua a leitura das notas escolares de oitoalunos, o clculo da mdia de cada aluno e no final,apresenta a mdia da classe, utilizando apenas tabelasunidimensionais. Porm, d algum trabalho, uma vez que necessrio manter um controlo de cada ndice em cadatabela para um mesmo aluno.

    Para facilitar o trabalho com estruturas deste porte, pode-se

    utilizar tabelas com mais de uma dimenso. A forma maiscomum a ser usada a tabela de duas dimenses.

    Tabelas com mais de duas dimenses so de uso menosfrequente, mas so fceis de se usar quando se conhece bemutilizao de tabelas com duas dimenses.

    Um aspecto a ser considerado no uso de tabela

    unidimensional o facto de estar em uso apenas uma nicainstruo de lao de repetio. Em relao s tabelas commais dimenses, deve ser utilizado o nmero de laos derepetio relativos ao tamanho de sua dimenso. Destaforma, uma tabela de duas dimenses deve ser controladacom dois laos de repetio, uma de trs dimenses deve sercontrolada por trs laos de repetio e assim por diante

    Uma tabela de duas dimenses aquela que possui umdeterminado nmero de colunas com um determinadonmero de linhas. Por exemplo, uma tabela com 5 linhas e 3colunas, uma tabela de 5x3.

    A definio de uma matriz de duas dimenses na linguagemde programao Lua deve ser feita seguindo a regra dedefinio seguinte:

    -- inicio programa TABELA 2

    A = {}io.write("Somatorio de elementos

    impares\n\n")

    for I = 1, 5, 1doio.write("Informe o ",

    string.format("%2d", I), "o. valor: ")A[I] = io.read("*number")

    end

    SOMA = 0 for I = 1, 5, 1do

    R = A[I] - 2 * math.floor(A[I] /2) if (R = 0) then

    SOMA = SOMA + A[I] end end

    print()io.write("A soma dos elementos

    impares equivale a: ")io.write(string.format("%4d", SOMA),

    "\n")

    -- fim do programa TABELA 2

    -- inicio programa TABELA 3

    A = {}io.write("Leitura e apresentacao de

    notas\n\n")

    for I = 1, 8, 1doA[I] = {}

    print()io.write("Entre notas do ",

    string.format("%2d", I), "o. aluno: ") print() for J = 1, 4, 1do

    io.write("Nota ",string.format("%2d", J), ": ")

    A[I][J] = io.read("*number") end end

    print()

    for I = 1, 8, 1do print()

    io.write("As notas do aluno ",string.format("%2d", I), " sao: ") for J = 1, 4, 1do

    io.write(string.format("%2d",J), ": ")

    io.write(string.format("%5.2f",A[I][J]), " ") end end print()

    -- fim programa TABELA 3

    a programar

  • 8/9/2019 Revista Programar - n24

    15/26

    Em seguida escreva o cdigo do programa num editor detexto, gravando-o com o nome tabela03.lua e execute-ocom a linha de comando lua 5.1 tabela03.lua.

    Tabelas com Listas

    O uso de variveis indexadas como listas de valores emlinguagem Lua pode ser feita com a sintaxe:

    A varivel DIA_SEMANA est formada com sete ndices. Sefor pedido o uso da posio 1 como DIA_SEMANA[1] serobtido o valor domingo, como pode ser indicado no cdigode programa seguinte:

    Em seguida escreva o cdigo do programa num editor detexto, gravando-o com o nome tabela04.lua e execute-ocom a linha de comando lua 5.1 tabela04.lua.

    Note ao executar o programa que o primeiro ndice da tabela o ndice 1 e no 0, como ocorre em algumas outraslinguagens de programao. No entanto, se quiser definir o

    primeiro ndice como zero, faa o seguinte:

    Em seguida escreva o cdigo do programa num editor detexto, gravando-o com o nome tabela05.lua e execute-ocom a linha de comando lua 5.1 tabela05.lua.

    Note que nesta verso o dia da semana domingo passa aestar posicionado no ndice zero da varivel indexada, ouseja posicionado em DIA_SEMANA[0].

    O programa tabela05.lua mostra a definio explicita do ndice de uma varivel indexada. Este procedimento podeser usado para todos os valores de uma lista. Por exemplo:

    Outra possibilidade de operao com listas em variveisindexadas a possibilidade de se usar como elemento davarivel funes matemticas.

    O programa a seguir apresenta o resultado de algumasrazes quadradas. Observe o uso da funo math.sqrt() comoelemento da varivel indexada RAIZES.

    DIA_SEMANA = { "domingo", "segunda-feira", "terca-feira", "quarta-feira", "quinta-feira", "sexta-feira",

    "sabado"}

    -- inicio programa TABELA 4

    DIA_SEMANA = { "domingo", "segunda-feira", "terca-feira", "quarta-feira", "quinta-feira", "sexta-feira",

    "sabado"}

    for I = 1, 7, 1do print(DIA_SEMANA[I])

    end

    -- fim programa TABELA 4

    -- inicio programa TABELA 5

    DIA_SEMANA = {[0] = "domingo",

    "segunda-feira",

    "terca-feira", "quarta-feira", "quinta-feira", "sexta-feira", "sabado"

    }

    for I = 0, 6, 1do print(DIA_SEMANA[I]) end

    -- fim programa TABELA 5

    ALIMENTO = {[1] = "cenoura",[2] = "batata",[3] = "beterraba",[4] = "arroz",[5] = "bacalhau"

    }

    -- inicio programa TABELA 6

    RAIZES = {math.sqrt(16),math.sqrt(25),math.sqrt(36),math.sqrt(49)

    }

    a programar

  • 8/9/2019 Revista Programar - n24

    16/26

    Em seguida escreva o cdigo do programa num editor detexto, gravando-o com o nome tabela06.lua e execute-ocom a linha de comando lua 5.1 tabela06.lua.

    Note a linha de cdigo for I = 1, 4 do, veja que nesta versoest se omitindo o valor de incremento do contador.Quando isso feito a linguagem Lua assume por padro opasso de contagem 1.

    RegistrosUma varivel indexada do tipo registro normalmente umaestrutura de dados que permite o uso de tipos de dadosdiferentes na mesma varivel, por meio da definio decampos de dados.

    A linguagem Lua no rgida neste sentido, pois trataautomaticamente o tipo do dado em uso. No entanto, possvel definir dados em forma de registros, de formasemelhante a outras linguagens.

    O programa seguinte faz a entrada e sada do nome e de

    quatro notas escolares de um aluno. Observe atentamente odetalhe na definio da varivel indexada ALUNO com oscampos NOME e NOTAS.

    Em seguida escreva o cdigo do programa num editor detexto, gravando-o com o nome tabela07.lua e execute-o coma linha de comando lua 5.1 tabela07.lua.

    Variveis indexadas do tipo registro podem ser acedidaspela identif icao do nome do campo, comoVARIVEL.CAMPO, bem como VARIVEL[CAMPO]. Noteo programa seguinte:

    Em seguida escreva o cdigo do programa num editor detexto, gravando-o com o nome tabela08.lua e execute-ocom a linha de comando lua 5.1 tabela08.lua.

    Observe que o programa tabela08.lua faz uso de algunselementos operacionais sobre variveis indexadas. Note queeste tipo de aco possibilita o uso de diversos recursos paramanipulao de varveis indexadas para operaes comregistros.

    A linguagem Lua no que diz respeito utilizao de variveis

    indexadas de registros permite outros graus de requinte,como o cdigo seguinte:

    inicio programa TABELA 9

    L = {C1 = 2010, C2 = Linguagem }

    L[1] = Lua

    for I = 1, 4do print(RAIZES[I]) end

    -- fim programa TABELA 6

    -- inicio programa TABELA 7

    ALUNO = {NOME,NOTAS = {}

    }

    print("Cadastro de Aluno") print()

    io.write("Entre o nome .....: ")ALUNO.NOME = io.read()

    for I = 1, 4doio.write(I .. "a. nota .: ")ALUNO.NOTAS[I] = io.read("*number")

    end

    print()

    print("Nome ...: " .. ALUNO.NOME) for I = 1, 4do print("Nota " .. I .. " .: " ..ALUNO.NOTAS[I]) end

    -- fim programa TABELA 7

    -- inicio programa TABELA 8

    L = {C1 =100, C2 = "Lua"} print(L["C1"]) -- escreve 100 print(L["C2"]) -- escreve Lua print(L.C1) -- escreve 100 print(L.C2) -- escreve Lua

    L.C1 = nil -- remove campo print(L.C1) -- escreve "nil"

    L.C1 = 500 -- insere campo print(L.C1) -- escreve 500

    -- fim programa TABELA 8

    -- inicio programa TABELA 9

    L = {C1 = 2010, C2 = "Linguagem "}L[1] = "Lua"

    R = {math.sqrt(81), math.sqrt(49)}R.TXT = L

    print(R[2]) print(R.TXT[1])

    a programar

  • 8/9/2019 Revista Programar - n24

    17/26

    Em seguida escreva o cdigo do programa num editor detexto, gravando-o com o nome tabela08.lua e execute-ocom a linha de comando lua 5.1 tabela08.lua.

    O primeiro print escreve o valor 7 referente raiz quadradade 81, o segundo print escreve a palavra Lua e o terceiroprint escreve a frase concatenada Linguagem Lua.

    Perceba que a definio da varivel R.TXT assume o valor davarivel L[1].

    Concluso

    Neste artigo foi dado ateno s aces de processamentobaseadas no uso de concatenaes, precedncias deoperadores e principalmente na utilizao de forma bsicade variveis indexadas.

    No prximo artigo sero tratadas as questes relacionadasao uso de funes e suas definies..

    print(L.C2 .. R.TXT[1])

    -- fim programa TABELA 9

    Natural da Cidade de So Paulo, Augusto Manzano tem experinciaem ensino e desenvolvimento de programao de software desde1986. professor da rede federal de ensino no Brasil, no InstitutoFederal de Educao, Cincia e Tecnologia. tambm autor,possuindo na sua carreira vrias obras publicadas na rea dacomputao.

    [email protected] Manzano

    a programar

  • 8/9/2019 Revista Programar - n24

    18/26

  • 8/9/2019 Revista Programar - n24

    19/26

    Introduo ao WindowsCommunication Foundation

    Introduo

    Com o crescimento da .NET framework, a tarefa de criaraplicaes distribudas ficou menos penosa. Seja pela

    facilidade de usar Web Services, pela performance eflexibilidade do .NET Remoting ou pela robustez doEnterprise Service (COM+), no esquecendo o MSMQ.

    A Microsoft quando criou a .Net Framework 3.0, uma dasnovidades adicionadas foi o Windows CommunicationFoundation (WCF), que uniu as vrias tecnologias deprogramao distribudas na plataforma Microsoft, comopor exemplo, WebS e r v i c e sE n h a n c e m e n t s(WSE), ASP.NETWeb Services, .NET

    Remoting, COM+(Enterprise Services)e Message Queue(MSMQ), num nicomodelo, baseando-se na arquiteturaorientada a servios(SOA).

    Com a chegada deuma nova verso da.NET Framework

    chega tambm umanova verso do WCF,verso 4.

    Nesta verso existem muitas novidades, mas neste artigo svo ser abordadas quatro dessas novidades, como forma deestimular a curiosidade dos leitores, fornecendo assim umaplataforma de incio de aprendizagem.

    Todos os exemplos apresentados neste artigo so escritosusando C#.

    O que o WCF

    O WCF uma framework que nos possibilita construir e usaraplicaes orientadas a servios. Como principaiscaractersticas temos:

    modelo de programao unificado; suporte a SOA; interoperabilidade e fiabilidade baseada em padres

    de mercado; segurana integrada; arquitetura flexvel e extensvel; maior flexibilidade e segurana em relao aos

    servios ASP.NET Web Services.

    Como principal desvantagem temos:

    Fazer o design certo para os requesitos por vezes

    torna-se um pouco dificil.

    Servios em WCF

    A estrutura de um servio WCF no muito complexa. Deve-se utilizar conceitos puros de programao .NET para a

    criao do contratoe da classe quer e p r e s e n tar oservio. Alm disso,o W C F tam b m

    suporta a utilizaode tipos complexos,como classes criadaspara atender umad e t e r m i n a d anecessidade.

    Para definir umservio em WCFp o d e -s e us ar ad e f i n i o d aMicrosoft Toda

    comunicao comum servio WCFocorre atravs dee n d p o i n t s d os e r v i o . O s

    endpoints fornecem aos clientes o acesso s funcionalidadesoferecidas por um servio WCF.

    Lendo atentamente a definio, verifica-se que para usarservios WCF necessrio estes serem expostos viaendpoints.

    Cada servio precisa de um endereo (Address) para quepossa ser utilizado. Cada servio possui tambm umcontrato (Contract) que define o que o servio vai fazer e

    a programar

  • 8/9/2019 Revista Programar - n24

    20/26

    uma vinculao (Binding) que define como se comunicar.

    Em WCF o relacionamento entre o endereo (Address), ocontrato (Contract) e a vinculao (Binding) chamado deendpoint.

    Address + Binding + Contract = Endpoint (o famoso ABC doWFC)

    Hosting

    Uma das grandes vantagens do WCF a possibilidade deutilizar qualquer tipo de aplicao como host, no existemdependncias de software, como o IIS (Internet InformationServices), como acontece com os ASP.NET Web Services. OWCF pode expor servios para serem acedidos atravs dosmais diversos tipos de protocolos, como por exemplo: HTTP,TCP, IPC e MSMQ.

    Atualmente existem trs alternativas de hosting: self-hosting, IIS e WPAS. Como h vrios detalhes na criao egesto do hosting, fica muito extenso publicar cada detalhe,vantagens e desvantagens que cada uma das tcnicaspossui. Na bibliografia, o leitor pode encontrar refernciasao hosting.O que h de novo no WCF 4

    Tal como foi dito inicialmente, vo ser abordadas quatro dasmuitas novidades que podemos encontrar na verso 4 do

    WCF.

    A primeira dessas novidades a configurao simplificada.

    Ao analisarmos o ficheiro de configurao usado da verso3.5, verifica-se que por vezes o ficheiro de configuraoconsegue ser mais complicado que todo cdigo que seescreve para criar e utilizar os servios em WCF.

    Exemplo de um ficheiro de configurao do WCF 3.x

    Na verso 4, do WCF o ficheiro de configurao simplificado. No existe a necessidade de uma configuraomuito extensa. Pode-se tirar vantagem de algumas dasnovas funcionalidades introduzidas pela Microsoft:

    Configurao automtica de bindings e behaviours; Default endpoints; No necessario usar a tag .

    Exemplo de um ficheiro de configurao do WCF 4

    a programar

  • 8/9/2019 Revista Programar - n24

    21/26

    Self hosting de um servio WCF 4 com configuraosimplificada

    Como o leitor pode ver na imagem abaixo o WCF criaautomaticamente toda a configurao sem existirnecessidade de existir um ficheiro de configurao.

    No WCF 4 existe a possibilidade de se definirem servios derouting.

    O uso desta funcionalidade permite que as aplicaescliente s tenham a necessidade de conhecer a existncia de

    um nico endpoint (os servios de routing). Com base emtabelas de routing, pode-se instruir o WCF parareencaminhar os pedidos para os servios correctos.

    Exemplo de uma routing table em WCF

    O WCF 4 implementa a funcionalidade de discovery.

    Esta funcionalidade pode ser usada de duas maneirasdiferentes:

    Ad-Hoc; Probing (Hello/Goodbye).

    O discovery funciona pois os endpoint implementam oprotocolo UDP. Com o WCF 4 bastante fcil implementaresta funcionalidade, para tal basta que:

    Os servios que queiram usar esta funcionalidadeimplementarem um discovery endpoint e permitirem o usodesta funcionalidade na sua configurao;

    Os servios que desejam enviar heartbeatspermitam o uso desta funcionalidade na sua configurao;

    Os clientes que queiram fazer prob dos serviosimplementem a funcionalidade de discovery.

    ServiceHost serviceHost = newServiceHost(typeof(HelloService), newUri("http://localhost:7777/Services/Hello"), newUri("net.tcp://localhost:7778/Services/Hello"));serviceHost.Open();

    Console.WriteLine("WCF Service isrunning.");Console.WriteLine("Press toterminate service.");Console.ReadLine();

    serviceHost.Close();

    a programar

  • 8/9/2019 Revista Programar - n24

    22/26

  • 8/9/2019 Revista Programar - n24

    23/26

    desenvolvimento mais rpido e eficaz.

    Bibliografia

    O leitor pode encontrar mais informaes em:

    Simplified configurationhttp://blogs.thinktecture.com/cweyer/archive/2009/05/

    07/415326.aspx

    .svc-less Activationhttp://blogs.thinktecture.com/cweyer/archive/2009/05/

    08/415327.aspx

    Dynamic service and endpoint discoveryhttp://blogs.thinktecture.com/cweyer/archive/2009/05/

    08/415329.aspx

    Standard endpointshttp://blogs.thinktecture.com/cweyer/archive/2009/05/

    08/415330.aspx

    Discovery announcementshttp://blogs.thinktecture.com/cweyer/archive/2009/05/

    08/415332.aspx

    Routing Servicehttp://blogs.thinktecture.com/cweyer/archive/2009/05/

    08/415335.aspx

    Protocol bridging & fault tolerance with the Routing

    Servicehttp://blogs.thinktecture.com/cweyer/archive/2009/05/

    08/415341.aspx

    WCF Hostinghttp://www.linhadecodigo.com.br/Artigo.aspx?id=1269

    Fudamentals WCF conceptsh t t p : / / m s d n . m i c r o s o f t . c o m / e n -

    us/library/ms731079.aspx

    Using Data Contracts

    h t t p : / / m s d n . m i c r o s o f t . c o m / e n -us/library/ms733127.aspx

    Using Message Contractsh t t p : / / m s d n . m i c r o s o f t . c o m / e n -

    us/library/ms730255.aspx

    a programar

    Residente em Fafe, Joo Brando tem 11 anos de experincia emdesenvolvimento de software e em montagem e elaborao de redes decomputadores. Ocupa desde Fevereiro de 2009 o cargo de Senior Engineerna Critical Manufacturing SA empresa do grupo Critical.Tem como principais actividades e responsabilidades o desenvolvimentosoftware e gesto de equipas e de projectos.

    Joo Brando

  • 8/9/2019 Revista Programar - n24

    24/26

    Modelo3 O IRSsimplificado

    Por vezes h projectos que pela sua simplicidade de uso,funcionalidade e utilidade nos despertam a ateno. Foi ocaso do Modelo3, um projecto com poucos meses, daautoria de Celso Pinto, cujo objectivo simplificar opreenchimento do modelo 3 do IRS.

    Foi por isso que a Revista Programar entrevistou Celso Pintoa quem agradecemos a disponibilidade:

    Revista Programar (RP) - Em breves palavras comodescreve o Modelo3 para quem no conhece?

    Celso Pinto (CP) - O Modelo3 um servio alternativo saplicaes das Finanas para preenchimento do IRS, masbastante mais simples. A ideia principal permitir que eupegue no molho de papis que tenho para incluir na

    declarao e que os passe um por um para o servio quedepois logo trata de gerar um ficheiro. Durante opreenchimento feita uma simulao de IRS e tambm voudescobrindo que limites de dedues j atingi.

    RP - Como surgiu a ideia de implementar o modelo3.pt?

    CP - A ideia j tem uns anos, 2006 ou 2007, j no melembro. Acho que estava de roda do preenchimento de umadeclarao de IRS e fartei-me dos erros de validao porquena aplicao das Finanas preciso declarar vrias vezes omesmo valor em stios diferentes, para alm de que essaaplicao faz muitos poucos clculos, e comecei a pensar emfazer uma aplicao para consumo prprio que fosse aoencontro das minhas necessidades.

    Isto foi ficando na gaveta, at h uns tempos quando propusna 7syntax que o servio fosse desenvolvido comobrincadeira no Codebits do SAPO, em 2008, mas o RockBand falou mais alto :-) Entretanto a meio do ano passadoquis comear a dar vazo a projectos que engavetados halgum tempo e este foi o primeiro.

    RP - Que tecnologias utilizou na programao destaferramenta?

    CP -Infelizmente no h no Modelo3 nada departicularmente interessante :-) No server-side est umaPlay Framework por detrs de um nginx que serve ficheiros

    estticos. A Play foi escolhida porque quis usar o Drools paraas simulaes e precisava de algo em Java.

    Podia ter sido um Tomcat ou outra coisa qualquer, a nicacoisa que faz converter JSON para objectos Java e vice-versa, para alm de gerar o ficheiro da declarao. Noentanto a Play no tem configuraes praticamentenenhumas e gostei bastante da aproximao deles aodesenvolvimento sobre a framework. Do lado do cliente,como disse atrs, so tudo ficheiros estticos com Javascriptaqui e ali para animar as pginas e falar com o server-side.Os ficheiros esto exactamente como me chegaram s

    mos, o trabalho que a Quodis desenvolveu fantstico, stive de importar os ficheiros de Javascript necessrios parafazer bind aos elementos certos.

    RP - Teve alguma receptividade ou apoio por parte dasfinanas?

    CP - Sim, mostraram alguma curiosidade e disponibilidade.O objectivo principal era integrar o Modelo3 com o Portaldas Finanas para que fosse possvel submeter a declaraoimediatamente a partir do site, mas no foi possvel,olhando para trs vejo que entrei em contacto com a DGCIdemasiado em cima da hora, estas coisas levam o seutempo, o que natural.

    RP - E da parte dos utilizadores, como tem sido o feedback?

    CP - Fantstico, o melhor feedback que tive foi atingir oobjectivo estabelecido para o nmero de declaraesgeradas em metade do tempo, antes do incio da 2 Fase deentregas. Lembro-me tambm que houve quem me dissesse

    que estava desconfiado porque o preenchimento do IRStinha sido demasiado fcil :-) Mesmo nos primeiros diasquando houve alguns problemas sempre senti imenso apoiodas pessoas, muitas das quais completamente annimaspara mim. Recebi bastantes sugestes e, em trocas deemail, surgiram algumas ideias sobre outras funes quepodem ser pagas, o que torna sempre tudo maisinteressante.

    Tambm recebi um bom nmero de manifestaes depreocupao com a privacidade dos dados, o que perfeitamente compreensvel. No entanto o Modelo3 no

    tem qualquer base de dados portanto nada fica registado.Tenho de trabalhar e procurar formas de credibilizar oservio.

    entrevista

  • 8/9/2019 Revista Programar - n24

    25/26

    RP - Quais as maiores dificuldades para implementar oprojecto?

    CP - Esta pergunta fcil: falta de tempo :-) Tirando asurpresa inicial com a mudana de formato do ficheiro que o

    Portal das Finanas aceita, o desenvolvimento tem corridosem sobressaltos mas sem a rapidez desejvel. Algo a reverem breve.

    RP - Que projectos tem para o futuro do Modelo3?

    CP - Para j analisar todo o feedback recebido, informaesno Analytics e o que foi sendo escrito sobre o Modelo3.

    Daqui espero retirar concluses sobre algumas formas derentabilizao do projecto, mas ainda cedo para falar demedidas especficas.

    http://modelo3.pt/

    entrevista

  • 8/9/2019 Revista Programar - n24

    26/26

    Equipa PROGRAMAR

    Um projecto Portugal-a-Programar.org

    Queres participar na RevistaPROGRAMAR? Queres integrar esteprojecto, escrever artigos e ajudar a

    tornar esta revista num marco da

    programao nacional?

    Vai a

    www.revista-programar.info

    para mais informaes em comoparticipar,

    ou ento contacta-nos por

    [email protected]

    Precisamos do apoio de todos paratornar este projecto ainda maior...

    contamos com a tua ajuda!