Tipos e v ari v eis - Universidade NOVA de Lisboa€¦ · System.out.println(greeting)...
Transcript of Tipos e v ari v eis - Universidade NOVA de Lisboa€¦ · System.out.println(greeting)...
Capítulo 2
Utilização de objectos
• Variáveis e tipos. Identificadores e instrução de atribuição
• Objectos, classes e métodos. Utilização de pacotes. Referência para
objectos
Introdução à Programação 2007/08 A. Lopes
Tipos e variáveis
• Todo o valor tem um tipo associado
• Exemplos de declaração de variáveis
• Variáveis
• guardam valores
• podem ser utilizadas em vez dos objectos que guardam
String greeting = "Hello, World!";
PrintStream printer = System.out;
int luckyNumber = 13;
Introdução à Programação 2007/08 A. Lopes
Definição de variável
typeName variableName;
ou
typeName variableName = value;
Exemplo:
String greeting = "Hello, Dave!";
Objectivo:
Definir uma nova variável de determinado tipo, e opcionalmente, indicar um valor inicial
Introdução à Programação 2007/08 A. Lopes
Identificador
• Identificador: nome de uma variável, método, ou classe
• Regras para o identificador em Java:
• pode ser constituído por letras, dígitos e o caracter _
• não pode começar por um dígito
• não podem ser utilizadas palavras reservadas
• Por convenção, (e bom senso, uma regra universal) o nome de:
• uma variável começa por uma letra minúscula
• uma classe começa por uma letra maiúscula
Introdução à Programação 2007/08 A. Lopes
Operador de afectação/atribuição
• Operador de atribuição: =
• utilizado para alterar o valor de uma variável
• não é utilizado para estabelecer uma comparação de igualdade
int luckyNumber = 13;
luckyNumber = 12;
Introdução à Programação 2007/08 A. Lopes
Variáveis não inicializadas
int luckyNumber;
System.out.println(luckyNumber);
// ERRO - variável não inicializada
Erro:
Introdução à Programação 2007/08 A. Lopes
Afectação / atribuição
variableName = value;
Exemplo:
luckyNumber = 12;
Objectivo:
Atribuir um novo valor a uma variável definida anteriormente
Introdução à Programação 2007/08 A. Lopes
Tipos de números
• Alguns tipos de números inteiros: short, int, long13
• Números em vírgula flutuante: float, double 1.3F (um float)
0.00013 (um double)
• Quando é multiplicado ou dividido por 10, apenas se altera a posição do ponto decimal (está na base do termo flutuante). Esta representação está relacionada com a notação científica 1.3 ! 10-4
1.3E-4 // 1.3 ! 10-4 em Java
Introdução à Programação 2007/08 A. Lopes
Operações aritméticas
• Operadores básicos: + - *
• Tal como na matemática, a multiplicação tem prioridade sobre a soma
10 + n
n - 1
10 * n // 10 ! n
x + y * 2 // soma de x com y * 2
(x + y) * 2 // multiplicação da soma de x com y por 2
Introdução à Programação 2007/08 A. Lopes
Objectos e classes
• Um objecto é uma entidade que se manipula, através da chamada de métodos
• Todo o objecto pertence a uma classe. Possui características e modo de funcionamento similares a outros objectos da mesma classe
• ( Note-se que números não são objectos. Os tipos de números são tipos primitivos )
•ex: System.out pertence à classe PrintStream
Introdução à Programação 2007/08 A. Lopes
Classes
• Uma classe descreve um grupo de objectos com propriedades, comportamentos e relações comuns. Deste modo, define uma categoria de objectos
• Uma classe tem:
• identidade - o nome
• estado ou atributos - as características
• comportamento ou métodos - as funcionalidades
• Exemplo
• classe caneta, três objectos
• cada objecto com o seu estado próprio (a cor e a quantidade de tinta), sendo possível escrever e recarregar !"#$%&'()*+,-&./0&12.--*- ##34
!"#$%&'()*+,-.&
! 567**&0899*7*/,&:()*+,-;&:/*&+2.--
! ".+6&:()*+,&8/&.&0899*7*/,&-,.,*
!"#
$#%&'()(*+$#%&+",-.#.#/
0+.1"2"3.))
Introdução à Programação 2007/08 A. Lopes
Métodos
• Um método é uma sequência de instruções que implementa determinada funcionalidade. Permite aceder aos dados de um objecto
• Todo o método é definido dentro de uma classe, podendo ter argumentos de modo a receber valores durante a sua execução
• A manipulação de objectos é feita através da chamada dos seus métodos
• A classe determina os métodos que se podem utilizar
String greeting = "Hello";
greeting.println() // Erro
greeting.length() // OK
Introdução à Programação 2007/08 A. Lopes
Uma representação de dois objectos da classe String
Introdução à Programação 2007/08 A. Lopes
Métodos para a classe String
• O método length conta o número de caracteres da string
• O método toUpperCase cria outro objecto String, o qual contém os caracteres da string original, com as letras minúsculas convertidas em letras maiúsculas
• Ao aplicar um método ao objecto, é importante verificar se o método esta definido na respectiva classe
String greeting = "Hello, World!";
int n = greeting.length(); // atribui 13 a n
System.out.length(); // Chamada de método incorrecta
String river = "Mississippi";
String bigRiver = river.toUpperCase();
// atribui "MISSISSIPPI" a bigRiver
Introdução à Programação 2007/08 A. Lopes
Parâmetros explícitos e parâmetros implícitos
• Um parâmetro (explícito) visa fornecer dados ao método. Note-se que nem todos os métodos possuem parâmetros explícitos
• Um parâmetro implícito permite especificar o objecto que vai ser alvo da invocação do método
System.out.println(greeting)
greeting.length() // não tem parâmetro explícito
System.out.println(greeting)
ex: passagem de um parâmetro ao
método println
Introdução à Programação 2007/08 A. Lopes
Retorno de valores
• O valor de retorno é o resultado que o método calculou, a ser utilizado pelo código que invocou o método
Invocação do método length num objecto da classe String
int n = greeting.length(); // retorna valor e armazena em n
Introdução à Programação 2007/08 A. Lopes
Passagem de valores devolvidos
• É possível utilizar um valor devolvido como parâmetro de outro método
• É de notar que nem todos os métodos retornam valores
System.out.println(greeting.length());
println
Introdução à Programação 2007/08 A. Lopes
Chamada mais complexa
• O método replace executa uma operação de pesquisa e substituição
• Este método possui:
• um parâmetro implícito - a string "Mississippi"
• dois parâmetros explícitos - as strings “issipp" e "our"
• e o valor devolvido - a string “Missouri"
river.replace("issipp", "our");
// constrói uma nova string ("Missouri")
Introdução à Programação 2007/08 A. Lopes
Definição de método
• A definição do método especifica os tipos de parâmetros explícitos e do valor devolvido
• O tipo do parâmetro implícito é o da classe corrente, pelo que não é referido na definição do método
public int length()
// devolve um valor do tipo int e
// sem parâmetro explícito
public String replace(String target, String replacement)
// tipo String e
// com dois parâmetros explícitos do tipo String
Exemplo de definição na classe String
Introdução à Programação 2007/08 A. Lopes
Definição de método
• Se o método não retorna um valor, então o tipo de retorno é declarado como void
• O nome de um método diz-se “sobrecarregado” (overloaded) se a classe tem mais do que um método com o mesmo nome, apesar de os tipos de parâmetros serem (necessariamente) diferentes
public void println(String output); // da classe PrintStream
public void println(String output);
public void println(int output);
Introdução à Programação 2007/08 A. Lopes
Rectângulo geométrico versus objecto Rectangle
• Um objecto do tipo Rectangle não é um rectângulo geométrico, mas sim um objecto com informação que caracteriza/descreve o rectângulo (geométrico)
Introdução à Programação 2007/08 A. Lopes
Construção de um objecto
1. O operador new cria um objecto do tipo (/da classe) Rectangle
2. Utiliza os parâmetros de construção 5, 10, 20 e 30 para inicializar os dados do objecto
3. Retorna o objecto
Rectangle box = new Rectangle(5, 10, 20, 30);
new Rectangle(5, 10, 20, 30);
• Por vezes, o objecto é atribuído a uma variável do tipo desse objecto
• Algumas classes permitem construir objectos de vários modos
new Rectangle();
// constrói um rectângulo com o canto superior-esquerdo
// na origem (0,0), com largura 0 e altura 0
Introdução à Programação 2007/08 A. Lopes
Construção de um objecto
new ClassName( parameters );
Exemplo:
new Rectangle(5, 10, 20, 30);
new Rectangle();
Objectivo:
Construir um novo objecto, inicializá-lo com os parâmetros de construção, e retornar a referência para o objecto construído
Introdução à Programação 2007/08 A. Lopes
Métodos selectores e métodos modificadores
• Um método selector não altera o estado do seu parâmetro implícito
• Um método modificador altera o estado do seu parâmetro implícito
double width = box.getWidth();
box.translate(15, 25);
Utilização do método translate para
deslocar o rectângulo
Introdução à Programação 2007/08 A. Lopes
Implementação de um programa de teste
• Disponibilizar uma classe
• Disponibilizar um método main e construir um ou mais objectos, no seu interior. Note-se que só o método main é que pode ser invocado a partir do exterior do Java
• Aplicar métodos aos objectos e afixar os resultados das chamadas desses métodos
• Não esquecer de incluir a importação de pacotes
• as classes Java estão agrupadas em pacotes
• não é necessário importar classes do pacote java.lang (ex: String, System)
Introdução à Programação 2007/08 A. Lopes
Importação de uma classe a partir de um pacote
import packageName.ClassName;
Exemplo:
import java.awt.Rectangle;
Objectivo:
Importar uma classe de um pacote, para utilizar no programa
Introdução à Programação 2007/08 A. Lopes
Ficheiro MoveTester.java
import java.awt.Rectangle;
public class MoveTester
{
public static void main(String[] args)
{
Rectangle box = new Rectangle(5, 10, 20, 30);
// Move the rectangle
box.translate(15, 25);
// Print information about the moved rectangle
System.out.println("After moving, the top-left corner is:");
System.out.println(box.getX());
System.out.println(box.getY());
}
}
Introdução à Programação 2007/08 A. Lopes
Documentação da Application Programming Interface da biblioteca de Java (standard)
http://www.java.sun.com/....
Introdução à Programação 2007/08 A. Lopes
Exemplo de documentação API - a classe Rectangle
Introdução à Programação 2007/08 A. Lopes
Referências a objectos
• Descreve a localização dos objectos
• O operador new retorna a referência para o novo objecto
• O mesmo objecto pode ser referenciado por mais do que uma variável de objecto
• Note-se que variáveis de tipo primitivo e variáveis de objecto são conceitos distintos
Rectangle box = new Rectangle(5, 10, 20, 30);
Rectangle box2 = box;
box2.translate(15, 25);
Rectangle box = new Rectangle();
Introdução à Programação 2007/08 A. Lopes
Variáveis de objectos e variáveis de tipo primitivo
Variável de objecto com a
referência ao objecto
Variável de tipo primitivo com o valor do número
Introdução à Programação 2007/08 A. Lopes
Cópia de números
int luckyNumber = 13;
int luckyNumber2 = luckyNumber;
luckyNumber2 = 12;
Introdução à Programação 2007/08 A. Lopes
Cópia de referências de objectos
Rectangle box = new Rectangle(5, 10, 20, 30);
Rectangle box2 = box;
box2.translate(15, 25);