.NET Framework, ASP.NET MVC, C#, Internet Explorer, MVP ShowCast, Programação assíncrona, SQL Server, SQL Server, Universal Windows apps, Visual Studio, Webcast, Windows 8.1, Windows Phone 8.1, WPF

MVP ShowCast 2014: evento virtual gratuito

Convite do MVP ShowCast 2014

Formato e sessões

O MVP ShowCast é um evento virtual gratuito sobre tecnologias da Microsoft, sendo composto por uma série de webcasts transmitidos, ao vivo, pelo Live Meeting e gravados para depois serem disponibilizados sob demanda. Cada webcast terá duração de 1 hora para a apresentação e mais 15 minutos para perguntas e respostas.

O evento conta com duas sessões ocorrendo em paralelo:

  • Sessão de infraestrutura ou, simplesmente, sessão IT
  • Sessão de desenvolvimento (DEV) ou, simplesmente, sessão DEV

Na edição 2014, o evento será realizado em 4 semanas: de 15 de setembro de 2014 a 09 de outubro de 2014. Os webcasts serão realizados de segunda-feira a quinta-feira das 4 semanas, sempre com dois webcasts das 12h às 13h15 e outros dois das webcasts 20h às 21h15. Os webcasts ocorrendo em paralelo sempre são compostos por um da sessão IT e outro da sessão DEV.

Neste ano, a organização da quarta edição do evento fez algumas modificações nas trilhas das sessões IT e DEV para refletir melhor a nova estratégia da Microsoft: Mobile First, Cloud First.

Seguem informações sobre as trilhas de cada sessão do MVP ShowCast 2014.

Trilhas

A edição 2014 do evento, conta com um total de 16 trilhas, sendo: 8 trilhas na sessão IT e outras 8 trilhas na sessão DEV. Cada trilha é composta por 4 webcasts, determinando um total de 64 webcasts, sendo: 32 webcasts na sessão IT e outros 32 webcasts na sessão DEV.

Segue uma breve descrição das trilhas de cada sessão, incluindo as datas de realização ao vivo.

Trilhas da sessão IT

  1. Produtividade (segunda-feira, dia 15/09/2014 e terça-feira, dia 16/09/2014)
    Webcasts sobre Excel 2013, Office 365, SharePoint 2013 e integração entre o Office e o SharePoint.
  2. Modern Datacenter (quarta-feira, dia 17/09/2014 e quinta-feira, dia 18/09/2014)
    Webcasts sobre administração de Datacenter com System Center 2012 R2, possibilidade de criar uma estrutura on-premises similar ao Microsoft Azure com o Windows Azure Pack, construção e gerenciamento de nuvem híbrida.
  3. Security (segunda-feira, dia 22/09/2014 e terça-feira, dia 23/09/2014)
    Webcasts sobre segurança em ambiente virtualizados com Hyper-V e VMware, proxy reverso com Web Application Proxy no Windows Server 2012 R2, proteção do SQL Server de hachers e suporte a BYOD (Bring Your Own Device) no Windows Server 2012 R2.
  4. IT Consumerization (quarta-feira, dia 24/09/2014 e quinta-feira, dia 25/09/2014)
    Webcasts sobre segurança no Windows 8.1, gerenciamento de dispositivos móveis com Azure Active Directory Premium e Windows Intune, integração entre Internet Explorer 11 e Windows 8.1 e recursos de virtualização no Windows 8.1.
  5. Infrastructure Management (segunda-feira, dia 29/09/2014 e terça-feira, dia 30/09/2014)
    Webcasts sobre alta disponibilidade em datacenters com RTO (Recovery Time Objective), RPO (Recovery Point Objective), DRP (Disaster Recovery Plan), BIA (Business Impact Analisys) e BCP (Business Continuity Planning), como oferecer serviços de hosting com o Windows Azure Pack, fim do suporte ao Windows Server 2003 em julho de 2015 e como migrar para a nuvem Microsoft Azure e utilização do Remote Desktop Services (RDS) e do Azure RemoteApp como alternativa à migração de desktops.
  6. Project Server (quarta-feira, dia 01/10/2014 e quinta-feira, dia 02/10/2014)
    Webcasts sobre o Project Online, de uma introdução ao gerenciamento de portfólio, gestão de demandas usando o Project Server ou Project Online, replicação de dados do Project Online com SQL Server e o protocolo OData e erros mais comuns cometidos por profissionais no uso do Project Server.
  7. Mensageria (segunda-feira, dia 06/10/2014 e terça-feira, dia 07/10/2014)
    Webcasts sobre novidades e protocolos do Exchange 2013 SP1, uso do Exchange em ambientes híbridos e o Exchange Online.
  8. Azure & Big Data (quarta-feira, dia 08/10/2014 e quinta-feira, dia 09/10/2014)
    Webcasts sobre automatização do Microsoft Azure com PowerShell, Chef e Puppet, introdução ao Microsoft Azure Automation, soluções de Big Data no Microsoft Azure pelo HDInsight (serviço 100% baseado no Apache Hadoop) e novidades do Microsoft Azure IaaS (Infrastructure as a Service).

