terça-feira, 6 de novembro de 2012

Fundamentals Framework (Conversão entre tipos)

E aí pessoal, mais uma matéria bem simples, porém, de suma importância para desenvolvedores .NET FRAMEWORK. O tema abordado é conversão entre tipos, ou seja, tipos de dados em que atribuímos pra uma variável qualquer. Em C#, a conversão implícita não é permitida quando há perda de precisão, pois ocorrerá erro em tempo de compilação.
Abaixo terá um código onde não há perca de precisão, desta forma, será executado normalmente tanto em compilação quanto em tempo de execução. O código exibe uma variável chamada inteiro do tipo int e recebe o valor 1, e outra chamada dobro que é do tipo double recebendo 1.0001. Atribuímos a variável inteiro para a double, aqui, como o tipo double suporta o tipo int, ou seja, não tem espaço maior em bytes, ocorrerá tudo bem.


Para terminar erigimos o conceito agora de boxing e unboxing. É um conceito simples onde boxing é a conversão de tipos de valor para tipos de referência, e unboxing o inverso desse procedimento. Abaixo terá uma ilustração de boxing e unboxing. A primeira conversão passamos de um int para uma tipo object realizando um cast, e a segunda o inverso.


Mais uma vez espero ter ajudado, matéria simples e abordado superficialmente, porém, de grande importância. Vale a pena estudá-la. Fiquem à vontade para comentar e corrigir. Abraços a todos, até a próxima!





quinta-feira, 11 de outubro de 2012

Framework Fundamentals (Generics)

Generics é a forma de trabalharmos com coleções fortemente tipadas. Em versões anteriores ao Framework 2.0, uma generalização era realizada pela conversão de tipos tendo como base o tipo geral System.Object. A coleção ArrayList pode ser usada sem modificação  para armazenar qualquer tipo de referência ou valor. Porém qualquer tipo de referência ou de valor realiza uma conversão por trás pelo typecast para o tipo System.Object. Se for tipo de valor sofrerá boxing e unboxing quando recuperado. Consequentemente comprometem com o desempenho do software. Para tratarmos esse tipo de problema, entramos com o conceito de Generics que nos dá mais eficiência nos eventos e segurança permitindo passarmos um tipo de parametro tipicando tal coleção. Abaixo mostrei via código o uso de Genérics.

O código abaixo cria duas classes sendo a segunda genérica. Elas processarão da mesma forma, salvo a segunda classe que pode receber qualquer tipo de dado sem a  necessidade de realizar boxing e unboxing.


Aqui criamos dois exemplos para passarmos os valores para as classes. No primeiro exemplo não veremos o uma diferença, porém o método genérico será mais rápido devido a forma tipada que a coleçao está demonstrando. O segundo exemplo onde usei as mesmas classes, mas passei valores numéricos, irá acontecer um erro, pois o cast realizado em "(int)objNaoGenerico2.nome" pois realiza um cast para tipo int e não para double. Infelizmente o compildor não pegará o erro. Então, em C#, uma exceção é lançada em tempo de execução.



Espero ter contribuído de alguma forma. Comentem, corrija, vamos compartilhar conhecimentos desse mundo gigantesco que é o universo de desenvolvimento de software.

Abraços.






sexta-feira, 1 de julho de 2011

Framework Fundamentals (Interface)

Interface

Poucos programadores têm o conhecimento de interface e como utilizá-las. Interface contém apenas assinaturas de métodos, de propriedades, de eventos ou indexadores. São parecidas com classes, porém não são classes pois não tem aplicação. São apenas assinaturas dos elementos citados anteriormente. Uma classe ou estrutura que implementa a interface deve implementar os membros da interface que estão especificados na definição da interface. Então qual a vantagem de utilizar uma interface? A primeira é por possibilitar multiplicidade de herança, ou seja, para uma classe, podemos declarar várias interfaces. A segunda é o fato de que uma interface na verdade é um contrato, onde garante que aquele método será efetuado. Quando a resposta é verdadeira, o código sabe que o método é pra ser chamado. Abaixo colocarei um código simples do uso de interface.

Abaixo declarei quatro interfaces com operações matemáticas. Por padrão, e uma boa prática do uso de interface, colocarmos sempre a letra "i" em maiúsculo pra sua identificação. Cada interface possui um método void, ou seja, sem retorno e, passamos para cada método dois parametros do tipo inteiro.


Abaixo temos uma classe chamada "resultado", que após os dois pontos, declaramos as interface que serão implementadas por esta classe. Dentro da classe são implementados cada método assim criado dentro das interfaces.





