Desenvolvendo uma aplicação para o Windows Phone 7 com o Visual Studio 2010

 

Neste domingo aproveitei para me aprofundar e entender melhor como desenvolver aplicativos para o Windows Phone 7. Entendi os aspectos básicos da plataforma, do modelo de desenvolvimento e já criei minha primeira aplicação útil para o Windows Phone 7: uma aplicação que calcula o preço teórico de uma opção através da equação de Balck-Scholes. E detalhe: tudo isso em 4 horas! Fiquei impressionado com a facilidade de desenvolvimento para o Windows Phone 7.

Nesse artigo tenho dois objetivos. O primeiro é explicar alguns conceitos úteis sobre o desenvolvimento com Windows Phone 7 e passar links e referências para materiais. O aegundo objetivo é o de mostrar minha aplicação e dar algumas dicas concretas do que fazer para resolver algumas necessidades que tive para construí-la.

A programação com o Windows Phone 7 é feita com alta produtividade utilizando a solução Microsoft Visual Studio 2010 Express for Windows Phone. Um detalhe muito importante: ela é gratuita! Caso você já possua alguma versão do Visual Studio 2010 em sua máquina, o VS 2010 Express for Windows Phone será instalado como um add-in para a sua versão do Visual Studio 2010. A solução não vem apenas com o clássico ambiente do Visual Studio 2010. Conta também com os seguintes softwares (reforçando... gratuitos também!):

- Windows Phone Emulator: O emulador do Windows Phone 7 para você testar e fazer debug de suas aplicações.
- Expression Blend 4 for Windows Phone: Uma ferramenta completa para os especialistas em interface de usuário. Ela facilita a criação de aplicações com interfaces mais rebuscadas e com mais recursos de animação.

Há duas grandes plataformas de desenvolvimento para o Windows Phone 7: Silverlight e XNA Game Studio. Essas plataformas foram escolhidas porque existem já milhares de desenvolvedores com conhecimento nelas. A escolha é simples: se estiver fazendo uma aplicação então use Silverlight. Se for criar um jogo use XNA (aliás, é a mesma plataforma usada para desenvolver jogos no XBox! ).

Para quem está acostumado a programar com Visual Studio, a experiência é muito similar.


Você encontra uma série de controles prontos para colocar na interface da aplicação Windows Phone, bem como pode alterar diretamente o XAML correspondente e que aparece ao lado da interface.

Antes de mostrar a aplicação vamos para algumas referências importantes para aprofundar:

- Livro Programming Windows Phone 7 de Charles Petzold (ainda em beta mas já tem bastante conteúdo)
- Windows Phone Developer Portal. Você deve se cadastrar para acessar. Para publicar sua aplicação no Market Place do windows Phone é preciso pagar uma taxa de 175 reais (para estudantes é gratuito... aproveitem!)
- Windows Phone Development no MSN
- Windows Phone 7 Developer Training Kit no Channel9

Vamos ao que interessa... ver como fiz minha aplicação para Windows Phone! Fazer só um Hello World não é muito útil, então resolvi criar uma aplicação que seria interessante inclusive para mim (também gosto de estudar sobre finanças e investir na bolsa!). É uma aplicação que calcula o preço teórico de uma opção sobre ação, utilizando a famosa fórmula fechada, baseada em equações diferenciais parciais, de Black-Scholes.

A tela inicial possui dois radio buttons para que o usuário selecione se quer calcular o preço de uma opção de compra (call) ou de uma opção de venda (put). Para realizar o cálculo é preciso colocar cinco parâmetros: preço da ação-objeto, preço de exercício da opção (strike), a taxa de juros anual, o tempo até a opção expirar e a volatilidade da ação-objeto.


Podemos visualizar na tela abaixo os campos preenchidos:


Quando o usuário tocar seu dedo no botão "Calculate!" o cálculo será realizado e a tela abaixo é mostrada para o preço de uma opção de compra:


Para uma opção de venda com os mesmos parâmetros a tela de resultados é essa:


Eu não podia deixar de validar se meus cálculos estavamcorretos, então comparei com uma calculadora on-line de precificação de opções. E estão exatamente iguais! Se não confiar em mim pode entrar na calculadora on-line e fazer o cálculo com os mesmos parâmetros :) !

Explicada a aplicação, vamos a algumas dicas que tive que pesquisar para resolver algumas necessidades.

