domingo, 18 de novembro de 2007

Operadores relacionais e lógicos

Os operadores relacionais e lógicos são utilizados em testes e condições de entrada em um fluxo do programa. Abaixo estão todos eles relacionados:
Op : Nome : Uso : Descrição
> : Maior que : x > y : x maior que y.
>= : Maior ou igual a : x >= y : x maior ou igual a y.
< : Menor que : x <><= : Menor ou igual a : x <= y : x menor ou igual a y. == : Igual a : x == y : x igual a y.
!= : Diferente de : x != y : x diferente de y.
! : NÃO lógico (NOT) : !y : contrário de y.
&& : E lógico (AND) : x && y : x e y.
|| : OU lógico (OR) : x ||y : x ou y.
instanceof : Verif Instância : x instanceof X : x é instância da classe X

Obs.: Java executa curto-circuito.

Operadores aritméticos

Operadores aritméticos são aqueles que efetuam operações aritméticas em um ou mais tipos primitivos.

A seguir são apresentados os operadores aritméticos unários, que atuam sobre um único identificador:
Operador : Nome : Uso : Descrição
++ : Incremento : var++ / ++var : Retorna e adiciona / adiciona e retorna.
-- : Decremento : var-- / --var : Retorna e subtrai / subtrai e retorna.
- : Negativo : -var : Inverte o sinal da variável
+ : Positivo :  +var : Não tem efeito.

Abaixo estão os operadores aritméticos que atuam sobre duas variáveis:
Op             Nome                    Uso                  Descrição
+                Adição                   x + y               Soma x com y.
-                Subtração              x - y                Subtrai y de x.
*                Multiplicação        x * y                Multiplica x por y.
/                Divisão                   x / y               Divide x por y.
%               Resto                     x % y              Resto da divisão de x por y.

Identificadores

Os identificadores em Java iniciam com uma letra, um sublinhado "_" ou um sinal de dólar " $ " e podem possuir números após o primeiro caractere da palavra. Pela premissa de ser case-sensitive existe uma diferenciação entre letras maiúsculas e minúsculas.
Identificadores válidos são:
identificador, meu_Carro, MeuCarro2, _atributo, $bola _2seg
Identificadores usados para determinar nomes de variáveis, atributos de classe ou de instância, parâmetros e métodos.

Tipos Primitivos

Existem somente oito tipos primitivos em Java, todo o resto é objeto. Estes tipos ficaram na linguagem pela sua velocidade de interação, e por isso não foram transformados em Objetos. Como não são objetos a sua declaração já cria a variável em memória não necessitando de construtores.

Numéricos inteiros:
Todos esses tipos possuem uma representação interna em complemento de dois. O valor default para esses atributos é 0 e cada vez que se usar uma constante numérica no código fonte ela será um int a não ser que se especifique outro tamanho. Todos os tipos inteiros têm sinal.
byte - Inteiro 8-bit , faixa: -128 até 127short - Inteiro 16-bit, faixa:-32768 até 32767int - Inteiro 32-bit, faixa:-2147483648 até 2147483647long - Inteiro 64-bit, faixa: -9223372036854775808 até 9223372036854775807

Ponto flutuante:
Por padrão, código fonte, tudo o número com decimais será um float e todo float que não for inicialiazado recebe o valor 0.0.
float - Ponto flutuante 32-bit
double - Ponto flutuante 64-bit

Caractere:
O caractere guarda o valor traduzido de um código ASCII. Seu valor default é o código zero, \ 0.
O char também pode ser representado por um numero inteiro de 16 bits sem sinal, ou seja, pode-se atribuir à uma variável char o valor 100 ou o valor 65535, pois se está operando com os valores da tabela Unicode que representam caracteres de qualquer idioma.
O tipo String, como não é primitivo, é usado para representar uma seqüência de caracteres.
Constantes do tipo caractere aparecem entre apóstrofes: ‘a’, ‘1’, ‘$’.
char -16-bit: O tipo char é representado com 16-bits sem sinal, o que permite endereçar de 0 a 65535.

Booleano:
Tipos boleanos identificam verdadeiro ou falso e podem ser utilizados diretamente em expressões de retorno para testes como if, switch, while e for., porém não podem ser comparados com variáveis ou constantes numéricas como em C. Valor padrão é o false.
boolean - true ou false. Tamanho de 8 bit.

Máquina Virtual Java

