quarta-feira, 21 de março de 2012 0 comentários

Array

De forma simples um Array é um conjunto de elementos de um mesmo tipo de dado onde cada elemento desse conjunto é acessado através de um índice.

Um array é também conhecido como vetor (quando unidimensional) ou matriz (quando bidimensional).

Array Unidimensional – Vetor

Como já dito na introdução do artigo um vetor é um array de uma única dimensão.
Em C# declaramos vetores da seguinte maneira:

string[] carros; //Array somente declarado, não inicializado e nem criado efetivamente


 A sintaxe da declaração é simples, colocamos o tipo que queremos que o nosso array (vetor) se torne e à frente abrimos e fechamos colchetes ([]) e damos um nome (neste caso ‘carros’).
Agora ainda temos que cria-lo efetivamente e inicializa-lo, para isso fazemos o seguinte:

carros = new string[3] ; // vetor com 3 elementos, aqui estamos criando-o efetivamente


Com o Vetor em “mãos” (criado) nos falta inicializa-lo, ou seja, colocar valores em suas posições. Em C# as posições de um vetor é acessada através de um Índice que sempre começa com zero, veja:

carros[0] = “Palio”;
carros[1] = “Corsa”;
carros[2] = “Gol”;

Acima temos um array inicializado, todas suas posições (as 3) tem um valor, veja que vai de 0 a 2 e não de 1 a 3 (sempre a ultima posição vai ser igual a quantidade de elementos menos 1).

Vejamos como percorrer este vetor através de um Laço for:
for(int i = 0; i < 3; i++)
{
Console.WriteLine(carros[i].ToString());
}
Até o momento vimos como declarar, criar, inicializar e acessar um vetor, agora vamos ver como isso se aplica a matriz.

Array Bidimensional – Matriz
Vamos declarar um array de duas dimensões, veja:

int[,] array = new int[2, 2];


Na sintaxe acima declaramos um array bidimensional com duas linhas e duas colunas, ou seja, temos um array com 4 posições:

array[0,0] = 1;
array[0,1] = 2;
array[1,0] = 3;
array[1,1] = 4;

No Código acima temos a inicialização de cada posição da matriz.

Vamos ver agora como fazemos para percorrer cada posição da matriz, veja:

for(int i = 0; i < 2; i++)
{
for(int j = 0; j < 2; j++)
{
Console.WriteLine(array[i,j].ToString());
}
}

Ou seja, precisamos de um for dentro de outro, o primeiro percorre cada ‘linha’ enquanto o interno percorre as ‘colunas’.


Percorrendo um Array – foreach
Como já visto no artigo anterior podemos percorrer coleções com o loop foreach, vejamos como percorrer um vetor de inteiros:

int[] array = new int[2];
array[0] = 1;
array[1] = 2;
foreach(int valor in array)
{
Console.WriteLine(valor.ToString());
}

Veja como é muito mais simples, no loop foreach a variável ‘valor’ assume cada valor contido na coleção, no nosso caso o vetor. Ainda poderíamos percorrer qualquer outra coleção, como linhas de uma Data Table ou ainda uma lista genérica.

Artigo de Cleber Dantas
segunda-feira, 19 de março de 2012 0 comentários

string e String no C#

Manipulando Strings no C#


O tipo string apesar de se comportar como um value type é na verdade um reference type. Apesar disso, devemos considerar que estamos trabalhando com um value type quando estamos manipulando strings, tendo em vista que este tipo de dado foi programado para funcionar como tal.

A classe string possui uma série de métodos estáticos e não estáticos, que são utilizamos para formatação, concatenação, desmembramento, substring, etc. Vamos analisar alguns destes métodos da classe string.



O método Substring

O método substring é um método não estático que permite pegarmos uma porção de uma string. Para utilizarmos o método substring, basta chamar o método a partir de uma variável string ou mesmo de uma string literal, conforme o exemplo.
string nome = "Testando da Silva";
string sobreNome = nome.Substring(12,5);

