• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Ridelight

[Java] Como Começar a Aprender Java

4 mensagens neste tópico


Java - a história


Em 1991, a Sun Microsystems, iniciou o “Green Project”, o ponto de partida de uma linguagem de programação orientada a objectos denominada “Java”. Os mentores do projecto eram “Patrick Naughton”, “Mike Sheridan”, e “James Gosling”. O objectivo do projecto não era a criação de uma nova linguagem de programação, mas antecipar e planear a “próxima era” do mundo digital. Eles acreditavam que no futuro iria existir uma convergência dos computadores com os equipamentos e electrodomésticos usados pelas pessoas no seu dia-a-dia.

Para provar a viabilidade desta ideia, 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 ideia inicial. O protótipo chamava-se *7 (“StarSeven”), um controlo remoto com uma interface gráfica “touchscreen”. Para o *7 foi criado uma mascote, hoje amplamente conhecido no mundo Java, o “Duke”. O trabalho do “Duke” no *7 era ser um guia virtual ajudando e ensinando o utilizador a utilizar o equipamento.

O *7 tinha a possibilidade de controlar diversos dispositivos e aplicações. “James Gosling” especificou uma nova linguagem de programação para o *7. “Gosling” decidiu denominá-la de “Oak”, que significa carvalho, uma árvore que ele podia observar quando olhava pela janela.

O próximo passo era encontrar um mercado para o *7. A equipa achava que uma boa ideia seria controlar televisões e filmes. Eles construíram um demo a que deram o nome “MovieWood”, mas infelizmente era muito cedo para que os filmes por encomenda assim como as empresas de TV por cabo pudessem rentabilizar o negócio. A ideia que o *7 tentava vender naquela altura, é hoje realidade em programas interactivos e também na televisão digital. Permitir ao telespectador interagir com a programação numa grande rede por cabo, era algo muito visionário e estava muito longe do que as empresas de TV por cabo tinham capacidade de entender e comprar. A ideia certa, na época errada.

A sorte é que o boom da Internet aconteceu, e rapidamente estabeleceu-se uma grande rede interactiva. Era este tipo de rede interactiva que a equipa do *7 estava a tentar vender ás empresas de TV por cabo. Deixou então de ser necessário construir uma infra-estrutura para rede. “Gosling” foi incumbida a tarefa de adaptar o “Oak” para a Internet e em Janeiro de 1995 foi lançada uma nova versão do “Oak” que foi redenominada de Java. A tecnologia Java tinha sido projectada para mover-se através de 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 utilizadores cresceu rapidamente, grandes empresas, como a IBM anunciaram suporte para a tecnologia Java.

Desde o seu lançamento, em Maio de 1995, a plataforma Java foi adoptada com uma rapidez superior a todas as outras linguagens de programação na história da computação.

Em 2003 Java atingiu a marca de 4 milhões de programadores em todo mundo. Java continuou e continua a crescer e hoje é com certeza um padrão para o mercado oferecendo qualidade, desempenho e segurança ainda sem nenhum rival a altura. Java tornou-se popular pelo seu uso na Internet e hoje possui um ambiente de execução em web browsers, mainframes, SOs, telemóveis, entre outros.


Java - algumas noções


A plataforma Java é o nome dado ao ambiente computacional, ou plataforma, da empresa estadunidense “Sun Microsystems”. O programador cria aplicações para este ambiente através da linguagem de programação Java e de um conjunto de ferramentas de desenvolvimento. Neste caso, a plataforma não se refere a um sistema operativo ou hardware específico, mas a um programa chamado de máquina virtual, e um conjunto de bibliotecas que disponibilizam funcionalidades comuns.

A plataforma Java é formada por outras três plataformas que foram criadas para segmentos específicos de aplicações:

Java SE (Java Platform, Standard Edition).

É a base da plataforma; inclui o ambiente de execução e as bibliotecas comuns.

Java EE (Java Plataform, Enterprise Edition).

A edição voltada para o desenvolvimento de aplicações empresariais.

Java ME (Java Platform, Micro Edition).

A edição para o desenvolvimento de aplicações para dispositivos móveis.

A plataforma Java é constituída por um grande número de tecnologias, cada uma contém uma parte distinta de todo o ambiente de desenvolvimento e execução de software. Os utilizadores finais, interagem com a máquina virtual Java (Java Virtual Machine, ou JVM) e um conjunto padrão de bibliotecas de classe.

