8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação

29
Apresentação 8 Classes e instâncias Cadeias de caracteres

description

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.

Transcript of 8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação

Page 1: 8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação

Apresentação 8

Classes e instânciasCadeias de caracteres

Page 2: 8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação

Fundamentos de Programação 2

Da apresentação anterior…

Arrays multidimensionais

Estratégias de resolução de problemas

2013/2014

Page 3: 8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação

Fundamentos de Programação 3

Classes e instâncias

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

Não classe-pacote!

Page 4: 8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação

Fundamentos de Programação 4

Classes (não classes-pacote) 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

Métodos de classe são

static.

Page 5: 8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação

Fundamentos de Programação 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. 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

Page 6: 8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação

Fundamentos de Programação 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 possivelmente atributos) de Point cardinality como propriedade (e atributo) de SetOfInts name como propriedade (e atributo) de Person

2013/2014

Uma operação é a interface de um método de instância, que a implementa.

Page 7: 8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação

Fundamentos de Programação 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 SetOfInts { private int[] items; private int cardinality; … public int[] getItems() { return Arrays.copyOf(items, cardinality); } …}

2013/2014

Instâncias de SetOfInts

{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

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?

Page 8: 8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação

Fundamentos de Programação 8

Classes: construtores

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

this: usado para desambiguar quando variáveis locais (e.g., parâmetros) tiverem mesmo nome que atributos.

Page 9: 8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação

Fundamentos de Programação 9

Classes: instanciação

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

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: 8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação

Fundamentos de Programação 10

Classes: variáveis

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

definição da referência construção da instância

point

x = 3,0y = 4,0

: Point

inicialização da referência

Page 11: 8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação

Fundamentos de Programação 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 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

Page 12: 8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação

Fundamentos de Programação 12

Variáveis que guardam

referências.

Classes são tipos de referência

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

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: 8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação

Fundamentos de Programação 13

Igualdade vs. identidade

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

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: 8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação

Fundamentos de Programação 14

Inicializações automáticas 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

Page 15: 8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação

Fundamentos de Programação 15

Classes: operações e métodos de instância

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

Page 16: 8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação

Fundamentos de Programação 16

Classes: funções e procedimentos de instância

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

Page 17: 8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação

Fundamentos de Programação 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

2013/2014

Page 18: 8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação

Fundamentos de Programação 18

Classes: funções

public class Nome { private tipo atributo;

public tipo nome(parâmetros) { instruções … return expressão; }

…}

2013/2014

implementação

interface

os atributos não devem ser modificados pela função

Page 19: 8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação

Fundamentos de Programação 19

Classes: procedimentos

public class Nome { private tipo atributo;

public void nome(parâmetros) { instruções … }

…}

2013/2014

implementação

interface

os atributos podem ser modificados pelo procedimento

Page 20: 8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação

Fundamentos de Programação 20

Exemplo: calculadora

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

c.clear();

c.setValue(5);

c.add(10);

c.getValue();

c

Page 21: 8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação

Fundamentos de Programação 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 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

Page 22: 8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação

Fundamentos de Programação 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

2013/2014

Instâncias do tipoString

"Não é tramado, se praticarem!"

"FP não é tramado"

"FP…"

Page 23: 8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação

Fundamentos de Programação 23

String: inicialização

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

"Mário"

«Mário»

: String

name

valor literal (referência para instância de String pré-construída)

Page 24: 8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação

Fundamentos de Programação 24

String: comprimento e caracteres

Comprimento final int length = name.length();

Caractere em determinada posição final char lastCharacter = name.charAt(4);

2013/2014

«Mário»

: String

name

‘M’

‘á’ ‘r’ ‘i’ ‘o’0 1 2 3 4

: String

5length

‘o’lastCharacter

Page 25: 8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação

Fundamentos de Programação 25

String: subcadeias

Inicialização String name = "Mário Sá";

Subcadeia String firstName = name.substring(0, 5); String lastName = name.substring(6);

2013/2014

name

‘M’ ‘á’ ‘r’ ‘i’ ‘o’ ‘ ’ ‘S’ ‘á’0 1 2 3 4 5 6 7

firstName lastName

‘S’ ‘á’0 1

‘M’ ‘á’ ‘r’ ‘i’ ‘o’0 1 2 3 4

Page 26: 8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação

Fundamentos de Programação 26

String: concatenação

Concatenação final String newName = firstName.concat(" Pi");

Concatenação simplificada (operador +) final String newName = firstName + " Pi";

2013/2014

firstName

‘M’ ‘á’ ‘r’ ‘i’ ‘o’0 1 2 3 4

newName

‘M´

‘á’ ‘r’ ‘i’ ‘o’ ‘ ’ ‘P’ ‘i’0 1 2 3 4 5 6 7

Page 27: 8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação

Fundamentos de Programação 27

String: Igualdade vs. identidade

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

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: 8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação

Fundamentos de Programação 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 String2013/2014

Page 29: 8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação

Fundamentos de Programação 29

Sumário

Classes e instâncias

Cadeias de caracteres

2013/2014