Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
Linux: Lynx
Por j.c.luz
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha



Artigo

Algum humor e C++ Design Patterns (parte 2)
Linux user
psfdeveloper
25/10/2010
Continuamos a discussão a respeito de Singletons, iniciada na primeira parte desse artigo até chegarmos à Injeção de Dependência. As coisas agora se tornam profundamente C++. Transformamos os Singletons em contêineres, para torná-los efetivamente reutilizáveis e discutimos a teoria que existe por trás dos Templates do C++ e de como a metaprogramação é feita nessa linguagem.
Por: Paulo Silva Filho | Blog: http://psfdeveloper.blogspot.com
[ Hits: 8588 ]
Conceito: 10.0   1 voto(s)1 voto(s)1 voto(s)1 voto(s)1 voto(s) + quero dar nota ao artigo

Introdução

Na primeira parte dessa série nós apresentamos o design pattern (padrão de design) Singleton. Agora, nosso assunto é o infame padrão Inversão de Controle, também conhecido como Injeção de Dependência.

Injeção de Dependência e Inversão de Controle são tão fortemente relacionados que, algumas vezes, esses dois padrões são classificados como apenas um - e eu vou seguir essa tendência, uma vez que acho que uma Inversão de Controle não existe, de fato, sem algum tipo de Injeção de Dependência. Assim que descrevermos esses padrões, você entenderá a minha posição, mas eu espero que você desenvolva a sua própria opinião a respeito desse assunto.

Para começar a discussão a respeito de padrões aqui apresentados, revisitaremos o padrão Singleton, que será refinado e, então, será usado para hospedar uma dependência externa. Por fim, generalizaremos a Injeção de Dependência através da aplicação de uma Inversão de Controle.

Para os amantes de Linux e de Open-source, usaremos um software da Microsoft como um antigo exemplo de inversão de controle. Mas vocês precisam perdoar a minha heresia - os produtos da Microsoft também são software e eles usam alguns padrões de design C++ bastante interessantes. Esse assunto é tão extenso que eu peço a você que não espere que o esgotemos nessa parte do tutorial. Lidaremos, agora, somente como o iniciozinho do assunto.

Os artigos, a partir de agora, se tornarão menos amigáveis, e eles exigirão algum nível de conhecimento de Metaprogramação com Templates. Algum conhecimento sobre como o compilador gera o código C++ intermediário a partir dos templates também é necessário, mas não se preocupe, explicarei as partes mais obscuras a você.

Vamos começar com uma introdução à Metaprogramação com Templates.

Créditos:

[1] Esse artigo foi adaptado de uma série de posts do meu website, em: http://psfdeveloper.blogspot.com

Próxima página >>




Páginas do artigo

Outros artigos deste autor

Leitura recomendada

Comentários
[1] Comentário enviado por julio_hoffimann em 25/10/2010 - 23:36h:

Oi Paulo,

Estou impressionado com a sua destreza no assunto! Há tempos que não aprendia coisas tão interessantes assim em POO. O artigo está incrível, conceitos de alto nível explicados de uma forma simples, sem deixar de ser filosófica.

O Templeton foi algo esplendoroso, quase cai da cadeira quando você o manifestou. Com esta série, começo a ver que metaprogramação vale muito a pena e que apesar de ser um investimento árduo, não hesitarei em aprendê-la.

Obrigado por compartilhar tanto conhecimento, desejo sucesso e boa sorte com a Featherns.

Abraço!

P.S.: Quando li no agregador de feeds: Design Patterns (parte 2), parei tudo que estava fazendo para prestigiar o artigo. :-)

[2] Comentário enviado por psfdeveloper em 26/10/2010 - 01:56h:

Caro Julio,

eu fico muito feliz com tal manifestação de apreço... Eu vi que eu esqueci algumas partes do texto em inglês, mas o pessoal do Viva o Linux não tirou. Não sei se foi intencionalmente, mas não vou reclamar.

Metaprogramação é um dos tópicos mais importantes e interessantes da programação como um todo. Quase todas as linguagens possuem capacidades de metaprogramação. Algumas surpreendentemente poderosas, ao ponto de você poder quase que alterar a linguagem inteira (como o Lisp, com suas "macros" - vale a pena dar uma olhada, mesmo que seja como uma referência teórica - recomendo o Racket - http://racket-lang.org/ - que no Debian/Ubuntu pode ser obtido através do pacote plt-scheme), alterar comportamento de objetos e de seus derivados em tempo real (como em Javascript - na verdade uma capacidade de Javascript que só vi em Javascript - talvez na sua linguagem mãe, o Self), ou outras fortemente flexíveis por serem totalmente em tempo de execução - como o Python ou o Perl, em maior grau. O Java possui uma abordagem mista para a metaprogramação (com os Generics), que envolve a necessidade de Reflexion, com aspectos estáticos e dinâmicos.

Mas a linguagem que colocou a Metaprogramação na ordem do dia realmente foi C++, que foi duramente criticada por anos a fio justamente por causa do excesso de poder dado a essa capacidade, pelos templates e em momento de compilação. Quando ficou claro o poder da Metaprogramação por templates, diversas linguagens começaram a copiá-la.

Metaprogramação é um assunto árduo, cuja teoria é mais difícil que a codificação em si, mas dou toda força. Vai fundo.

E muitíssimo obrigado por prestigiar meu trabalho. Não tenho o que dizer.

Abraços.

[3] Comentário enviado por edgardiniz em 27/10/2010 - 18:36h:

Ainda não li essa segunda parte, apressei o comentário para não esquecer mais tarde.

Com relação aos códigos, você pode utilizar algo como o pastebin.com, que permite fazer o embed dos códigos, e conta com tudo o que você precisa, sem a necessidade de usar imagens com o código e fornece-lo no final.

A não ser que o VOL não permita embedding nos artigos, não sei...

Mas cara, você está de parabéns, estou aprendendo muito com seus artigos.

Continue com o trabalho excelente.

[4] Comentário enviado por psfdeveloper em 27/10/2010 - 20:08h:

Caro edgar,

o VOL não permite embedding de tags html no código, só com muitas restrições. E todo código fonte é posto disponível para download na última página do artigo.

Abraços.


Contribuir com comentário


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.