Your SlideShare is downloading. ×
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos de Programação
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

856

Published on

Fundamentos da Programação 9: …

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.

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
856
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
26
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Operação toString Classes, instâncias e objectos Leituras com Scanner
  • 2.  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 Fundamentos de Programação 2
  • 3.  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 Fundamentos de Programação 3
  • 4. 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 Fundamentos de Programação 4 myRational numerator = 1 denominator = 4 myRationalAsString «Rational@75da931b» Nome da classeCódigo de hash em hexadecimal
  • 5.  Métodos System.out.print* invocam toString automaticamente  Exemplo Rational myRational = new Rational(1, 4); out.println(myRational); 2013/2014 Fundamentos de Programação 5 _Rational@75da931b _
  • 6. public 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 Fundamentos de Programação 6 myRational numerator = 1 denominator = 4 myRationalAsString «1/4» Deixamos claro que queremos que este método se sobreponha ao método por omissão.
  • 7.  Métodos System.out.print* invocam toString automaticamente  Exemplo Rational myRational = new Rational(1, 4); out.println(myRational); 2013/2014 Fundamentos de Programação 7 _1/4 _
  • 8.  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 Fundamentos de Programação 8 r1 1/4 r2 1/2 r3 1/8 string “1/4 × 1/2 = 1/8”
  • 9.  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 Fundamentos de Programação 9
  • 10. 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
  • 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(); 2013/2014 Fundamentos de Programação 11 luke name = «Luke» height = 1,81 verdadeiro isTall 1,81 height asString «Luke (1,81)» 1,81m Luke
  • 12.  É 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 Fundamentos de Programação 12 Joe Jack William Avarell 2,10m Averell 1,90m William 1,70m Jack 1,50m Joe daltons null 0 1 2 3 null null null
  • 13. final boolean joeIsTall = daltons[3].isTall(); final String name = daltons[1].getName(); 2013/2014 Fundamentos de Programação 13 falso joeIsTall name “William” 2,10m Averell 1,90m William 1,70m Jack 1,50m Joe daltons 0 1 2 3
  • 14. public 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 Fundamentos de Programação 14 Conjunto de Person.Os conjuntos não permitem membros repetidos. Hã? A ver mais tarde. 
  • 15. final 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 Fundamentos de Programação 15 _Gang {Name: Dalton, Members: [Joe (1.5), Avarell (2.1), Jack (1.7), William (1.9)], Lider: Joe (1.5)} _
  • 16. public 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 Fundamentos de Programação 16 Este ciclo coloca sucessivamente em member todas as referências guardadas nos itens da colecção members (que neste caso é um conjunto).
  • 17. final 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 Fundamentos de Programação 17 _1.7999999999999998 _
  • 18. public 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 Fundamentos de Programação 18
  • 19. final 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 Fundamentos de Programação 19 _Joe (1.5) _
  • 20.  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 Fundamentos de Programação 20
  • 21.  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 Fundamentos de Programação 21 Construção de um novo Scanner.
  • 22.  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 Fundamentos de Programação 22
  • 23. 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 Fundamentos de Programação 23 _Read 5 words. _ Read 5 words. Inverted sentence: five four three two one _
  • 24.  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 Scanner 2013/2014 Fundamentos de Programação 24
  • 25.  Operação toString  Classes, instâncias e objectos  Leituras com Scanner 2013/2014 Fundamentos de Programação 25

×