p. 2
editorial índice 3 4 6 8 12 17 22 notícias/links snippets a tua página tema de capa a programar computação em grid portugal um país que esquece o próximo padrão de c lua linguagem de programação parte ii cakephp script bake antes de nos debruçarmos sobre o problema em questão neste editorial gostaríamos de pedir desculpa aos nossos leitores pelo atraso significativo desta edição tentaremos que o mesmo não comprometa a próxima edição de outra forma as circunstâncias pouco favoráveis em que a equipa da revista se encontra poderão forçar uma alteração na periodicidade da revista de modo a evitar os recorrentes atrasos de lançamento passemos agora ao assunto principal do editorial a revista desde o início que o nosso projecto tem tornado claro esse objectivo tem um público-alvo que se alarga a todos os leitores de alguma forma relacionados com a língua portuguesa se por um lado com esta admitida posição de abertura em relação à participação e divulgação fora de portugal seria de esperar que a comunidade interveniente neste «a verdade é que enquanto projecto fosse algo homogénea aumentamos e alargamos a revista a podemos também considerar que outras paragens a participação lusa seria natural que a revista sendo os deveria no mínimo manter-se criadores e posteriores membros do staff portugueses fosse também ela mantendo-se também é claro a maioritariamente composta por natural renovação de colaboradores » portugueses É o que tem acontecido ao longo dos já vários anos que conta este projecto é bem visível que a maioria dos artigos foram escritos por portugueses a tendência tem no entanto sentido alguma regressão nos últimos tempos com a participação portuguesa a reduzir a olhos vistos mas será portugal um país que esquece talvez sim talvez não a verdade é que enquanto aumentamos e alargamos a revista a outras paragens a participação lusa deveria no mínimo manter-se mantendo-se também é claro a natural renovação de colaboradores por outro lado realçamos a enorme quantidade de feedback positivo que temos recebido do brasil e principalmente o espírito proactivo que se tem manifestado por parte dos leitores e redactores de além-mar os novos artigos sugestões e emails de apoio vindos do brasil que têm chegado frequentemente ao email da revista orgulham como líderes e voluntários deste projecto todo o nosso staff e lamentamos apenas que a participação portuguesa não tenha nos últimos tempos estado ao mesmo nível aos novos colaboradores brasileiros o nosso agradecimento aos leitores que acham que trariam algo de novo ao envolver-se na revista a nossa esperança de que o façam artigos e sugestões aceitam-se e querem-se venham eles de qualquer dos lados do atlântico equipa programar coordenadores joel ramos pedro abreu editor capa antónio silva sérgio alves redacção augusto manzano bruno oliveira francisco almeida jorge paulino luís dias equipa de revisão bruno oliveira fernando martins miguel rentes equipa de divulgação david ferreira contacto revistaprogramar @portugal-a-programar.org website issn www.revista-programar.info joel ramos e pedro abreu 1647-0710 <2>
[close]
p. 3
notícias/links disponiblização do código fonte do chrome os http www.chromium.org/chromium-os http googleblog.blogspot.com/2009/07/introducinggoogle-chrome-os.html o sistema operativo que está a ser trabalhado pela google pretende basear-se na famosa utilização da nuvem onde as aplicações e muitos documentos estão guardados em servidores e o utilizador lhes pode aceder de qualquer local com acesso à internet go a nova linguagem de progaramação da google http golang.org de notar que após o seu lançamento surgiram dados sobre a existência de uma outra linguagem com o mesmo nome como se pode ver no link a seguir indicado http code.google.com/p/go/issues/detail?id=9 e como tal o seu nome poderá ainda alterado lançamento do windows seven foi lançado no fim do mês de outubro o sucessor do windows vista já apoiado por várias companhias como a acer que afirma que o windows 7 vai ajudar a melhorar a má reputação que o windows tem quando comparado com o mac os http windows.microsoft.com/ptpt/windows7/products/home silverlight 4 chega em 2010 e a versão beta já foi lançada a aposta da microsoft concorrente directa do adobe flash vai chegar no primeiro semestre de 2010 o silverlight 4 suporta o google chrome entre outras novidades http silverlight.net codebits sapo já está marcada a data para a terceira edição do sapo codebits que volta a promover a criatividade e talento procurando este ano reforçar o conceito de comunidade e colaboração nos dias 3 4 e 5 de dezembro é este o espírito que vai assentar arraiais na cordoaria em lisboa o formato do codebits mantém-se com as conferências e apresentações iniciais a serem seguidas de um concurso de programação e hacking que dura 24 horas e de onde saem as ideias que vão depois ser esmiuçadas e votadas para escolher um vencedor a agenda http codebits.eu/s/calendar já está fechada e contempla cerca de 40 apresentações de 45 minutos entre oradores convidados e propostas da comunidade que celso martinho garantiu serem de elevado interesse e qualidade durante os três dias não falta também espaço de animação com eventos nocturnos onde pontuam o já tradicional quiz bandas de música e concursos espontâneos de guitar hero a comida e bebidas são à borla e a cada participante é entregue um kit de boas vindas com os <3>
[close]
p. 4
snippets vb.net escolha de cores utilizando reflection as cores podem tornar uma aplicação mais agradável e a possibilidade de o utilizador escolher a sua própria combinação de cores é muitas vezes uma realidade principalmente nas aplicação comerciais baseando-se nesta permissa este código pertende mostrar com isto é possível e como é relativamente simples de implementar usando o namespace system.reflection podendo depois ser adaptado por exemplo a um custom control onde o utilizador faria a sua selecção imports system.reflection public class form1 private sub form1_loadbyval sender as system.object byval e as system.eventargs handles mybase.load cria uma listview que irá listar os nomes e mostrar as cores dim lv as new listview me.controls.addlv with lv .view view.details .dock dockstyle.fill .columns.add cores .columns.add nomes end with preenche a listview com todas as cores pré-definidas for each c as colorentry in colorlist.getcolors dim row as new listviewitem with useitemstyleforsubitems false row.backcolor c.color row.subitems.addc.name lv.items.addrow next lv.autoresizecolumnscolumnheaderautoresizestyle.headersize end sub end class
[close]
p. 5
snippets vb.net private m_color as color color.empty propriedade para a cor public readonly property color as color get return m_color end get end property private m_name as string string.empty propriedade para o nome public readonly property name as string get return m_name end get end property end class
[close]
p. 6
a tua página que é muitas formas uma crítica sobre a poo há alguma discussão em torno da forma mais correta de descrever o conceito em que um objeto pode assumir várias formas de comportamento lógico computacional previamente definido e codificado alguns profissionais da área de desenvolvimento de software com orientação a objetos denominam este conceito com a palavra poliformismo usada num contexto mais oficioso outros usam a palavra polimorfismo usada num contexto mais oficial não querendo polemizar o tema mas sim de apresentar uma explicação que seja mais plausível para melhor entendimento do real conceito que a programação orientada a objetos faz sobre o fato de um objeto poder assumir várias formas e de também justificar o motivo que nesta obra o termo é referenciado como poliformismo e não polimorfismo o termo poliformismo é um substantivo masculino que representa a qualidade ou estado de ser capaz de assumir diferentes formas dicionário houaiss usado para representar conceitos associados as áreas de botânica química genética ou zoologia dicionário aurélio e houaiss acrescenta-se ainda a área de fisioquímica dicionário houaiss assim sendo deve-se considerar que no contexto botânico refere-se ao fato de existir órgãos ou plantas com diversas formas químico refere-se ao fenômeno apresentado por substâncias que cristalizam em diferentes sistemas genético refere-se a ocorrência simultânea na população de genomas que apresentam variações nos alelos de um mesmo lócus resultando em diferentes fenótipos cada um com uma freqüência determinada zoológico refere-se a propriedade que certas espécies de animais têm em apresentar formas diferentes de acordo com a função que desempenham em seu habitat dicionário aurélio e fisioquímico refere-se a propriedade que alguns elementos químicos possuem de se apresentar com formas e propriedades físicas diferentes como densidade organização espacial ou condutividade elétrica como ocorre com o grafite e o diamante que são formas alotrópicas do carbono dicionário houaiss tomando a palavra poliformismo e separando-a em poli muitos e morfismo que é um sinônimo masculino usado na área matemática mais precisamente na álgebra moderna que representa o conceito de um conjunto que aplicado sobre outro conjunto mantém as operações definidas em ambos os conjuntos perceba que se esta idéia for aplicada sobre aos conceitos de programação orientada a objetos ter-se-á então algo semelhante e muito próximo ao conceito de herança na prática usual o termo polimorfismo está relacionado a algo adquirir durante sua evolução várias formas algumas vezes contrárias a sua forma natural gerando até certas deficiências e deformidades considerando-se que o conceito de programação orientada a objetos surgiu na noruega por volta de meados da década de 1960 e que a partir de então ocorreram muitas formas de interpretar seus conceitos iniciais é fácil entender a confusão que se faz com alguns termos deve-se tomar o cuidado de considerar que o termo polimorfismo é aplicado e assim deve ser no contexto das áreas anteriormente comentadas no entanto esta palavra não deve ser usada no contexto técnico da programação orientada a objetos no idioma inglês o termo analogamente usado é polymorphic onde poly é a tradução literal de poli são cognatos e possui em inglês e português o mesmo significado ou seja muitos mas a palavra morphic em seu significado mias simples em inglês significa forma compact oxford english dictionary of current english assim sendo morphic em inglês é relativo a forma mórfico em português é relativo a morfeu deus dos sonhos e do sono ou então relativo a morfina na área de farmacologia dicionário houaiss desta forma as palavras morphic e mórfico são um caso de falsocognatos e não podem ser possuir o mesmo significado nos idiomas inglês e português perceba que em inglês o termo polymorphism representa exatamente a idéia de um objeto possuir várias formas de comportamento mas uma tentativa de tradução literal do termo em inglês para o português como polimorfismo faz com que a idéia original contida na palavra seja perdida dando outra interpretação daí a sugestão aqui em se fazer uso do termo poliformismo dentro do conceito de programação orientada a objetos um objeto quando definido dentro dos rigores algorítmicos não pode de forma alguma assumir durante seu processamento várias formas indiscriminadas a não ser formas previamente definidas e esperadas um objeto ou classe pode possuir múltiplas formas de aplicação mas estas várias formas são sempre previsíveis e possuem como característica o fato de serem definidas com a devida antecedência de suas execuções daí o motivo de não se fazer uso do termo polimorfismo que pode ocorrer sem a intervenção de terceiros de forma natural mas sim utilizar o termo poliformismo não existente nos dicionários mas nem sempre um termo técnico é encontrado nos <6>
[close]
p. 7
a tua página dicionários por ser uma descrição com propósito bem definido no sentido de indicar que um mesmo objeto pode possuir muitas formas formas previamente definidas de uso ou seja ser um elemento próximo ao conceito de multiforme ou aquele que se apresenta sob numerosas formas como dito inicialmente não é objetivo polemizar esta discussão mas o de proporcionar uma luz sobre sua interpretação e também apresentar uma justificativa do motivo de estar sendo usado nesta obra o termo poliformismo quando tantos outros usam polimorfismo existe muita coisa estranha por ai as quais ninguém questiona só para ilustrar um pouco vai ai algumas pérolas da área da computação deletar ao invés de apagar clicar ao invés de acionar aspas simples ao invés de apóstrofos teclar ou tc ao invés de simplesmente escrever digitar ao invés de datilografar naum ao invés de não falow onde ninguém fala absolutamente nada e tantas outras augusto manzano são paulo brasil não te esqueças esta página pode ser tua http www.revista-programar.info/front/yourpage <7>
[close]
p. 8
tema de capa estes recursos fornecidos à grid podem ser locais ou recorrendo à internet abranger uma grande área geográfica este tipo de cooperação em grande escala possibilita um enorme potencial em termos computacionais e permite formas de trabalho conjuntas que à alguns anos atrás se considerava impossível um ponto explorado pelo paradigma de grid é que as máquinas que um utilizador comum utiliza para as suas tarefas possuem na sua maioria recursos em excesso em relação com o que os utilizadores realmente necessitam em diversas situações apenas é utilizada uma pequena parte da capacidade da máquina o que implica que grande parte da capacidade da máquina se encontre desperdiçada É também neste desperdício computacional que a computação em grid tenta obter benefícios utilizando recursos que a máquina não necessita para uma determinada função que esteja a desempenhar num dado instante este tipo de aproveitamento faz com que as máquinas que integram a grid possuam uma grande versatilidade e ao contrário de um cluster um cluster é formado por um conjunto de computadores que utiliza um tipo especial de sistema operativo muitas vezes é construído a partir de computadores convencionais personal computers que são ligados em rede e comunicam através do sistema trabalhando como se fossem uma única máquina de grande porte as máquinas não existem única e exclusivamente para servir o paradigma em que estão inseridas podendo realizar as tarefas comuns que os utilizadores necessitam mas aproveitando sempre que possível os recursos não explorados a heterogeneidade do conceito de grid não se limita ao tipo de tarefas que as máquinas podem processar mas também ao tipo de ambientes em que estas operam ou seja existe uma abstracção de arquitectura e software existente em cada máquina fazendo com que independentemente das suas características cooperem em conformidade sobre uma tarefa em comum grids em grande escala são intrinsecamente distribuídas heterogéneas e dinâmicas o seu conceito passa por fornecer grandes capacidades de processamento computação em grid introdução assentando fundamentalmente em conceitos de computação paralela e distribuída a computação em grid assim como outras tecnologias que a precederam foi inicialmente criada para as necessidades computacionais que os cientistas necessitavam para os seus projectos a ciência é fortemente baseada em computação e a capacidade de processamento dos computadores actuais apesar da sua evolução exponencial continua a revelar-se insuficiente para os objectivos pretendidos pela ciência como tal a necessidade de partilhar recursos para atingir um objectivo comum tornou-se uma estratégia fundamental tanto na ciência como a nível comercial não só os computadores evoluíram exponencialmente mas também as áreas relacionadas com estes obtiveram uma evolução bastante considerável as redes são um bom exemplo passando de velocidades na unidade de medida dos megabytes para os gigabytes de modo a explorar ainda mais este progresso o termo grid oferece um potencial significado para superar obstáculos para problemas ou questões que dificultam o progresso o conceito assenta na base da cooperação entre máquinas ou seja várias máquinas contribuem com os seus recursos para que no conjunto das mesmas os recursos agregados consigam oferecer garantias em termos de performance <8>
[close]
p. 9
tema de capa armazenamento e acesso a dispositivos independentemente da sua localização geográfica os utilizadores de uma grid podem aceder a um simples recurso um computador unidade de armazenamento etc ou utilizar vários recursos agregados e coordenados como se trata-se de um computador virtual os recursos de uma grid possuem várias formas de configuração podendo por exemplo integrar apenas a grid quando a máquina se encontra inactiva não alterando a experiência de um utilizador comum que esteja a usufruir da máquina o paradigma da computação em grid tem como objectivo a integração transparente de recursos de computação que podem pertencer a organizações independentes encapsulando as suas especificidades desta forma grandes infra-estruturas de computação podem ser criadas a partir de recursos dispersos que surgem aos utilizadores como um único sistema a internet disponibiliza uma camada de serviços que torna possível a partilha de informação independentemente da sua localização a grid faz algo semelhante permitindo a partilha de recursos computacionais de forma transparente independentemente das suas características e localização as implementações de uma grid normalmente funcionam através da introdução de uma nova camada de software entre as aplicações e a infra-estrutura física composta pelo computador sistema operativo e redes assim os utilizadores interagem com os recursos computacionais através desta camada de software que esconde a complexidade e diversidade da infra-estrutura oferecendo uma interface uniforme para acesso aos recursos disponibilizados esta camada de software é designada de middleware quantidades de dinheiro num super computador centralizado podendo utilizar vários computadores dispersos que realizam um trabalho em conjunto a eficiência de recursos é também uma vantagem considerável pois para além de o computador poder executar outras tarefas são aproveitadas as capacidades não utilizadas de uma máquina outra possibilidade é utilizar a máquina sobre determinadas condições ou políticas como por exemplo pode ser definido que uma máquina só executa trabalhos se o computador se encontrar sem interacção humana sobe um determinado período de tempo outra vantagem significativa é a fiabilidade deste tipo de abordagem pois estes ambientes são modulares e descentralizados ou seja não contêm pontos únicos de falha no caso de uma das máquinas constituintes falhar o sistema trata de alocar outros recursos e reiniciar aquele trabalho numa outra máquina sem que para isso ocorra perda de dados a adição e a remoção de recursos é um processo muito simples as máquinas podem ser adicionadas ou removidas da grid on-the-fly termo geralmente utilizado para descrever alterações que são efectuados durante o tempo de execução de uma determinada actividade o que permite uma excelente escabilidade os trabalhos podem ser executados paralelamente nas diversas máquinas e os ambientes de grid estão extremamente bem preparados para executar trabalhos que podem ser repartidos em diversas tarefas mais pequenos e posteriormente executados paralelamente em diversas máquinas diversas áreas estão actualmente a tirar partido da computação em grid como a ensino medicina e aplicações financeiras utilização de grids diferentes organizações necessitam de grids por diferentes razões existem vários tipos de grids operacionais por todo o mundo · grids nacionais são mantidas por um país este tipo de grid é muito útil em situações de emergência como terramotos ou ataques terroristas pode também suportar investigações científicas estudos meteorológicos e ambientais · grids de projecto são criadas para trabalhos sobre um objectivo específico são tipicamente construídas para partilhar recursos por um tempo limitado e desenhadas para corresponder às necessidades de grupos de investigação · grids privadas são normalmente chamadas de grids locais ou intra-grids e são utilizadas por instituições como o middleware de uma grid permite ao utilizador aceder de forma transparente a recursos de computação disponíveis na infra-estrutura de uma grid evitando a complexidade de lidar com os detalhes de cada computador vantagens e desvantagens a computação em grid é indiscutivelmente uma tecnologia que oferece diversos benefícios na sua utilização com a computação em grid não é necessário despender grandes <9>
[close]
p. 10
tema de capa hospitais ou escolas este tipo de grid é geralmente pequena e gerida centralmente · goodwill grids são criadas quando voluntários efectuam a doação dos recursos não utilizados da sua máquina para que assim possam contribuir para a resolução de problemas mundiais como a investigação do cancro · grids peer-to-peer baseiam-se na filosofia de dar para receber onde os utilizadores partilham informação com outros utilizadores da grid · cloud-like grids permitem aos utilizadores alugar recursos computacionais pagando aos donos dos computadores que cedem esses recursos os serviços oferecidos pela amazon http aws.amazon.com/s3 e google http www.google.org/powermeter são bons exemplos deste tipo de grids actualmente na versão 4 o globus toolkit 4 gt4 encontrase não só direccionado no ramo da ciência mas também no ramo comercial exemplos de grids · compute against cancer http www.computeagainstcancer.org este projecto utiliza os ciclos de processamento não utilizados dos processadores dos voluntários para estudar a estrutura e o comportamento de células cancerígenas · seti@home http setiathome.ssl.berkeley.edu este projecto utiliza a computação voluntária para procurar vida inteligente noutros planetas · teragrid http www.teragrid.org sistema de grid que providencia uma poderosa infra-estrutura para investigação científica em 2004 a teragrid já possuía 20 teraflops de computação e 1 peta byte de armazenamento distribuído desvantagens e desvantagens torna-se importante realçar que o globus toolkit inclui muitas outras bibliotecas e serviços destinados a facilitar o desenvolvimento de aplicações para grids não só através de web services java mas também recorrendo ás linguagens de programação c e python uma grande desvantagem é a falta de suporte para a plataforma windows e a falta de suporte em geral para os sistemas unix mais recentes sendo necessário proceder à compilação da versão source1 o que muitas vezes se revela uma tarefa demorada e complicada conclusões um factor importante a considerar é que tipo de trabalhos pode justificar o uso de uma grid com certeza que executar um trabalho numa grid que demore apenas um segundo num computador dito comum não irá retornar qualquer tipo de benefício aquando da distribuição dos trabalhos é necessário processar muitos outros serviços como a validação do ficheiro a executar selecção das máquinas apropriadas envio do trabalho para a respectiva máquina etc este tipo de tarefas necessárias ao funcionamento do middleware só efectivamente retornam algum tipo de benefício se o trabalho em questão necessitar de poder computacional considerável podemos imaginar um caso muito simples supondo que era pretendido executar 10 trabalhos que demoram cada um 15 minutos a executar sequencialmente numa só máquina teoricamente eram necessárias 2 horas e meia 10 tarefas x 15 minutos para executar este conjunto de trabalhos no caso de estes trabalhos executarem numa grid computacional com pelo menos 10 máquinas disponíveis era possível enviar cada um destes trabalhos para uma máquina diferente resultando numa execução em paralelo destes 10 trabalhos em globus toolkit o globus toolkit é um projecto open source que disponibiliza um conjunto de serviços e bibliotecas que suportam grids e aplicações para grids o conjunto de ferramentas inclui software para segurança informação da infra-estrutura gestão de recursos gestão de informação comunicação detecção de falhas e portabilidade o globus é uma camada de middleware para grids com um conjunto de componentes que podem ser utilizados independentemente ou em conjunto no desenvolvimento de aplicações para cada componente são definidos protocolos e apis em linguagem c e java uma tremenda variedade de serviços de alto nível como ferramentas e aplicações têm vindo a ser implementadas com base nestes componentes básicos <10>
[close]
p. 11
tema de capa condições normais reduziríamos o tempo de 2 horas e meia para 15 minutos que teriam de acréscimo o tempo de execução dos serviços do middleware este exemplo enquadra-se num cenário em que todas as máquinas envolvidas possuem aproximadamente o mesmo poder computacional se fosse pretendida a execução destas 10 tarefas em apenas 15 minutos numa só máquina era necessário possuir uma máquina 10 vezes superior ao nível computacional da máquina inicialmente utilizada no entanto esta máquina com 10 vezes mais processamento não custa só 10 vezes mais que a máquina original em termos de custos a grid oferece-se uma solução mais económica ainda neste exemplo mencionado se fosse possível dividir estes 10 trabalhos em x sub-trabalhos cada por exemplo 3 subtrabalhos e assumindo que teríamos máquinas suficientes para a execução neste caso 30 então o tempo de execução deste trabalho iria reduzir neste exemplo 3 vezes o tempo ou seja para 5 minutos É possível afirmar que o ganho de computação recorrendo a uma grid computacional oferece diversos benefícios afirma-se como uma solução de baixo custo que faz uso do trabalho cooperativo entre máquinas existentes numa organização para aumentar o poder processamento disponível sem que para isso seja necessário investir grandes recursos monetários na aquisição de super computadores bruno oliveira é estudante do 3o ano de engenhariainformática da estgf bem como trabalhador independente na área de programação web tem especial interesse pela área de base de dados e programação orientada a objectos bruno.oliveira@portugal-a-programar.org bruno oliveira <11>
[close]
p. 12
a programar novo código em c baseado em stroustrup 2006 template
[close]
p. 13
a programar deduzir o tipo das variáveis com as palavras-chave decltype e auto ao declarar uma variável usando auto o compilador verá no lado direito da expressão qual o tipo de variável que o programador tenciona usar claro que em circunstâncias dúbias se poderá ainda obter erros mas em casos convenientes como o que é dado no exemplo é escusado estar a escrever explicitamente o tipo do iterador que se espera quem quer que esteja habituado a utilizar iteradores com a stl reconhece de imediato as vantagens da declaração automática de variáveis o exemplo que se segue mostra-nos também a nova sintaxe alternativa para o ciclo for com inferência de iterador este novo tipo de ciclo for deverá funcionar com vectores estáticos como o do exemplo ou contentores stl int my_array[5 {1 2 3 4 5 forint &x my_array equivalente a um for_each x 2 este novo tipo de ciclo for deverá funcionar com vectores estáticos como o do exemplo ou contentores stl alterações a uniões classes e tipos enumerados no próximo padrão de c as uniões terão regras mais relaxadas de declaração por enquanto não é permitido utilizar dentro de uniões tipos que envolvam construtores não triviais i.e construtores de classes com mais de uma variável no próximo padrão isto deverá ser possível tal como exemplificado no seguinte código union exemplo união com construtor não trivial double r ponto p enum class ordinal primeiro 1 segundo terceiro também patente no exemplo dado acima é a classe ponto que mostra novidades significativas que irão tornar a vida mais fácil a muitos programadores no futuro utilizando o novo padrão as classes terão à sua disposição novas facilidades para a sua definição a primeira novidade é a introdução de inicialização na declaração dos membros da classe os membros x e y podem ser inicializados dentro da sua declaração na classe sem necessidade de utilizar sequer valores de omissão nos construtores de forma semelhante igualando um construtor à palavra-chave default pode-se definir um construtor de omissão como construtor óbvio de omissão que dispensa definição por oposição pode-se também proibir certos construtores operadores ou destrutores igualando-os a delete no exemplo proíbe-se a alocação dinâmica de objectos ponto proibindo o operador new também interessante é a nova capacidade de delegar construtores definindo um construtor em termos de outro construtor à semelhança do que já acontece em java ou c outra nova mecânica de construção exemplificada na classe coordenada é a herança de construção através da palavra-chave using indicamos ao compilador que a classe coordenada replica todos os métodos de construção de ponto note-se que tirando partido deste estilo de construção não se podem definir quaisquer outros construtores finalmente os tipos enumerados passarão a ser mais distintos de inteiros adicionando a palavra-chave class à declaração de um tipo enumerado como exemplificado em ordinal podemos também explicitar outros tipos inteiros tais como long ou char e mesmo caso seja baseado em int dizemos ao compilador que qualquer conversão entre inteiros e o novo tipo enumerado declarado é proibida isto evita em particular os problemas da conversão implícita entre inteiros e tipos enumerados as constantes das classes enumeradas passarão a habitar no seu próprio namespace no caso do exemplo ordinal primeiro ordinal segundo etc note-se que este reforço do tipo é tal como maior parte das adições à linguagem opcional class ponto private double x 0.0 double y 0.0 public ponto default construtor inferido por omissão pontodouble xx double yy xxx yyy pontodouble dd pontodd,dd operador new proibido void operator newstd size_t delete class coordenada public ponto public using ponto ponto construtores por herança <13>
[close]
p. 14
a programar novo operador de sufixo esta função força o movimento de objectos template
[close]
p. 15
a programar possibilidades em metaprogramação com templates até agora o limite imposto pela pré-determinação da parâmetros de templates forçava autores de bibliotecas que façam uso extenso de templates a recorrer a truques de macros e a repetir código para esconder esses limites ao programador com templates variádicos o próprio compilador gera templates com parâmetros repetidos à medida que estes sejam necessários de notar que esta iteracão é de um grau diferente da iteração de classes e métodos que a metaprogramação com templates utiliza e que como tal permitirá reduzir a quantidade de código necessário uma grande adição ao mecanismo de templates com um grande impacto prático seria o novo mecanismo de conceitos que teria melhorado drásticamente as mensagens de erro obtidas com o mero uso da stl infelizmente a implementação de conceitos gerou grandes complicações de retrocompatibilidade na sua implementação e como resultado estes foram adiados para outra ocasião conclusão outras novidades que não mencionámos aqui mas também importantes para o próximo padrão do c incluem um novo símbolo para o apontador nulo nullptr o nullptr tem o seu próprio tipo definido que permite eliminar muitas ambiguidades fontes de erros no código e claro é mais elegante do que escrever null funções lambda para programação funcional em c modificadores de sobrecarga de métodos em classes derivadas expressões constantes constexpr e literais unicode para strings o novo padrão de c até agora apelidado c 0x uma indicação de que o prazo para a sua definição seria o final da década terá efectivamente o seu draft final concluído no final de 2009 à custa de sacrificar algumas das suas inovações mais ambiciosas mas só será submetido à iso na primeira metade de 2010 em média os padrões oficiais iso levam cerca de um ano a ser aprovados o que levará o próximo padrão a finalmente tornar-se oficial no início de 2011 felizmente os compiladores mais populares tais como visual c gcc e borland c já incluem há algum tempo as alterações de drafts já conclusivos como por exemplo o tr1 technical report 1 como uma linguagem de programação de sistemas de interesse académico e tecnológico o c evolui a um passo contido mas de forma mais ou menos consistente com as aplicações que lhe foram delegadas ao longo do tempo claro está a linguagem não existe num vácuo e a evolução de outras linguagens também influencia a sua apesar desta influência o novo padrão de c ainda não adoptará garbage collection por motivos de complexidade em manter novo código gerido compatível com código determinista e a gestão automática de memória opcional mais importantes que as alterações drásticas à linguagem a comissão do padrão de c optou por refinamentos à sintaxe que permitem simplificar a escrita e a leitura de código bem como inclusões importantes à stl melhoramentos estes que decerto beneficiarão programadores independentemente do seu grau de destreza com a linguagem adições à standard template library a biblioteca oficial do padrão tem acompanhado as restantes adições desde a criação dos templates com o próximo padrão a stl verá uma colecção de novas classes adaptadas de bibliotecas independentes um grande contribuidor é a biblioteca boost que serão muito úteis por exemplo · std thread classe que permite lançar uma thread e que necessita de uma classe funcional i.e uma classe com um operador de parêntesis para definir a sua execução para gerir recursos partilhados entre operações entre threads haverá mutexes std mutex por exemplo ou caso seja necessário código de extrema eficiência a stl terá também tipos atómicos para o efeito · tipos atómicos uma série de classes auxiliares desenhadas para multithreading operações que partilham recursos no tempo entre threads e que mediante violações de acesso à memória resultam em mais erros de compilação que erros de execução poupando assim tempo no teste de software · std tuple a extensão de maps pares ordenados de variáveis em que a primeira é índice da segunda a várias variáveis tal como maps tuples são ordenados automaticamente tornado possível graças a templates variáticos · std regex expressões regulares algo que também já se implementara inúmeras vezes em bibliotecas independentes a stl finalmente fornecerá a programadores uma implementação padrão de uso simples <15>
[close]