Trilhas da sessão DEV

  1. Web / One ASP.NET (segunda-feira, dia 15/09/2014 e terça-feira, dia 16/09/2014)
    Webcasts sobre ASP.NET vNext, ASP.NET MVC 6, ASP.NET Web API e ASP.NET SignalR em aplicações SPA (Single Page Application) com AngularJS
  2. Cloud / Microsoft Azure (quarta-feira, dia 17/09/2014 e quinta-feira, dia 18/09/2014)
    Webcasts sobre Microsoft Azure API, aprendizagem de máquina na nuvem com AzureML, integração contínua no Microsoft Azure e integração do Azure Mobile Services com iOS, Android e Windows.
  3. Universal Windows apps (segunda-feira, dia 22/09/2014 e terça-feira, dia 23/09/2014)
    Webcasts sobre criação de Universal Windows apps para Windows 8.1 e Windows Phone 8.1, padrão MVVM no desenvolvimento de Universal Windows apps, Universal Windows apps conectadas e serviços móveis e como portar uma app Windows 8 para Universal Windows app.
  4. Xbox, Kinect & Game Development (quarta-feira, dia 24/09/2014 e quinta-feira, dia 25/09/2014)
    Webcasts sobre desenvolvimento de jogos com MonoGame, Unit3D e C#, desenvolvimento de aplicativos com o Kinect for Windows e o programa ID@Xbox para desenvolvedores independentes do Xbox One.
  5. Visual Studio & Linguagens de Programação (segunda-feira, dia 29/09/2014 e terça-feira, dia 30/09/2014)
    Webcasts sobre programação paralela com C#, Visual Studio 2013 Update 3, plataforma de compilação .NET (“Roslyn”), C# 6 e Visual Studio “14” e programação funcional e C++ moderno (C++ 11 e C++ 14).
  6. ALM & DevOps (quarta-feira, dia 01/10/2014 e quinta-feira, dia 02/10/2014)
    Webcasts sobre integração entre o Team Foundation Server (TFS) e o Microsoft Azure, integração contínua usando Database Project, Data Tools e Release Management, testes de carga com Microsoft Azure e Application Insights e automação de Build, testes e ambientes com o Lab Management.
  7. Plataforma de Dados, BI & Big Data (segunda-feira, dia 06/10/2014 e terça-feira, dia 07/10/2014)
    Webcasts sobre cenários de utilização do novo recurso In-Memory OLTP, também conhecido pelo codinome “Hekaton”, do SQL Server 2014, Big Data, otimização de Data Warehouse (DW) com o ColumnStore Index do SQL Server 2014 e novidades da Engine Relacional do SQL Server 2014.
  8. WPF, Xamarin & IoT (quarta-feira, dia 08/10/2014 e quinta-feira, dia 09/10/2014)
    Webcasts sobre WinEmbeddded & IoT (Internet of Things), novidades do WPF (Windows Presentation Foundation) 4.5 e desenvolvimento cross-platform com Xamarin, o Xamarin.Forms e a plataforma MvvmCross.

Inscrição e informações detalhadas

Para obter informações detalhadas dos webcasts do evento MVP ShowCast 2014 e fazer a sua inscrição naqueles que for do seu interesse, acesse o site do evento em: mvpshowcast.azurewebsites.net.

