Fundamentos da Programação 8:
• Classes e instâncias
• Cadeias de caracteres
Apresentação 8 da unidade curricular de Fundamentos de Programação da Universidade Europeia. Alterações de Manuel Menezes de Sequeira sobre versão original por vários autores do DCTI do ISCTE-IUL, incluindo Luís Nunes, Ricardo Ribeiro, André Santos e o próprio Manuel Menezes de Sequeira.
3. Classe
Modelo para construção de instâncias/objectos que
partilham conjunto de características observáveis
▪ Propriedades
▪ Operações
Instância/objecto
Exemplar de classe
Construído e manipulado durante execução do
programa
Tem identidade e estado próprios
2013/2014 Fundamentos de Programação 3
Não classe-pacote!
4. Nome (singular)
Reflecte o que instâncias da classe representam (e.g.,
Point, Person, Game, Board, Player)
Nome completa «Each instance of this class is a …»
Maiúscula inicial (convenção Java)
Composição básica em Java
Atributos
Construtores
Métodos de instância (e não de classe)
2013/2014 Fundamentos de Programação 4
Métodos de
classe são static.
5. Atributos Variáveis que cada instância da classe possui em exclusivo.
Conjunto de valores dos atributos de uma instância é o seu
estado. Fazem parte da implementação da classe.
Construtores Rotinas cujo objectivo é inicializar novas instâncias da
classe, colocando-as num estado válido. São invocados
como parte do processo de contrução de novas instâncias.
Métodos de instância Métodos que se invocam através de 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.
2013/2014 Fundamentos de Programação 5
6. 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 possivelmente atributos) de Point
cardinality como propriedade (e atributo) de SetOfInts
name como propriedade (e atributo) de Person
2013/2014 Fundamentos de Programação 6
Uma operação é a interface de
um método de instância, que a
implementa.
7. public class Point {
private double x;
private double y;
…
public double getX() {
return x;
}
public double getY() {
return y;
}
…
}
public class SetOfInts {
private int[] items;
private int cardinality;
…
public int[] getItems() {
return
Arrays.copyOf(items,
cardinality);
}
…
}
2013/2014 Fundamentos de Programação 7
Instâncias de
SetOfInts
{1, 2, 3, 5, 7, 9}
{ }{0, 2, 4}
{-1, 0, 1}
Instâncias de
Point
(2; -2)
(2; 1)
(1; 1) (0; 0)
(1; 7,2)
atributosatributos
propriedadespropriedades
O array items tem ocupados, em
cada instante, apenas
cardinality dos seus itens. Ou
seja, os itens do conjunto são
guardados nos primeiros
cardinality itens do array items.
Porquê a cópia?
8. Rotinas que inicializam
uma nova 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;
}
…
}
2013/2014 Fundamentos de Programação 8
this: usado para desambiguar
quando variáveis locais (e.g.,
parâmetros) tiverem mesmo
nome que atributos.
9. Operador new
Constrói novas instâncias
Invoca construtor que inicializa a instância
Exemplos
new Point()
new Point(1.0, -2.0)
2013/2014 Fundamentos de Programação 9
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
10. São referências!
Têm tipo/classe associado
Referem ou apontam instância desse tipo/classe
Podem não referenciar nada: valor null
Exemplo:
Point point = new Point(3.0, 4.0);
2013/2014 Fundamentos de Programação 10
definição da referência construção da instância
point
x = 3,0
y = 4,0
: Point
inicialização da referência
11. Tipos primitivos (int, double, etc.)
Variáveis guardam valor desse tipo
Atribuição altera valor guardado
São tipos de valor
Classes e arrays
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 instância referenciada
São tipos de referência
2013/2014 Fundamentos de Programação 11
12. Variáveis que
guardam
referências.
Tipos de valor (int, boolean, etc.)
int a = 7;
int b = a;
int c;
Tipos de referência (arrays,
classes)
Point a =
new Point(3.0, 4.0);
Point b = a;
Point c;
2013/2014 Fundamentos de Programação 12
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.
: Point
x = 3,0
y = 4,0
Variáveis que
guardam valores.
13. Tipos de valor (int, boolean, etc.)
int a = 7;
int b = a;
Tipos de referência (arrays,
classes)
Point a =
new Point(3.0, 4.0);
Point b =
new Point(3.0, 4.0);
Point c = b;
2013/2014 Fundamentos de Programação 13
7
a
7
b
a
c
: Point
x = 3,0
y = 4,0b
: Point
x = 3,0
y = 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!
14. Atributos de classes e itens de arrays de tipos
primitivos inicializados com valor por
omissão:
int → 0
double → 0.0
boolean → false
…
Atributos de classes e itens de arrays de tipos
de referência inicializados com null
2013/2014 Fundamentos de Programação 14
15. Operações realizam-se sobre 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
2013/2014 Fundamentos de Programação 15
16. Função
Conjunto de instruções, com interface bem definida,
que efectua um dado cálculo
Devolve um resultado
Não deve efectuar qualquer alteração ao estado do
objecto ou do mundo
Procedimento
Conjunto de instruções, com interface bem definida,
que realiza uma determinada acção (normalmente
alteram o estado da instância ou do mundo)
Não devolve um resultado
2013/2014 Fundamentos de Programação 16
17. 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
2013/2014 Fundamentos de Programação 17
18. public class Nome {
private tipo atributo;
…
public tipo nome(parâmetros) {
instruções
…
return expressão;
}
…
}
2013/2014 Fundamentos de Programação 18
implementação
interface
os atributos não devem ser
modificados pela função
19. public class Nome {
private tipo atributo;
…
public void nome(parâmetros) {
instruções
…
}
…
}
2013/2014 Fundamentos de Programação 19
implementação
interface
os atributos podem ser
modificados pelo procedimento
20. public class Calculator {
private double value;
public Calculator() {
value = 0.0;
}
public double getValue() {
return value;
}
public void setValue(
final double newValue)
{
value = newValue;
}
public void clear() {
value = 0.0;
}
public void add(final double term)
{
value += term;
}
…
}
Calculator c = new Calculator();
2013/2014 Fundamentos de Programação 20
c.clear();
c.setValue(5);
c.add(10);
c.getValue();
c
21. 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 e empacotados num
módulo
final public class Math {
private Math() {…}
public static
double sin(double angle) {…}
public static
double sqrt(double value) {…}
…
}
2013/2014 Fundamentos de Programação 21
22. 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
2013/2014 Fundamentos de Programação 22
Instâncias do tipo
String
"Não é
tramado, se
praticarem!"
"FP não é tramado"
"FP…"
23. Utilizar cadeias de
caracteres literais
optimiza memória e
aumenta eficiência
Evitar construir novas
instâncias
explicitamente
Exemplo a evitar
String name =
new String("Mário");
String name = "Mário";
2013/2014 Fundamentos de Programação 23
"Mário"
«Mário»
: String
name
valor literal (referência
para instância de String
pré-construída)
24. Comprimento
final int length = name.length();
Caractere em determinada posição
final char lastCharacter = name.charAt(4);
2013/2014 Fundamentos de Programação 24
«Mário»
: String
name
‘M’ ‘á’ ‘r’ ‘i’ ‘o’
0 1 2 3 4
: String
5
length
‘o’
lastCharacter
27. Tipos primitivos (int, boolean,
etc.)
int a = 7;
int b = a;
Tipos de referência (arrays,
classes)
String a = "A";
String b = "A";
String c =
new String("A");
String d = c;
2013/2014 Fundamentos de Programação 27
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
28. 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 String
2013/2014 Fundamentos de Programação 28
29. Classes e instâncias
Cadeias de caracteres
2013/2014 Fundamentos de Programação 29
Notas del editor
Todos estes importantes conceitos serão revistos mais tarde, em detalhe.
Funções não têm efeitos laterais. Procedimentos têm efeitos laterais.
Funções não têm efeitos laterais. Procedimentos têm efeitos laterais.