UFSM > Ciência da Computação > ELC117 - Paradigmas de Programação

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

  1. 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.

  2. O programa define duas classes: a classe Ponto e a classe TestePonto. A classe Ponto 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étodos move e distancia. A classe TestePonto define um único método - main. A execução de um programa Java é sempre iniciada com a execução do método main, que deve estar definido em alguma classe no programa. O método main no exemplo, contém comandos que ilustram a criação de objetos da classe Ponto e a chamada de métodos de objetos dessa classe.

  3. 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.

  4. 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.

  5. O método move no programa, na classe Ponto, 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.

  6. O método distancia no programa, na classe Ponto, 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.

  7. 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.

  8. O cabeçalho da declaração do método main no programa, na classe TestePonto, tem a forma padrão de cabeçalho desse método em qualquer programa Java.

  9. 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.

  10. 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.

  11. 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.

  12. Um método estático pode apenas utilizar variáveis estáticas.

  13. Chamadas a métodos estáticos podem ser feitas segunda a mesma forma usada para variáveis estáticas.

  14. 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 atributo static e execute-o novamente.

Exercícios

  1. 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.

  2. 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.

  3. Acrescente um atributo cor à classe Lampada, representado por uma String. Modifique o construtor da classe de modo que a cor default de uma lâmpada seja "amarela". Modifique também a função mostra, de modo a imprimir a cor e o estado da lâmpada. Compile e execute o programa novamente.

  4. 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);
    

  5. Crie um segundo construtor para a classe Lampada. Este construtor deve receber como argumento a cor da lâmpada. Modifique a função main de modo a testar o novo construtor.

Material de Apoio

Página criada em: Quart Oct 20 11:11:08 BRT 2010. Última atualização em: Thu Oct 21 06:14:19 2010. Autoria: Juliana Kaizer Vizzotto.