Prática de Introdução à Programação Orientada a Objetos em Java (1)
Preparação
Para estes exercícios você vai precisar do ambiente de desenvolvimento Java disponível nos computadores do NCC. Para compilar um programa-fonte nomeado OlaMundo.java, use o seguinte comando:
javac OlaMundo.java
Supondo que OlaMundo.java defina uma classe OlaMundo, o comando acima produz um arquivo OlaMundo.class, contendo um código (bytecode) interpretável por uma máquina virtual Java. Para executar o programa, use o seguinte comando:
java OlaMundo
Se algum dos comandos acima retornar erro, verifique suas variáveis de ambiente (PATH, CLASSPATH, JAVAC, JAVA_HOME, JDK_HOME). Caso haja inconsistência nessas variáveis, você pode reconfigurá-las seguindo o exemplo no arquivo javarc. Depois de ajustar as variáveis de ambiente no arquivo, execute:
source javarc
Conceitos Básicos
- O programa ilustra a definição de classes em Java. Qual será a saída para este programa? Compile e execute o programa, observando o resultado produzido.
- O programa define duas classes: a classe
Ponto
e a classeTestePonto
. A classePonto
especifica atributos e métodos para representação de pontos no plano cartesiano: os atributos x e y, representam as coordenadas de um ponto. Possui dois métodosmove
edistancia
. A classeTestePonto
define um único método -main
. A execução de um programa Java é sempre iniciada com a execução do métodomain
, que deve estar definido em alguma classe no programa. O métodomain
no exemplo, contém comandos que ilustram a criação de objetos da classePonto
e a chamada de métodos de objetos dessa classe. - Uma definição de classe em Java é introduzida pela palavra reservada
class
, seguida do nome e do corpo da classe. O corpo da classe consiste em um trecho de programa delimitado pelos símbolos<
e>
, contendo declarações de variáveis e declarações de métodos. - Uma declaração de método é composta por um cabeçalho e pelo corpo do método. O cabeçalho de uma declaração de método especifica as seguintes
informações: o tipo do valor retornado em uma chamada a esse método; o nome do método; a lista (possivelmente vazia) de parâmetros,
delimitada por parênteses. A informação sobre os tipos dos parâmetros de um método, juntamente com o tipo de valor retornado pelo
método, é denominada de
assinatura
do método. A assinatura de um método determina a sua interface, ou seja, em que contextos e com quais argumentos o método pode ser chamado. - O método
move
no programa, na classePonto
, tem dois parâmetros, dx e dy, ambos do tipo int. Esses parâmetros representam os deslocamentos a serem adicionados às coordenadas, x e y, de maneira que o ponto se mova para uma nova posição. - O método
distancia
no programa, na classePonto
, tem apenas um parâmetro, p, do tipo Ponto. Um argumento usada em uma chamada a esse método deve ser, portanto, uma expressão cujo valor é uma referência a um objeto da classe Ponto. - O tipo Ponto é um exemplo de um
tipo-classe
- toda declaração de classe em um programa introduz também um novo tipo, que pode ser utilizado como tipo de variáveis, ou tipo de parâmetros ou do valor do retorno de métodos, declarados nesse programa. - O cabeçalho da declaração do método
main
no programa, na classeTestePonto
, tem a forma padrão de cabeçalho desse método em qualquer programa Java. - As variáveis e métodos podem ser
estáticos
ou não, isto é, podem ser variáveis e métodos de classes ou de objetos. - A declaração de uma variável ou método estático é feita mediante o uso do atributo
static
na sua declaração. O exemplo ilustra a declaração de variáveis e métodos estáticos. Nessa classe, x é uma variável estática, ou uma variável de classe, ou contrário de y, que é uma variável de instância ou de objeto. De maneira análoga, m1 é um método estático, ao passo que m2 não. Uma variável estática, declarada em uma determinada classe, é compartilhada por todos os objetos dessa classe, sendo criada uma única vez durante a execução do programa. Uma variável de objeto, ao contrário, é criada a cada vez que um novo objeto dessa classe é criado. - A variável estática x, definida no exemplo, na classe C, pode ser usada na forma C.x, assim como na forma e.x, onde e é uma expressão qualquer que denota um objeto da classe C. Naturalmente uma variável que não é estática pode somente ser utilizada nessa última forma.
- Um método estático pode apenas utilizar variáveis estáticas.
- Chamadas a métodos estáticos podem ser feitas segunda a mesma forma usada para variáveis estáticas.
- O uso do atributo
static
em uma declaração de variável pode alterar o comportamento de um programa. Por exemplo, execute o programa e depois retire o atributostatic
e execute-o novamente.
Exercícios
- O arquivo TestaLampada.java contém um exemplo de classe em Java. Qual será a saída para este programa? Compile e execute o programa, verificando se a saída é igual à esperada.
- Acrescente as seguintes linhas de código à função
main
do programa TestaLampada.java:Lampada[] lamps = new Lampada[3]; lamps[0] = new Lampada(); lamps[0].mostra();
Qual será a saída para o programa modificado? Compile o programa e execute-o. - Acrescente um atributo
cor
à classeLampada
, representado por umaString
. Modifique o construtor da classe de modo que a cor default de uma lâmpada seja "amarela". Modifique também a funçãomostra
, de modo a imprimir a cor e o estado da lâmpada. Compile e execute o programa novamente. - Explique o que acontecerá se for incluída a seguinte linha no final da função
main
do programa TestaLampada.java:System.out.println(lamp.estado);
- Crie um segundo construtor para a classe
Lampada
. Este construtor deve receber como argumento a cor da lâmpada. Modifique a funçãomain
de modo a testar o novo construtor.
Material de Apoio
- The Java Tutorial
Tutorial da Sun sobre Java. - Thinking in Java
E-book de Bruce Eckel sobre programação em Java, originalmente em inglês. Neste endereço encontra-se a versão oficial do livro para download (formato HTML compactado). Há uma tradução colaborativa deste livro para a língua portuguesa. - Tutorial "A Linguagem de Programação Java"
Tutorial sobre Java em português (Unicamp). Está um pouco desatualizado, mas grande parte do conteúdo ainda é útil, principalmente para quem tem dificuldades de leitura dos tutoriais em inglês.