O método substring aceita como parâmetro a posição inicial que queremos obter e quantos caracteres devem ser extraídos. Caso não seja informado o número de caracteres a ser extraído, a função retornará o restante da string a partir da posição inicial informada.




O método IndexOf

O método IndexOf é utilizado para localizar uma determinada palavra dentro da string. Este método retornará a posição da string desejada. Caso a string não seja encontrada, será retornado o valor -1.
string nome = "Testando da Silva";
int pos = nome.IndexOf("Silva");
//A partir do índice 5
int pos2 = nome.IndexOf("Silva", 5);
Conforme vimos no exemplo, é possível informar a posição inicial para busca como um parâmetro adicional.




Funções ToUpper e ToLower

As funções ToUpper e ToLower permitem colocar uma string em letra minúsculas ou maiúsculas, conforme o exemplo a seguir.
string nome = "Maurício";

nome = nome.ToUpper();
nome = nome.ToLower();


Funções StartsWith e EndsWith

As funções startswith e endswith verificam se a string começo ou termina com uma determinada palavra ou caracter. Estas funções retornam um valor booleano (true ou false).
string arquivo = "comctl32.dll";

if(nome.StartsWith("com"))
    Console.WriteLine("Começa com COM!");

if(nome.EndsWith(".dll"))
    Console.WriteLine("É uma dll!");


Funções TrimStart, TrimEnd e Trim

As funções de Trim servem para remover espaços em branco das strings. A função TrimStart remove os espaços em branco do início da string, já a função TrimEnd remove os espaços em branco do final da string. A função Trim remove os espaços em branco do inicio e do fim da string.
string nome = "   MAURICIO    ";

     nome = nome.TrimEnd();
     nome = nome.TrimStart();

     nome = nome.Trim();


 Funções PadLeft e PadRight

As funções PadLeft e PadRight servem para preencher uma string a esquerda ou a direita com um caracter especificado. Os exemplos a seguir mostra o uso das funções PadLeft e PadRight.
string nome = "Mauricio";

    nome = nome.PadRight(10, ' ');
    // "Mauricio  "

    string codigo = "123";
    codigo = codigo.PadLeft(6, '0');
    // "000123"


Funções String.Join e String.Split

A função Split serve para quebrar uma string em um array de strings de acordo com um separador. Ao contrário da função split, a função Join concatena um array de string inserindo um separador.
string linha = "Teste, 10, 20, 10/06/2007";

string[] campos = linha.Split(',');

string linhaNova = String.Join(';', campos);


A Função String.Format

A função String.Format é uma das funções mais versáteis da classe string. Esta função permite a criação de uma string baseada em um padrão. Podemos colocar dentro do padrão da string de formatação alguns tokens que poderão ser substituídos por variáveis passadas por parâmetro no comando format.
string teste = String.Format("Vou colocar o {0} aqui.", "parâmetro");

No exemplo acima, o padrão da string (primeiro parâmetro) contém um token {0}. Este token indica que este valor deve ser substituído pelo segundo parâmetro passado para a função (neste caso a palavra “parâmetro”).
sTeste = String.Format("Formatação de string com {0} parâmetro. ",
"Agora são {1}. Valor numérico: {2}", 1, Now(), 15.5);

No exemplo acima, temos o padrão da string com mais de um token, com números de 0 à 2. A função também recebe 3 parâmetros adicionais que correspondem aos valores que serão substituídos na string. Além de informarmos os tokens, podemos informar regras de formatação que serão utilizadas de acordo com o tipo de dado passado por parâmetro, conforme o exemplo,
sTeste = String.Format("Custom Format: {0:d/M/yyy HH:mm:ss}", dtHoje);
sTeste = String.Format("Formatação do número inteiro: {0:D}.", iNumero);
sTeste = String.Format("Formatação do número inteiro: {0:D4}.", iNumero);


A classe StringBuilder~

