Aula 8
Classes e instânciasCadeias de caracteres
Introdução à Programação - DCTI - ISCTE-IUL 2
Da aula anterior…
Revisões
2010/2011
Introdução à Programação - DCTI - ISCTE-IUL 3
Classes e instâncias
Classe Modelo para construção de instâncias que
partilham conjunto de características observáveis▪ Propriedades▪ Operações
Instância (ou objecto) Exemplar de classe Construído e manipulado durante execução do
programa Tem identidade e estado próprios
2010/2011
Não classe pacote!
Introdução à Programação - DCTI - ISCTE-IUL 4
Classes (não pacote)
Nome (singular) Reflecte o que instâncias da classe
representam (e.g., Point, Person, Game, Board, Player)
Maiúscula inicial (convenção Java)
Composição básica em Java Atributos Construtores Métodos de instância (e não de classe)
2010/2011
Métodos de classe são
static.
Introdução à Programação - DCTI - ISCTE-IUL 5
Classes: membros
Atributos Variáveis que cada instância da classe possui em exclusivo. Conjunto de valores dos atributos de uma instância é o seu estado.
Construtores Rotinas cujo objectivo é construir instâncias da classe, colocando-as num estado válido.
Métodos de instância
Métodos que se invocam através de e para uma instância particular da respectiva classe. Implementam operações usadas (a) para aceder a propriedades de uma instância, (b) para realizar acções sobre essa instância, (c) para realizar acções sobre terceiros, etc.
2010/2011
Introdução à Programação - DCTI - ISCTE-IUL 6
Classes: atributos e propriedades
Atributos Variáveis possuídas em exclusivo por cada instância de classe Conjunto dos seus valores determinam estado de uma instância Parte da implementação de uma classe
Propriedades Acessíveis (em Java) através de operações da classe Conjunto dos seus valores determinam estado observável de uma
instância Parte da interface de uma classe
Exemplos x e y como propriedades (e atributos) de Point cardinality como propriedade (e atributo) de IntegerSet name como propriedade (e atributo) de Person
2010/2011
Introdução à Programação - DCTI - ISCTE-IUL 7
Classes: atributos e propriedades
public class Point { private double x; private double y; … public double getX() { return x; }
public double getY() { return y; } …}
public class IntegerSet { private int[] items; private int cardinality; … public int[] getItems() { return Arrays.copyOf(items, cardinality); } …}
2010/2011
Instâncias de IntegerSet
{1, 2, 3, 5, 7, 9}
{ }
{0, 2, 4}
{-1, 0, 1}
Instâncias dePoint
(2; -2)
(2; 1)
(1; 1)
(0; 0)
(1; 7,2)
atributos
atributos
propriedades
propriedades
Introdução à Programação - DCTI - ISCTE-IUL 8
Classes: construtores
Rotinas que constroem instância de uma classe Inicializam atributos Garantem estado
inicial válido Uma classe pode ter
vários construtores, mas com diferentes assinaturas
public class Point { private double x; private double y;
public Point() { x = 0.0; y = 0.0; } public Point(final double x, final double y) { this.x = x; this.y = y; }
… }
2010/2011
this: usado para desambiguar quando variáveis locais (e.g., parâmetros) tiverem mesmo nome que atributos.
Introdução à Programação - DCTI - ISCTE-IUL 9
Classes: instanciação
Operador new Constrói novas instâncias Invoca construtor da classe
Exemplos new Point() new Point(1.0, -2.0)
2010/2011
public Point() { x = 0.0; y = 0.0;}
public Point(final double x, final double y) { this.x = x; this.y = y;}
1,0-2,0
Introdução à Programação - DCTI - ISCTE-IUL 10
Classes: referências
Referências são variáveis
Têm tipo associado
Referem ou apontam instância desse tipo
Podem não referenciar nada: valor null
Exemplo
Point point = new Point(3.0, 4.0);
2010/2011
definição da referência construção da instância
point
x = 3,0y = 4,0
: Point
inicialização da referência
Introdução à Programação - DCTI - ISCTE-IUL 11
Classes são tipos de referência
Tipos primitivos (int, double, etc.) Variáveis guardam valor desse tipo Atribuição altera valor guardado São tipos de valor
Classes Java Variáveis guardam referência para instância
dessa classe (ou classe compatível) Atribuição altera referência guardada Atribuição não altera a instância referenciada São tipos de referência
2010/2011
Introdução à Programação - DCTI - ISCTE-IUL 12
Variáveis que guardam
referências.
Classes são tipos de referência
Tipos primitivos (int, boolean, etc.)
int a = 7;int b = a;int c;
Tipos de referência (matrizes, classes)
Point a = new Point(3.0, 4.0);
Point b = a;Point c;
2010/2011
7
a
7
b
0
c
Excepto no caso de
variáveis locais.
Variáveis locais têm sempre de
ser inicializadas
explicitamente.
a
b
null
c
Excepto no caso de
variáveis locais.
Variáveis locais têm sempre de
ser inicializadas
explicitamente.
: Pointx = 3,0y = 4,0
Variáveis que guardam valores.
Introdução à Programação - DCTI - ISCTE-IUL 13
Igualdade vs. identidade
Tipos primitivos (int, boolean, etc.)
int a = 7;int b = a;
Tipos de referência (matrizes, classes)
Point a = new Point(3.0, 4.0);
Point b = new Point(3.0, 4.0);
Point c = b;
2010/2011
7
a
7
b
a
c
: Pointx = 3,0y = 4,0
b
: Pointx = 3,0y = 4,0
a == b? Não!
c == b? Sim!
a == b? Sim!
Operador == verifica se valores são
iguais!
Operador == verifica se
referências são iguais! Ou seja, verifica se se
referem à mesma instância!
Introdução à Programação - DCTI - ISCTE-IUL 14
Inicializações automáticas Atributos de classes e itens de matrizes
de tipos primitivos inicializados com valor por omissão: int – 0 double – 0.0 boolean – false …
Atributos de classes e itens de matrizes de tipos de referência inicializados com null
2010/2011
Introdução à Programação - DCTI - ISCTE-IUL 15
Classes: operações e métodos de instância
Operações realizam-se sobre uma instância da classe
Métodos são implementação de operações
Operações podem ser Funções – Calculam e devolvem um
resultado Procedimentos – Realizam uma acção
2010/2011
Introdução à Programação - DCTI - ISCTE-IUL 16
Classes: funções e procedimentos de instância
Funções Conjunto de instruções, com interface bem definida,
que efectua um dado cálculo Devolvem explicitamente um resultado ao exterior Não devem efectuar qualquer alteração ao estado do
objecto
Procedimentos Conjunto de instruções, com interface bem definida,
que realiza uma determinada acção (normalmente alteram o estado da instância)
Não devolvem explicitamente um resultado ao exterior
2010/2011
Introdução à Programação - DCTI - ISCTE-IUL 17
Classes: natureza das operações de instância
Inspectores (funções) – Acedem às propriedades da instância
Modificadores (procedimentos) – Agem sobre a instância, modificando-a
Funções não inspectoras – Acedem às propriedades de terceiros
Procedimentos não modificadores – Agem sobre terceiros
2010/2011
Introdução à Programação - DCTI - ISCTE-IUL 18
Classes: funções
public class Nome { private tipo atributo;
…
public tipo nome(parâmetros) { instruções … return expressão; }
…}
2010/2011
implementação
interface
os atributos não devem ser modificados pela função
Introdução à Programação - DCTI - ISCTE-IUL 19
Classes: procedimentos
public class Nome { private tipo atributo;
…
public void nome(parâmetros) { instruções … return expressão; }
…}
2010/2011
implementação
interface
os atributos podem ser modificados pelo procedimento
Introdução à Programação - DCTI - ISCTE-IUL 20
Exemplo: calculadora
public class Calculator { private double value;
public Calculator() { value = 0.0; }
public double getValue() { return value; }
public void setValue( double newValue) { value = newValue; }
public void clear() { value = 0.0; } public void add(double term) { value += term; }
…}
Calculator c = new Calculator();
2010/2011
c.clear();
c.setValue(5);
c.add(10);
c.getValue();
c
Introdução à Programação - DCTI - ISCTE-IUL 21
Classe vs. classe pacote
Classe
Molde para construção de instâncias
public class Calculator {
private int value;
public Calculator() {…}
public int value() {…}
public void clear() {…}
…}
Classe pacote
Conjunto de métodos de classe relacionados empacotados num módulo
public class Math {
private Math() {…}
public static double sin(double angle) {…}
public static double sqrt(double value) {…}
…}
2010/2011
Introdução à Programação - DCTI - ISCTE-IUL 22
Classe String
Representa cadeias de caracteres
Instâncias imutáveis, i.e., estado observável não muda após construção
Valores literais Caracteres entre aspas São referências para instâncias
2010/2011
Instâncias do tipoString
“não é tramado, se praticarem!”
“IP não é tramado”
“IP…”
Introdução à Programação - DCTI - ISCTE-IUL 23
String: inicialização
Utilizar cadeias de caracteres literais optimiza memória e aumenta eficiência
Evitar utilizar construir novas instâncias
Exemplo a evitar
String name = newString("ISCTE");
String name = "ISCTE";
2010/2011
"ISCTE"
“ISCTE”
: String
name
valor literal (referência para instância de String pré-existente)
Introdução à Programação - DCTI - ISCTE-IUL 24
String: comprimento e caracteres
Comprimento int length = name.length();
Caractere em determinada posição char lastCharacter = s.charAt(4);
2010/2011
“ISCTE”
: String
name
'I' 'S''C''T''E'0 1 2 3 4
: String
5length
‘E’lastCharacter
Introdução à Programação - DCTI - ISCTE-IUL 25
String: subcadeias
Inicialização String iscteIul = "ISCTE-IUL";
Subcadeia String iul = s.substring(6); String iscte = s.substring(0, 5);
2010/2011
iscteIul
'I' 'S''C''T''E' '-' 'I''U'
'L'0 1 2 3 4 5 6 7 8
iul
'I''U'
'L'0 1 2
iscte
'I' 'S''C''T''E'0 1 2 3 4
Introdução à Programação - DCTI - ISCTE-IUL 26
String: concatenação
Concatenação String newName = iscte.concat("-IUL");
Concatenação simplificada (operador +) String newName = iscte + "-IUL";
2010/2011
iscte
'I' 'S''C''T''E'0 1 2 3 4
newName
'I' 'S''C''T''E' '-' 'I''U'
'L'0 1 2 3 4 5 6 7 8
Introdução à Programação - DCTI - ISCTE-IUL 27
String: Igualdade vs. identidade
Tipos primitivos (int, boolean, etc.)
int a = 7;int b = a;
Tipos de referência (matrizes, classes)
String a = "A";String b = "A";String c =
new String("A");String d = c;
2010/2011
7
a
7
b
a
c
b
a == b? Sim!a == c? Não!c == d? Sim.a.equals(b)? Sim.a.equals(c)? Sim!c.equals(d)? Sim.
a == b? Sim!
Operador == verifica se valores são
iguais!
Operador == verifica se
referências são iguais! Ou seja, verifica se se
referem à mesma instância!
“A”
"A"
“A”
d
Introdução à Programação - DCTI - ISCTE-IUL 28
A reter
Classes e instâncias Instanciação Membros
▪ Propriedades vs. atributos▪ Operações vs. métodos▪ Construtores
Funções vs. procedimentos Tipos de referência vs. tipos de valor Tipos primitivos vs. restante tipos (em Java) Igualdade vs. identidade
Cadeias de caracteres com a classe String2010/2011
Introdução à Programação - DCTI - ISCTE-IUL 29
A ler...
Capítulos 8 e 9 do livro:
Y. Daniel Liang, Introduction to Java Programming, 8.ª edição, Prentice-Hall, 2010. ISBN: 978-0-13-213080-6
2010/2011
Introdução à Programação - DCTI - ISCTE-IUL 30
Sumário
Classes e instâncias
Cadeias de caracteres
2010/2011