Programas Java não são traduzidos para a linguagem de máquina como outras linguagens estaticamente compiladas e sim para uma representação intermediária, chamada de bytecodes.
Os bytecodes são interpretados pela máquina virtual Java (JVM - Java Virtual Machine). Muitas pessoas acreditam que por causa desse processo, o código interpretado Java tem baixo desempenho. Durante muito tempo esta foi uma afirmação verdadeira. Porém novos avanços têm tornado o compilador dinâmico (a JVM), em muitos casos, mais eficiente que o compilador estático.
Java hoje já possui um desempenho próximo do C++. Isto é possível graças a otimizações como a compilação especulativa, que aproveita o tempo ocioso do processador para pré-compilar bytecode para código nativo. Outros mecanismos ainda mais elaborados como o HotSpot da Sun, que guarda informações disponíveis somente em tempo de execução (ex.: número de usuários, processamento usado, memória disponível), para otimizar o funcionamento da JVM, possibilitando que a JVM vá "aprendendo" e melhorando seu desempenho. Isto é uma realidade tão presente que hoje é fácil encontrar programas corporativos e de missão crítica usando tecnologia Java. No Brasil, por exemplo, a maioria dos Bancos utiliza a tecnologia Java para construir seus home banks, que são acessados por milhares de usuários diariamente. Grandes sítios como o eBay utilizam Java para garantir alto desempenho. E a cada ano Java tem se tornado mais rápido, na medida que se evolui o compilador dinâmico.
Essa implementação no entanto tem algumas intrínsecas. A pré-compilação exige tempo, o que faz com que programas Java demorem um tempo significativamente maior para começarem a funcionar. Soma-se a isso o tempo de carregamento da máquina virtual. Isso não é um grande problema para programas que rodam em servidores e que deveriam ser inicializados apenas uma vez. No entanto isso pode ser bastante indesejável para computadores pessoais onde o usuário deseja que o programa rode logo depois de abri-lo.
O Java ainda possui uma outra desvantagem considerável em programas que usam bastante processamento numérico. O padrão Java tem uma especificação rígida de como devem funcionar os tipos numéricos. Essa especificação não condiz com a implementação de pontos flutuantes na maioria dos processadores o que faz com que o Java seja significativamente mais lento para estas aplicações quando comparado a outras linguagens.

Principais Características

A linguagem Java foi projetada tendo em vista os seguintes objetivos:
  • Orientação a objeto - Baseado no modelo de Smalltalk e Simula67;
  • Portabilidade - Independência de plataforma;
  • Recursos de Rede - Possui extensa biblioteca de rotinas que facilitam a cooperação com protocolos TCP/IP, como HTTP e FTP;
  • Segurança - Pode executar programas via rede com restrições de execução;
Além disso, podem-se destacar outras vantagens apresentadas pela linguagem:
  • Sintaxe similar a Linguagem C/C++.
  • Facilidades de Internacionalização - Suporta nativamente caracteres Unicode;
  • Simplicidade na especificação, tanto da linguagem como do "ambiente" de execução (JVM);
  • É distribuída com um vasto conjunto de bibliotecas (ou APIs);
  • Possui facilidades para criação de programas distribuídos e multitarefa (múltiplas linhas de execução num mesmo programa);
  • Desalocação de memória automática por processo de coletor de lixo (garbage collector);
  • Carga Dinâmica de Código - Programas em Java são formados por uma coleção de classes armazenadas independentemente e que podem ser carregadas no momento de utilização.

Histórico

Em 1991, na Sun Microsystems, foi iniciado o Green Project, o berço do Java, uma linguagem de programação orientada a objetos. Os mentores do projeto eram Patrick Naughton, Mike Sheridan, e James Gosling. O objetivo do projeto não era a criação de uma nova linguagem de programação, mas antecipar e planejar a “próxima onda” do mundo digital. Eles acreditavam que, em algum tempo, haveria uma convergência dos computadores com os equipamentos e eletrodomésticos comumente usados pelas pessoas no seu dia-a-dia.
Para provar a viabilidade desta idéia, 13 pessoas trabalharam arduamente durante 18 meses. No verão de 1992 eles emergiram de um escritório de Sand Hill Road no Menlo Park com uma demonstração funcional da idéia inicial. O protótipo se chamava *7 (leia-se “StarSeven”), um controle remoto com uma interface gráfica touchscreen. Para o *7, foi criado um mascote, hoje amplamente conhecido no mundo Java, o Duke. O trabalho do Duke no *7 era ser um guia virtual ajudando e ensinando o usuário a utilizar o equipamento. O *7 tinha a habilidade de controlar diversos dispositivos e aplicações. James Gosling especificou uma nova linguagem de programação para o *7. Gosling decidiu batizá-la de “Oak”, que quer dizer carvalho, uma árvore que ele podia observar quando olhava pela sua janela.
O estouro da Internet aconteceu e rapidamente uma grande rede interativa estava se estabelecendo. Era este tipo de rede interativa que a equipe do *7 esperava. Gosling foi incumbido de adaptar o Oak para a Internet e em janeiro 1995 foi lançada uma nova versão do Oak que foi rebatizada para Java. A tecnologia Java tinha sido projetada para se mover por meio das redes de dispositivos heterogêneos, redes como a Internet. Agora aplicações poderiam ser executadas dentro dos browsers nos Applets Java e tudo seria disponibilizado pela Internet instantaneamente. Foi o estático HTML dos browsers que promoveu a rápida disseminação da dinâmica tecnologia Java. A velocidade dos acontecimentos seguintes foi assustadora, o número de usuários cresceu rapidamente, grandes fornecedores de tecnologia, como a IBM anunciaram suporte para a tecnologia Java.
Desde seu lançamento, em maio de 1995, a plataforma Java foi adotada mais rapidamente do que qualquer outra linguagem de programação na história da computação. Em 2003 Java atingiu a marca de 4 milhões de desenvolvedores em todo mundo. Java continuou crescendo e hoje é uma referência no mercado de desenvolvimento de software. Java tornou-se popular pelo seu uso na Internet e hoje possui seu ambiente de execução presente em web browsers, mainframes, SOs, celulares, palmtops e cartões inteligentes, entre outros.