Existe uma grande variedade de formas de utilizar uma aplicação Java, incluindo applets embutidas em páginas web, aplicações para utilização em computadores, aplicações em telemóveis e em servidores de Internet.

Os programadores de aplicações em Java utilizam um conjunto de ferramentas de desenvolvimento, o JDK.

Um programa escrito para a plataforma Java necessita de dois componentes para ser executado: a máquina virtual Java, e um conjunto de bibliotecas de classe que disponibilizam um série de serviços para o programa. A distribuição da máquina virtual e esta biblioteca é conhecida como JRE (Java Runtime Environment).

Java Virtual Machine

O “coração” da plataforma Java é o conceito de um processador "virtual", que executa os programas formados por bytecodes Java. Este bytecode é o mesmo independentemente do hardware ou sistema operativo em que o programa é executado. A plataforma Java disponibiliza a JVM, que traduz, em tempo de execução, o bytecode para instruções nativas do processador. Isto permite que uma mesma aplicação seja executada em qualquer plataforma que possua uma implementação da máquina virtual.

Desde a versão 1.2 da JRE, a implementação da Sun da JVM inclui um compilador just-in-time (JIT). Com este compilador a totalidade do bytecode de um programa é transformado em instruções nativas e carregado na máquina virtual numa única operação, permitindo um ganho no desempenho superior a implementação anterior, onde as instruções em bytecode eram interpretadas uma a uma. O compilador JIT pode ser projectado de acordo com a plataforma ou hardware de destino, e o código que ele gera pode ser optimizado com base na observação de padrões de comportamento dos programas.

A plataforma Java não é a primeira plataforma baseada numa máquina virtual, mas é de longe a mais conhecida e a que alcançou maior sucesso. Anteriormente esta tecnologia era utilizada na criação de emuladores para auxílio a projectos de hardware ou de sistemas operativos. A plataforma Java foi desenhada para ser totalmente implementada em software, permitindo assim a sua migração de uma forma fácil para todos os tipos de plataformas e de hardware.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites


Java - exemplos de código


Metodo main

O método main é onde o programa inicia. Pode estar presente em qualquer classe. Os parâmetros de linha de comando são enviados para a array args[], do tipo String.

public class OlaMundo {
   public static void main(String args[]) {
      System.out.println("Olá, Mundo!");
   }
}

Criação de classes

Todas as classes em java derivam de Object. O java permite apenas herança simples. Exemplos:

public abstract class Animal {
   public abstract void fazerBarulho();
}

public class Cachorro extends Animal {
   public void fazerBarulho() {
       System.out.println("AuAu!");
   }
}

public class Gato extends Animal {
   public void fazerBarulho() {
       System.out.println("Miau!");
   }
}

O exemplo acima cria duas classes, ambas derivadas de animal. O Java não suporta herança múltipla.

Interfaces

Uma interface modela um comportamento esperado. Pode-se entende-la como uma classe que contenha apenas métodos abstratos. Embora uma classe não possa conter mais de uma superclasse, a classe pode implementar mais de uma interface. Exemplo:

public interface Pesado {
   double obterPeso();
}

public interface Colorido {
   Color obterCor();
}

public class Porco extends Animal 
implements Pesado, Colorido {
   public void fazerBarulho() {
       System.out.println("Oinc!");
   }

   //Implementação da interface Pesado
   public double obterPeso() {
       return 50.00;
   }

   //Implementação da interface Colorido
   public Color obterCor() {
       return Color.BLACK;
   }

   //Um método só do porco
   public boolean enlameado() {
       return true;
   }
}

Classes internas

Uma das principais diferenças do C++ é que o Java pode ter classes internas. Exemplos:

public class Cavalo extends Animal {
   public void fazerBarulho() {
       System.out.println("RIINCH!");
   }

   //Classe interna e privada. Existe só no contexto do cavalo.
   private class Parasita extends Animal { 
       public void fazerBarulho() {
           System.out.println("SQRRT");
       }
   }
}   

Objetos e classes anônimos

Podemos também objetos e ou classes anônimas, exemplo:

