Você está na página 1de 35

Codificando Net

POWERED BY

e-magazine
CODIFICANDO.NET

2 0 0 8
E D I Ç Ã O 7 N Ú M E R O 7 A N O 2

Editorial
Fala Galera, espero que esse tempo sem termos publicado a revista tenha deixado vocês entusiasmados e
ansiosos para que saísse uma nova edição... Depois de longos quatro meses saiu do forno a nova
publicação.
Como dissemos na edição anterior, está cada vez mais difícil conseguir colaboradores que consigam
montar conteúdo para publicarmos. Então novamente deixamos o convite para quem tiver interesse em
colaborar com a revista, fique a vontade para entrar em contato conosco e alinharmos uma maneira de
publicar o material.

Porém nesses meses de espera, nós não ficamos parados, nós montamos um novo projeto para difundir o
conhecimento com vocês. Montamos mais uma frente, agora com gravações de PodCasts sobre
tecnologias Microsoft. Já gravamos e publicamos diversos arquivos sobre Visual Studio 2008, SQL Server
2008, Windows Server 2008, e vários outros assuntos que podem ser baixados gratuitamente em
www.codificandomagazine.net/podcast.

Pessoal, quem tiver interesse e conhecimento para compartilhar, entre em contato conosco para
fazermos algo juntos. Pensem nisso. :)

Diego Nogare
site@codificandomagazine.net

Equipe
Editor:
Alexandre Tarifa
Emerson Facunte
Diego Nogare
Sergio Gonçalves
Fernando Borges (Capa)

Colaboradores:
Adriano Bertucci
Adriano Luciano
Bruno Gabriel
Equime LMS (Unicamp)
Juliana Uchôa
Juliano Schimiguel
Rodolfo Roim
3
A comunidade e os MVPs
Não há como falar de desenvolvimento de tecnologia, sem falar de comunidades. Na realidade, não há
como falar de compartilhamento de conhecimento, sem mencionar as comunidades, não somente na
indústria de tecnologia, mas em qualquer situação. As comunidades, segunda a sociologia, é um
conjunto de pessoas que habitam o mesmo espaço com interesses mútuos, regidos por uma norma
comum.
Em se tratando de tecnologia da informação, as comunidades são fundamentais para a disseminação
do conhecimento entre seus usuários, por abordar problemas do mundo real e tratar dos problemas
com soluções efetivamente testadas. Empresas que produzem tecnologia, como a Microsoft, oferecem
suporte aos usuários, criando portais repletos de conteúdo e tutoriais, conseguindo alcançar muitas
pessoas. Entretanto, a comunidade técnica Microsoft do Brasil tem papel fundamental na
disseminação desse conteúdo, levando-o para todos os cantos do Brasil, através dos seus líderes.

Independente das particularidades das comunidades e de como elas entregam a mensagem para os
usuários, todas elas são de fundamental importância na disseminação do conhecimento, eu diria mais,
diria que são complementares nessa função, já que elas atuam em ambientes diferentes.
O conteúdo entregue ás comunidades pelos seus líderes, e pelos próprios membros, são suportados
pela Microsoft, através dos portais para desenvolvedores (MSDN) e IT Pros (TechNet). Dentre o
conteúdo dos portais, o profissional pode encontrar artigos técnicos produzidos pela comunidade,
tutoriais, Webcasts (palestras online ministradas diariamente) e vídeos da séria Experience.
4
A comunidade e os MVPs
Outras comunidades preferem entregar seus conteúdos diversificando os meios, como é o caso da comunidade
Codificando.NET, que agora está gravando entrevistas com MVPs em formato Podcast, disponibilizando-os
gratuitamente no site da comunidade.
Já o Mutex, comunidade do MVP Ramon Durães abriu o canal TV.Mutex para publicação de vídeos-aula, onde
ele fala sobre gerenciamento do processo de desenvolvimento de software, utilizando plataforma Microsoft,
além de entrevistas com outros MVPs.
Já entrando no campo dos MVPs, em toda comunidade – seja ela qual for, seja o seu condomínio, o clube que
você freqüenta, ou ainda a sua sala de aula – existe uma pessoa – ou algumas – que se destacam por ter um
conhecimento técnico mais apurado, iniciativas de liderança. São essas pessoas que buscam a organização de
eventos e encontros entre a comunidade, para que os usuários possam ter contato direto com a tecnologia. São
essas pessoas, por esse papel que desempenha na comunidade técnica, de maneira voluntária que a Microsoft
atribui o título de MVP (Most Valuable Professional). Trata-se de um prêmio, um reconhecimento, pelo árduo
trabalho desempenhado por esses profissionais junto aos grupos de usuário, com o intuito de disseminar a
tecnologia Microsoft e compartilhar voluntariamente o conhecimento detido por eles.
Com isso, caro leitor, convido-os a participar das comunidades de tecnologia Microsoft, visitar os sites da
Microsoft criados e mantidos especificamente para a audiência de desenvolvedores e IT Pros, e conhecer um
pouco mais as atividades que estão sendo realizadas.

Referências:
MSDN Webcasts
http://www.microsoft.com/brasil/msdn/eventos/webcasts.mspx

MSDN Experience
http://www.microsoft.com/brasil/msdn/experience/default.mspx

TechNet Experience
http://www.microsoft.com/brasil/technet/experience/windowsserver2008/default.mspx

TechNet Webcasts
http://www.microsoft.com/brasil/technet/eventos/webcasts/default.mspx

Rodolfo Alves Roim é formado em Ciência da Computação, fez mestrado em Engenharia de Software na Unicamp e é
pós-graduado em Administração de Empresas pela Fundação Getúlio Vargas. Trabalhou como consultor de SharePoint
em uma Microsoft Gold Certified Partner por 6 anos, antes de se juntar ao time da Microsoft, executando e gerenciado
projetos de implantação e configuração do SharePoint em clientes de grande porte como Itau, Grupo Votorantim,
Andrade Gutierrez, entre outros. Possui a certificação Microsoft Certified Technical Specialist (074-132) Designing Portal
Solution with Microsoft SharePoint Products.
5
Dados Espaciais no SQL Server 2008

Algumas das novidades mais esperadas no SQL Server 2008 são os dados espaciais, que abrangem dados Geométricos e Geográficos e ambos
são voltados para trabalhar com GeoProcessamento.
Os dados geométricos são utilizados para a criação de áreas pré-definidas como polígonos (com 3 ou mais pontos), retas e pontos. Já os
dados geográficos são utilizados para trabalhar com um determinado ponto baseado nas coordenadas de latitude (linhas paralelas ao
meridiano de greenwich, na vertical) e longitude (linhas paralelas à linha do equador, na horizontal).
Exemplos que podem ser usados de um dado geográfico seria uma praça, um predio, um ponto de encontro. Já exemplos de dados
geométricos são delimitações como cidades, estados, países, e até mesmo traçado de ruas ou rodovias.

Para criar um exemplo utilizando os novos tipos de dados, duas tabelas precisam ser criadas, uma para estados e uma para ruas. Ambas
tabelas utilizarão um tipo de dado geometry, que é para dados geométricos, e neste caso armazenarão poligonos e linhas.

CREATE TABLE tblEstado (estCodigo int identity(1,1), estNome varchar(50), estGeometrico geometry)

CREATE TABLE tblRua (ruaCodigo int identity(1,1), ruaNome varchar(50), ruaGeometrico geometry)

Depois da criação destas tabelas, foram


mapeadas(com pontos ficticios) os estados de
São Paulo e Rio de Janeiro. Vejam as marcar que
serão utilizadas para criar os dados no SQL
Server 2008 na Figura 1.

INSERT INTO tblEstado(estNome,


estGeometrico) values
('São Paulo',
geometry::STGeomFromText
('POLYGON ((0 25,25 50, 55 48,
70 23, 85 25, 55 0, 30 23, 0
25))', 0))

INSERT INTO tblEstado(estNome,


estGeometrico) values
('Rio de Janeiro',
Figura 1. Pontos de São Paulo (amarelo) e Rio de Janeiro (vermelho).
geometry::STGeomFromText
('POLYGON ((80 29,95 35, 100
40, 110 38, 105 23, 83 20, 80
29))', 0))
6
Dados Espaciais no SQL Server 2008

Para inserir dados destes pontos na tabela estado, vale lembrar que o poligono necessita iniciar em um ponto e terminar neste mesmo ponto.
Caso isso não aconteça o SQL Server gera um erro semelhante a este, que informa o motivo do erro. O motivo está sublinhado e em negrito.

Msg 6522, Level 16, State 1, Line 1


