17
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;

Tipos e v ari v eis - Universidade NOVA de Lisboa€¦ · System.out.println(greeting) greeting.length() // n o tem par metro expl cito System.out.println(greeting) ex: passagem de

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Tipos e v ari v eis - Universidade NOVA de Lisboa€¦ · System.out.println(greeting) greeting.length() // n o tem par metro expl cito System.out.println(greeting) ex: passagem de

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;

Page 2: Tipos e v ari v eis - Universidade NOVA de Lisboa€¦ · System.out.println(greeting) greeting.length() // n o tem par metro expl cito System.out.println(greeting) ex: passagem de

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

Page 3: Tipos e v ari v eis - Universidade NOVA de Lisboa€¦ · System.out.println(greeting) greeting.length() // n o tem par metro expl cito System.out.println(greeting) ex: passagem de

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:

Page 4: Tipos e v ari v eis - Universidade NOVA de Lisboa€¦ · System.out.println(greeting) greeting.length() // n o tem par metro expl cito System.out.println(greeting) ex: passagem de

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

Page 5: Tipos e v ari v eis - Universidade NOVA de Lisboa€¦ · System.out.println(greeting) greeting.length() // n o tem par metro expl cito System.out.println(greeting) ex: passagem de

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

Page 6: Tipos e v ari v eis - Universidade NOVA de Lisboa€¦ · System.out.println(greeting) greeting.length() // n o tem par metro expl cito System.out.println(greeting) ex: passagem de

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

Page 7: Tipos e v ari v eis - Universidade NOVA de Lisboa€¦ · System.out.println(greeting) greeting.length() // n o tem par metro expl cito System.out.println(greeting) ex: passagem de

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

Page 8: Tipos e v ari v eis - Universidade NOVA de Lisboa€¦ · System.out.println(greeting) greeting.length() // n o tem par metro expl cito System.out.println(greeting) ex: passagem de

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

Page 9: Tipos e v ari v eis - Universidade NOVA de Lisboa€¦ · System.out.println(greeting) greeting.length() // n o tem par metro expl cito System.out.println(greeting) ex: passagem de

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")

Page 10: Tipos e v ari v eis - Universidade NOVA de Lisboa€¦ · System.out.println(greeting) greeting.length() // n o tem par metro expl cito System.out.println(greeting) ex: passagem de

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

Page 11: Tipos e v ari v eis - Universidade NOVA de Lisboa€¦ · System.out.println(greeting) greeting.length() // n o tem par metro expl cito System.out.println(greeting) ex: passagem de

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

Page 12: Tipos e v ari v eis - Universidade NOVA de Lisboa€¦ · System.out.println(greeting) greeting.length() // n o tem par metro expl cito System.out.println(greeting) ex: passagem de

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

Page 13: Tipos e v ari v eis - Universidade NOVA de Lisboa€¦ · System.out.println(greeting) greeting.length() // n o tem par metro expl cito System.out.println(greeting) ex: passagem de

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

Page 14: Tipos e v ari v eis - Universidade NOVA de Lisboa€¦ · System.out.println(greeting) greeting.length() // n o tem par metro expl cito System.out.println(greeting) ex: passagem de

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

Page 15: Tipos e v ari v eis - Universidade NOVA de Lisboa€¦ · System.out.println(greeting) greeting.length() // n o tem par metro expl cito System.out.println(greeting) ex: passagem de

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();

Page 16: Tipos e v ari v eis - Universidade NOVA de Lisboa€¦ · System.out.println(greeting) greeting.length() // n o tem par metro expl cito System.out.println(greeting) ex: passagem de

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;

Page 17: Tipos e v ari v eis - Universidade NOVA de Lisboa€¦ · System.out.println(greeting) greeting.length() // n o tem par metro expl cito System.out.println(greeting) ex: passagem de

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