terça-feira, 10 de julho de 2007

Onde Usar Java e C#?

Este artigo refere-se a uma dúvida que colocaram no blog e que se prende com a utilização de Java e/ou C#.

O Java é uma linguagem de programação multi-plataforma que é muito usada tanto para o desenvolvimento de Software non-web-based como para o desenvolvimento de plataformas web.

O C# é, em termos de linguagem, muito semelhante ao Java, funcionando internamente de um modo ligeiramente diferente mas que também pode ser usado para desenvolver Windows Applications e/ou Web Applications.

O seu uso depende das necessidades do cliente e do âmbito do projecto em questão.

Em termos de funcionamento, o C# baseia-se na sintaxe da linguagem C++, tal como o Java. Ambas as linguagens (C# e Java) têm as seguintes características:

1- Modelo de Programação Orientado a Objectos, com herança simples (de uma classe apenas);
2- Herança múltipla com base na simulação através de interfaces;
3- Gestão de memória automático (sem mallocs manuais) através do Garbage Collector;
4- São executadas num ambiente que garante a segurança e a integridade das operações;
5 - Possível uso de reflections ou informação de tipos em runtime.

Ajudei?

Abraço,

David R.

sábado, 7 de julho de 2007

C# - Conversão de Tipos

Em C# a conversão de tipos pode ser feita através de casting ou através da classe System.Convert.

No seguinte exemplo perceberão de certeza a utilidade desta classe:

Object value = "Ola a todos!";
string newvalue = "1";
//conversao do tipo object para string e do tipo string para inteiro ...
string valueString = Convert.ToString(value);
string valueInt32 = Convert.ToInt32(newvalue);
Console.WriteLine(valueString);
Console.WriteLine(valueInt32.ToString());

Esta classe System.Convert é uma classe static pois pode ser acedida sem ser criada uma instância da classe. Mas mais adiante falarei neste tema, a diferença entre classes static e não-static, herança, interfaces e muitos outros temas de certo interessantes para quem se está a iniciar nestas paragens.

Espero ter ajudado e já sabem se existirem dúvidas basta colocarem aqui um comentário que eu respondo sempre.

Abraço,

David R.

Diferenças entre Java e C# - Propriedades

Em termos de propriedades, em java e c# funcionam quase da mesma forma. No entanto a sua sintaxe foi alterada, mas o conceito permanece intacto. Atentemos então aos exemplos seguintes:

JAVA:

private String nome;

public String getNome()
{
return this.nome;
}

public void setNome( String nome )
{
this.nome = nome;
}

C#:

private string nome;

public string Nome
{
get { return this.nome; }
set { this.nome = value; }
}

CASO DE USO:

Imaginemos o seguinte caso:

C#

Empregado empregado = new Empregado();
empregado.Nome = "David";
Console.WriteLine("Nome:" + empregado.Nome);

JAVA

Empregado empregado = new Empregado();
empregado.setNome("David");
System.out.println( "Nome" + empregado.getNome());

NAMESPACES E PACKAGES

Em java é boa prática utilizarem-se packages para agrupar classes de um determinado processo de negócio e/ou swing. Existe quem também utilize packages para separar classes puramente funcionais de classes correspondentes ao GUI da aplicação. Em C#, quando criamos um novo projecto, seja ele windows application ou não, todas as classes desse projecto ficam agrupadas em namespaces que são considerados como packages mas em C#.

Assim, vejamos este exemplo:


using System;
using System.Collections.Generic;
using System.Text;
using Casas; //temos de importar o conteudo do namespace ou package "Casas" para podermos usar a classe "Casa". É semelhante ao Imports do Java.

namespace Empregados //namespace actual do projecto principal
{
class Program
{
static void Main(string[] args)
{
Empregado empregado = new Empregado();
Console.WriteLine(empregado.Nome);
//para usar a classe casa tivemos de importar o package ou namespace "Casa" fazendo - using Casas;
Casa casa = new Casa();
casa.Dono = empregado.Nome;

}
}
}

Assim, em jeito de conclusão, podemos afirmar que é boa prática agrupar um projecto em pequenos sub-projectos de forma a organizarmos o seu conteúdo. Desta forma, a nossa solução (projecto global) terá vários sub-projectos da forma:

using Projecto.Logic;
using Projecto.GUI;

(...)

No próximo artigo irei abordar o tema das conversões de tipos, que julgo será o último tópico realmente importante para que qualquer programador consiga passar de Java para C# sem quaisquer problemas, até porque a sintaxe das duas linguagens não difere assim tanto.

Abraço,

David R.

Diferenças entre Java e C# - Tipos e Ciclos

Como prometido, cá estou eu a divulgar um pouco do que tenho aprendido nos últimos tempos. Durante toda a minha formação, lidei bastante com a linguagem de programação Java, mas nos últimos tempos tenho trabalhado com base em C#. Assim, passo a descrever as príncipais diferenças em termos de sintaxe entre ambas:

TIPOS PRIMITIVOS E TIPOS BÁSICOS

Em Java existe um conjunto de tipos primitivos a saber: byte, char, int, long, float, double. Estes tipos não herdam propriedades de nenhuma classe de topo tal como java.lang.Object pelo que, são unitários. No entanto, se criarmos uma classe "Empregado", esta classe herda da classe de topo, java.lang.Object, as propriedades básicas, pois é um novo Objecto, um novo tipo simples. Isto significa que qualquer classe baseada em Object, não funciona com tipos primitivos. Os tipos primitivos devem ser mapeados no Object Model para poderem ser utilizados.

Em C# é usado o .NET Object, para que os programadores possam comunicar com outras linguagens .NET sem confusão de tipos. Por exemplo, o tipo int em Java é declarado em C# como System.Int32 (tendo como alias "int"), extendendo de System.Object. Isto significa que os tipos primitivos ou simples em C# funcionam como qualquer tipo de objecto. Assim, ao contrário de Java, podemos fazer:

int _number = 2;

Console.WriteLine("Numero: {0}, Tipo: {1}", number.ToString(),number.GetType());

Output: Number:2, Tipo:System.Int32

TABELA COMPARATIVA DE TIPOS PRIMITIVOS E BÁSICOS EM JAVA E C#
Java - C#
boolean - bool (System.Boolean)
byte - sbyte (System.Sbyte)
char - char (System.Char)
int - int (System.Int32)
long - long (System.Int64)
float - float (System.Single)
double - double (System.Double)
CICLOS
Relativamente a ciclos, em Java e em C# existem igualmente os seguintes ciclos:
-for
-while
-do-while
Mas em C# existe ainda o ciclo foreach. De seguida exemplifico o seu uso:
//Declaração de um array ou coleccção de inteiros

int[] array = { 1, 2, 4, 6 };
//Ciclo for, que percorre o array e mostra o seu conteúdo

for(...)
{
Console.WriteLine("Número:" + array[i]);
}
//Ciclo foreach, que percorre todos os membros do array e mostra o seu conteúdo
foreach (int number in array)
{
Console.WriteLine("Número: " + number);
}
O Output é exactamente o mesmo:
Número: 1
Número: 2
Número: 4
Número: 6
Normalmente, para array's simples costumo usar o ciclo "for" para os percorrer, para collections como ArrayList ou List uso sempre o ciclo foreach, que é indiscutivelmente mais simples.
Continuarei a descrever estas e outras diferenças no próximo artigo.
Abraço,
David R.