A .NET Framework error occurred during execution of user-defined routine or aggregate
"geometry":
System.FormatException: 24306: The Polygon input is not valid because the start and end points
of the ring are not the same. Each ring of a polygon must have the same start and end points.
System.FormatException:
em Microsoft.SqlServer.Types.Validator.Execute(Transition transition)
em Microsoft.SqlServer.Types.Validator.EndFigure()
em Microsoft.SqlServer.Types.ForwardingGeoDataSink.EndFigure()
em Microsoft.SqlServer.Types.OpenGisWktReader.ParseLineStringText()
em Microsoft.SqlServer.Types.OpenGisWktReader.ParsePolygonText()
em Microsoft.SqlServer.Types.OpenGisWktReader.ParseTaggedText(OpenGisType type)
em Microsoft.SqlServer.Types.OpenGisWktReader.Read(OpenGisType type, Int32 srid)
em Microsoft.SqlServer.Types.SqlGeometry.GeometryFromText(OpenGisType type, SqlChars text,
Int32 srid)
em Microsoft.SqlServer.Types.SqlGeometry.STGeomFromText(SqlChars geometryTaggedText, Int32
srid)

Agora que já temos dados de estados armazenados, podemos inserir dois novos registros na tabela de ruas, que na verdade são de rodovias.
Veja na Figura 2 os pontos de duas rodovias, uma que vai de São Paulo até o Rio de Janeiro e outra que vai do Rio de Janeiro até Minas
Gerais.

Para inserir estes dados, vamos utilizar uma


linha começando em um ponto e
terminando em outro, reparem que neste
exemplo não é necessário iniciar e terminar
no mesmo ponto.

INSERT INTO tblRua(ruaNome,


ruaGeometrico) values
('São Paulo - Rio',
geometry::STGeomFromText
('LINESTRING (45 5, 63 18, 82
27, 93 23)', 0));

INSERT INTO tblRua(ruaNome,


ruaGeometrico) values
('Rio - Minas',
Figura 2. Estrada de São Paulo, Rio de Janeiro e Minas Gerais. geometry::STGeomFromText
('LINESTRING (93 23, 95 29, 87
38, 86 48)', 0));
7
Dados Espaciais no SQL Server 2008

Agora já existem os dados na tabela de Estados e Ruas. Se realizar um SELECT nestas duas tabelas, os dados estarão lá, mas não é tão simples
de se interpretar. Os dados geométricos são armazenados como Binary.
Mas para provar que os dados realmente existem e funcionam, uma consulta retornando a intersecção entre as ruas e os estados é realizado,
e seus retornos provam o que existe em banco.

SELECT ruaNome, estNome


FROM estado e, rua r
WHERE r.ruaGeometrico.STIntersects(estGeometrico) = 1
ORDER BY ruaNome

Um método de intersecção baseado na rua, verifica os dados dos pontos criados pelos polígonos e retorna “1” para quando os dados são
válidos.
Repare que o resultado somente mostra os dados das ruas que passam pelos estados que foram criados anteriormente.

ruaNome estNome
------------------------- -------------------------------------
Rio - Minas Rio de Janeiro
São Paulo - Rio São Paulo
São Paulo - Rio Rio de Janeiro

(3 row(s) affected)

Com isso, é possível ver a pequena ponta o ice-berg que temos em mãos agora. Com o SQL Server 2008 será possível integrar os dados
geográficos com serviços de mapas como o Virtual Earth. Assim que possível monto um artigo abordando esta integração. Por enquanto, vão
estudando estas interecções.

Até o próximo artigo.

Diego Nogare (diego.nogare@hotmail.com) é graduado em Ciência da Computação e Pós-Graduado em Engenharia de Computação com ênfase em
Desenvolvimento Web com .NET, Colaborador do Portal Linha de Código, co-Líder do grupo de usuários Codificando .NET, co-Líder dos Microsoft Student
Partners (MSP) de São Paulo e Microsoft Most Valuable Professional (MVP) em SQL Server, possui certificações MCP e MCTS em SQL Server 2005, é
palestrante em eventos da Microsoft, Codificando .NET e INETA BR, mantém o site: www.diegonogare.net.
8

Usabilidade Web: Diretrizes e Tendências


Atualmente, grande parte dos trabalhos de pesquisa e desenvolvimento na área de computação e informática são focados
sobre aspectos funcionais de sistemas. Assim são poucos os grupos de pesquisa e empresas que atuam na área de Interface
Humano-Computador (IHC) no Brasil, e que busquem por soluções de design e avaliação de interfaces, sejam interfaces
desktop ou para internet. Entre os grupos de pesquisa que atuam nessa linha, podemos citar o Instituto de Computação da
UNICAMP, a UFSCar, a Poli-USP, a PUC-RIO, a UFSC, a PUC-RS, etc. Entre as empresas, podemos destacar a Simples
Consultoria, Usability, Mercedes Sanchez usabilidade, etc.

A ênfase deste artigo será sobre a Usabilidade Web, particularmente considerando-se um dos “papas” da área,
Jakob Nielsen. Podemos destacar alguns livros, entre eles: 1 – Nielsen, J.. Projetando Websites, Editora Campus, 2 – Nielsen,
J., Loranger, H.. Projetando Websites com Usabilidade, Editora Campus, etc. Além destes, podemos destacar o livro “Design
e Avaliação de Interfaces Humano-Computador”, de Heloisa Vieira da Rocha e Maria Cecília Calani Baranauskas, Editora da
Unicamp, livro este o qual fui revisor, e trata-se de uma referência interessante :) . Ainda, no livro “Tecnologia da
Informação e Educação: Pesquisas e Aplicações”, da Andross Editora, que tem como organizadores Carlos Fernando de
Araújo Jr e Ismar Frango Silveira, tive um capítulo sobre “Interfaces Não-Convencionais”. Vale a pensa conferir :) .

Em se tratando de usabilidade web, um dos fatores primordiais a ser considerado é a simplicidade. Conforme
salienta Nielsen, “aprecie a simplicidade e concentre-se nos objetivos do usuário em vez de um design ostensivo”. De nada
adianta um website ser repleto de recursos funcionais e elementos de conteúdo, se ele não é simples, e se ele não permite
ao usuário atingir seu objetivo com facilidade. È importante destacar que os usuários da web são pessoas extremamente
direcionadas a objetivos. Segundo Nielsen, as quatro razões para que os usuários voltem ao seu site são: (i) conteúdo de alta
qualidade, (ii) atualizações constantes, (iii) tempo de download mínimo e (iv) facilidade de uso.

Podemos considerar que a Web é um grande meio de comunicação, muitas empresas nasceram e se mantém no
mercado, graças ao desenvolvimento da Internet e da WWW. Para melhor veicular a informação e o conteúdo
disponibilizados em um portal, a escrita (e também a leitura) da informação deve se ajustar a espaços de informação não-
lineares, ou seja, os designers (escritores) devem escrever utilizando hipertextos, e os usuários (leitores) devem ler sem a
segurança de precisar apenas virar a página.
Considerando-se o design web, as páginas devem ser dominadas pelo conteúdo de interesse do usuário. Uma questão
importante é que o espaço em branco contido em uma página não é necessariamente inútil. Por exemplo, ao invés de utilizar
uma linha para separar itens de conteúdo (além disso, uma linha consome processamento de máquina para sua colocação na
tela), muitas vezes é melhor usar espaço em branco. Segundo Nielsen, a cada três bytes economizados em recursos, temos
um ganho de um milisegundo.