Apesar da versatilidade da classe string, operações com string podem consumir muitos recursos e causar perda de desempenho. Isto ocorre porque a cada operação o framework cria um novo buffer para a string resultante da operação, ao invés de aproveitar o buffer que está sendo utilizado. Isto é mais aparente em operações de concatenação.

Para não criar este tipo de problema, podemos utilizar a classe StringBuilder, do namespace System.Text. Esta classe permite a criação de strings aproveitando o buffer utilizado, o que torna o código mais eficiente.

No exemplo a seguir temos um trecho de código com uma operação feita de forma ineficiente e outra mais eficiente usando o stringBuilder, veja a diferença.
// Codigo ineficiente
string sql;
sql =  "SELECT * FROM Products";
sql += " WHERE CategoryId=1 AND";
sql += "       AND UnitPrice>10";

// Codigo Eficiente
StringBuilder sb =
    new StringBuilder();

sb.Append("SELECT * FROM Products");
sb.Append(" WHERE CategoryId=1 AND");
sb.Append("       AND UnitPrice>10");

sql = sb.ToString();


Existem zilhões de maneiras de se utilizar strings, mas nem todas são as mais indicadas para determinados casos.

O importante é que você analise seu caso e entenda as implicações da utilização de certos tratamentos para strings.


terça-feira, 13 de março de 2012 0 comentários

Diferenças sintáticas e semânticas entre Java e C# - Parte 2

Continuando com o exemplo de uma classe básica, Cliente, a qual será exibida em Java e em C#, e então comentários e comparações serão apresentados. Veja na Figura 1, a implementação em Java e na Figura 2, a implementação da mesma classe em C#.

Figura 1
























Figura 2























Declaração de Atributos e Propriedades

Java: 
private long id;  à assessores
private String nome;
private Calendar nascimento;
private double renda; à atributos

public long getId() {
            Return id;  }
public void setId(long id){
            This id = id; } à assessores

C#: 
privat long _id; à atributo

public long Id {
            get {return_ id; }
            set {_id = value; } à assessores

Um atributo é uma característica de um determinado objeto, porém, não existe regra ou obrigatoriedade para que este atributo seja visível/acessível externamente. Para que um atributo tenha esta característica (ser visível a outros objetos/classes), é preciso transformá-lo em propriedade. Uma propriedade é uma característica de um objeto, a qual pode ser acessada externamente, normalmente por outra classe/objeto.

Em Java, um atributo é declarado propriedade quando o mesmo possui métodos acessores públicos definidos para ele, ou seja, os métodos get e set. Desta forma, um atributo de um objeto em Java só pode ser acessado através de chamadas a métodos, que retornem valores (get) e que recebem valores (set), atualizando o estado do objeto.

Em C# a transformação de um atributo para propriedade é diferente, segue o padrão Delphi, ou seja, os valores são obtidos e atribuídos através de um operador de igualdade (=). O exemplo acima, apresenta as declarações privadas para os atributos e publicas para as propriedades, semelhante ao Java. Porém, veja que uma propriedade em C#, possui (não obrigatoriamente) os métodos get e set, onde existe então a implementação para atribuição e retorno do valor do atributo.

Declaração de Construtores

Java: 
public Cliente (Long id, String nome, Calendar nascimento, Double renda) {
            This.id =id;
this.nome = nome;
this.nascimento = nascimento;
this.renda = renda; } àconstrutor

C#: 
public Cliente (long id, string nome, DateTime nascimento, Double renda) }
            this._id = id;
            this._nome = nome;
this._nascimento = nascimento;
this._renda = renda; } àconstrutor

Não existem diferenças na implementação de construtores. C# traz também o já famoso e útil this, que apenas para relembrar, é uma referência ao objeto atual da classe onde o mesmo é utilizado, quer seja para atributos, métodos ou até mesmo referenciando o uso em sobrecargas de construtores.

domingo, 11 de março de 2012 0 comentários

Diferenças sintáticas e semânticas entre Java e C# - Parte 1

Numa breve introdução, podemos dizer que a sintaxe de uma linguagem influencia na maneira como os programas são escritos pelo programador, lidos por outros programadores e reconhecidos pelo computador. 

