• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Semana  9: toString, classes, instâncias e objectos, Scanner
 

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

on

  • 1,471 views

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, ...

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.

Statistics

Views

Total Views
1,471
Views on SlideShare
1,465
Embed Views
6

Actions

Likes
1
Downloads
70
Comments
0

1 Embed 6

http://www.jornaljava.com 6

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

CC Attribution License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

    • Aula 9 Operação toString Classes, instâncias e objectos Leituras com Scanner
    • 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 Introdução à Programação - DCTI - ISCTE-IUL 2
    • OperaçãotoString 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 Introdução à Programação - DCTI - ISCTE-IUL 3
    • Operação toString: exemplo publicclassRational { privatefinalintnumerator; privatefinalintdenominator; … @Override publicStringtoString() { returnnumerator + "/" + denominator; } … } Rational myRational = new Rational(1, 4); String myRationalAsString = myRational.toString(); 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 4 myRational myRationalAsString Deixamos claro que queremos que este método se sobreponha ao método por omissão. numerator = 1 denominator = 4 “1/4”
    • 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 Introdução à Programação - DCTI - ISCTE-IUL 5 _ 1/4 _
    • 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 Introdução à Programação - DCTI - ISCTE-IUL 6 r1 r2 r3 string 1/4 1/2 1/8 “1/4 × 1/2 = 1/8”
    • 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 Introdução à Programação - DCTI - ISCTE-IUL 7
    • Classe Person publicclassPerson { privateStringname; privatedoubleheight; publicPerson(finalStringname, finaldoubleheight) { this.name=name; this.height= height; } publicStringgetName() { returnname; } publicdoublegetHeight() { returnheight; } publicbooleanisTall() { return 1.8 <= getHeight(); } @Override publicStringtoString() { returngetName() + " (" + getHeight() + ")"; } } 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 8
    • Exemplar concreto que obedece ao “molde” (classe) Exemplo Person luke = new Person("Luke", 1.81); booleanisTall = luke.isTall(); doubleheight = luke.getHeight(); String asString = luke.toString(); Instância/objecto 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 9 luke isTall height asString 1,81 m verdadeiro 1,81 Luke name = “Luke” height = 1,81 “Luke (1,81)”
    • 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 Introdução à Programação - DCTI - ISCTE-IUL 10 Averell 2,10 m Avarell William Jack Jack William Joe 1,70 m daltons null null null null 1,90 m Joe 0 1 2 3 1,70 m
    • Matrizes de (referências para) objectos booleanjoeIsTall = daltons[3].isTall(); Stringname = daltons[1].getName(); 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 11 Averell 2,10 m Jack joeIsTall name William falso 1,70 m daltons 1,90 m Joe 0 1 2 3 “William” 1,70 m
    • Uma classe com um conjunto publicclass Gang { privateStringname; privateSet<Person> members; privatePersonlider; public Gang(finalStringname) { this.name=name; this.members= newHashSet<Person>(); this.lider = null; } publicvoidadd(finalPersonnewMember) { members.add(newMember); } publicvoidsetLiderTo(finalPersonnewLider) { members.add(newLider); lider = newLider; } publicStringtoString() { return"Gang {Name: " + name + ", Members: " + members + ", Lider: " + lider + "}"; } … } 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 12 Conjunto de Person. Os conjuntos não permitem membros repetidos. Hã? A ver mais tarde. 
    • Uma classe com um conjunto Person 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 Introdução à Programação - DCTI - ISCTE-IUL 13 _ Gang {Name: Dalton, Members: [Joe (1.5), Avarell (2.1), Jack (1.7), William (1.9)], Lider: Joe (1.5)} _
    • Uma classe com um conjunto publicclass Gang { privateStringname; privateSet<Person> members; privatePersonlider; … publicdoubleaverageHeight() { doublesumOfHeights = 0.0; for (Person member : members) sumOfHeights += member.getHeight(); return sumOfHeights / members.size(); } … } 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 14 Este ciclo atribui sucessivamente a member todas as referências guardadas nos itens da colecção members (que neste caso é um conjunto).
    • Uma classe com um conjunto Person 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 Introdução à Programação - DCTI - ISCTE-IUL 15 _ 1.7999999999999998 _
    • Uma classe com um conjunto publicclass Gang { privateStringname; privateSet<Person> members; privatePersonlider; … public Person shorterMember() { if (members.size() == 0) thrownewIllegalStateException("Illegal…"); doublesmallerHeight = Double.POSITIVE_INFINITY; Person shorterMember = null; for (Person member : members) if (member.getHeight() < smallerHeight) { smallerHeight = member.getHeight(); shorterMember = member; } returnshorterMember; } … } 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 16
    • Uma classe com um conjunto Person 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 Introdução à Programação - DCTI - ISCTE-IUL 17 _ Joe (1.5) _
    • 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 importjava.util.Scanner; 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 18
    • Importação e instanciação de Scanner Usa-se declaração de importação Declaração de importação antes das restantes definições importjava.util.Scanner; publicclassSomeClass { … publicstatic voidmain(final String[] args) { Scannerscanner = newScanner(…); … } … } 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 19 Construção de um novo Scanner.
    • 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); Stringline = inputScanner.nextLine(); 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 20
    • Classe Scanner: leitura de palavras de uma cadeia String sentence = "one two three four five "; Scanner stringScanner = new Scanner(sentence); intnumberOfWords = 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 Introdução à Programação - DCTI - ISCTE-IUL 21 _ Read 5 words. _ Read 5 words. Invertedsentence: fivefourthreetwoone _
    • 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 Scanner 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 22
    • 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 Introdução à Programação - DCTI - ISCTE-IUL 23
    • Sumário Operação toString Classes, instâncias e objectos Leituras com Scanner 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 24