• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Apresentação 9 - Fundamentos de Programação
 

Apresentação 9 - Fundamentos de Programação

on

  • 667 views

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

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.

Statistics

Views

Total Views
667
Views on SlideShare
262
Embed Views
405

Actions

Likes
0
Downloads
19
Comments
0

3 Embeds 405

http://campusonline.europeia.pt 387
http://campusonline.isla.pt 17
http://www.linkedin.com 1

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

    Apresentação 9 - Fundamentos de Programação Apresentação 9 - Fundamentos de Programação Presentation Transcript

    • Operação toString Classes, instâncias e objectos Leituras com Scanner
    •  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
    •  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
    • 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
    •  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 _
    • 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.
    •  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 _
    •  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; 2013/2014 Fundamentos de Programação 8 r1 1/4 r2 1/2 r3 1/8 string “1/4 × 1/2 = 1/8”
    •  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
    • 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
    •  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
    •  É 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,70m Joe daltons null 0 1 2 3 null null null
    • 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,70m Joe daltons 0 1 2 3
    • 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; } 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. 
    • 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)} _
    • 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).
    • 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 _
    • public 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; } … } 2013/2014 Fundamentos de Programação 18
    • 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.shorterMember()); 2013/2014 Fundamentos de Programação 19 _Joe (1.5) _
    •  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
    •  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.
    •  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(); 2013/2014 Fundamentos de Programação 22
    • String sentence = "one two three four five "; int numberOfWords = 0; String invertedSentence = ""; 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 _
    •  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
    •  Operação toString  Classes, instâncias e objectos  Leituras com Scanner 2013/2014 Fundamentos de Programação 25