0
Aula 11
Enumerações
Gama limitada dos tipos numéricos
Precisão limitada dos tipos de vírgula flutuante
Da aula anterior…
Encapsulação
Cópia de instâncias
Igualdade de instâncias
2010/2011
Introdução à Programação - DCTI - ISC...
Como representar…
Sexo
boolean?
int? 
String?
Dias da semana
int?
String?
Meses do ano
Pontos cardinais
Estado civil
2010/...
Enumerações: o que são?
São classes, mas especiais
São tipos de valor (e de referência!)
Valores
Definidos explicitamente,...
Enumerações: exemplos simples
2010/2011
Introdução à Programação - DCTI - ISCTE-IUL
5
Enumerações: exemplo de utilização
publicstaticvoidmain(finalString[] arguments) {
WeekDaymonday = WeekDay.MONDAY;
WeekDay...
Enumerações: método valueOf
Disponibilizado automaticamente
Devolve valor enumerado dada cadeia de caracteres com o seu no...
Enumerações: operação toString
Disponibilizada automaticamente
Devolve cadeia de caracteres com nome exacto do valor enume...
Enumerações: operação values
Disponibilizada automaticamente
values() devolve uma matriz com todos os valores, por ordem d...
Enumerações: operações técnicas
Evitar usar!
name() devolve sempre cadeia de caracteres com nome exacto do valor enumerado...
Enumerações: vantagens adicionais
Pode-se definir atributos e métodos específicos
Pode-se definir construtores específicos...
BlueJ
ChemicalElement
Operações e atributos próprios
Switch
longName
AtomicNumber
AtomicMass
H He Li Be
2010/2011
Introduç...
Instrução de selecção switch
Alternativa ao if-else
Adequada quando as diferentes alternativas de execução são determinada...
Exemplo (opções de menu / switch)
2010/2011
Introdução à Programação - DCTI - ISCTE-IUL
14
public enum Command {
SAVE, LOA...
Exemplo (direcção)
2010/2011
Introdução à Programação - DCTI - ISCTE-IUL
15
public enum Direction {
NORTH, SOUTH, EAST, WE...
Limites nos tipos primitivos
Uma variável de tipo primitivo tem um intervalo de valores possíveis, relacionado com o númer...
Rotação entre valor extremos
Ao efectuar uma operação aritmética cujo resultado ultrapasse o limite, é efectuada uma rotaç...
double: problemas de precisão
Ao efectuar operações aritméticas utilizando o tipo primitivo double (ou float) podem ocorre...
Classe BigDecimal
Classe que permite a manipulação de números decimais, garantindo que não ocorrem erros de precisão
Deve ...
A reter
Enumerados em Java
Limites dos tipos primitivos
Problemas de precisão ao utilizar double
Classe BigDecimal
2010/20...
A ler...
http://download.oracle.com/javase/tutorial/java/javaOO/enum.html
IEEE Standard for Floating-Point Arithmetic (IEE...
Sumário
Enumerações
Gama limitada dos tipos numéricos
Precisão limitada dos tipos de vírgula flutuante
2010/2011
Introduçã...
Upcoming SlideShare
Loading in...5
×

Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)

934

Published on

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

Published in: Technology, News & Politics
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
934
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
75
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)"

  1. 1. Aula 11 Enumerações Gama limitada dos tipos numéricos Precisão limitada dos tipos de vírgula flutuante
  2. 2. Da aula anterior… Encapsulação Cópia de instâncias Igualdade de instâncias 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 2
  3. 3. Como representar… Sexo boolean? int? String? Dias da semana int? String? Meses do ano Pontos cardinais Estado civil 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 3 Por exemplo: classHuman { … publicbooleanisFemale() { returnisFemale; } … privatebooleanisFemale; } Problemas: Representação indirecta. Não se pode imprimir o sexo. Por exemplo: classHuman { … publicstaticfinalintMALE = 0; publicstaticfinalintFEMALE = 1; … publicintgetSex() { returnsex; } … privateintsex; } Problemas: Inteiros podem tomar muito mais que os dois valores pretendidos. Ao imprimir surgem números. Por exemplo: classHuman { … publicstaticfinalStringMALE = "Male"; publicstaticfinalStringFEMALE = "Female"; … publicStringgetSex() { returnsex; } … privateStringsex; } Problemas: Cadeias de caracteres podem tomar muito mais que os dois valores pretendidos. Comparação possível apenas com equals. Mesmos problemas! Mesmos problemas!
  4. 4. Enumerações: o que são? São classes, mas especiais São tipos de valor (e de referência!) Valores Definidos explicitamente, por extensão Em número finito Fixos Formam sequência 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 4 !!??
  5. 5. Enumerações: exemplos simples 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 5
  6. 6. Enumerações: exemplo de utilização publicstaticvoidmain(finalString[] arguments) { WeekDaymonday = WeekDay.MONDAY; WeekDaysomeDay = WeekDay.FRIDAY; out.println("Mondayis " + monday + "."); someDay = WeekDay.valueOf("Friday"); someDay = WeekDay.valueOf("FRIDAY"); if(someDay == WeekDay.SUNDAY) out.println("Some day is Sunday."); out.println("Some dayis " + someDay + "."); } 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 6
  7. 7. Enumerações: método valueOf Disponibilizado automaticamente Devolve valor enumerado dada cadeia de caracteres com o seu nome exacto Exemplo publicenum Sex { MALE, FEMALE } Sex sex = Sex.valueOf("MALE"); 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 7 «enumeration» Sex sex MALE FEMALE
  8. 8. Enumerações: operação toString Disponibilizada automaticamente Devolve cadeia de caracteres com nome exacto do valor enumerado Exemplo publicenum Sex { MALE, FEMALE } Sex sex = Sex.FEMALE; String sexName = sex.toString(); 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 8 Mas pode sobrepor-se versão especializada! «enumeration» Sex sex sexName MALE FEMALE “FEMALE”
  9. 9. Enumerações: operação values Disponibilizada automaticamente values() devolve uma matriz com todos os valores, por ordem de declaração Exemplo publicenumCardinalDirection { NORTH, SOUTH, EAST, WEST } for (CardinalDirectiondirection : CardinalDirection.values()) out.println(direction); 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 9 «enumeration» CardinalDirection SOUTH direction NORTH WEST EAST
  10. 10. Enumerações: operações técnicas Evitar usar! name() devolve sempre cadeia de caracteres com nome exacto do valor enumerado ordinal() devolve número de ordem do valor enumerado Por ordem de declaração Primeiro valor tem ordem 0 (zero) 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 10
  11. 11. Enumerações: vantagens adicionais Pode-se definir atributos e métodos específicos Pode-se definir construtores específicos (desde que privados ou privados do pacote) Cada valor pode ter sua própria sobreposição de uma dada operação 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 11
  12. 12. BlueJ ChemicalElement Operações e atributos próprios Switch longName AtomicNumber AtomicMass H He Li Be 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 12
  13. 13. Instrução de selecção switch Alternativa ao if-else Adequada quando as diferentes alternativas de execução são determinadas pelo valor de determinada variável A variável pode ter um dos tipos primitivos numéricos para representar inteiros (byte, short, int) , char, ou ser de um tipo enumerado 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 13
  14. 14. Exemplo (opções de menu / switch) 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 14 public enum Command { SAVE, LOAD, EXIT; } ... Scanner scanner = new Scanner(System.in); System.out.println(“Introduza uma comando:”); String line = scanner.nextLine(); Command command = Command.valueOf(line); switch(command) { caseSAVE: // gravar... break; caseLOAD: // carregar... break; caseEXIT: // sair... break; }
  15. 15. Exemplo (direcção) 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 15 public enum Direction { NORTH, SOUTH, EAST, WEST; public String prettyName() { return name().charAt(0) + name().substring(1).toLowerCase(); } } Objectos do tipo Direction String s1 = Direction.NORTH.name(); System.out.println(s1); String s2= Direction.SOUTH.prettyName(); System.out.println(s2); NORTH SOUTH EAST > NORTH > South WEST
  16. 16. Limites nos tipos primitivos Uma variável de tipo primitivo tem um intervalo de valores possíveis, relacionado com o número de bits que é utilizado para representar p.e. no tipo int é [-2147483648, 2147483647] 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 16 int min= Integer.MIN_VALUE; int max = Integer.MAX_VALUE; min -2147483648 max 2147483647
  17. 17. Rotação entre valor extremos Ao efectuar uma operação aritmética cujo resultado ultrapasse o limite, é efectuada uma rotação do limite superior para o inferior, ou vice-versa 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 17 int max = Integer.MAX_VALUE; max++; ++ max 2147483647 -2147483648
  18. 18. double: problemas de precisão Ao efectuar operações aritméticas utilizando o tipo primitivo double (ou float) podem ocorrer problemas de precisão IEEE Standard for Floating-Point Arithmetic (IEEE 754) 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 18 double a = 3.4; double b = 0.2; double c = a - b; System.out.println(c); ? > 3.1999999999999997
  19. 19. Classe BigDecimal Classe que permite a manipulação de números decimais, garantindo que não ocorrem erros de precisão Deve ser utilizada sempre que a precisão é crucial (p.e. cálculo financeiro) 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 19 BigDecimala = new BigDecimal(3.4); BigDecimalb = new BigDecimal(0.2); BigDecimalc = a.subtract(b, MathContext.DECIMAL32); double d = c.doubleValue(); System.out.println(d); > 3.2
  20. 20. A reter Enumerados em Java Limites dos tipos primitivos Problemas de precisão ao utilizar double Classe BigDecimal 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 20
  21. 21. A ler... http://download.oracle.com/javase/tutorial/java/javaOO/enum.html IEEE Standard for Floating-Point Arithmetic (IEEE 754) http://download.oracle.com/javase/1.5.0/docs/api/java/math/BigDecimal.html 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 21
  22. 22. Sumário Enumerações Gama limitada dos tipos numéricos Precisão limitada dos tipos de vírgula flutuante 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 22
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×