Dica 1 -> Eu queria que o usuário só digitasse números ou símbolos (para decimais). Porém o teclado do TextBox aparecia com letras primeiro o que consumia um toque a mais. Para resolver isso basta colocar no XAML do textBox o seguinte: InputScope="Number". Assim um dos textBoxes ficou assim:

TextBox Height="70" HorizontalAlignment="Left" Margin="233,113,0,0" Name="X" Text="" VerticalAlignment="Top" Width="180" InputScope="Number" Grid.Row="1"

E pronto! O teclado aparece com os números e símbolos, quando o usuário toca o campo de texto, conforme a figura abaixo:


Dica 2 -> Navegação entre telas. Quando o usuário seleciona o botão "Calculate!" deve navegar para uma outra tela ( Result.xaml ) para mostrar o resultado. Uma navegação simples, sem passagem de parâmetros, é feita dessa forma:

NavigationService.Navigate(new Uri("/Result.xaml", UriKind.Relative));

Para passar parâmetros podemos usar strings (há outros jeitos de fazer, mas para minha aplicação simples com uma única tela e apenas seis parâmetros usei dessa forma), como em uma URI do protocolo HTTP. Exemplo:

NavigationService.Navigate(new Uri("/Result.xaml?optionType=" + optionType + "&stockPrice=" + S.Text + "&strikePrice=" + X.Text + "&time=" + T.Text + "&interestRate=" + R.Text + "&volatility=" + V.Text, UriKind.Relative));

Esse método é chamado dentro do evento de clique do botão Calculate, que se encontra no code-behind da MainPage ( MainPage.xaml.cs ):

private void CalculateBS_Click(object sender, RoutedEventArgs e)
{
string optionType;

   if (radioButton1.IsChecked == true)
      optionType = "c";
   else
      optionType = "p";
}

   NavigationService.Navigate(new Uri("/Result.xaml?optionType=" + optionType + "&stockPrice=" + S.Text + "&strikePrice=" + X.Text + "&time=" + T.Text + "&interestRate=" + R.Text + "&volatility=" + V.Text, UriKind.Relative));
}

Na tela Result.xaml eu coloquei um botão "Back to Calculator". Só precisei colocar o seguinte para voltar para a página anterior:

private void Back_Click(object sender, RoutedEventArgs e)
{
   NavigationService.GoBack();
}

Dica 3 -> Para receber os parâmetros em Result.xaml fiz o seguinte no code-behind do método "OnNavigatedTo" :

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedTo(e);

string optionType;
string stockPrice = "";
string strikePrice = "";
string time = "";
string interestRate = "";
string volatility = "";

NavigationContext.QueryString.TryGetValue("optionType", out optionType);
NavigationContext.QueryString.TryGetValue("stockPrice", out stockPrice);
NavigationContext.QueryString.TryGetValue("strikePrice", out strikePrice);
NavigationContext.QueryString.TryGetValue("time", out time);
NavigationContext.QueryString.TryGetValue("interestRate", out interestRate);
NavigationContext.QueryString.TryGetValue("volatility", out volatility);

...

}

Dica 4 -> Como o meu método que calcula Black-Scholes usa double nos parâmetros monetários usei o conversor do C# para transformar cada string em uma double, conforme exemplo:

double dstockPrice = Convert.ToDouble(stockPrice);

Usei o conversor para transformar o retorno em double para String, de forma a mostrar o resultado em um TextBox:

BSResult.Text = Convert.ToString(optionPrice);

Dica 5 -> Minha solução foi composta de dois projetos: um projeto "Windows Phone Application" e o outro uma "Windows Phone Class Library". Na Class Library coloquei minha classe StockOption.cs. Recomendo fazer esse trabalho de separar os detalhes e validações de interface do seu "código de negócio". Isso o tornará reutilizável e facilitará o entendimento futuro da solução. Isto significa que você pode fazer uma boa arquitetura de aplicação também com um projeto Windows Phone 7, assim como já fazemos hoje para aplicações corporativas!

Para publicar uma aplicação no Market Place (e deixá-la disponível para os Windows Phones diretamente do celular) basta se logar com seu Windows Live ID no Windows Phone Developer Portal.

Aí estão minhas dicas! Essa aplicação que criei já estará disponível gratuitamente no Market Place do Windows Phone 7! Vou posteriormente incrementá-la para calcular as gregas, volatilidade implícita, entre outros recursos. Desenvolver aplicativos para o windows Phone 7 é mais uma ótima opção para desenvolvedores ganharem um dinheirinho extra :) !!!

 

José Papo - Especialista Técnico Visual Studio e ALM

 

Artigo original publicado no José Papo Weblog