Herança em programação Orientada a Objeto

No post de hoje, vou mostrar como é feita a herança no Visual Basic. Mas antes, uma pequena descrição a respeito de herança em programação Orientada a Objeto.

Herança é um conceito pelo qual é possível criar uma classe (subclasse) com base em uma existente. Essa nova classe herda todos os atributos, comportamentos e implementações da classe herdada (superclasse).

Diagrama mostrando a herança entre classes.

Diagrama mostrando a herança entre classes.


Continue lendo

Passo a Passo de uma Criptografia MD5

No post de hoje, mostrarei a vocês quais os passos para criptografar uma String. Além de aprender[bb] como criptografar um texto com a Criptografia MD5, vocês poderão observar o que acontece com o texto digitado a cada processo que ele passa.

Iniciando o desenvolvimento

A primeira coisa que devemos fazer, é importar as Namespace que tratam texto e que contém as classes de criptografia[bb].

Imports System.Text
Imports System.Security.Cryptography

Interface para o teste

Como você podem ver na imagem abaixo, acima de cada TextBox há uma Label explicando o que será exibido nele.

Formulário utilizado para exibir os passos da criptografia

Formulário utilizado para exibir os passos da criptografia

Código com passo a passo para a criptografia MD5

Abaixo temos o código necessário para criptografar o texto. No próprio código já estou explicando o que cada linha faz.

    Private Sub btnConverter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConverter.Click
        ' Limpa TextBox que exibirão o Resultado
        TextBox2.Clear()
        TextBox4.Clear()
        TextBox5.Clear()

        ' Variável utilizada para gerar o primeiro Hash
        Dim Ue As New UnicodeEncoding ' Também pode ser usado o UTF8Encoding
        ' Vetor que receberá a Hash gerada pela codificação acima
        Dim ByteSourceTexto() As Byte
        ' Variável que gerará a Hash MD5
        Dim md5 As New MD5CryptoServiceProvider
        ' Vetor que receberá a Hash MD5 gerada pela variável acima
        Dim Bytehash() As Byte

        ' Gera Hash de Bytes a partir do texto digitado.
        ' ** É gerado um Vetor **!
        ByteSourceTexto = Ue.GetBytes(TextBox1.Text)

        ' For each: pega gada item do vetor gerado acima
        ' 1º Codificação. Bytes do Texto Digitado
        For Each b In ByteSourceTexto
            TextBox2.Text &= b
        Next

        ' Gera Hash de Bytes com a codificação MD5
        ' ** É gerado um Vetor! **
        Bytehash = md5.ComputeHash(ByteSourceTexto)

        ' For each: pega gada item do vetor gerado acima
        ' 2º Criptografa String acima em uma hash de byte MD5.
        For Each b In Bytehash
            TextBox4.Text &= b
        Next

        ' Último Passo:
        ' 3º Converte os Bytes para uma base String de 64 Digitos.
        ' Este último texto seria, por exemplo, gravado no banco de dados.
        TextBox5.Text = Convert.ToBase64String(Bytehash)
    End Sub

E como resultado[bb] temos o seguinte:

Resultado do passo a passo da criptografia

Resultado do passo a passo da criptografia

E por hoje é. Até uma próxima.

Desenvolvendo um aplicativo para Windows 8 pt. 2

No primeiro post falei o que me motivou a desenvolver um aplicativo para Windows 8[bb]. Hoje trago como que me preparei para iniciar o desenvolvimento.

Como disse no post anterior, nunca havia desenvolvido para a plataforma e apesar de já desenvolver para plataforma Windows, tive aprender o novo conceito de aplicativo que Microsoft propõem para o Windows 8. E foi por ai que comecei.

Estudando o conceito de design de aplicativo para Windows 8

Na página de para inicio de desenvolvimento (Get Started) para a plataforma, existe uma lista de coisas para serem feitas antes do desenvolvimento. Essa lista engloba desde o download de ferramentas, tutoriais básico até a parte de design do aplicativo.

Resolvi da uma atenção especial para o que dizia respeito a layout de aplicativo. Existem regras que devem ser seguidas para que a experiencia do usuário seja a mesma em todos os aplicativos, não em funcionalidade, mas na forma como o usuário interage com a aplicação. Por exemplo, um usuário sempre clica com o botão esquerdo do mouse, ou toca e segura em tablets, espera que seja aberta uma barra na parte inferior ou superior da tela com ações que ele pode executar.