A semântica de uma linguagem determina como os programas são resolvidos pelos programadores, entendidos por outros programadores e interpretados pelo computador, ou seja, consiste num conjunto de regras que definem a forma da linguagem, como as sentenças podem ser formadas como sequências de componentes básicos.

Java é uma linguagem de programação orientada a objeto desenvolvida na década de 90 pelo programador James Gosling, na empresa Sun Microsystems. Diferentemente das linguagens convencionais, que são compiladas para código nativo, a linguagem Java é compilada para um “bytecode” que é executado por uma máquina virtual. A linguagem de programação Java é a linguagem convencional da Plataforma Java, mas não sua única linguagem.

C# (CSharp) é uma linguagem de programação orientada a objetos criada pela Microsoft, faz parte da sua plataforma .Net. A companhia baseou C# na linguagem C++ e Java.

Classes, atributos, tipos de dados, modificadores de escopo e acesso aos atributos

Foi usada como exemplo para este artigo uma classe básica, Cliente, a qual será exibida em Java e em C#, e então comentários e comparações serão apresentados. Veja na Figura 1, a implementação em Java e na Figura 2, a implementação da mesma classe em C#.

Figura 1.


Figura 2.

As duas implementações  possuem a mesma funcionalidade, mas por terem sido realizadas em linguagens diferentes, vamos na seqüência, tratar uma a uma.

Namespaces e Packages

Java:
package pojo; --> Pacote

C#:
namespace Poco --> Namespace da Classe

Quando desenvolvemos uma aplicação, é interessante, para não dizer necessário, que as classes sejam distribuídas, ou organizadas, de forma que a estrutura organizacional passe, semanticamente uma regra, a qual esboce responsabilidades de cada conjunto de classes. Em Java, esta organização é realizada através de pacotes (packages) e, em C#, esta organização é conhecida por namespaces. Existem diferenças, mas nada que não seja de fácil assimilação. 


Em Java, um pacote representa fisicamente uma pasta (ou diretório para os puristas); Em C# um namespace não está relacionado a uma pasta. É possível ter uma pasta com um nome e dentro desta pasta, classes que pertençam a um namespace com outro nome, ou ainda, em uma pasta é possível existirem classes com namespaces diferentes.

Importação de classes utilizadas na implementação

Java: 
Import Java.util.calendar; --> Classes utilizadas

C#: 
using System;
using System.Collections.Generic;
using System.Text;  --> Namespaces utilizados

Em Java, as bibliotecas (classes) são importadas através da instrução import, que se situa abaixo da declaração do pacote ao qual a classe pertence. O C# também, obviamente, oferece este recurso, porém, de outra forma. As classes em C# são importadas através da instruçãousing e se encontram antes da declaração do namespace, pois em C#, a classe é delimitada pelo namespace a que pertence. 

Declaração das Classes

