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

Semana 9: toString, classes, instâncias e objectos, Scanner

Embed Size (px)

DESCRIPTION

Apresentação da semana 9 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.

Citation preview

Page 1: Semana  9: toString, classes, instâncias e objectos, Scanner

Aula 9

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

Page 2: Semana  9: toString, classes, instâncias e objectos, Scanner

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

Da aula 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

2010/2011

Page 3: Semana  9: toString, classes, instâncias e objectos, Scanner

Introdução à Programação - DCTI - ISCTE-IUL 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

2010/2011

Page 4: Semana  9: toString, classes, instâncias e objectos, Scanner

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

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();

2010/2011

myRational

numerator = 1denominator = 4

myRationalAsString

“1/4”

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

por omissão.

Page 5: Semana  9: toString, classes, instâncias e objectos, Scanner

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

toString e System.out.print*

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

Exemplo

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

2010/2011

_1/4_

Page 6: Semana  9: toString, classes, instâncias e objectos, Scanner

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

toString e concatenação

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

Exemplo

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

2010/2011

r1

1/4

r2

1/2

r3

1/8

string

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

Page 7: Semana  9: toString, classes, instâncias e objectos, Scanner

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

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

instâncias/objectos com características determinadas

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

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

2010/2011

Page 8: Semana  9: toString, classes, instâncias e objectos, Scanner

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() + ")"; }

}

2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 8

Page 9: Semana  9: toString, classes, instâncias e objectos, Scanner

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

Exemplar concreto que obedece ao “molde” (classe)

Exemplo

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

Instância/objecto

2010/2011

luke

name = “Luke”height = 1,81

verdadeiro

isTall

1,81height

asString

“Luke (1,81)”

1,8

1

m

Luke

Page 10: Semana  9: toString, classes, instâncias e objectos, Scanner

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

Matrizes de (referências para) objectos

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

Exemplo

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);

2010/2011

Joe

JackWilliam

Avarell

2,1

0

m

Averell1

,90

m

William

1,7

0

m

Jack

1,7

0

m

Joe

daltons

null0 1 2 3

nullnullnull

Page 11: Semana  9: toString, classes, instâncias e objectos, Scanner

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

Matrizes de (referências para) objectos

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

2010/2011

falsojoeIsTall

name

“William”

2,1

0

m

Averell

1,9

0

m

William

1,7

0

m

Jack

1,7

0

m

Joe

daltons0 1 2 3

Page 12: Semana  9: toString, classes, instâncias e objectos, Scanner

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

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; }

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

…}

2010/2011

Conjunto de Person. Os conjuntos não

permitem membros repetidos.

Hã? A ver mais tarde.

Page 13: Semana  9: toString, classes, instâncias e objectos, Scanner

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

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

Gang daltons = new Gang("Dalton");

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

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

2010/2011

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

Page 14: Semana  9: toString, classes, instâncias e objectos, Scanner

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

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(); }

…}

2010/2011

Este ciclo atribui sucessivamente a member

todas as referências guardadas nos itens da colecção members (que

neste caso é um conjunto).

Page 15: Semana  9: toString, classes, instâncias e objectos, Scanner

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

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

Gang daltons = new Gang("Dalton");

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

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

2010/2011

_1.7999999999999998_

Page 16: Semana  9: toString, classes, instâncias e objectos, Scanner

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

Uma classe com um conjuntopublic class Gang {

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

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

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

2010/2011

Page 17: Semana  9: toString, classes, instâncias e objectos, Scanner

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

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

Gang daltons = new Gang("Dalton");

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

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

2010/2011

_Joe (1.5)_

Page 18: Semana  9: toString, classes, instâncias e objectos, Scanner

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

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;2010/2011

Page 19: Semana  9: toString, classes, instâncias e objectos, Scanner

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

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(…); … }

}

2010/2011

Construção de um novo Scanner.

Page 20: Semana  9: toString, classes, instâncias e objectos, Scanner

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

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

Scanner inputScanner = new Scanner(System.in);

String line = inputScanner.nextLine();

2010/2011

Page 21: Semana  9: toString, classes, instâncias e objectos, Scanner

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

Classe Scanner: leitura de palavras de uma cadeia

String sentence = "one two three four five ";Scanner stringScanner = new Scanner(sentence);

int numberOfWords = 0;String invertedSentence = "";

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

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

2010/2011

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

Page 22: Semana  9: toString, classes, instâncias e objectos, Scanner

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

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 for-each

Leituras com Scanner2010/2011

Page 23: Semana  9: toString, classes, instâncias e objectos, Scanner

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

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 24: Semana  9: toString, classes, instâncias e objectos, Scanner

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

Sumário

Operação toString

Classes, instâncias e objectos

Leituras com Scanner

2010/2011