Por útlimo, dentro do da classe Main que por padrão possui um parametro do tipo string que é um vetor chamado args, estanciamos cada objeto do tipo das interfaces. Na sequência duas váriaveis do tipo inteiro recebem os valores digitados pelo usuário, onde será chamado através do objeto o método passando por parametro as duas váriaveis. Nos outros métodos foi declarado diretamente os valores para os cálculos.




Espero ter esclarecido algumas dúvidas sobre interfaces. Até a próxima!


segunda-feira, 27 de junho de 2011

Framework Fundamentals (Herança)

Herança (Interitance)
Herança é uma das três principais características da programação orientada objeto. A herança permite herdar funcionalidade de uma classe para outra utilizando novas funcionalidades. A classe que está sendo herdada damos o nome de classe base e as demais que herdam os membros da classe base chamamos de classes derivadas. Então, explicando de forma mais técnica, a classe derivada é uma especialização da classe base. Abaixo terá um código simples em C# para um melhor entendimento.

No código temos a classe base ou classe pai chamada "Base" e dentro dela um método chamado "atribuicao" que recebe dois parametros do tipo inteiro. Logo abaixo outra classe que é derivada chamada "Derivada" que herda a classe "Base" onde a primeira seta da imagem de cima para baixo está indicando. Dentro da classe derivada temos um método "somar" que chama o método da classe base. Caso queira na classe derivada, não haverá problema para implementar novos métodos.
Espero ter ajudado. E lembrando, são assuntos da prova para a certificação, porém são exemplos simples para ter noções para códigos mais complexos. Até a próxima!

sexta-feira, 24 de junho de 2011

Framework Fundamentals (Tipos por Referência)

Tipos por Referência(Reference Types)

Bom, neste post falaremos um pouco sobre tipos por referência. São variáveis que armazenam referências aos dados diferentemente dos dados de tipo por valor. Eles também são chamados de objeto. Para converter um tipo de valor para um tipo de referência e vice-versa usamos as conversões boxing e unboxing que serão abordados no futuro bem próximo. Mas, não há conversões para variáveis do tipo de valor convertidos, ou seja, não podemos converter um tipo de referência para um tipo de valor convertido. São muitos os tipos por referência, que chega a um número de 2.500. Abaixo colocarei os mais usados:
  • Ssytem.Object
  • System.String
  • System.Text.StringBuilder
  • System.Array
  • String.IO.Stream
  • System.Exception
Ao utilizar a classe System.String, cria-se um novo objeto de cadeia de caracteres na memória, que necessita de uma nova alocação de espaço para este objeto. Caso utilize modificaões repetidas para o objeto(uma sequência de caracteres), a sobrecarga pode causar um baixo desempenho para a aplicação. É pra isso que temos a classe System.Text,StringBuilder, quando precisar modificar uma variável sem criar um novo objeto para a memória. Isso ganhará uma melhora na performance ao concatenar várias cadeias de caracteres em conjunto em um loop. Abaixo postarei um código emonstrando a concatenação de string utilizando a classe StringBuider.

O código abaixo demonstra uma concatenação bem simples. Criamos um objeto "sb" do tipo "StringBuilder", e em seguida utilizamos a palavra chave "Append" para construir a string. Depois passamos para uma variável do tipo string e usamos a classe console.writeline para mostrar na tela. Espero ter ajudado. Até a próxima.


    quarta-feira, 22 de junho de 2011

    Framework Fundamentals (Tipos de Valor)

    Tipos de Valor (Value Types)

    Tipos de Valor consistem em estruturas e enumerações. São eles integrais, ponto flutuantes e boleanos. Essas variáveis contêm valores diretamente. Caso haja atribuição de uma variável para outra variável, o tipo de valor copia os dados e não uma referência para o objeto.
    No código acima, a variável do tipo de valor "condicao" é boleana e não pode receber valor nulo por padrão, porém está declarada como "nullable<bool>  que faz permitir atribuição nulo, neste caso está recebendo o valor "false". O mesmo serve para a variável do tipo int que permite receber nulo, como está sendo feito. Em seguida é feito uma condição utilizando a palavra chave "HasValue" que verifica se o valor não é nulo.

    Certificação Microsoft 70-536.

    Neste início do blog, vamos relatar todos os assuntos referentes à prova 70-536 de certificação em desenvolvimento microsoft. A mesma habilita o profissional para as provas de MCTS, ou seja, esta prova será o ponto de partida para o sucesso. Os assuntos serão postados em tempos indeterminados, e claro, sujeitos a críticas e sugestões. Pretendo somente compartilhar conhecimento e  também adquirir com outros programadores. Quero deixar claro que estou nesta mesma caminhada. Bons estudos para todos nós!