Diretrizes para tamanho de aplicativo para Windows 8

Diretrizes para tamanho de aplicativo (Fonte: msdn.microsoft.com)

Além disso, existe todo um conjunto de regras a respeito, por exemplo, da distancia entre objetos que façam parte de uma mesma área e a distancia que essa área deve ter de outra. Tudo isso deve ser seguido, para que a experiencia do usuário seja sempre agradável.

Estudando API

Como ainda não finalizei o aplicativo que estou desenvolvendo, não colocarei qual serviço estou acesso via API. Mas, independendo do dado que será tratado e exibo no aplicativo, um coisa que tem que ser muito estudada para é a API.

Alguns ponto importantes que devem ser levados em consideração antes de iniciar o desenvolvimento, são:

  • O serviço disponibilizar uma forma mais fácil para acesso ao dados? Por exemplo uma SDK.
  • O tipo de dado que a API retorna. Esse é um ponto que deve ser considerado antes de mais nada, porque algumas pessoas, pelo seu conhecimento, preferem trabalhar manipulando dados em formato XML, outras em JSON. Este  ponto pode estar ligado diretamente ao primeiro. Ao disponibilizar uma SDK, não necessariamente, esta se adequará a maneira que você pensou em tratar os dados.

Bom, por hoje é só. Numa próxima trarei algum código interessante e dicas de programação para a plataforma Windows 8.

Implementando resolução do problema das 100 portas

Hoje mostrarei como implementar a resolução do problema das 100 portas em Visual Basic .NET. Enquanto navegava na grande rede de computadores internet, encontrei esse problema e achei que seria interessante mostrá-lo aqui.

O que é o problema das 100 portas

O problema das 100 portas cria a seguinte situação: você tem 100 portas em linha e todas as portas estão inicialmente fechadas. Você deve passar por cada porta 100 vezes. A cada vez que você passa pela porta, você deve fechá-la se estiver aberta, ou abri-la se estiver fechada. Na primeira vez você deve passar por todas as portas. Na segunda vez deve passar somente nas portas que são múltiplo de 2 (2, 4, 6, …). Na terceira vez, somente pelas portas que são múltiplos de 3 (3, 6, 9, …). Faça isso até a porta 100.

A pergunta: Ao final, quando passar por todas as portas, quais estarão abertas e quais estarão fechadas?

Resolvendo o problema

Nesse primeiro modelo que faremos para resolver o problema, levaremos o enunciado ao pé da letra e passaremos por todas as portas.

Para os exemplos, utilizarei uma Console Application do Visual Basic .NET.

Resolvendo com um For dentro de outro

    Sub Main()
        Dim portas(100) As Boolean

        For pass = 1 To 100
            For porta = pass - 1 To 99 Step pass
                portas(porta) = Not portas(porta)
            Next
        Next

        For porta = 0 To 99
            Console.WriteLine("Porta " & (porta + 1) & " está " & If(portas(porta), "Aberta", "Fechada"))
        Next
        Console.Read()
    End Sub

No código acima, temos a situação onde o código segue o que o enunciado pede.

Primeiro fazemos um laço de repetição For que passa por todas as portas e dentro do laço fazemos outro, que passa somente pelos múltiplos dessa porta; isso é possível porque cada interação do segundo For, “pula” os número das portas com o auxilio da variável pass, que é o número da porta do primeiro laço.

Dentro do segundo laço, falamos que cada porta deve ficar no status contrário ao que está, executando o código = Not portas(door).
No final fazemos um laço exibindo o status da porta ao fim das iterações. Aqui temos um trecho interessante, o condicional If está montado em linha (If(portas(porta), "Aberta", "Fechada")). Essa é uma ótima maneira de mostrarmos um valor mesmo que haja uma condição para a exibição. Essa forma segue a seguinte estrutura:

If (condição booleana, valor verdadeiro, valor falso)

Resolvendo o problema de outra forma

Quadrado PerfeitoNo próximo exemplo, o código é um pouco menor, porque só será necessário um laço de repetição. Dessa vez é utilizada a matemática para resolver o problema.

