semana 8: classes e instâncias, cadeias de caracteres

30
Aula 8 Classes e instâncias Cadeias de caracteres

Upload: manuel-menezes-de-sequeira

Post on 11-Jun-2015

952 views

Category:

Technology


2 download

DESCRIPTION

Apresentação da semana 8 da unidade curricular de Introdução à Programação do DCTI do ISCTE-IUL. Alterações de Manuel Menezes de Sequeira sobre versão original por vários autores do DCTI, incluindo Luís Nunes e André Santos.

TRANSCRIPT

Page 1: Semana  8: Classes e instâncias, cadeias de caracteres

Aula 8

Classes e instânciasCadeias de caracteres

Page 2: Semana  8: Classes e instâncias, cadeias de caracteres

Introdução à Programação - DCTI - ISCTE-IUL 2

Da aula anterior…

Revisões

2010/2011

Page 3: Semana  8: Classes e instâncias, cadeias de caracteres

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!

Page 4: Semana  8: Classes e instâncias, cadeias de caracteres

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.

Page 5: Semana  8: Classes e instâncias, cadeias de caracteres

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

Page 6: Semana  8: Classes e instâncias, cadeias de caracteres

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

Page 7: Semana  8: Classes e instâncias, cadeias de caracteres

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

Page 8: Semana  8: Classes e instâncias, cadeias de caracteres

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.

Page 9: Semana  8: Classes e instâncias, cadeias de caracteres

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

Page 10: Semana  8: Classes e instâncias, cadeias de caracteres

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

Page 11: Semana  8: Classes e instâncias, cadeias de caracteres

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

Page 12: Semana  8: Classes e instâncias, cadeias de caracteres

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.

Page 13: Semana  8: Classes e instâncias, cadeias de caracteres

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!

Page 14: Semana  8: Classes e instâncias, cadeias de caracteres

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

Page 15: Semana  8: Classes e instâncias, cadeias de caracteres

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

Page 16: Semana  8: Classes e instâncias, cadeias de caracteres

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

Page 17: Semana  8: Classes e instâncias, cadeias de caracteres

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

Page 18: Semana  8: Classes e instâncias, cadeias de caracteres

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

Page 19: Semana  8: Classes e instâncias, cadeias de caracteres

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

Page 20: Semana  8: Classes e instâncias, cadeias de caracteres

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

Page 21: Semana  8: Classes e instâncias, cadeias de caracteres

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

Page 22: Semana  8: Classes e instâncias, cadeias de caracteres

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…”

Page 23: Semana  8: Classes e instâncias, cadeias de caracteres

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)

Page 24: Semana  8: Classes e instâncias, cadeias de caracteres

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

Page 25: Semana  8: Classes e instâncias, cadeias de caracteres

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

Page 26: Semana  8: Classes e instâncias, cadeias de caracteres

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

Page 27: Semana  8: Classes e instâncias, cadeias de caracteres

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

Page 28: Semana  8: Classes e instâncias, cadeias de caracteres

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

Page 29: Semana  8: Classes e instâncias, cadeias de caracteres

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

Page 30: Semana  8: Classes e instâncias, cadeias de caracteres

Introdução à Programação - DCTI - ISCTE-IUL 30

Sumário

Classes e instâncias

Cadeias de caracteres

2010/2011