domingo, 11 de março de 2012

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.




Nenhum comentário:

Postar um comentário

 
;