C#, Evento, MVP ShowCast, Programação assíncrona, Webcast, WPF

Palestra no MVP ShowCast 2013: Programação assíncrona com C# 5 no Visual Studio 2013

O evento MVP ShowCast 2013

MVP ShowCast Logo

O MVP ShowCast é um evento virtual gratuito sobre tecnologias da Microsoft, sendo composto por uma série de webcasts transmitidos ao vivo e gravados para serem disponibilizados depois. O evento foi idealizado e é organizado por MVPs do Brasil com apoio da Microsoft. Mais informações no site do evento: http://mvpshowcast.azurewebsites.net.

A palestra Programação assíncrona com C# 5 no Visual Studio 2013

No dia 3 de dezembro de 2013, eu apresentei o webcast da palestra Programação assíncrona com C# 5 no Visual Studio 2013 no evento virtual MVP ShowCast 2013.

Na palestra, eu apresentei a evolução dos padrões assíncronos no .NET Framework até a versão atual (.NET Framework 4.5.1): Asynchronous Programming Model (APM) no .NET Framework 1.0, Event-Based Asynchronous Pattern (EAP) no .NET Framework 2.0 e Task-based Asynchronous Pattern (TAP) no .NET Framework 4.0.

Apresentei detalhes do funcionamento do padrão Task-based Asynchronous Pattern (TAP), que é o padrão assíncrono atualmente recomendado pela Microsoft, bem como o padrão de assinaturas de métodos assíncronos em tipos .NET. A introdução do modificador async e do operador await na linguagem C# 5 facilitaram muito a programação assíncrona com o padrão TAP, permtindo que o desenvolvedor escreva um código assíncrono de modo similar à programação síncrona, sendo que o compilador fica responsável por gerar uma máquina de estado para alternar entre as tarefas.

Na primeira demonstração (TAP, async e await), eu criei uma biblioteca de classes (Class Library) para cálculo de fatorial e uma aplicação WPF para consumir a biblioteca. O participante do webcast teve a oportunidade de testemunhar problemas na renderização da interface da aplicação WPF na chamada do método síncrono para cálculo do fatorial e a resolução do problema na chamada de uma versão assíncrona do método.

Eu comentei sobre o uso da estrutura System.Threading.CancellationToken para implementar o suporte a cancelamento num método assíncrono, recurso que é opcional. Depois, eu mostrei como implementar o cancelamento numa aplicação cliente na chamada de um método assíncrono com suporte a cancelamento com uso da classe System.Threading.CancellationTokenSource.

E eu comentei sobre o uso da interface System.IProgress<in T> para implementar o suporte a notificação de progresso num método assíncrono, recurso que, assim como o cancelamento, também é opcional. Finalmente, eu mostrei como usar a classe System.Progress<T> e o seu evento ProgressChanged para atualizar um controle ProgressBar na aplicação WPF cliente.

Seguem os slides da palestra Programação assíncrona com C# 5 no Visual Studio 2013.

CSS3, Evento, HTML5, MVP ShowCast, W3C, Webcast

Palestra no MVP ShowCast 2013: Web Design Responsivo com CSS3

O evento MVP ShowCast 2013

MVP ShowCast Logo

MVP ShowCast é um evento virtual gratuito sobre tecnologias da Microsoft, sendo composto por uma série de webcasts transmitidos ao vivo e gravados para serem disponibilizados depois. O evento foi idealizado e é organizado por MVPs do Brasil com apoio da Microsoft. Mais informações no site do evento: http://mvpshowcast.azurewebsites.net.

A palestra Web Design Responsivo com CSS3

No dia 11 de novembro de 2013, eu apresentei o webcast da palestra Web Design Responsivo com CSS3 no evento virtual MVP ShowCast 2013.

Na palestra, eu apresentei o conceito de Web Design Responsivo, bem como as metas a serem atingidas para se conseguir ter um design responsivo em aplicações Web. Comentei sobre a introdução do termo Responsive Web Design pelo web designer Ethan Marcotte num artigo publicado em maio de 2010 no site A List Apart. Também abordei três das principais técnicas para se obter um design responsivo: grades flexíveis, imagens e vídeos flexíveis e media queries.

