25
Apresentação 9 Operação toString Classes, instâncias e objectos Leituras com Scanner

9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos de Programação

Embed Size (px)

DESCRIPTION

Fundamentos da Programação 9: • Operação toString() • Classes, instâncias e objectos • Leituras com Scanner Apresentação 9 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.

Citation preview

Page 1: 9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos de Programação

Apresentação 9

Operação toStringClasses, instâncias e objectosLeituras com Scanner

Page 2: 9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos de Programação

Fundamentos de Programação 2

Da apresentação anterior…Classes e instâncias

Instanciação Membros 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

Page 3: 9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos de Programação

Fundamentos de Programação 3

Operação toString

Disponível em todas as classes Java

Devolve representação textual (String) da instância a que se aplica

Definição por omissão é pouco interessante

Necessário sobrepor nosso próprio método

2013/2014

Page 4: 9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos de Programação

Fundamentos de Programação 4

Exemplo: Rational

public class Rational { private final int numerator; private final int denominator;

public Rational(final int numerator, final int denominator) { this.numerator = numerator; this.denominator = denominator; }

…}

final Rational myRational = new Rational(1, 4);final String myRationalAsString = myRational.toString();out.println(myRationalAsString);

2013/2014

myRational

numerator = 1denominator = 4myRationalAsString

«Rational@75da931b»

Nome da classe

Código de hash em

hexadecimal

Page 5: 9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos de Programação

Fundamentos de Programação 5

toString e System.out.print*

Métodos System.out.print* invocam toString automaticamente

Exemplo

Rational myRational = new Rational(1, 4);out.println(myRational);

2013/2014

_Rational@75da931b_

Page 6: 9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos de Programação

Fundamentos de Programação 6

Operação toString: exemplopublic class Rational { private final int numerator; private final int denominator;

@Override public String toString() { return numerator + "/" + denominator; }

…}

Rational myRational = new Rational(1, 4);String myRationalAsString = myRational.toString();

2013/2014

myRational

numerator = 1denominator = 4

myRationalAsString

«1/4»

Deixamos claro que queremos que este método se sobreponha ao método

por omissão.

Page 7: 9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos de Programação

Fundamentos de Programação 7

toString e System.out.print*

Métodos System.out.print* invocam toString automaticamente

Exemplo

Rational myRational = new Rational(1, 4);out.println(myRational);

2013/2014

_1/4_

Page 8: 9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos de Programação

Fundamentos de Programação 8

toString e concatenação

Operador + com String e referência para instância de classe: operação toString invocada automaticamente

Exemplo

final Rational r1 = new Rational(1, 4);final Rational r2 = new Rational(1, 2);final Rational r3 = r1.multipliedBy(r2);final String string = r1 + " × " + r2 + " = " + r3;

2013/2014

r1

1/4

r2

1/2

r3

1/8

string

“1/4 × 1/2 = 1/8”

Page 9: 9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos de Programação

Fundamentos de Programação 9

Classes: instâncias e objectos Classe é «molde» para construção de

instâncias/objectos com características determinadas

Classe de igualdade ou classe de valor Igualdade é relevante Identidade irrelevante Resultado da construção: instância Exemplo: Rational

Classe de identidade ou classe de referência Identidade é relevante Igualdade pouco importante Resultado da construção: objecto Exemplo: Person

2013/2014

Page 10: 9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos de Programação

Classe Person

public class Person {

private String name; private double height;

public Person(final String name, final double height) { this.name = name; this.height = height; } public String getName() { return name; }

public double getHeight() { return height; }

public boolean isTall() { return 1.8 <= getHeight(); }

@Override public String toString() { return getName() + " (" + getHeight() + ")"; }

}

2013/2014 Fundamentos de Programação 10

Page 11: 9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos de Programação

Fundamentos de Programação 11

Exemplar concreto que obedece ao “molde” (classe)

Exemplo

final Person luke = new Person("Luke", 1.81);final boolean isTall = luke.isTall();final double height = luke.getHeight();final String asString = luke.toString();

Objecto

2013/2014

luke

name = «Luke»height = 1,81

verdadeiro

isTall

1,81height

asString

«Luke (1,81)»

1,8

1

m

Luke

Page 12: 9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos de Programação

Fundamentos de Programação 12

Arrays de (referências para) objectos

É possível ter arrays de referências para objectos de uma classe

Exemplo

final Person[] daltons = new Person[4];daltons[0] = new Person("Averell", 2.1);daltons[1] = new Person("William", 1.9);daltons[2] = new Person("Jack", 1.7);daltons[3] = new Person("Joe", 1.5);

2013/2014

Joe

JackWilliam

Avarell

2,1

0

m

Averell1

,90

m

William

1,7

0

m

Jack

1,5

0

m

Joe

daltons

null0 1 2 3

nullnullnull

Page 13: 9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos de Programação

Fundamentos de Programação 13

Arrays de (referências para) objectos

final boolean joeIsTall = daltons[3].isTall();final String name = daltons[1].getName();

2013/2014

falsojoeIsTall

name

“William”

2,1

0

m

Averell

1,9

0

m

William

1,7

0

m

Jack

1,5

0

m

Joe

daltons0 1 2 3

Page 14: 9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos de Programação

Fundamentos de Programação 14