Java:
public class Cliente {

C#:
public class Cliente {

Uma classe, tanto em C# como em Java, representa um tipo de dado. Este tipo de dado é composto por atributos, que representam suas características, e métodos, que representam o comportamento da classe (ou serviços oferecidos por ela).
Em Java, um arquivo pode ter várias classes, porém apenas uma delas pode ser pública, as demais terão seu acesso livre à todas as classes do mesmo pacote. Em C#, um arquivo pode ter várias classes também, porém, não existe a limitação de quantidade de classes públicas e as classes que não possuírem uma modificador de acesso, são por default internal.

Uma característica oferecida por C# e que não existe em Java é o conceito de partial class (classes parciais). Uma classe parcial pode ser visualizada como uma classe que possui sua implementação distribuída em mais de um arquivo. Essa característica pode ser facilmente visualizada em aplicaçõesWindows Forms, criadas pelo Visual Studio, onde a interface (formulário) é alocada a um arquivo e o comportamento implementado para a mesma, em outro arquivo. O uso de classes parciais está fora do escopo deste artigo.

Em Java é possível alocar várias classes a um mesmo package, porém, como dito anteriormente, em arquivos separados se forem públicas. Em C#, uma classe pode ser declarada dentro de um namespace, em um único arquivo, Desta forma, dentro deste namespace, várias classes públicas também podem ser criadas.




sábado, 3 de março de 2012 1 comentários

delegate (C#)

O delegate é um dos recursos pertencentes ao Visual Basic .NET, um delegate é um tipo que faz referência a um método e permite a você controlar o código que atualmente manipula um evento. (Como um evento Change, Click, Load, etc.).

Um delegate é então uma classe que pode manipular uma referência, um método. Ao fazer isto, estamos 'delegando' o evento. Uma classe delegada possui uma assinatura e somente será capaz de armazenar referências para procedimentos que têm a mesma assinatura (tipos de parâmetros, tipos de retorno). Isto reforça a segurança e evita que você faça uma referência a uma rotina inválida.

Uma vez que um delegate é atribuído a um método, ele se comporta exatamente como esse método. O método delegate pode ser usado como qualquer outro método, com parâmetros e um valor de retorno, como neste exemplo:

public delegate int PerformCalculation(int x, int y);

Esta capacidade para se referir a um método como um parâmetro torna o delegate ideal para a definição de métodos de retorno.

Propriedades do delegates:
  • São semelhantes a função ponteiros no C ++ , mas seguros;
  • Permite que os métodos sejam passados ​​como parâmetros;
  • Podem ser usados ​​para definir métodos de retorno;
  • Podem ser encadeados, por exemplo, vários métodos podem ser chamados em um único evento;
  • Não precisa coincidir exatamente com a assinatura do método;
  • A versão  C # 2.0 introduz o conceito de métodos anônimos, que permitem que blocos de código sejam passados ​​como parâmetros no lugar de um método definido separadamente.


Anonymous Delegate method


Fontes:
http://msdn.microsoft.com/en-us/library
http://www.c-sharpcorner.com/UploadFile/puranindia/C-Sharp-net-delegates-and-events/

domingo, 26 de fevereiro de 2012 1 comentários

Uma breve introdução sobre Windows Forms e WPF - Windows Presentation Foundation


O Windows Forms é o componente de smart-client do .NET Framework, um conjunto de bibliotecas gerenciadas que habilita tarefas comuns de aplicativo como a leitura e a gravação no sistema de arquivos. Usando um ambiente de desenvolvimento como o Visual Studio, você pode criar aplicativos Windows Forms que exibem informações, solicitam entradas de usuários e se comunicam com computadores remotos pela rede.

No Windows Forms, um formulário é uma superfície visual na qual são exibidas informações para o usuário. Normalmente, os aplicativos do Windows Forms são criados pela inserção de controles em formulários e pelo desenvolvimento de respostas a ações do usuário, como cliques do mouse ou pressionamentos de teclas. Um controle é um elemento discreto de interface do usuário que exibe dados ou aceita a entrada de dados e pode ser controlado por eventos.


Uma aplicação WPF pode ser implantada em ambiente Desktop ou hospedada em um site da web. Possibilita controles ricos, design, e desenvolvimento de aspectos visuais de programas do Windows. Se propõem a unificar um número de serviços de aplicações: interface com o usuário, desenhos 2D e 3D, documentos fixos e adaptáveis, tipografia avançada, gráficos vetoriais, gráficos Raster, animações, vinculação de dados, áudio e video. Embora Windows Forms continue sendo largamente utilizada, e a Microsoft ter criado apenas algumas aplicações WPF, a companhia promove WPF para linha de aplicações comerciais.[3]

Microsoft Silverlight é um subsistema WPF baseado na web que permite aplicações no estilo Flash e aplicações móveis com o mesmo modelo de programação .NET. Recursos 3D não são suportados, mas XPS e desenhos vetoriais estão incluídos.

Referências:
http://msdn.microsoft.com/en-us/netframework/aa663321.aspx
http://msdn.microsoft.com/en-us/library/cc656767.aspx
 
;