Uma área que está recebendo bastante destaque ultimamente, é a questão sobre acessibilidade. A acessibilidade
trata dos critérios para o desenvolvimento de sistemas computacionais (seja desktop ou web) para pessoas com
características especiais, como cegos, definição motora, etc. O W3C Consortium (http://www.w3.org/) possui critérios bem
definidos para o desenvolvimento de aplicações web acessíveis. Atualmente, no Brasil, está ocorrendo um
9

Usabilidade Web: Diretrizes e Tendências


movimento para que os portais governamentais tornem-se web acessíveis. Não podemos ter a impressão de que um
website por si só, pode suprir todos os problemas e necessidades de um usuário que por exemplo tenha uma deficiência
visual; é necessário que esteja instalado um software leitor de tela, como o Virtual Vision, o DosVox, etc. A partir do
momento em que um desses softwares esteja instalado, o website precisa ter sido concebido sob alguns critérios, descritos
a seguir. O uso de imagens em websites é um dos grandes problemas para pessoas com deficiência visual, isso porque o
software leitor não consegue ler o conteúdo de imagens, ou seja, nesse caso o designer deveria oferecer mais de uma forma
de acesso ao conteúdo, não somente através da imagem, mas também através de textos, tabelas, etc. O uso do atributo
ALT, na programação HTML para as imagens, é fortemente recomendado, pois o leitor de tela consegue captar a
informação contida nesse atributo ALT e veicular para o usuário com a deficiência visual.

Quando nos referimos à criação de links (também chamados de hiperlink ou hipertexto) para um website, alguns
critérios devem ser considerados. O nome dos links não deve ser longo, além disso, deve-se evitar ao máximo usar links do
tipo “CLIQUE AQUI”. Em vez de colocar o título “CLIQUE AQUI”, o usuário deveria colocar como nome do link, algo
relacionado ao conteúdo pertinente àquele link (usar nome significativo). Um cuidado que precisamos ter com relação aos
links é na escolha das cores. O browser (Internet Explorer, Mozilla ou outro) geralmente já possui um padrão de cores pré-
definido, para links, links visitados, links pressionados. Se alterarmos o esquema de cores definido para links pelo browser,
podemos dificultar a utilização do sistema pelo usuário final.

Em se tratanto da escrita para a internet, devemos disponibilizar conteúdos com correção gramatical, entretanto, a
apresentação do conteúdo de forma atraente é fator crucial. Segundo Nielsen, não podemos escrever na web mais do que
50% do texto que escreveríamos em uma publicação impressa. Ainda, segundo Nielsen, devemos escrever tendo em vista a
facilidade de leitura (usando blocos de texto pequenos, parágrafos curtos, subtítulos, listas com bullets – marcadores, etc) e
usando hipertexto para fragmentar as informações. Ainda, na escrita para web, devemos ter em mente que usuários web
não tem tempo para ler muito material, neste caso, para chamar a atenção do usuário, deve-se iniciar o conteúdo de cada
página pela “conclusão”, deve-se abordar uma idéia por parágrafo; e para aqueles designers que costumam utilizar o humor
sem restrições, cuidado!!! Ele deve ser utilizado moderamente.

Quando definimos o título de uma página, devemos ter uma atenção especial; eles são utilizados como a principal referência
às páginas. O título é um conteúdo muito importante (é um microconteúdo segundo Nielsen), pois é uma das informações
primárias detectadas por sistemas de busca. Ainda, segundo Nielsen, temos de quarenta a sessenta caracteres para
especificar um título, além disso, páginas diferentes devem ter títulos diferentes. Precisamos ter em mente, que quando o
usuário tem interesse pelo nosso site, ele pode anotá-lo em seus bookmarks, dessa forma, o título deve ter sido concebido
com um nome significativo, e que tenha haver com o negócio, conteúdo ou produto oferecido no portal.
Para prover a legibilidade do website, devemos utilizar cores com alto contraste entre o texto e o fundo, além disso,
precisamos usar fundo com cores lisas ou padrões sutis (elementos gráficos no fundo podem interferir na leitura). Os
designers precisam usar fontes de tamanho suficiente para que os usuários consigam ler, e as fontes recomendadas para
leitura na web são aquelas que não possuam serifa (por exemplo, times new roman), como o arial, verdana, etc.
10

Usabilidade Web: Diretrizes e Tendências


Ainda, segundo Nielsen, devemos evitar o uso de maiúsculas, pois são dez por cento mais lentas na leitura.

Quando falamos sobre o design das páginas, a homepage merece cuidado especial, pois trata-se da porta de entrada
do portal. Ela deve ter um design diferente das páginas restantes e não deve ter um botão Home. Deve estar claro na home
as seguintes metas: onde estou? e o que faz esse site? Ainda, a home deve possuir um (i) detalhamento com as principais
áreas de conteúdo do site, (ii) um resumo das notícias e promoções do site e (iii) algum recurso de busca.

Em síntese, a usabilidade tem papel fundamental no desenvolvimento de aplicações, e ganhou mais destaque com o
advento da Internet e da WWW. Como o usuário da Internet é um usuário diversificado, devemos promover simplicidade,
aliada à gama de recursos, conteúdos e funcionalidades disponibilizados. Além disso, como a internet oferece um espaço de
informação para acesso aos conteúdos, de maneira não-linear, o esquema de navegação deve ser planejado e estruturado de
maneira a tornar mais fácil o acesso do usuário, aos objetivos e tarefas propostos.

Referências
Araújo Jr, C.F. de, Silveira, I.F. (2007). Tecnologia da Informação e Educação: Pesquisas e Aplicações, Andross Editora.
Nielsen, J. (2000). Projetando Websites, ed. Campus.
Nielsen, J., Loranger, H. (2007). Projetando Websites com Usabilidade, ed. Campus.
Rocha, H.V. da, Baranauskas, M.C.C. (2003). Design e Avaliação de Interfaces Humano-Computador, ed. da Unicamp.

Juliano Schimiguel (juliano.schimiguel@unicsul.br) é Doutor em Ciência da Computação pelo Instituto de Computação da UNICAMP,
Professor Adjunto I da UNICSUL – Universidade Cruzeiro do Sul, Coordenador do NUTTEC – Núcleo de Treinamento em Tecnologia
da UNICSUL e atua junto ao Curso de Pós-Graduação de Engenharia de Websites com ênfase em .NET da UNICSUL
11 C# 3.0
Novidades

Propriedades Automáticas (Automatic Properties)

Nesta série iremos abordar algumas novidades incluídas na versão 3.0 do Visual C#.
Para iniciarmos iremos falar sobre o recurso Automatic Properties(Propriedades Automáticas).
Nas versões anteriores ao Visual C# 3.0, quando precisamos criar propriedades dentro de uma classe C#, sempre precisamos declarar o
método GET e o método SET, além claro de um FIELD para armazenar o valor da propriedade. Vendo como ficaria, segue um exemplo
de classe usando propriedades codificadas em C# 2.0:

using System;
Analisando a classe ao lado, conseguimos identificar o trabalho e
namespace PropertiesAutomatics “dificuldade” em declarar suas propriedades utilizando para isso a
{ estrutura do Visual C# 2.0, sendo assim a Microsoft anunciou para o
public class Computador Visual C# 3.0 o recurso “Automatic Properties”, – Propriedades
{
private string _Marca; Automáticas – recurso que permite aos desenvolvedores omitir a
private string _Processador; declaração do FIELD correspondente bem como as operações feitas pelos
private string _HD; métodos GET e SET.
private string _Memoria;

public string Marca Utilizando Visual C# 3.0, nossa classe fica da seguinte forma:
{
get { return _Marca;}
set {_Marca = value;}
} using System;

public string Processador namespace PropertiesAutomatics


{ {
get { return _Processador; } public class Computador
set { _Processador = value; } {
} public string Marca { get; set; }
public string Processador { get; set; }
public string HD public string HD { get; set; }
{ public string Memoria { get; set; }
get { return _HD; } }
set { _HD = value; } }
}

public string Memoria


{
get { return _Memoria; }
set { _Memoria = value; }
}
}
}
12 C# 3.0
Novidades

Como podemos notar a classe fica mais clara e com menos


código, sem dúvida aumentando a produtividade do
desenvolvedor.
Para conferir o trabalho feito pelo Visual C# 3.0 ao inicializar
os objetos da classe vamos criar um projeto e analisarmos seu
código IL com o IL DASM.
Usando o modelo do Visual C# 2.0(primeiro exemplo)
podemos verificar que todos os FIELDS estão criados.

Já utilizando o modelo do Visual C# 3.0, podemos verificar que


ele também cria os FIELDS, porém de maneira automática.
Vendo este recurso sem dúvidas será um dos mais utilizados
pelos desenvolvedores no Visual C# 3.0, porque alem de
proporcionar mais praticidade na hora de codificar, ele deixa o
código mais enxuto evitando assim erros.

Extension Methods (Métodos de Extensão)


Dando continuidade a nossa série, vamos falar de um dos novos
recursos com maior expressão na linguagem e no .NET 3.5, a
possibilidade de criar métodos de extensão (extension methods).
Extension Methods, são métodos estáticos que podemos utilizar
para estender funcionalidades de classes especificas do .NET.

Declarando um Extension Method


Para declararmos novos métodos de extensão, primeiro pre-
cisamos saber que o funcionamento dos métodos é semelhante
aos métodos estáticos, portanto, você só pode declará-los em
classes estáticas. Segundo, sempre que formos declarar um ex-
tension method, vamos especificar a palavra-chave this como
primeiro parâmetro do método. Vamos ver um exemplo:
13 C# 3.0
Novidades

namespace ExtensionMethods Podemos notar no exemplo a


{ diferença de comportamento
entre um método estático e o
public static class ExtMethods
{ novo extension method. Repare
//Static Method - Maneira tradicional que devido a declaração da
public static int ConvertInt32Static(string s) palavra this antes do parâmetro
{ do método de extensão, o .NET
return Int32.Parse(s); Framework “incorporou” o
}
método à classe string. Podemos
//Extension Method - Nova funcionalidade notar a presença mais exata do
public static int ConvertInt32Ext(this string s) método extensivo na classe
{ através IntelliSense, com
return Int32.Parse(s); mostrado abaixo:
}
} Agora vamos enumerar as
diferenças entre os métodos
class Program
{ estáticos (Static Methods) e os
static void Main(string[] args) métodos de extensão (Extension
{ Methods):
//Valor
string Valor = "9";
//Executando um extension method
int ExtMethod = Valor.ConvertInt32Ext();  Para declaração de métodos
de extensão (Extension
//Excutando um Static Method
int StaticMethod = ExtMethods.ConvertInt32Static(Valor); Methods) precisamos declarar
antes do primeiro parâmetro a
//Exibe os valores palavra-chave this. Já para os
Console.WriteLine("Extension Method: " + ExtMethod); métodos estáticos (Static
Console.WriteLine("Static Method: " + StaticMethod); Methods) não temos a palavra.
Console.ReadLine();
}  Quando consumimos um
}
} método de extensão, o
parâmetro declarado no método
é omitido, como podemos notar
no primeiro exemplo. No método estático precisamos especificar o
valor como parâmetro.

 Métodos de Extensão só podem ser declarados em classes


estáticas, o que não é exigência para métodos estáticos.
14 C# 3.0
Novidades

Trabalhando por dentro do IL

Se formos olhar e analisar o IL gerado pela aplicação mostrada no exemplo 1 temos a seguinte informação:

Abaixo temos o código IL do método de extensão o


ConvertInt32Ext.

Podemos notar no código grifado de vermelho a


presença do atributo no método declarando-o como
extension method.

.method public hidebysig static int32 ConvertInt32Ext(string s) cil managed


{
.custom instance void [System.Core]
System.Runtime.CompilerServices.ExtensionAttribute::.ctor() = ( 01 00 00 00 )
// Code size 12 (0xc)
.maxstack 1
.locals init ([0] int32 CS$1$0000)
IL_0000: nop
IL_0001: ldarg.0
IL_0002: call int32 [mscorlib]System.Int32::Parse(string)
IL_0007: stloc.0
IL_0008: br.s IL_000a
IL_000a: ldloc.0
IL_000b: ret
} // end of method ExtMethods::ConvertInt32Ext
15 C# 3.0
Novidades

E agora o código IL do método estático ConvertInt32Static.

.method public hidebysig static int32 ConvertInt32Static(string s) cil man-


aged
{
// Code size 12 (0xc)
.maxstack 1
.locals init ([0] int32 CS$1$0000)
IL_0000: nop
IL_0001: ldarg.0
IL_0002: call int32 [mscorlib]System.Int32::Parse(string)
IL_0007: stloc.0
IL_0008: br.s IL_000a
IL_000a: ldloc.0
IL_000b: ret
} // end of method ExtMethods::ConvertInt32Static

Porque usar Extension Methods?

Bom, depois de tudo isso você pode estar se perguntando... Porque usar os métodos de extensão?

Simples, por absoluta conveniência.

Vamos explicar melhor , suponha que você tenha passado anos desenvolvendo um Framework com funções usuais no dia a dia e que
você quis disponibilizar a classe para uso externo. Quando alguém quiser consumir alguma função dela o desenvolvedor necessitará
conhecer o nome da classe completo para poder executar o método estático desejado, algo como no exemplo abaixo:

Varivel = MeuFramework.

Neste ponto teremos o IntelliSense que lhe fornecerá todas as funções disponíveis, bastando você escolher a sua e fornecer os
parâmetros necessários.

Varivel = MeuFramework.FuncaoDesejada(Valor);

Os extension methods nasce como um novo mecanismo para invocar métodos estáticos em objetos instanciados.

Até o próximo.

Adriano Bertucci (adriano@bertucci.com.br ) é Microsoft MVP em Visual C#, vem trabalhando com Arquitetura e desenvolvimento de softwares a
oito anos, sendo que .NET desde 2002. Líder do grupo Build Brasil. Atualmente trabalha como líder de desenvolvimento em soluções para
plataforma Microsoft. Membro do Board INETA, responsável pelo grupos no estado de SP, vem trabalhando a três anos na disseminação da
plataforma .NET, através de treinamentos, palestras e reuniões, as quais já atingiram cerca de 8000 pessoas em todo Brasil. Speaker INETA Brasil e
Culminis, Colunista do Portal Linha de Código, IMaster e MSDN Brasil.
Blog: www.adrianobertucci.com
16
Babilônia – 2500 A.C.

Todos falam a mesma língua. Maravilha! "Vamos construir uma torre alta o suficiente para chegar aos céus". Sim, alguém teve
essa idéia brilhante...

Lógico que Deus não gostou: "Espertões! Assim perde toda graça de ir pro céu. Para entrar aqui tem de fazer um monte de
coisas que não tem nada a ver com esse artigo! Vai cada um pra um canto e todo mundo vai falar uma língua diferente!".
Desde então, é só atravessar um rio um pouco mais largo que já não entendemos mais nada do que estão falando.

Campinas – 2008 D.C.

Um tal de Alan Turing veio e disse: "Faça-se o computador". Foi um pouco mais difícil que no caso de Deus. O Turing,
coitado, não terminou em 7 dias com direito a descanso. Ele, como todo computeiro depois dele, teve de passar várias
noites em claro até que desse certo.

Depois dele veio um monte de gente, mas o problema já tinha sido criado há mais de 4500 anos: ninguém se entende, muito
menos os computadores.

Criaram-se vários idiomas para eles e, em geral, muito pouco do que um entende, o outro entende do mesmo jeito –
quando entende alguma coisa.

Independente de você estar interagindo com sistemas de um parceiro, acessando dados de um mainframe, conectando-se a
aplicativos escritos em diferentes linguagens de programação ou tentando fazer o logon em sistemas múltiplos, a integração
entre tecnologias heterogêneas, simultânea à redução dos custos, é atualmente uma dor de cabeça constante pra quem
trabalha com TI.

Depois de bater um pouco a cabeça (que já doía), descobriu-se que não havia uma maneira mágica de resover esse
problema. As camadas de middleware não funcionam bem; compatibilidade, a nível de código, é inviável e é até difícil achar
um adjetivo para o quão difícil seria tornar os sistemas intercambiáveis. A solução, como uma aspirina, foi óbvia. Deram para
ela o nome feio de interoperabilidade.

Ela segue a idéia básica do porquê da internet funcionar em várias plataformas: protocolos. Com o conhecimento comum de
protocolos básicos, os diferentes softwares podem interagir consistentemente, com pouco ou nenhum conhecimento dos
demais.

Esse compromisso com comunicação entre programas vem sendo exigido de empresas que produzem software e a
"interoperabilidade por design" vem se tornando essencial para lidar com a heterogeneidade do mercado.
Afinal, descobrimos que construir pontes é mais seguro do que fazer torres.

Equipe LMS: Raul Kist, Henrique Baggio, Bruno Melo e Daniele dos Santos – construtores de pontes.
Plantas disponíveis em http://www.codeplex.com/LMSU.
17 Introdução ao WPF

WPF-(Windows Presentation Foundation)foi um recurso inserido na versão do framework .NET 3.0 e possibilita que o designer e o
desenvolvedor possam em uma mesma tecnologia atuar em conjunto.
Sendo assim se proporciona uma estabilidade para a criação de aplicações ricas em termos de funcionalidades gráficas ao usuário e
como também a total da separação da interface do usuário das regras de negócio.
Possue características que fazem com que se possa visualizar que a criação de interfaces mais dinâmicas em aplicações windows é
possível e viável e que muitas vezes não se precisa criar algo web para ter uma aplicação que interaja com o usuário.
E abaixo apresento características que são elementares para a compreensão do funcionamento interno do WPF.
• Incorpora todas as funções do .NET 2.0, acrescentando às interfaces novos recursos como 3D, animações, gráficos vetoriais,
reconhecimento de voz, layouts avançados, entre outros;
• Leva para o desktop o conceito já existente na Web de separação entre o design e o código, permitindo que a interface seja criada
por um designer e o código por um programador especializado, de maneira independente;
• Usa os recursos do sistema operacional, de maneira a otimizar a performance da interface para o hardware do usuário;
• Os controles podem ser personalizados a qualquer nível que se queira, por exemplo, podemos criar um botão não retangular que
contém uma animação 3D, sem a necessidade de escrever código para isso.
• é independente de plataforma; o mesmo código-fonte funciona tanto na web quanto para desktop e, no futuro poderá ser distribuído
até em sistemas como Mac, Linux e celulares, usando o WPF/E (WPF Everywhere, que está em desenvolvimento).
Para se desenvolver em WPF utilizamos XAML(eXtended Aplication Markup Language, pronuncia-se “zémel”), e um código para .NET
(que pode ser escrito em qualquer linguagem compatível, VB.net, C#, etc).
Em um arquivo XAML contém as diretrizes de interface, podendo ser comparado ao XHTML em relação ao ASP.NET
Um arquivo em XAML funciona da seguinte forma quando se cria uma tag de abertura se há a necessidade de fechá-la.deve possuir um
ROOT por conter informações relativas a todos os elementos existentes em WPF.
Através de dois exemplos poderemos verificar a aplicação dos conceitos explanados acima.

<grid>
<label/> Requisitos de Instalação do WPF
<button/>
</grid> Necessário Windows XP SP 2,Windows server 2003 ou
Vista. O .NET 3.0 instalado caso você não possua o Visual
<grid> Studio 2008 instalado em sua máquina
<label/>
<button/> Placa de vídeo de no mínimo de 128 bits para melhor
</grid> visualização dos recursos gráficos a serem desenvolvidos.
<Label x:Name="Label">
<Label.Content> Alô, Mundo </Label.Content>
</label> Funcionamento interno do WPF
Esta figura ilustra que o WPF possue acima do .net
framework que são chamadas de windows base,presentation framework e presentation core e outras abaixo do .NET Framework e
próximas ao sistema operacional que são chamadas de USER32.DLL,MILCORE.DLL,DIRECTX.
Explicarei abaixo o funcionamento de cada uma camadas existentes no WPF:
 Windows base é responsável pelo gerenciamento de serviços próximos ao sistema operacional ou seja o seu uso exclusivo do wpf.
 Presentation framework gerenciar os controles,suportes a estilos e templates
 Presentation core gerencia a criação de gráficos,animações e transformações.
 USER32.DLL responsável pela alocação e posicionamento de janelas e comunica os inputs realizados pelos usuários nas janelas.
 MILCORE.DLL responsável pela integração de código gerenciado e não gerenciado
 DIRECTX responsável pelo desenho da interface dos elementos gráficos da interface.
18 Introdução ao WPF

O Diagrama a seguir explanar que a maioria das classes


existentes está sob o namespace system.windows e mostra as
principais classes existentes no WPF.
Podemos perceber que a maioria das classes do WPF herdaram
de forma direta ou indireta da classe abstrata da
DispatcherObject.Pois ela é uma classe abstrata que oferece as
suas classes derivadas o suporte básico ao controle de
concorrência e execução.
Dentro do sistema de threads do WPF se usa o modelo de
STA(Single Thread Affinity)onde cada thread lógica pertence a
uma única thread do sistema operacional.
Porque quando um aplicativo entra em execução em WPF duas
threads que são usadas para o tratamento de
imagens,comunicação com o aplicativo,tratamento de
eventos,execução do código e estas ações necessárias para
podermos ter desempenho em uma aplicação WPF.

Depois de já termos explanado conceitos introdutórios de


WPF.Agora vamos realizar a construção de um componente
WPF para fixarmos os conceitos elementares dessa tecnologia.

Criando um componente WPF


Com o Visual Studio 2005 (utilizamos a versão Standard neste
artigo), ou CTP do Visual Studio Orcas, o .Net Framework 3.0 e
as extensões do WPF & WCF para Visual Studio 2005 instaladas,
surge na tela New Project, uma outra classe de projetos, que
corresponde a projetos do .Net Framework 3.0, como mostra a
figura abaixo.

Fig. 1: Nova categoria de Projetos: NET Framework 3.0


19 Introdução ao WPF

Os novos tipos de projetos disponíveis são:


- Windows Application (WPF): cria uma aplicação WPF;
- XAML Browser Application (WPF): cria uma página web que utiliza WPF;
- Custom Control Library (WPF): cria um User Control WPF;
- WCF Service Library: cria um serviço WCF.
Como queremos criar um controle WPF, precisamos selecionar o tipo de projeto “Custom Control Library (WPF)”.
Ao criarmos o projeto, temos que estender uma área para construir nosso User Control. Estenda a área, adicione 2 TextBoxes e um
Button de forma que a tela fique parecida com a tela abaixo.
Caso você prefira, utilize o código XAML abaixo, que representa o layout do nosso User Control.

[XAML]
<UserControl
x:Class="LibraryWPFDemo.UserControl1"
xmlns="http://schemas.microsoft.com/
winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/
winfx/2006/xaml" Height="224" Width="297">

<Grid>
<TextBox Height="26" Margin="32,33,52,0"
Name="textBox1" VerticalAlignment="Top">
</TextBox>
<Button Height="23" Margin="32,67,53,0"
Name="button1" VerticalAlign-
ment="Top">Button</Button>
<TextBox Margin="33,95,54,51"
Name="textBox2"
Text="Exemplo WPF Dot Net Raptors"></TextBox>
Fig. 2: Layout do User Control </Grid>
</UserControl>

Para nosso User Control ter alguma funcionalidade, precisamos criar um Event Handler para o botão. A idéia é que, ao clicarmos no
botão, o texto do textBox2 seja alterado para o seu próprio texto mais o texto que estiver digitado no textBox1. Vamos então criar o
método que irá tratar esse evento no Code Behind do User Control (que é o arquivo de extensão .cs ou .vb que fica abaixo do arquivo
XAML na tela Solution Explorer):

[VB]
Private Sub cliqueDoBotao(ByVal sender As System.Object, ByVal e As System.EventArgs)
TextBox2.Text = TextBox2.Text + " " + TextBox1.Text
End Sub

[C#]
public void cliqueDoBotao(object sender, EventArgs e)
{
textBox2.Text = textBox2.Text + " " + textBox1.Text;
}
20 Introdução ao WPF

Para completar nosso User Control, precisamos associar o evento Click do button1 com o Event Handler criado. Para isso,
modificamos a linha que representa o botão no código XAML, adicionando a instrução de tratamento do Click:

[XAML]
<Button Height="23" Margin="32,67,53,0" Name="button1" VerticalAlignment="Top"
Click="cliqueDoBotao">Button</Button>

Feito isso, temos nosso User Control pronto. Vamos partir agora para a criação da nossa Windows Forms Application que conterá
esse User Control criado.

Conclusão
Este artigo teve como objetivo ilustrar que o WPF é uma tecnologia que desde que foi criada rompeu com paradigmas significativos na
criação de aplicações windows.
Pois sabemos que com o uso desta tecnologia podemos realizar a criação de aplicações dinâmicas e interativas sem a necessidade de
ferramentas web para tal feito.
Porque o XAML é a sintaxe básica usada nessa tecnologia e juntamente com isso podemos intercambiar o uso do WPF em outras
tecnologias como por exemplo:WPF no Microsoft Blend.
Existem muitas pessoas que ainda confundem o Silverlight com o WPF.Porém devemos que o WPF é uma tecnologia que visa melhorar
e aprimorar o layout e a inserção de vídeos em aplicações windows e o Silverlight é uma tecnologia que seria um mini-WPF que
voltado para o padrão animação vetorial e é a proxima geração de conteudo multimídia e interatividade para internet. Sua instalação é
feita através de um pequeno plug-in com menos de 2 MB feita sob demanda, ou seja, não se assuste se de repente aquele seu site
favorito que você acessa diariamente de repente solicitar para que seja realizada a instalação deste plug-in para que você possa
aproveitar todo o conteúdo multimídia disponível.
Espero que este artigo seja útil a vocês para poderem experimentar e inovar com o WPF.

Juliana Prado Uchôa é MSP (Microsoft Student Partner) e Líder do grupo CHANNEL TI
RECORDAR É VIVER!
22

O que é uma Célula Acadêmica da Microsoft?


Atualmente, várias empresas na área de Tecnologia da Informação disponibilizam programas e oportunidades para estreitar o relacionamento
com a comunidade acadêmica, especialmente os alunos. Podemos citar exemplos da Microsoft, que possui diversos programas acadêmicos
como “Células Acadêmicas e Imagine Cup”, cujo o objetivo é difundir as tecnologias.
No nosso caso, Células Acadêmicas Microsoft, os alunos montam grupos de estudo, criam um cronograma e realizam reuniões semanais/
quinzenais para estudo, discussão e desenvolvimento de projetos, focando as tecnologias Microsoft.
A Microsoft disponibiliza materiais online, para que os alunos possam ter acesso para seus estudos. Na célula, geralmente temos um líder, um
vice-lider e vários outros membros chamados de flutuantes. Com iniciativas semelhantes à uma Célula Acadêmica Microsoft, os alunos tem o
seu conhecimento técnico incrementado, contribuindo com a formação que eles possuem no curso de graduação regular.
Através da iniciativa de uma Célula Acadêmica, os alunos podem participar do Imagine Cup, tendo a possibilidade inclusive de participar da
final mundial.
Uma das grandes possibilidades para os alunos que participam de Células Acadêmicas Microsoft, é que ser tornem MSP’s – Microsoft Student
Partner. Os MSP’s tem como finalidade difundir a tecnologia Microsoft através de eventos, palestras, semanas de curso, nas instituições de
ensino.
Já os MVP’s são aqueles profissionais que são reconhecidos, confiáveis e acessíveis, com experiência em alguma tecnologia Microsoft e que
participam ativamente em comunidades relacionadas, afim de compartilhar seus conhecimentos com outros membros. Este título é atribuído a
estes profissionais geralmente por merecimento, resultado de seus conhecimentos e de sua participação positiva na comunidade.
Ainda, as Células Acadêmicas Microsoft tratam-se de um grupo de estudos com material oferecido pela própria Microsoft, que possibilita a
muitos jovens em toda a América Latina um melhor preparo para o mercado de trabalho, colocando-os em vantagem competitiva.
Este artigo demonstra a importância da inserção de grupos de estudo avançados nas universidades, particularmente com ênfase nas Células
Acadêmicas Microsoft, além disso, descrevemos as atividades da atual Célula Acadêmica na área de Dev – desenvolvimento, do campus Anália
Franco da Unicsul.

Metodologia

Através de um workshop promovido na universidade onde fazemos graduação (UNICSUL), tivemos conhecimento deste projeto da Microsoft
e nos interessamos bastante; pois atualmente os cursos preparatórios para Certificação Microsoft que existem, são investimentos em uma
faixa de valores que não são acessíveis a todos os universitários, e, dentre outros motivos, iniciamos o desenvolvimento desta Célula
Acadêmica.
A ênfase de nossa Célula Acadêmica Microsoft foi em Dev - desenvolvimento, também existe a possibilidade de montar Células nas
áreas de Infra – infraestrutura, XNA – voltada para jogos, etc.
Como nossos horários eram escassos, devido á carga de trabalho, atividade de estágio, e claro, os estudos acadêmicos regulares, as reuniões
geralmente acontecem aos finais de semana, de sábados a tarde, na própria universidade, e contando com o apoio da equipe (professores e
funcionários), os quais nos proporcionam um ambiente favorável, com máquinas de boa qualidade e com as ferramentas necessárias
previamente instaladas.

Nossa base de estudos foi um projeto que a própria universidade


propôs, como atividade de uma de nossas disciplinas, para uma
aplicação voltada para um e-commerce. Então, com o auxilio de um
dos integrantes da Célula, que por sua vez é um profissional
certificado Microsoft, usamos o material que é disponibilizado no
portal das Células Academicas. A seguir, na Figura 1, temos uma
representação do portal que a Célula Acadêmica tem acesso.
23

O que é uma Célula Acadêmica da Microsoft?


Assim que os membros da célula tornaram -ativa- a Célula Acadêmica, os mesmos começaram a participar ativamente da comunidade, e, além
disso, agregamos o objetivo principal da célula (estudos), com o objetivo do projeto, e assim desenvolvemos a aplicação web proposta no
projeto, o que nos proporcionou uma ótima noção tanto na linguagem de programação, como na lógica matemática, possibilitando entender o
processo de criação, manutenção e identificação de necessidades que um projeto possui, para que possa ser concebido.
Pudemos desenvolver as aplicações propostas, usando-se a ferramenta de desenvolvimento Visual Studio, na qual a universidade,
sendo parceira da Microsoft no projeto MSDN AA, disponibilizou-nos, tanto em um de seus laboratórios, como fornecendo licenças dos
mesmos para instalarmos em nossas máquinas pessoais. Ainda, contamos durante o processo de estudos, com os fóruns e artigos do portal
MSDN, que é um dos principais portais sobre tecnologias Microsoft existentes na América Latina, com nossas dúvidas sendo respondidas e
reportadas por profissionais qualificados, certificados, por MSP’s e MVP’s da Microsoft, ou mesmo por outros usuários com nível de
conhecimentos diferenciados.
A célula, inicialmente possuía 6 membros, dentre alunos de 2 cursos de Tecnologia da universidade (Análise e Desenvolvimento de
Sistemas e também Sistemas para Internet), além da participação e o auxílio de professores e de MSP da Microsoft.

Resultados

Depois de cerca de 3 meses de reuniões, por volta de 8 reuniões, nosso projeto se concluiu, de forma que obedecesse todos os requisitos
que foram solicitados pelos professores responsáveis pela matéria e exigiram, todos sendo criados com o máximo que pudermos aproveitar
das tecnologias da plataforma dotNet, e conseguimos alcançar o conceito máximo nas disciplinas.

Discussão

Com base nesta experiência, pudemos chegar à conclusão de que conhecimento e crescimento técnico e profissional, depende apenas da
vontade dos alunos de irem atrás destas oportunidades, os meios existem e são acessíveis, apenas esperando serem alcançados, e esta
conclusão foi confirmada depois que dois membros da Célula conseguiram estágio na área de desenvolvimento, para trabalharem em
projetos desenvolvidos com tecnologia .Net.

Conclusões

Esperamos que com este artigo, tenhamos deixado claro e mais popular as funções das Células Acadêmicas Microsoft, e os benefícios que elas
podem nos proporcionar.

Bruno Gabriel (brunofgabriel@hotmail.com) está cursando Tecnólogo em Análise e Desenvolvimento de Sistemas, Líder de Célula Acadêmica da Microsoft
com ênfase em Desenvolvimento .Net, Desenvolvedor ASP e .Net para aplicações web e windows.
24 Visão geral do WCF – (Windows Communication Foundation)
Definição:
O Windows Communication Foundation, mais conhecido como WCF, representa um conjunto de tecnologias .NET para construir e
executar sistemas conectados, conforme definição da própria Microsoft.
É uma infraestrutura de comuniçação de aplicação que foi construída com base na arquitetura dos Web Services, sendo projetada para
construir aplicações distribuídas no modelo orientado a serviço e sendo apresentada também como a plataforma da Microsoft para o
SOA (Service Oriented Architecture).
O WCF consolida um pouco mais a evolução da programação como temos vivido nos últimos tempos, onde antes utilizamos várias
tecnologias distintas para satisfazer diferentes cenários de aplicações distribuídas como COM+, Remoting, WSE (Web Service
Enhancemnts), Web Service e Messaging, sendo que o WCF visa consolidar todas estas tecnologias, se apresentando como a evolução
destas, afim de tratar cenários de aplicações distribuídas de forma mais simples, mais objetiva e em um modelo unificado.
A vantagem disto tudo, é que cada vez mais gastaremos menos tempo com as decisões de implementação técnica em si e aplicaremos
mais tempo na solução de business. Porém, isto não indica que não precisamos mais definir uma solução técnica, significa apenas que com
um modelo unficado ficará mais facil trabalhar na implementação da solução.
Apenas uma consideração: a definição para os conceitos de design do SOA é independente de tecnologia e visa criar serviços
direcionados no negócio, permitindo a utilização destes serviços sem qualquer conhecimento da implementação destes. Em resumo, não
basta apenas eu publicar um web service na internet ou intranet para dizer que tenho uma aplicação totalmente aderente ao SOA, já que
esta arquitetura é muito mais abragente do que parece, portanto tenha cuidado.

Arquitetura Geral:
A concepção da solução de negocio dentro do WCF se encontra na forma de serviços, onde a estrutura destes serviços é composta de :
Host (Service Host): Fornece o ambiente onde o serviço WCF é executado.

Contrato (Service Contract): É uma interface que define as operações definindo como o processo de comunicação troca mensagens.

Classes do .NET Framework: Permite usar alguns atributos do WCF para determinar características do serviço como sessões, tempo de
vida, entre outros.
As aplicações clientes enviam mensagens e recebem respostas através de endpoints que conectam nos serviços WCF, normalmente o
cliente usa um objeto proxy que esconde a complexidade do canal de comunicação e faz o serviço remoto parecer um componente local.
Este tipo de recurso sempre foi muito utilizado na chamada dos XML Web Services do .NET.
25 Visão geral do WCF – (Windows Communication Foundation)
O serviço do WCF utiliza um objeto dispatcher para converter as mensagens recebidas do cliente em chamadas de métodos do serviço.
Um serviço WCF pode esperar por mensagens (chamadas) em um ou mais endpoints.
Para ficar mais simples segue algumas definições:
Um serviço WCF é um programa que expoem diversos endpoints. Cada endpoint é uma forma de comunicação deste serviço com o
cliente.
Um cliente é um programa que troca mensagens com um ou mais endpoints de serviços WCF.

Um serviço WCF pode ter mais de um endpoint onde, cada um destes endpoints são compostos de três elementos: Address, Binding e
Contract. Onde:
 Address: Representa o endereço de rede onde o serviço reside, exemplo: http://localhost:8001/PostalService
 Binding: Define como o serviço se comunica com o mundo, incluindo qual o transporte de comunicação (TCP, HTTP, etc),
enconding (Texto, binário) e segurança (SSL, SOAP security).
 Contract: Especifica o que o serviço comunica e basicamente é um coleção de mensagens organizadas em operações, ou para ficar
mais simples, a interface do serviço.

Portanto imaginem um cenário simplista onde eu tenha que atender a uma necessidade específica de negócio (por exemplo, cálculo de
frete, códigos postais, fechamento de pedido de compra, etc) e que a solução será consumida por aplicações clientes síncrona através da
WEB e de aplicações assincronas em um ambiente de rede local.

Para a solução, poderíamos criar um único serviço WCF que expoem operações para tratar a solução de negócio sem me preocupar
fortemente com as necessidades de comunicação das aplicações clientes. Porém na hora de expor este serviço, eu poderia simplesmente
criar um endpoint que atenderia requisições em um endereço de internet, através do protocolo HTTP, usando SSL e utilizando minha
interface do serviço como contrato. Para as aplicações clientes assincronas eu poderia utilizar um endereço na rede local, usando um
binding MSMQ e usando a mesma interface do serviço como contrato.
26 Visão geral do WCF – (Windows Communication Foundation)

Desta forma a implementação do serviço poderia ser feita sem se preocupar exclusivamente com o cenário de comunicação onde ele
será utilizado. É claro que o conhecimento dos cenários é importante no momento da implentação, pois algumas questões técnicas
podem afetar a forma de distribuição do serviço, como por exemplo os tipos de dados retornados pelas operações, os quais podem ter
limitações em alguns protocolos utilizados no binding do endpoint, mas de fato a relevância da comunicação em relação a complexidade
de implementação cai bastante.

Conclusão

Como vimos, a proposta do WCF é bem simplista, muito objetiva e aparentemente efetiva: unificar em um modelo a forma como
construímos as soluções de aplicações distribuídas. Vejo que o grande destaque, esta na forma como podemos expor um mesmo serviço
de formas diferentes, sem ter que reescreve-los com convenções específicas. Isto irá permitir que os desenvolvedores utilizem a
tecnologia da melhor forma possível.
A curva de aprendizado para a construção deste tipo de aplicação deve melhorar também, já que não será mais necessário aprender
diversas tecnologias para conseguir criar as soluções. Outro ponto a citar é a melhora na produtividade, pois o WCF simplificou muitas
das atividades de desenvolvimento para os serviços.

Adriano Luciano Candido (adriano.luciano@gmail.com) é Pós-graduado no MBA em Gestão Projetos da FGV, certificado nos títulos da Microsoft em
MCPD, MCDBA, MCSD .NET, MCSD, MCAD, MCSA . Instrutor oficial Microsoft e consultor especializado em tecnologia Microsoft e em Gestão de
Projeto, atuando a mais de 10 anos no mercado de tecnologia. Palestrante e professor de pós-graduação em diversas universidades de São Paulo.
2 7 Novos datatypes para Data e Hora – SQL Server 2008

Continuando com as novidades do SQL Server 2008, este artigo apresentará os novos tipos de dados para controlar Datas e Horas. Estes
novos tipos integram as novidades do SQL Server 2008 e trazem um ganho de performance, já que quanto menos dados desnecessários
forem armazenados, mais rápidos os dados retornam para quem os solicitou.
Para se ter uma idéia de onde se pode utilizar estes novos tipos de dados, imagine o seguinte cenário em que é necessário armazenar o tempo
de uma determinada quantidade de ações em seu sistema. Na versão 2005 não é possível armazenar um datatype de Hora, o mais próximo
seria Smalldatetime que armazena a data e a hora sem os milisegundos. Neste cenário a Data seria desnecessária, porque o objetivo é o
armazenamento das horas. Outro cenário, agora armazenando somente a Data, seria na Data de Nascimento de um cliente no qual a hora é
desnecessária e estaria ocupando espaço nas páginas do banco de dados.
Fazendo um breve comparativo entre os datatypes existentes na versão 2005 e 2008, pode-se ver que surgiram 4 novos tipos na nova versão:
Datetime2, Datetimeoffset, Date e por fim Time. E foram mantidos os tipos já existentes na versão 2005 como Smalldatetime, Datetime e
Timestamp.

Consultando o Books On-Line, é possível chegar a estas descrições para cada ítem:
Datetime2: É parecido com o Datetime existente, e pode ser utilizado como um complemento a ele.
Datetimeoffset: Representa uma data e hora completa (24Hs) e os dados de fuso-horário.
Date: Define a representação de uma data.
Time: Representa as horas no formato de 24Hs e sem utilizar fuso-horário.
Abrindo o SQL Server Management
SELECT name FROM sys.systypes WHERE name like '%date%' or name like Studio é possível consultar o
'%time%'
Database Engine e ver os resultados
name dos datatypes existentes para Data
-------------- e Hora. Veja na listagem 1 a
datetime consulta e os resultados na versão
smalldatetime 2005, e na listagem 2 a mesma
timestamp
consulta e os novos resultados
Listagem 1. Consulta e resultado na versão 2005. quando é executado na versão
2008.
SELECT name FROM sys.systypes WHERE name like '%date%' or name like
'%time%'

name
--------------
date
datetime
datetime2
datetimeoffset
smalldatetime
time
timestamp
Listagem 2. Consulta e resultado na versão 2008.
2 8 Novos datatypes para Data e Hora – SQL Server 2008

Esta busca consulta todos os DataTypes existentes no SQL Server, veja que na Listagem 2 (2008) aparecem todos os tipos existentes no 2005
e mais os novos tipos do 2008.

Agora que já temos os novos tipos de dados do SQL Server 2008, podemos criar uma tabela com esses dados e inserir uma linha e ver como
estes dados são armazenados. Acompanhe na Listagem 3 esta criação.

CREATE TABLE tbNovosTipos(campoDate Date, campoTime Time,


campoOffSet Datetimeoffset, campoDatetime2 Datetime2) Veja que neste exemplo de código
em SQL Server 2008, os novos tipos
INSERT INTO tbNovosTipos VALUES (getDate(), getDate(), getDate(), de dados são armazenados conforme
getDate())
descritos anteriormente. A primeira
campoDate campoTime campoOffSet coluna armazena somente a data, a
campoDatetime2 segunda somente a hora, a terceira e
---------- ---------------- ---------------------------------- --- quarta armazenam respectivamente a
------------------- data e hora completa com e sem
2008-07-09 09:58:28.5700000 2008-07-09 09:58:28.5700000 +00:00
fuso-horário.
2008-07-09 09:58:28.57

Listagem 3. Criação da tabela, inserção de dados e resultado.

Para provar o desempenho, vamos analisar o resultado utilizando o DBCC ShowContig, já apresentado anteriormente em outra edição da
revista. (Veja a edição de Agosto/2007).
Primeiro será criado todo o processo no SQL Server 2005 e depois no 2008. A listagem 4 contém os códigos para a versão 2005.
create table tbData (data datetime)
create table tbhora (hora datetime)

insert into tbData values ('2008-01-01')


insert into tbHora values ('19:00:00')
go 450

select top 1 * from tbData


select top 1 * from tbHora

dbcc showcontig

data
-----------------------
2008-08-07 00:00:00.000
hora
-----------------------
1900-01-01 12:28:00.000
Listagem 4. Criação de tabela, inserção de dados e resultado.
2 9 Novos datatypes para Data e Hora – SQL Server 2008

DBCC SHOWCONTIG scanning 'tbData' table...


Table: 'tbData' (2089058478); index ID: 0, database ID: 6 Na listagem 4 foram criadas duas tabelas, uma
TABLE level scan performed.
chamada tbData e outra tbHora, ambas com um
- Pages Scanned................................: 1
- Extents Scanned..............................: 1 único campo do tipo Datetime. Após a criação
- Extent Switches..............................: 0 foram inseridas 450 linhas em cada tabela, na
- Avg. Pages per Extent........................: 1.0 tabela tbData foi inserida a data 01/01/2008 e
- Scan Density [Best Count:Actual Count].......: 100.00% [1:1] na tabela tbHora foi inserida a hora 19h00. Veja
- Extent Scan Fragmentation ...................: 0.00% que em ambas tabelas o resultado apresenta
- Avg. Bytes Free per Page.....................: 446.0
data e hora no campo, e não é esse nosso
- Avg. Page Density (full).....................: 94.49%
objetivo, em cada tabela deveria ter sido
armazenado um tipo de dado específico.
DBCC SHOWCONTIG scanning 'tbhora' table...
Table: 'tbhora' (2105058535); index ID: 0, database ID: 6
TABLE level scan performed. Agora, trabalhando com o SQL Server 2008,
- Pages Scanned................................: 1 vamos ver o quanto é possível ganhar de espaço
- Extents Scanned..............................: 1 com a utilização dos dados específicos para cada
- Extent Switches..............................: 0 tipo de armazenamento. Acompanhe o código na
- Avg. Pages per Extent........................: 1.0
- Scan Density [Best Count:Actual Count].......: 100.00% [1:1] listagem 5.
- Extent Scan Fragmentation ...................: 0.00%
- Avg. Bytes Free per Page.....................: 446.0
- Avg. Page Density (full).....................: 94.49%
Listagem 4. Continuação...

create table tbData (data date)


create table tbhora (hora time)

insert into tbData values ('2008-01-01')


insert into tbHora values ('19:00:00')
go 450

select top 1 * from tbData


select top 1 * from tbHora

dbcc showcontig

data
----------
2008-01-01

hora
----------------
19:00:00.0000000 Listagem 5. Criação de tabela, inserção de dados e resultado.
3 0 Novos datatypes para Data e Hora – SQL Server 2008

DBCC SHOWCONTIG scanning 'tbhora' table...


Table: 'tbhora' (5575058); index ID: 0, database ID: 6
TABLE level scan performed.
- Pages Scanned................................: 1
- Extents Scanned..............................: 1
- Extent Switches..............................: 0
- Avg. Pages per Extent........................: 1.0
- Scan Density [Best Count:Actual Count].......: 100.00% [1:1]
- Extent Scan Fragmentation ...................: 0.00%
- Avg. Bytes Free per Page.....................: 1796.0
- Avg. Page Density (full).....................: 77.81%

DBCC SHOWCONTIG scanning 'tbData' table...


Table: 'tbData' (2137058649); index ID: 0, database ID: 6
TABLE level scan performed.
- Pages Scanned................................: 1
- Extents Scanned..............................: 1
- Extent Switches..............................: 0
- Avg. Pages per Extent........................: 1.0
- Scan Density [Best Count:Actual Count].......: 100.00% [1:1]
- Extent Scan Fragmentation ...................: 0.00%
- Avg. Bytes Free per Page.....................: 2696.0
- Avg. Page Density (full).....................: 66.69%

Listagem 5. Continuação...

É possível concluir que, quando utilizamos o tipo de dado correto, diminuímos aproximadamente 17% na tabela tbHora e na tabela tbHora
28%, analisando a densidade média de cada página. E como sabemos que no SQL Server o custo é calculado com base na quantidade de
páginas retornadas, utilizar o tipo de dado correto nos faz ganhar dinheiro. rs

Até o próximo artigo.

Diego Nogare (diego.nogare@hotmail.com) é graduado em Ciência da Computação e Pós-Graduado em Engenharia de Computação com ênfase em
Desenvolvimento Web com .NET, Colaborador do Portal Linha de Código, co-Líder do grupo de usuários Codificando .NET, co-Líder dos Microsoft Student
Partners (MSP) de São Paulo e Microsoft Most Valuable Professional (MVP) em SQL Server, possui certificações MCP e MCTS em SQL Server 2005, é
palestrante em eventos da Microsoft, Codificando .NET e INETA BR, mantém o site: www.diegonogare.net.
32

Cinema

Bons filmes irão tirá-lo da frente do computador neste mágico mês de julho.
Nosso crítico de cinema Emerson Facunte sacrificou-se por vocês e foi assistir aos filmes recomendados pela “Crítica VIP de Cinema”.
Com vocês, as análises de nosso crítico. Boa leitura, ou melhor, bons filmes.

Hancock
Para quem procura diversão, Hancock é a melhor pedida. Will Smith faz o papel de um superherói (ou
antiherói) totalmente depressivo, bêbado e atrapalhado. A população fica revoltada com suas últimas ações e
a imprensa resolve dar um empurrãozinho pra baixo.
Claro que pra ficar bacana, surge uma boa alma para dar uma força ao herói falastrão.
Boas cenas de ação, comédia e também um pouco de drama, são os ingredientes desse divertido filme.

Homem de Ferro
Se você ainda não assistiu no cinema, ainda dá tempo. Não dá pra ficar esperando
esta jóia rara sair em DVD para você assistir no conforte de seu lar. Corra para o
cinema e aproveite cada minuto desse incansável filme de ação.
Tony Stark, o famoso cientista e engenheiro de automação, aproveita a boa vida de
playboy curtindo com seus carrões (palmas para o Audi R8) e belas mulheres.
O filme conta a história do “nascimento” do Homem de Ferro. Com piadas
inteligentes, excelentes locações e muita ação, fazem desta primeira e plausível
adaptação dos quadrinhos, um dos melhores filmes da família Marvel.
33

Cinema
Batman

O melhor Batman (filme) de todos os tempos, merecia um Curinga a altura. Para mim, o
filme deveria se chamar “Curinga, o vilão das multidões” . Falar que Heath Ledger
interpretou brilhantemente o papel do Coringa, seria óbvio demais por conta de toda a
exaltação da imprensa internacional. O Curinga tomou conta do corpo e da alma de
Ledger, com sarcasmo hilário e competência de um grande vilão, o vilão das multidões.
O filme não é só o Curinga, acreditem, tem também o excelente promotor Harvey
Dent, interpretado por Aaron Eckhart, aclamado e invejado pelo herói do filme, Batman.

E por falar em Batman (sim, podemos falar um pouquinho dele, embora


seja o “coadjuvante”), o ator Christian Bale fez direitinho a lição de casa,
assumindo seu lugar no filme. Com algumas boas tiradas, conduzidas pelo
fiel Mordomo Alfred (o consagrado Michael Cane) e também Morgan
Freeman, seu designer bélico, Batman comanda o ataque aos vilões do
filme com maestria e muita displicência.

Bem jovens mancebos da mancebolândia: “mágica do lápis” para os “larápios de colarinho


branco”.
Boa diversão.

Emerson Facunte
34 Blogs, Foruns e Links

Blogs:
Alexandre Tarifa: http://blogs.vstsrocks.com.br/alexandretarifa/default.aspx
Emerson Facunte: http://www.facunte.com.br
Diego Nogare: http://www.diegonogare.net
Time do SQL Brasil: http://blogs.technet.com/sqlserverbrasil/default.aspx

Fórum (Endereços para Entrar no Grupo):

Codificando .NET: codificandodotnet-subscribe@yahoogrupos.com.br


XNA-BR: xna-br-subscribe@yahoogrupos.com.br

Sites Recomendados:

Visual Studio 2008: http://msdn2.microsoft.com/en-us/vstudio/aa700830.aspx


SQL Server CTP: http://www.microsoft.com/sqlserver/2008/en/us/trial-software.aspx

PodCast

Codificando .NET: http://www.codificandomagazine.net/PodCast


35
.Close()
Dynamic Data Controls
Uma novidade muito boa do service Pack 1 do Asp.Net 3.5 são os Dynamic Data Controls. Resumindo em
pouquíssimas palavras, é um recurso utiliza a modelagem do LINQ to SQL ou LINQ to Entities para geração
automática de uma aplicação baseada em dados (cadastros, sistemas simples, etc).
O grande pronto é que é uma tecnologia muito fácil de ser reutilizada e customizada. Basta somente alterar uma linha
no Global.aspx (figura 1) e toda implementação está pronta.

É possível customizar todos os controles utilizados, por exemplo, alterar um controle de calendário simples do
ASP.Net para um controle utilizando AJAX, etc. As páginas também são customizáveis e pode ser customizada
individualmente para uma tabela específica.
Veja muito mais em: http://www.asp.net/learn/3.5-SP1/

Alexandre Tarifa é MVP Visual Developer Visual Basic .Net, bacharel/pós graduado em Ciência da Computação, trabalha em
diversos projetos. Tem participado de diversos projetos que começam como Web e terminam com Smart Client.
Especialista .Net e Líder de Projetos na ITGROUP (www.itgroup.com.br), editor da revista Codificando e-Magazine e fanático
torcedor do São Paulo Futebol Clube. Blog: www.vstsrocks.com.br/alexandretarifa.