public class MostraBarulho {
   public static void main(String args[]) {
       new Cavalo().fazerBarulho(); //Objeto anônimo.

       //Abaixo um objeto e classe anônimos!
       new Animal() {
           public void fazerBarulho() {
               System.out.println("QUAC!");
           }
       }.fazerBarulho();
   }
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites


Java - programação por objectos


Antes de mais ... bem vindos ao maravilhoso mundo de programação por objectos.

O que é OO ?

Imaginem que querem programar um sim-estrada  (triciclos ou biciletas também funcionam), terão algo como :

um struct com {
struct roda rodas[4];
int velocidade;
struct direccao direccao;
}

main () {
// Código para construir uma estrada, enchê-la de structs de carros e controlar a rotação de cada roda, velocidad etc.
}

Em OO, terás, em vez de structs, classes/objectos ... algo como :

class Rodas{
int diametro;
int velocidade;
int rotacao;
....
}

class Point{
int x;
int y;
}

class Carro {
   // varíaveis da class
   Rodas rodas[4];
   int velocidade;
   Point direccao;

   //funções da classe
   mudaDireccao(int x,int y) {
   //código que altera a direcção, vira as rodas etc.
   ...
   }
   
   acelera(int quanto) {
   //código para acelerar, aumentar a velocidade, verificar limite de velocidade etc.
   ...
   }

   trava(int quanto) {
   //código para travar etc
   }
}

class Estrada {
Carro carros[1024];

    void main() {
    //Código para criar uma estrada e enchê-lá com carros e mandar cada um dar uma volta. 
   ...
   }
}

A diferença aqui é que sem OO têm de controlar tudo, os objectos e como eles agem dentro do vosso programa. Em OO, cada objecto sabe como deve efectuar uma certa operação. Portanto o código principal só precisa de mandar o carro acelerar ou mudar de direcção que o objecto Carro sabe que tem de mandar cada uma das rodas andar mais rápido (ou devagar). Portanto quem constroi a "estrada" com os carros basta mandá-los andar que eles tratam de controlar as suas componentes.

Isto não quer dizer que os programas fiquem mais espertos, mas quer dizer que a estrada não precisa de saber que o carro tem 4 rodas que têm de ser aceleradas. A "estrada" (imaginem que a estrada é o vosso main) basta dizerem ao carro para andar mais rápido que o carro trata do resto. Se amanhã passar a existir um carro com 5 rodas, a estrada não precisa de saber isso, continua a mandar o carro andar, e é o carro que agora tem de controlar as 5 rodas.

Este é um exemplo um pouco colorido mas é para mostrar que o conhecimento de como as coisas funcionam passam a fazer parte das próprias coisas. Se um dia alguém criar uma classe "auto-estrada", pode simplesmente usar os objectos carro que já existiam para a "estrada" e não precisa de saber como andam, se têm 4,5, ou 7 rodas.

Mas OO não é o paraíso e a resposta para todos os problemas. Para algumas situações só vem atrapalhar e é preferivel um programa mais simples com um main de 10 páginas ... mas podem quase sempre fazer a mesma coisa com objectos.

Mais uma questão de OO é a possíbilidade de uma classe herdar de outra

Vamos então esclarecer um pouco a questão de herança.

A palavra herança quer dizer que há certas coisas que passam de país, para filhos, para netos etc. As classes também podem ter herança de outras classes, onde certas propriedades (variáveis ou métodos) podem ser herdados pelos filhos.

Continuando o exemplo do sim-estrada, existem vários veículos que podem circular pelas estradas, como por exemplo ambulâncias, carros de polícia  :police:, carros normais, carros tunados  8) etc. Cada uma tem uma particularidade como por exemplo ligar as luzes de emergência na ambulância e nos carros de polícia, acender as luzes neon dos carros tunados, ou até disparar com o turbo dos mesmos. No entanto todos são veiculos que obdecem às mesmas regras e têm propriedade comuns a todos, como o facto de todos terem quatro rodas, um volante, um espelho retrovisor etc. Como é que podem implementar isto ?

Em C normal, teriam provavelmente um "tipo" na struct que nos dizia que tipo de veiculo é que era, e haveria uma função que tinha que ver que tipo de carro era e só permitir os carros policia e ambulâncias executar um método chamado AcendeLuzesEmergencia().