Comentei sobre as versões mais recentes de algumas ferramentas da Microsoft para desenvolvimento, como o Visual Studio 2013 (edições comerciais versões comerciais e gratuitas) e o Internet Explorer 11 Developer Tools.

Na demonstração, eu apresentei alguns dos conceitos de Web Design Responsivo formatando um site a partir de um site ASP.NET MVC 5 com conteúdo, iniciando a codificação da folha de estilo a partir do zero.

No final da apresentação, eu listei uma série de recursos na Web sobre Web Design Responsivo.

Seguem os slides da palestra Web Design Responsivo com CSS3.

Alguns questionamentos na palestra

Em Web Design Responsivo é comum usar um recurso do CSS3, denominado media queries, que usa a regra “arroba” (at-rule@media. Na sessão de perguntas e respostas, ao final da palestra, houve um questionamento sobre a existência de outras regras “arroba”. Há outras regras “arroba”, como: @page, @import e @font-face, dentre outras. Elas são consideradas regras de processamento especiais. Na especificação CSS Syntax Module Level 3 há informações mais detalhadas sobre “at-rule” no tópico Description of CSS’s Syntax.

Houve um outro questionamento sobre linguagens dinâmicas de folhas de estilo. Em geral, estas linguagens dinâmicas são usadas para suprir algumas deficiências das especificações de CSS. Normalmente, com estas linguagens, você consegue criar variáveis, regras aninhadas, funções e operações, mixins, etc. Duas das linguagens dinâmicas mais conhecidas atualmente são:

.NET Framework, ADO.NET Entity Framework, ASP.NET MVC, ASP.NET Web Forms, C#, Evento, Internet Explorer, Microsoft, MVP ShowCast, Programação assíncrona, SQL Server, SQL Server, Visual Studio, Webcast, Windows 8, Windows Phone 8, Windows Store apps

MVP ShowCast 2013

O evento virtual

MVP ShowCast é um evento virtual gratuito sobre tecnologias da Microsoft, sendo composto por uma série de webcasts transmitidos ao vivo e gravados para serem disponibilizados depois. O evento foi idealizado e é organizado por MVPs do Brasil com apoio da Microsoft.

Os webcasts do evento são apresentados por profissionais altamente especializados em tecnologias e produtos Microsoft, incluindo MVPs, líderes de comunidades, experts reconhecidos pelo mercado e gerentes de produto e evangelistas da Microsoft.

A partir deste ano, o evento contará com duas sessões ocorrendo em paralelo:

  • Sessão de infraestrutura (IT)
  • Sessão de desenvolvimento (DEV)

A edição 2013 será realizada de 04 de novembro de 2013 a 13 de dezembro de 2013. Informações detalhadas e links para inscrição em webcasts podem ser encontrados no site do evento: mvpshowcast.azurewebsites.net.

Trilhas do evento

O evento é composto por 8 trilhas na sessão de infraestrutura (IT) e mais 8 trilhas na sessão de desenvolvimento (DEV), conforme a figura abaixo.

Convite do MVP ShowCast 2013

Filtragem dos webcasts 

Há uma funcionalidade de filtragem na página principal do site do evento que permite filtrar as informações dos webcasts:

  • por trilha de infraestrutura (IT);
  • por trilha de desenvolvimento (DEV);
  • por palestrante;
  • por data;
  • por horário.

A Premiação MVP

A premiação Microsoft Most Valuable Professional (MVP) é a forma da Microsoft agradecer aos incríveis líderes independentes da comunidade que compartilham sua paixão, experiência técnica e conhecimento prático dos produtos da Microsoft com outros. Ajudar e enriquecer as comunidades técnicas faz parte do compromisso da Microsoft. Mesmo antes do surgimento da mídia social e Internet, as pessoas se reúnem para oferecer suas ideias e práticas recomendadas nas comunidades técnicas.

Mais informações da premiação podem ser encontradas no site da Microsoft em: mvp.microsoft.com.

.NET Framework, C#, Microsoft, Programação assíncrona, Webcast

MSDN Webcast: IAsyncResult Pattern ou Asynchronous Programming Model (APM)

Introdução

No dia 25/04/2011, eu apresentei o webcast do MSDN IAsyncResult Pattern ou Asynchronous Programming Model (APM). Os webcasts do MSDN são transmissões ao vivo e gratuitas, realizadas por especialistas Microsoft ou líderes da comunidade que detalham recursos de produtos, solucionam dúvidas de usuários e fazem demonstrações de novas tecnologias.

Asynchronous Programming Model (APM)

O padrão IAsyncResult Pattern ou Asynchronous Programming Model (APM) foi introduzido no .NET Framework 1.0, em fevereiro de 2002. Também conhecido como Begin/End Pattern, num nível básico, o padrão se baseia em dois métodos relacionados para representar uma operação assíncrona: BeginNomeOperacao e EndNomeOperacao.

Apresentação teórica

Na parte teórica, eu mostrei informações sobre o padrão, incluindo os seguintes tópicos:

  • Operação síncrona versus operação assíncrona
  • Demonstração – Operação síncrona
  • Asynchronous Programming Model (APM)
  • Versão assíncrona via Asynchronous Programming Model (APM)
  • Operação síncrona versus operação assíncrona no padrão APM (animação)
  • IAsyncResult com informações sobre uma operação assíncrona
  • Demonstração – Operação assíncrona com o padrão APM
  • Artigos recomendados

Slides da apresentação

Demonstração

Na apresentação, eu realizei uma demonstração de uma implementação do padrão Asynchronous Programming Model (APM) numa classe para cálculo da soma dos termos de uma série convergente. Para a demonstração, eu criei uma solução nomeada Apm no Visual Studio 2010 e desenvolvi dois projetos: uma Class Library nomeada Msdn.Webcasts.Matematica.Series, com a implementação do padrão APM, e uma Console Application nomeada SerieLeibniz para testar uma chamada assíncrona para somar os primeiros termos da série de Leibniz.

Na implementação da Class Library foram desenvolvidas três classes: ResultadoSerieConvergente, SerieConvergenteSomarAsyncResult e SerieConvergente, conforme ilustrado no diagrama de classes abaixo.

ResultadoSerieConvergente
Classe ResultadoSerieConvergente
SerieConvergenteSomarAsyncResult
Classe SerieConvergenteSomarAsyncResult
SerieConvergente
Classe SerieConvergente

Na aplicação console SerieLeibniz, eu referenciei a biblioteca de séries convergentes para calcular, de forma assíncrona, a convergência da soma dos primeiros termos da série de Leibniz. Abaixo, segue um exemplo da saída da aplicação ao calcular a convergência da soma dos 25 milhões primeiros termos da série de Leibniz.

Teste da classe SerieLeibniz
Convergência da Série de Leibniz para 25 milhões de termos

O código da demonstração pode ser baixado em:
Solução do Visual Studio 2010 com a demonstração do padrão Asynchronous Programming Model (APM)

Vídeo da apresentação

Assista ao vídeo da apresentação do Webcast no site da Microsoft em:
MSDN Webcast: IAsyncResult Pattern ou Asynchronous Programming Model (APM)

C#, Webcast, WPF

Meu webcast no Virtual Developer Day 2011: A evolução e o futuro da linguagem C# (1.0, 2.0, 3.0, 4 e 5)

No dia 30/01/2011, eu apresentei o Webcast A evolução e o futuro da linguagem C# (1.0, 2.0, 3.0, 4, 5) no Virtual Developer Day 2011, evento organizado pela comunidade .NET Interior com apoio da Microsoft – CEA/MSDN, Silverlight Brasil, Silverlight Planet e Codificando.NET.

O objetivo da apresentação foi dar uma visão geral da evolução da linguagem C# desde a versão 1.0 até a atual (versão 4) e do futuro da linguagem (versão 5), que por enquanto está em fase de desenvolvimento pela Microsoft.

A apresentação teórica

Segue a relação de slides da apresentação teórica do Webcast:

  • Evolução da linguagem C#
  • C# 1.0 (Fev 2002)
  • C# 2.0 (Nov 2005)
  • C# 3.0 (Nov 2007)
  • C# 4 (Abr 2010)
  • Programação síncrona
  • Demonstração de programação assíncrona
  • Asyncronous Programming Model (APM)
  • Event-based Asynchronous Pattern (EAP)
  • Task-based Asynchronous Pattern (TAP)
  • Visual Studio Async CTP (disponibilizado no PDC em 28/10/2010)
  • C# 5 (2012?)
  • Demonstração async e await
  • Contatos

Slides da apresentação

Demonstrações

A ideia era fazer uma apresentação com 3 demonstrações. Porém, o tempo somente possibilitou a realização de duas demonstrações.

Na primeira demonstração, eu criei toda a infraestrutura de uma biblioteca de classes e de uma aplicação WPF para mostrar informações sobre os resultados dos ganhadores na MEGA-SENA, consumindo as informações de uma página da Caixa. Esta primeira demonstração era síncrona e compatilhava a Thread de interface com o usuário (UI Thread) para consultar as informações do resultado de um concurso específico da MEGA-SENA no site da Caixa. Deste modo, a interface com o usuário ficava congelada, sem atualização e resposta ao usuário, até que todo o processamento de análise dos ganhadores fosse concluído. Veja o fragmento da versão assíncrona do código do método de manipulação do evento Click do botão de análise dos ganhadores na MEGA-SENA.

private void buttonAnalisar_Click(object sender, RoutedEventArgs e) {
	ultimoGanhadorMegaSena = null;

	int numeroConcursoFinal = int.Parse(textBoxNumeroConcursoFinal.Text);

	listBoxResultadoAnalise.Items.Clear();
	progressBar.Visibility = Visibility.Visible;
	progressBar.Value = 0;
	progressBar.Maximum = numeroConcursoFinal;
	buttonAnalisar.IsEnabled = false;

	WebClient clienteWeb = new WebClient();

	for (int numeroConcurso = 1; numeroConcurso <= numeroConcursoFinal; numeroConcurso++) {
		string resultado = clienteWeb.DownloadString("http://www1.caixa.gov.br/loterias/loterias/megasena/megasena_pesquisa_new.asp?submeteu=sim&opcao=concurso&txtConcurso=" + numeroConcurso);

		MegaSenaComGanhador megaSenaComGanhador = recuperarInfoMegaSenaComGanhador(resultado);

		if (megaSenaComGanhador != null) {
			ultimoGanhadorMegaSena = megaSenaComGanhador;
			listBoxResultadoAnalise.Items.Add(megaSenaComGanhador.ToString());
			listBoxResultadoAnalise.ScrollIntoView(megaSenaComGanhador.ToString());
		}

		progressBar.Value = numeroConcurso;
	}

	buttonAnalisar.IsEnabled = true;
	progressBar.Visibility = Visibility.Hidden;
}

Na segunda demonstração, foram usadas as novas palavras-chaves async e await do C# 5 para transformar o código para a forma assíncrona com um mínimo de quebra da lógica de programação em relação à forma síncrona.

private async void buttonAnalisar_ClickAsync(object sender, RoutedEventArgs e) {
	ultimoGanhadorMegaSena = null;

	int numeroConcursoFinal = int.Parse(textBoxNumeroConcursoFinal.Text);

	listBoxResultadoAnalise.Items.Clear();
	progressBar.Visibility = Visibility.Visible;
	progressBar.Value = 0;
	progressBar.Maximum = numeroConcursoFinal;
	buttonAnalisar.IsEnabled = false;

	WebClient clienteWeb = new WebClient();

	for (int numeroConcurso = 1; numeroConcurso <= numeroConcursoFinal; numeroConcurso++) {
		string resultado = await clienteWeb.DownloadStringTaskAsync("http://www1.caixa.gov.br/loterias/loterias/megasena/megasena_pesquisa_new.asp?submeteu=sim&opcao=concurso&txtConcurso=" + numeroConcurso);

		MegaSenaComGanhador megaSenaComGanhador = recuperarInfoMegaSenaComGanhador(resultado);

		if (megaSenaComGanhador != null) {
			ultimoGanhadorMegaSena = megaSenaComGanhador;
			listBoxResultadoAnalise.Items.Add(megaSenaComGanhador.ToString());
			listBoxResultadoAnalise.ScrollIntoView(megaSenaComGanhador.ToString());
		}

		progressBar.Value = numeroConcurso;
	}

	buttonAnalisar.IsEnabled = true;
	progressBar.Visibility = Visibility.Hidden;
}

Código-fonte das demonstrações

Código-fonte das demonstrações realizadas como o Visual Studio 2010 RTM e com o Visual Studio Async CTP (disponibilizado em 28/10/2010 no PDC) instalado:
Solução MegaSena do Visual Studio 2010 RTM

Veja informações sobre o Visual Studio Async CTP nos slides.

Abaixo, segue uma figura da tela da aplicação WPF de demonstração para análise dos ganhadores na MEGA-SENA.

Tela da aplicação de análise de ganhadores na MEGA-SENA

C#, Microsoft, Webcast

Minha apresentação do MSDN Webcast: Trabalhando com covariância e contravariância no C# 4

No dia 30/09/2010 (quinta-feira), eu apresentei o Webcast do MSDN Trabalhando com covariância e contravariância no C# 4.

Apresentação teórica

Inicialmente, eu apresentei uma revisão nos principais conceitos de programação orientada a objetos, como: encapsulamento, herança e polimorfismo. Então, eu comentei diversos recursos da linguagem de programação C# relacionados com o assunto, como: classes abstratas, interfaces e membros abstratos e virtuais.

Depois, eu comentei sobre o suporte à covariância em arrays, que existe na linguagem C# desde a versão 1.0. Então, eu demonstrei o efeito colateral da covariância em arrays. Neste caso, a segurança de tipo não é garantida em tempo de compilação. Comentei que os arrays de tipos por referência precisam incluir uma verificação em tempo de execução para a atribuição de elementos. Então, eu demonstrei que uma atribuição inválida causa o lançamento da exceção System.ArrayTypeMismatchException.

Posteriormente, eu comentei sobre o conceito e as aplicações dos tipos genéricos. Informei ainda que classes, estruturas, interfaces e delegates podem ser genéricos, além de métodos.

Para finalizar, eu expliquei o novo suporte a covariância e contravariância em tipos genéricos, que foi incluído na linguagem C# 4.

  • Covariância: Se T aparece somente como uma saída (out), então é seguro passar X<TDerivado> para X<T>.
    Sintaxe em C#: X<out T>
  • Contravariância: Se T aparece somente como uma entrada (input), então é seguro passar X<TBase> para X<T>.
    Sintaxe em C#: X<in T>

Finalmente, eu indico uma série de artigos e vídeos recomendados sobre o assunto, todos em idioma ingês.

Seguem, abaixo, os slides do Webcast exatamente como foram apresentados.

Demonstração

A maioria dos exemplos disponíveis sobre covariância e contravariância em tipos genéricos, introduzido no C# 4, usa hierarquias de classes muito simples e fora da realidade da rotina dos desenvolvedores. Por exemplo, não é raro que os exemplos usem classes para representar hierarquia entre animais, como: classe Animal, classe Mamífero, classe Réptil, classe Girafa, etc.

Sendo assim, eu criei uma hierarquia de classes mais próxima da realidade dos desenvolvedores. A hierarquia representa vários tipos de contas correntes disponíveis num sistema bancário. Foram definidos os seguintes tipos:

  • Interface IContaCorrente
  • Classe concreta ContaSimples
  • Classe concreta ContaPoupanca
  • Classe concreta ContaEspecial

As classes possuem um relacionamento de herança como indicado no diagrama de classes abaixo.

Diagrama de classes dos tipos de conta corrente

As demonstrações foram sendo realizadas alternadamente com as explicações teóricas. Abaixo, segue o link para baixar a solução do Visual Studio 2010 extamente como foi realizada no Webcast.

CovarianciaContravarianciaCS4.zip

Webcast sob demanda (gravação da apresentação do Webcast)

É possível assistir a uma gravação do Webcast sob demanda. Para isto, basta se inscrever no evento no seguinte endereço:

MSDN Webcast: Trabalhando com covariância e contravariância no C# 4.0

Ao se inscrever, você terá a possibilidade de assistir ao vídeo online ou baixá-lo para assistir localmente na sua máquina. Eu sugiro que se baixe o arquivo do vídeo, que está disponível no formato .wmv. O arquivo downloadLMM.zip, que é uma compactação do vídeo no formato .zip, tem um tamanho de 23.150 KB (aproximadamente, 22,6 MB).

Rogério Moraes de Carvalho
Twitter: @rogeriomc