Uma classe com um conjuntopublic class Gang {

private String name; private Set<Person> members; private Person lider;

public Gang(final String name) { this.name = name; this.members = new HashSet<Person>(); this.lider = null; } public void add(final Person newMember) { members.add(newMember); }

public void setLiderTo(final Person newLider) { members.add(newLider); lider = newLider; }

@Override public String toString() { return "Gang {Name: " + name + ", Members: " + members + ", Lider: " + lider + "}"; }

…}

2013/2014

Conjunto de Person. Os conjuntos não

permitem membros repetidos.

Hã? A ver mais tarde.

Page 15: 9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos de Programação

Fundamentos de Programação 15

Uma classe com um conjuntofinal Person averell = new Person("Averell", 2.1);final Person william = new Person("William", 1.9);final Person jack = new Person("Jack", 1.7);final Person joe = new Person("Joe", 1.5);

final Gang daltons = new Gang("Dalton");

daltons.add(averell);daltons.add(william);daltons.add(jack);daltons.add(joe);

daltons.setLiderTo(joe); out.println(daltons);

2013/2014

_Gang {Name: Dalton, Members: [Joe (1.5), Avarell (2.1), Jack (1.7), William (1.9)], Lider: Joe (1.5)}_

Page 16: 9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos de Programação

Fundamentos de Programação 16

Uma classe com um conjuntopublic class Gang {

private String name; private Set<Person> members; private Person lider;

public double averageHeight() { double sumOfHeights = 0.0;

for (Person member : members) sumOfHeights += member.getHeight(); return sumOfHeights / members.size(); }

…}

2013/2014

Este ciclo coloca sucessivamente em

member todas as referências guardadas nos itens da colecção

members (que neste caso é um conjunto).

Page 17: 9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos de Programação

Fundamentos de Programação 17

Uma classe com um conjuntofinal Person averell = new Person("Averell", 2.1);final Person william = new Person("William", 1.9);final Person jack = new Person("Jack", 1.7);final Person joe = new Person("Joe", 1.5);

final Gang daltons = new Gang("Dalton");

daltons.add(averell);daltons.add(william);daltons.add(jack);daltons.add(joe);

daltons.setLiderTo(joe); out.println(daltons.averageHeight());

2013/2014

_1.7999999999999998_

Page 18: 9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos de Programação

Fundamentos de Programação 18

Uma classe com um conjuntopublic class Gang {

private String name; private Set<Person> members; private Person lider; …

public Person shortestMember() { if (members.size() == 0) throw new IllegalStateException("Illegal…");

double smallestHeight = Double.POSITIVE_INFINITY; Person shortestMember = null; for (Person member : members) if (member.getHeight() < smallestHeight) { smallestHeight = member.getHeight(); shortestMember = member; } return shortestMember; } …}

2013/2014

Page 19: 9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos de Programação

Fundamentos de Programação 19

Uma classe com um conjuntofinal Person averell = new Person("Averell", 2.1);final Person william = new Person("William", 1.9);final Person jack = new Person("Jack", 1.7);final Person joe = new Person("Joe", 1.5);

final Gang daltons = new Gang("Dalton");

daltons.add(averell);daltons.add(william);daltons.add(jack);daltons.add(joe);

daltons.setLiderTo(joe); out.println(daltons.shortestMember());

2013/2014

_Joe (1.5)_

Page 20: 9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos de Programação

Fundamentos de Programação 20

Classe Scanner

Simplifica leitura de texto a partir de teclado (interacção com o utilizador) cadeia de caracteres (instância de String) arquivo …

Nome completo: java.util.Scanner

Usar apenas Scanner implica

import java.util.Scanner;2013/2014

Page 21: 9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos de Programação

Fundamentos de Programação 21

Importação e instanciação de Scanner

Usa-se declaração de importação

Declaração de importação antes das restantes definições

import java.util.Scanner;

public class SomeClass { … public static void main(final String[] args) { Scanner scanner = new Scanner(…); … }

}

2013/2014

Construção de um novo Scanner.

Page 22: 9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos de Programação

Fundamentos de Programação 22

Classe Scanner: leitura de linha do teclado

Construtor com java.lang.System.in para ler do teclado

Operação nextLine bloqueia até próximo <enter> devolve texto introduzido até <enter>

Exemplo

final Scanner inputScanner = new Scanner(System.in);

final String line = inputScanner.nextLine();

inputScanner.close();

2013/2014

Page 23: 9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos de Programação

Fundamentos de Programação 23

Classe Scanner: leitura de palavras de uma cadeia

final String sentence = "one two three four five ";

int numberOfWords = 0;String invertedSentence = "";

final Scanner sentenceScanner = new Scanner(sentence);

while (sentenceScanner.hasNext()) { final String word = sentenceScanner.next(); invertedSentence = word + " " + invertedSentence; numberOfWords++;}

sentenceScanner.close();

out.println("Read " + numberOfWords + " words.");out.println("Inverted sentence: " + invertedSentence);

2013/2014

_Read 5 words._Read 5 words.Inverted sentence: five four three two one_

Page 24: 9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos de Programação

Fundamentos de Programação 24

A reter

Classes Operação toString Objectos vs. instâncias Classes de valor vs. classes de referência Classes como moldes Instanciação Exemplos

Conjuntos, colecções e ciclo foreach

Leituras com Scanner2013/2014

Page 25: 9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos de Programação

Fundamentos de Programação 25

Sumário

Operação toString

Classes, instâncias e objectos

Leituras com Scanner

2013/2014