Em OO podemo usar herança para criar uma classe pai (ou mãe, é indiferente porque os compiladores não são esquezitos :) ) que tem as variaveis e métodos comuns a todos os veiculos, como por exemplo o acelerar e travar, a velocidade a que o veiculo vai etc. E depois podemos ter classes que herdam desta classe pai mas acrescentam novas funcionalidades, como o AcendeLuzesEmergencia, ou DisparaTurbo. As funções de acelerar e travar, não precisam de ser programadas novamente na classe filho pois o filho tem acesso a tudo o que o pai tem definido (não é bem assim, mas já explico melhor) e ainda às funções que ele tem que não existem na classe pai. Mais ainda, não precisam de nenhuma variável a dizer de que tipo é o objecto, pois quando o criam, criam um objecto do tipo CarroPolicia ou CarroTunado. Usando o objecto Carro do meu último exemplo, podem criar os seguintes objectos filho(uso notação Java, mas C++ ou C# é muito parecido) :

[i]classe CarroPolicia extends Carro{
LuzesEmergencia luzes[2];

void AcendeLuzesEmergencia () {
   // Ligar as luzes de cima vermelha e azul
   ...
   }
}[/i]

Agora podem criar um objecto do tipo CarroPolicia e mesmo assim chamar as funções de acelerar e travar embora elas não estejam definidas na classe CarroPolicia mas sim na classe Carro. Esta classe extende a classe Carro adicionando novas luzes e uma nova função. Se criarmos uma classe do tipo Carro, teremos um carro simples que não tem luzes de emergência nem um metodo de acender as mesmas.

Este é o funcionamento básico da herança. Existe um conceito que ainda não falei, mas que dei a perceber acima que é, as vezes podem querer que os filhos não tenham acesso a tudo o que nós temos, ou pelo menos não permitir que seja mexido. E mais, este conceito também se extende às classes vizinhas que são nossas "amigas".

Por exemplo, não querem que o CarroTunado consiga mexer directamente com a velocidade, porque nesta versão do sim-estradas, todos os carros só podem andar a um máximo de 50km/h. Sendo assim, queremos que qualquer alteração à velocidade seja feita somente pela chamada acelerar da classe Carro, porque inclui código que não permite acelerar mais do que os 50km/h. Para isso tornamos a variavel da velocidade com visibilidade private, mas deixar a função acelerar com uma visibilidade public. Assim todas as subclasses podem acelerar só por meio da chamada à função Acelerar da classe pai, porque não lhes é permitido mexer na variável que é private. Por o método acelerar ser public, isto que dizer que qualquer outra classe de fora pode chamar este método do objecto. Ou seja, se a estrada (outra classe) fosse um ser inteligente e queria mandar acelerar e desacelerar os carros que circulam nela, podiam simplesmente chamar a função respectiva.

Tanto os métodos como as variáveis da classe podem ter uma visibilidade diferente, o que permite ou não o acesso a essa funções ou variáveis pelos filhos ou amigos.

Existe mais um tipo de visibilidade que se chama protected, e que faz com classes fora da familia (classes que não são herdadas) não consigam aceder às funções, mas os filhos consigam.

Texto editado de um postpost do utilizador Destineo.


Java - projectos de utilizadores P@P


ficheiro: Butao1.java

import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class Butao1 extends Applet implements ActionListener {
    private boolean text = false;
    private Button b;


    public void init()
    {

b = new Button("Estou no botao");
add(b);
b.addActionListener(this);

    }

    public void paint(Graphics g)
    {
if (text)
    {
     	g.drawString("Cliquei no botao",50,50);
    }
    }



  public void actionPerformed(ActionEvent e)
  {
      if(e.getSource() == b)
      {
     text = !text;
     repaint();
      }
  }

} 

no fim de compilar obtemos um ficheiro chamado Butao1.class

e finalmente,

ficheiro Butao1.html

<HTML>
<HEAD>
    <TITLE>Simples Applets - Java</TITLE>
</HEAD>
<BODY>
    
   <b>Criado Por Tofas </b>
   </br>
   <p><Big>Botao 1</Big></p>
   <applet code="Butao1.class" width=200 height=200> </applet>


</BODY>
</HTML>

podem encontrar mais exemplos aqui:

só botoes 

outros applets

Texto retirado de um post da utilizadora Tofas

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites


Java - agradecimentos


filip_e

d_pintassilgo

freesumo

Tofas

Destineo

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora