SlideShare una empresa de Scribd logo
1 de 22
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 - ISCTE-IUL 2
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!
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 !!??
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; 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
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
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”
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
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
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
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
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
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; }
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
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
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
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
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
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
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
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

Más contenido relacionado

La actualidad más candente

14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...Manuel Menezes de Sequeira
 
Tutorial aed iii 002 - algoritmo de ordenação shellsort
Tutorial aed iii   002 - algoritmo de ordenação shellsortTutorial aed iii   002 - algoritmo de ordenação shellsort
Tutorial aed iii 002 - algoritmo de ordenação shellsortFlávio Freitas
 
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...Manuel Menezes de Sequeira
 
ShellSort - Ordenação
ShellSort - OrdenaçãoShellSort - Ordenação
ShellSort - OrdenaçãoAnderson Zardo
 
Técnicas de Programação Funcional
Técnicas de Programação FuncionalTécnicas de Programação Funcional
Técnicas de Programação FuncionalLambda 3
 
Cheat sheet - String Java (Referência rápida)
Cheat sheet - String Java (Referência rápida)Cheat sheet - String Java (Referência rápida)
Cheat sheet - String Java (Referência rápida)Rafael Liberato
 
F sharp e o paradigma funcional
F sharp e o paradigma funcionalF sharp e o paradigma funcional
F sharp e o paradigma funcionalEvandro Souza
 
Paradigmas de Linguagens de Programacao - Aula #3
Paradigmas de Linguagens de Programacao - Aula #3Paradigmas de Linguagens de Programacao - Aula #3
Paradigmas de Linguagens de Programacao - Aula #3Ismar Silveira
 
ICC - Aula 15 - Ambiente Pascal e Suas Estruturas
ICC - Aula 15 - Ambiente Pascal e Suas EstruturasICC - Aula 15 - Ambiente Pascal e Suas Estruturas
ICC - Aula 15 - Ambiente Pascal e Suas EstruturasFelipe J. R. Vieira
 
12 algoritmos e funcoes recursivas
12   algoritmos e funcoes recursivas12   algoritmos e funcoes recursivas
12 algoritmos e funcoes recursivasRicardo Bolanho
 
Tipos Primitivos - Preparatório Certificação - OCAJP7 - Aula 2 - E
Tipos Primitivos - Preparatório Certificação - OCAJP7 - Aula 2 - ETipos Primitivos - Preparatório Certificação - OCAJP7 - Aula 2 - E
Tipos Primitivos - Preparatório Certificação - OCAJP7 - Aula 2 - EPaulo Henrique Lerbach Rodrigues
 
Conhecendo ou relembrando C
Conhecendo ou relembrando CConhecendo ou relembrando C
Conhecendo ou relembrando CVinícius Hax
 
Lista funcões e recursividade
Lista funcões e recursividadeLista funcões e recursividade
Lista funcões e recursividadeAnielli Lemes
 
Sobrecarga e invocação de métodos - Preparatório Certificação - OCAJP7 - Aula...
Sobrecarga e invocação de métodos - Preparatório Certificação - OCAJP7 - Aula...Sobrecarga e invocação de métodos - Preparatório Certificação - OCAJP7 - Aula...
Sobrecarga e invocação de métodos - Preparatório Certificação - OCAJP7 - Aula...Paulo Henrique Lerbach Rodrigues
 

La actualidad más candente (20)

14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
 
Tutorial aed iii 002 - algoritmo de ordenação shellsort
Tutorial aed iii   002 - algoritmo de ordenação shellsortTutorial aed iii   002 - algoritmo de ordenação shellsort
Tutorial aed iii 002 - algoritmo de ordenação shellsort
 
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
 
ShellSort - Ordenação
ShellSort - OrdenaçãoShellSort - Ordenação
ShellSort - Ordenação
 
Técnicas de Programação Funcional
Técnicas de Programação FuncionalTécnicas de Programação Funcional
Técnicas de Programação Funcional
 
Cheat sheet - String Java (Referência rápida)
Cheat sheet - String Java (Referência rápida)Cheat sheet - String Java (Referência rápida)
Cheat sheet - String Java (Referência rápida)
 
F sharp e o paradigma funcional
F sharp e o paradigma funcionalF sharp e o paradigma funcional
F sharp e o paradigma funcional
 
Paradigmas de Linguagens de Programacao - Aula #3
Paradigmas de Linguagens de Programacao - Aula #3Paradigmas de Linguagens de Programacao - Aula #3
Paradigmas de Linguagens de Programacao - Aula #3
 
ICC - Aula 15 - Ambiente Pascal e Suas Estruturas
ICC - Aula 15 - Ambiente Pascal e Suas EstruturasICC - Aula 15 - Ambiente Pascal e Suas Estruturas
ICC - Aula 15 - Ambiente Pascal e Suas Estruturas
 
Aula 09 08-2013
Aula 09 08-2013Aula 09 08-2013
Aula 09 08-2013
 
12 algoritmos e funcoes recursivas
12   algoritmos e funcoes recursivas12   algoritmos e funcoes recursivas
12 algoritmos e funcoes recursivas
 
Tipos Primitivos - Preparatório Certificação - OCAJP7 - Aula 2 - E
Tipos Primitivos - Preparatório Certificação - OCAJP7 - Aula 2 - ETipos Primitivos - Preparatório Certificação - OCAJP7 - Aula 2 - E
Tipos Primitivos - Preparatório Certificação - OCAJP7 - Aula 2 - E
 
Conhecendo ou relembrando C
Conhecendo ou relembrando CConhecendo ou relembrando C
Conhecendo ou relembrando C
 
Logaritmos
LogaritmosLogaritmos
Logaritmos
 
Lista funcões e recursividade
Lista funcões e recursividadeLista funcões e recursividade
Lista funcões e recursividade
 
Lista II
Lista IILista II
Lista II
 
Aula2
Aula2Aula2
Aula2
 
Sobrecarga e invocação de métodos - Preparatório Certificação - OCAJP7 - Aula...
Sobrecarga e invocação de métodos - Preparatório Certificação - OCAJP7 - Aula...Sobrecarga e invocação de métodos - Preparatório Certificação - OCAJP7 - Aula...
Sobrecarga e invocação de métodos - Preparatório Certificação - OCAJP7 - Aula...
 
Apostila rpira
Apostila rpiraApostila rpira
Apostila rpira
 
Matemática – função paridade 01 – 2014
Matemática – função paridade 01 – 2014Matemática – função paridade 01 – 2014
Matemática – função paridade 01 – 2014
 

Similar a Enumerações e tipos numéricos

Programação Funcional (para humanos)
Programação Funcional (para humanos)Programação Funcional (para humanos)
Programação Funcional (para humanos)Pedro Castilho
 
RevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptxRevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptxClaudia Ferlin
 
Linguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesLinguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesElaine Cecília Gatto
 
Semana 9: toString, classes, instâncias e objectos, Scanner
Semana  9: toString, classes, instâncias e objectos, ScannerSemana  9: toString, classes, instâncias e objectos, Scanner
Semana 9: toString, classes, instâncias e objectos, ScannerManuel Menezes de Sequeira
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dadosgjpbg
 
Apostila estrutura de dados 2
Apostila estrutura de dados 2Apostila estrutura de dados 2
Apostila estrutura de dados 2Leandro Lopes
 
Passagem de Objetos entre Java e Oracle
Passagem de Objetos entre Java e OraclePassagem de Objetos entre Java e Oracle
Passagem de Objetos entre Java e OracleAndré Reis
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaEduardo Bregaida
 
Curso de PostgreSQL: Um pouco Além dos Comandos
Curso de PostgreSQL: Um pouco Além dos ComandosCurso de PostgreSQL: Um pouco Além dos Comandos
Curso de PostgreSQL: Um pouco Além dos ComandosMarcos Thomaz
 
Curso Básico de Java - Aula 10
Curso Básico de Java - Aula 10Curso Básico de Java - Aula 10
Curso Básico de Java - Aula 10PeslPinguim
 
Classe integer-float-byte-short-long-double
Classe integer-float-byte-short-long-doubleClasse integer-float-byte-short-long-double
Classe integer-float-byte-short-long-doublePAULO Moreira
 
Exemplos registros e funções
Exemplos registros e funçõesExemplos registros e funções
Exemplos registros e funçõesCarla Lee
 

Similar a Enumerações e tipos numéricos (20)

JTableView - Swing
JTableView - SwingJTableView - Swing
JTableView - Swing
 
Java4
Java4Java4
Java4
 
Programação Funcional (para humanos)
Programação Funcional (para humanos)Programação Funcional (para humanos)
Programação Funcional (para humanos)
 
RevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptxRevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptx
 
Linguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesLinguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e Funções
 
Semana 9: toString, classes, instâncias e objectos, Scanner
Semana  9: toString, classes, instâncias e objectos, ScannerSemana  9: toString, classes, instâncias e objectos, Scanner
Semana 9: toString, classes, instâncias e objectos, Scanner
 
Aula3
Aula3Aula3
Aula3
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Apostila estrutura de dados 2
Apostila estrutura de dados 2Apostila estrutura de dados 2
Apostila estrutura de dados 2
 
Java
JavaJava
Java
 
Java - Aula 08
Java - Aula 08Java - Aula 08
Java - Aula 08
 
Passagem de Objetos entre Java e Oracle
Passagem de Objetos entre Java e OraclePassagem de Objetos entre Java e Oracle
Passagem de Objetos entre Java e Oracle
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completa
 
Ed1
Ed1Ed1
Ed1
 
Curso de PostgreSQL: Um pouco Além dos Comandos
Curso de PostgreSQL: Um pouco Além dos ComandosCurso de PostgreSQL: Um pouco Além dos Comandos
Curso de PostgreSQL: Um pouco Além dos Comandos
 
Curso Básico de Java - Aula 10
Curso Básico de Java - Aula 10Curso Básico de Java - Aula 10
Curso Básico de Java - Aula 10
 
Classe integer-float-byte-short-long-double
Classe integer-float-byte-short-long-doubleClasse integer-float-byte-short-long-double
Classe integer-float-byte-short-long-double
 
04 funções
04   funções04   funções
04 funções
 
Exemplos registros e funções
Exemplos registros e funçõesExemplos registros e funções
Exemplos registros e funções
 
Estruturas
EstruturasEstruturas
Estruturas
 

Más de Manuel Menezes de Sequeira

13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...Manuel Menezes de Sequeira
 
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...Manuel Menezes de Sequeira
 
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de ProgramaçãoManuel Menezes de Sequeira
 
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...Manuel Menezes de Sequeira
 
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...Manuel Menezes de Sequeira
 
4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de ProgramaçãoManuel Menezes de Sequeira
 
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...Manuel Menezes de Sequeira
 
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...Manuel Menezes de Sequeira
 
1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...
1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...
1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...Manuel Menezes de Sequeira
 
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...Manuel Menezes de Sequeira
 
Semana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
Semana 10: Encapsulação, cópia de instâncias, igualdade de instânciasSemana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
Semana 10: Encapsulação, cópia de instâncias, igualdade de instânciasManuel Menezes de Sequeira
 
Semana 8: Classes e instâncias, cadeias de caracteres
Semana  8: Classes e instâncias, cadeias de caracteresSemana  8: Classes e instâncias, cadeias de caracteres
Semana 8: Classes e instâncias, cadeias de caracteresManuel Menezes de Sequeira
 
Semana 6: Matrizes multidimensionais, estratégias de resolução de problemas
Semana  6: Matrizes multidimensionais, estratégias de resolução de problemasSemana  6: Matrizes multidimensionais, estratégias de resolução de problemas
Semana 6: Matrizes multidimensionais, estratégias de resolução de problemasManuel Menezes de Sequeira
 
Semana 5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
Semana  5: Caracteres, tipos char e int, tipos de valor vs. tipos de referênciaSemana  5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
Semana 5: Caracteres, tipos char e int, tipos de valor vs. tipos de referênciaManuel Menezes de Sequeira
 
Semana 4: Atribuições especiais, matrizes, ciclos, classes pacote
Semana  4: Atribuições especiais, matrizes, ciclos, classes pacoteSemana  4: Atribuições especiais, matrizes, ciclos, classes pacote
Semana 4: Atribuições especiais, matrizes, ciclos, classes pacoteManuel Menezes de Sequeira
 
Semana 3: Introdução à linguagem de programação Java
Semana  3: Introdução à linguagem de programação Java Semana  3: Introdução à linguagem de programação Java
Semana 3: Introdução à linguagem de programação Java Manuel Menezes de Sequeira
 
Semana 1: Programação como arte de resolver problemas, algoritmos e problema...
Semana  1: Programação como arte de resolver problemas, algoritmos e problema...Semana  1: Programação como arte de resolver problemas, algoritmos e problema...
Semana 1: Programação como arte de resolver problemas, algoritmos e problema...Manuel Menezes de Sequeira
 
Semana 0: Computadores, linguagens e linguagens de programação, Noções de al...
Semana  0: Computadores, linguagens e linguagens de programação, Noções de al...Semana  0: Computadores, linguagens e linguagens de programação, Noções de al...
Semana 0: Computadores, linguagens e linguagens de programação, Noções de al...Manuel Menezes de Sequeira
 

Más de Manuel Menezes de Sequeira (20)

13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
 
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
 
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
 
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...
 
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
 
4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação
 
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
 
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...
 
1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...
1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...
1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...
 
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
 
Semana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
Semana 10: Encapsulação, cópia de instâncias, igualdade de instânciasSemana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
Semana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
 
Semana 8: Classes e instâncias, cadeias de caracteres
Semana  8: Classes e instâncias, cadeias de caracteresSemana  8: Classes e instâncias, cadeias de caracteres
Semana 8: Classes e instâncias, cadeias de caracteres
 
Semana 6: Matrizes multidimensionais, estratégias de resolução de problemas
Semana  6: Matrizes multidimensionais, estratégias de resolução de problemasSemana  6: Matrizes multidimensionais, estratégias de resolução de problemas
Semana 6: Matrizes multidimensionais, estratégias de resolução de problemas
 
Semana 5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
Semana  5: Caracteres, tipos char e int, tipos de valor vs. tipos de referênciaSemana  5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
Semana 5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
 
Semana 4: Atribuições especiais, matrizes, ciclos, classes pacote
Semana  4: Atribuições especiais, matrizes, ciclos, classes pacoteSemana  4: Atribuições especiais, matrizes, ciclos, classes pacote
Semana 4: Atribuições especiais, matrizes, ciclos, classes pacote
 
Semana 3: Introdução à linguagem de programação Java
Semana  3: Introdução à linguagem de programação Java Semana  3: Introdução à linguagem de programação Java
Semana 3: Introdução à linguagem de programação Java
 
Semana 2: Funções e listas, variáveis
Semana  2: Funções e listas, variáveisSemana  2: Funções e listas, variáveis
Semana 2: Funções e listas, variáveis
 
Semana 1: Programação como arte de resolver problemas, algoritmos e problema...
Semana  1: Programação como arte de resolver problemas, algoritmos e problema...Semana  1: Programação como arte de resolver problemas, algoritmos e problema...
Semana 1: Programação como arte de resolver problemas, algoritmos e problema...
 
Semana 0: Computadores, linguagens e linguagens de programação, Noções de al...
Semana  0: Computadores, linguagens e linguagens de programação, Noções de al...Semana  0: Computadores, linguagens e linguagens de programação, Noções de al...
Semana 0: Computadores, linguagens e linguagens de programação, Noções de al...
 
Eng.ª do Software - 10. Testes de software
Eng.ª do Software - 10. Testes de softwareEng.ª do Software - 10. Testes de software
Eng.ª do Software - 10. Testes de software
 

Enumerações e tipos numéricos

  • 1. Aula 11 Enumerações Gama limitada dos tipos numéricos Precisão limitada dos tipos de vírgula flutuante
  • 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. 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. 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. Enumerações: exemplos simples 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 5
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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