Instanciação e Inicialização de Objectos

A .NET Framework 3.5 trouxe muitas mudanças, mas bastante significativa no que toca a escrita de código: a inicialização de objectos!

Imaginemos que pretendemos um objecto para guardar os dados de uma pessoa, e para isso usamos uma classe como a seguinte:

Data Class

Tendo a classe definida sem qualquer tipo de construtor específico para além do herdado pré-definido (sem argumentos), basta criar uma nova instância da classe e inicializar cada uma das propriedades, da seguinte forma:

Class Instantiation with separate Initialization

Mas na framework versão 3.5 podemos fazer a instanciação do objecto e a inicialização das suas propriedades num só comando, da seguinte forma:

Class Instantiation with integrated Initialization

Este é mais um “atalho” que a nova framework disponibilizou, de forma a facilitar a vida aos programadores! ;)

Enterprise Library 4.0 – Maio de 2008

Enterprise Library

Já está disponível a versão 4.0 da Enterprise Library!

A Patterns and Practices Enterprise Library é um conjunto de componentes reutilizáveis de software (blocos aplicacionais) desenvolvidos para facilitar certas desafios aos programadores (como os de logging, validação, tratamento de excepções, e muitas outras). Estes blocos são um tipo de “guia” sob a forma de código fonte.

“Overloading” de Operadores

Na continuação dos artigos que venho a publicar sobre algumas características que mais me atraem no .NET Framework, apresento hoje o “Overload” de Operadores!

Suponhamos que para um dado projecto, temos que registar para uma equipa o total de golos marcados e golos sofridos no decurso de um conjunto de jogos. Para tal, podemos usar uma classe como a seguinte para representar os dados:

Data Class

Assim, basta então criar uma instância da nossa classe para guardar os resultados e outras tantas para os jogos, e depois somar tudo!

Para efeitos de demonstração, suponhamos que pretendemos registar o resultado de 3 jogos e depois apresentar o resultado final:

Main Program without Operator Overloading

Neste caso, vamos precisamos de somar os valores das propriedades separadamente à nossa instância “total”, como podemos ver dentro do ciclo For; mas podemos evitar este passo, simplesmente indicando ao compilador como é que ele pode somar instâncias da nossa classe!

Introduzimos assim na classe de dados um “overload” ao operador de soma:

Data Class with Operator Overloading

De notar que este “overload” é um método estático (Static) e tem a indicação do tipo de dados e do operador a implementar (operator +).

Finalmente, temos apenas de actualizar o nosso código para passar a usar o operador agora criado:

Main Program using Operator Overloading

O resultado final é exactamente o mesmo, mas em termos práticos mostra-se uma solução muito mais agradável de implementar do que simplesmente somar as propriedades isoladas!

Existem algumas regras que devem saber antes de se lançaram a criar operadores para tudo o que é classe que usam, pelo que a sua leitura é aconselhada! ;)

Extensões em .NET

Nos últimos tempos tenho vindo a dar bastante uso ao Microsoft Visual Studio 2008 bem como à framework .NET 3.5! Assim, nos próximos posts pretendo falar de algumas das novidades que apareceram e como elas podem facilitar a vida dos programadores!

Começo hoje esta rúbrica falando de Extension Methods, ou “métodos de extensão”.

Estes métodos de extensão permitem aos programadores adicionar métodos aos tipos e classes da framework, sem ter que fazer uma nova classe por herança (sub-classing ou inheritance), ou mesmo recompilar a classe original. Estes métodos ficam como que “colados” ao tipo de dados referenciado, ficando disponível para toda e qualquer instância do objecto.

suponhamos que no meu código eu tinha um método que me permite verificar se uma dada cadeia de caracteres contém apenas dígitos, poderia ser algo do género:

Static Method

Assim, bastava fazer OnlyDigits(myString) para saber se a string é ou não composta apenas de números! Um método de extensão equivalente seria o seguinte:

Extension Method

A diferença é que agora, podemos fazer algo do tipo myString.OnlyDigits() para obter exactamente o mesmo resultado! Na verdade, até algo tipo “a minha string”.OnlyDigits() funcionará na perfeição.

Estendemos assim o tipo de dados string com o nosso método OnlyDigits, que fica disponível em toda e qualquer instância deste tipo de dados!

Os métodos de extensão funcionam desde a framework 3.0, mas penso que apenas o Visual Studio 2008 os suporta.

Para mais informações podem consultar o MSDN.

DinnerNow.net – Demonstração Tudo-em-um!

DinnerNow.netO DinnerNow.net é uma solução tipo “starter-kit”, que pretende demonstrar uma série de tecnologias da Microsoft, utilizando para isso um modelo referente a uma lista de restaurantes, nos quais podemos encomendar refeições a serem entregues em casa ou no escritório.

No seu desenvolvimento podemos contar com tecnologias como o IIS7, ASP.NET AJAX Extensions, Linq, WCF, WWF, WPF, Windows Powershell e .NET Compact Framework, como pode ser constatado consultando o código-fonte.

How Do I…?

Microsoft Developers NetworkA Microsoft tem uma série de tutoriais no MSDN em formato de vídeo intitulados “How Do I”, com os quais pretende demonstrar a utilização das suas mais variadas tecnologias. Esta é sem dúvida uma ferramenta muito importante, pois permite ver e ouvir os comentários dos próprios programadores, enquanto fazem as demonstrações.

A lista completa de vídeos pode ser consultada aqui!

Disponibilizado Código-Fonte da .NET Framework

Está disponível na internet o código-fonte da Microsoft .NET Framework, permitindo o seu depuramento directo através do Visual Studio 2008.

Antes deste passo, o código-fonte poderia ser facilmente consultado utilizando o excelente utilitário .NET Reflector do Lutz Roeder para uma simples descompilação, mas o facto de ter acesso ao código real permite o visionamento de comentários de desenvolvimento introduzido no próprio código, já para não falar que serve até de um manual em “boas práticas” para programação.

Especificamente, passa agora a ser possível a consulta e depuração das seguintes bibliotecas do .NET Framework:

  • .NET Base Class Libraries (including System, System.CodeDom, System.Collections, System.ComponentModel, System.Diagnostics, System.Drawing, System.Globalization, System.IO, System.Net, System.Reflection, System.Runtime, System.Security, System.Text, System.Threading, etc).
  • ASP.NET (System.Web, System.Web.Extensions)
  • Windows Forms (System.Windows.Forms)
  • Windows Presentation Foundation (System.Windows)
  • ADO.NET and XML (System.Data and System.Xml)

Mais informações sobre como utilizar este recurso podem ser obtidas neste excelente artigo no blog de Shawn Burke.