Segundo discursarão sobre a resolução do problema (ver fonte ao final do texto), somente as portas com números que são quadrados perfeitos ficam abertas.

Quadrado perfeito em matemática, é um número inteiro não negativo que pode ser expresso como o quadrado de um outro número inteiro.

Fonte: Wikipédia

Dito isso, vamos ao código:

    Sub Main()
        Dim portas(100) As Boolean

        For i = 1 To 10
            portas(i ^ 2 - 1) = True
        Next
        For porta = 0 To 99
            Console.WriteLine("Porta " & (porta + 1) & " está " & If(portas(porta), "Aberta", "Fechada"))
        Next

        Console.ReadLine()
    End Sub

Para conseguirmos somente os quadrados perfeitos, utilizamos a expressão i ^ 2, onde i é o número da iteração e o símbolo ^ (circunflexo) indica que o número (i) está sendo elevado a potencia (2). Seria o equivalente a i2.

Fazemos isso dentro do laço que vai de 1 a 10, porque a porta máxima é a 100 e 102. = 100. Para sabermos qual porta do array portas será aberta, devemos passar o índice do array, por isso a expressão i ^ 2 – 1. Como dito antes, sabemos o quadrado perfeito com o i ^2, o -1 da expressão é para ‘acertar’ o cálculo para o array que é baseado em zero (inicia em zero). Dessa forma quando i = 2, o resultado do quadrado seria 4, mas na verdade a porta 4 está na posição 3 do array.

Por hoje é só galera, espero que tenha gostado e entendido.

Fonte sobre problema das 100 portas.

Desenvolvendo um aplicativo para Windows 8

O que pensei em fazer aqui, é trazer o que eu precisei para desenvolver um aplicativo para Windows 8[bb]. Como nunca desenvolvi algo para esse plataforma utilizando os moldes estabelecidos pela Microsoft, achei que seria bacana compartilhar o que estou aprendendo.

A escolha da plataforma

Como já desenvolvo para Windows, fiquei curioso quanto a criação de aplicativo para o novo sistema da Microsoft. Apesar de poder utilizar os conhecimentos que tenho em desenvolvimento de software, percebi de cara, que tinha que mudar um pouco a forma de pensar. Não o pensamento lógico para criação do código, mas como a aplicação se comporta perante o sistema operacional e como o usuário interage. Isso inclusive fica bem claro nas documentações iniciais que a Microsoft disponibiliza para quem está começando a desenvolver para Windows 8.

Modelo de app rodando em simulador do Windows 8

Os passos iniciais que segui para criar o aplicativo para Windows 8

A primeira coisa que surgiu, foi a vontade de criar um aplicativo sem saber o que iria criar. Em seguida pensei o que eu poderia criar; sobre o que seria o aplicativo.

O aplicativo consiste em acessar os dados de um serviço via API* disponibilizada por este e exibir os dados ao usuário, permitindo que ele interaja com o serviço de forma amigável por meio de interface baseada no Windows 8.
Logo em seguida defini que linguagem de programação utilizaria. Escolhi o Javascript, uma nova maneira para criar aplicativos para Windows (desktop). Utilizando juntamente com o CSS e o HTML 5, é possível criar aplicativos que rodam sobre uma base de navegador (IE 10), mas que para o usuário, não tem diferença entre este ou um criado em VB .NET ou C#. Escolhi o Javascript porque a empresa do serviço que acesso, já disponibiliza uma SDK** para facilitar o desenvolvimento com essa linguagem.

Na próxima postagem, vou abordar a parte que estudei para começar o desenvolvimento do aplicativo.

* API (Application Programming Interface) é formada por uma série de funções acessíveis somente por programação, e que permitem utilizar características do software (Wikipédia). Imagine uma caixa fechada, simbolizando um serviço, e para ter acesso ao que está dentro da caixa, você entrega um bilhete dizendo o que você quer para alguém. Essa pessoa sabe exatamente como estão as coisas dentro da caixa, então, ela pega o que você pediu no bilhete, e te entrega; essa pessoa é a API (Eu).

* SDK, é a sigla de Software Development Kit. São disponibilizados por empresas ou projectos opensource para que programadores externos tenham uma melhor integração com o software proposto (Wikipédia).