Enumerações
Instrução de selecção switch
Gama limitada dos tipos inteiros
 Encapsulação
 Cópia de instâncias
 Igualdade de instâncias
2013/2014 Fundamentos de Programação 2
2013/2014 Fundamentos de Programação 3
 Sexo
 boolean?
 int?
 String?
 Dias da semana
 int?
 String?
 Meses do ano
 Pontos cardinais
 Estado civil
2013...
 São classes, mas especiais
 São tipos de valor (e de referência!)
 Valores
 Definidos explicitamente, por extensão
 ...
Tipo de valores a representar Java
Sexo (masculino e feminino) public enum Sex {
MALE,
FEMALE
}
Dias da semana (de domingo...
public static void main(final String[] arguments) {
final DayOfTheWeek day = DayOfTheWeek.MONDAY;
DayOfTheWeek someDay = D...
 Disponibilizado automaticamente
 Devolve valor enumerado dada cadeia de caracteres
com o seu nome exacto
 Exemplo
publ...
 Disponibilizada automaticamente
 Devolve cadeia de caracteres com nome exacto do
valor enumerado
 Exemplo
public enum ...
 Disponibilizada automaticamente
 values() devolve uma array com todos os valores, por
ordem de declaração
 Exemplo
pub...
 Evitar usar!
 name() devolve sempre cadeia de caracteres
com nome exacto do valor enumerado
 ordinal() devolve número ...
 Pode-se definir atributos e métodos
específicos
 Pode-se definir construtores específicos
(desde que privados ou privad...
public enum CardinalDirection {
NORTH, SOUTH, EAST, WEST;
public String prettyName() {
return name().charAt(0) +
name().su...
2013/2014 Fundamentos de Programação 14
switch (expressão) {
case valor1:
instruções1
break;
case valor2:
instruções2
break;
…
default:
instruções
break;
}
2013/2...
 Alternativa ao if-else
 Quando fluxo de execução tem vários casos
de acordo com valor de expressão
 Expressão de contr...
public enum Command {
SAVE, LOAD, EXIT;
}
…
final Scanner inputScanner = new Scanner(System.in);
out.print("Introduza um c...
2013/2014 Fundamentos de Programação 18
0 0 0 0
2013/2014 Fundamentos de Programação 19
1 1 1 1 0123456789101112131415 Suponhamos…
Com 4 bits
representamos 16
int...
0 0 0 0
2013/2014 Fundamentos de Programação 20
0 0 0 10 0 1 00 0 1 10 1 0 00 1 0 10 1 1 00 1 1 11 0 0 01 0 0 11 0 1 01 0 ...
0 0 0 0
2013/2014 Fundamentos de Programação 21
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
0 1 0 1
0 1 1 0
0 1 1 1
1 0 0 0
1 0 0 1
1 ...
2013/2014 Fundamentos de Programação 22
0 0 0 0
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
0 1 0 1
0 1 1 0
0 1 1 1
1 0 0 0
1 0 0 1
1 ...
Negativos Positivos
2013/2014 Fundamentos de Programação 23
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
11...
Negativos Positivos
2013/2014 Fundamentos de Programação 24
0000
0001
0010
0011
0100
0101
0110
0111
0
1
2
3
4
5
6
7-8-7
-6...
2013/2014 Fundamentos de Programação 25
Negativos Positivos
0000
0001
0010
0011
0100
0101
0110
0111
0
1
2
3
4
5
6
7-8-7
-6...
7 + 1 = -8
6 + 2 = -8
5 + 4 = -7
-8 - 1 = 7
-5 - 6 = 5
2013/2014 Fundamentos de Programação 26
Negativos Positivos
0000
00...
2013/2014 Fundamentos de Programação 27
0…0
00…01
0…
0…
01…11
0
1
…
2n-1-1-2n-1
…
-1
10…00
10…01
1…
1…
11…11
(231 -1) + 1 = -231
-231 - 1 = 231 - 1
ou seja,
2147483647 + 1 =
-2147483648
-2147483648 - 1 =
2147483647
2013/2014 Fundam...
final int minimum = Integer.MIN_VALUE;
final int maximum = Integer.MAX_VALUE;
out.println(minimum);
out.println(maximum);
...
2013/2014 Fundamentos de Programação 30
Tipo Bits Valor mínimo Valor máximo
byte 8 -128 127
short 16 -32768 32767
int 32 -...
import java.math.BigInteger;
…
public class BigIntegerTester {
public static BigInteger factorialOf(BigInteger n) {
BigInt...
 Enumerações em Java
 Instrução de selecção switch
 Limites dos tipos inteiros
 Classe especial BigInteger
2013/2014 F...
 Enumerações no JavaTutorial
 Classe BigInteger na API do Java 7
2013/2014 Fundamentos de Programação 33
 Enumerações
 Instrução de selecção switch
 Gama limitada dos tipos inteiros
2013/2014 Fundamentos de Programação 34
Próximos SlideShares
Carregando em…5
×

11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação

1.018 visualizações

Publicada em

Fundamentos da Programação 11:
• Enumerações
• Instrução switch
• Gama limitada dos inteiros

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

Publicada em: Educação
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
1.018
No SlideShare
0
A partir de incorporações
0
Número de incorporações
487
Ações
Compartilhamentos
0
Downloads
38
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de Programação

  1. 1. Enumerações Instrução de selecção switch Gama limitada dos tipos inteiros
  2. 2.  Encapsulação  Cópia de instâncias  Igualdade de instâncias 2013/2014 Fundamentos de Programação 2
  3. 3. 2013/2014 Fundamentos de Programação 3
  4. 4.  Sexo  boolean?  int?  String?  Dias da semana  int?  String?  Meses do ano  Pontos cardinais  Estado civil 2013/2014 Fundamentos de Programação 4 Por exemplo: class Human { … public boolean isFemale() { return isFemale; } … private boolean isFemale; } Problemas: 1. Representação indirecta. 2. Não se pode imprimir o sexo. Por exemplo: class Human { … public static final int MALE = 0; public static final int FEMALE = 1; … public int getSex() { return sex; } … private int sex; } Problemas: 1. Inteiros podem tomar muito mais que os dois valores pretendidos. 2. Ao imprimir surgem números. Por exemplo: class Human { … public static final String MALE = "Male"; public static final String FEMALE = "Female"; … public String getSex() { return sex; } … private String sex; } Problemas: 1. Cadeias de caracteres podem tomar muito mais que os dois valores pretendidos. 2. Comparação possível apenas com equals. Mesmos problemas! Mesmos problemas!
  5. 5.  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 2013/2014 Fundamentos de Programação 5 !!??
  6. 6. Tipo de valores a representar Java Sexo (masculino e feminino) public enum Sex { MALE, FEMALE } Dias da semana (de domingo a segunda-feira) public enum DayOfTheWeek { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY } Pontos cardeais (Norte, Sul, Este e Oeste) public enum CardinalDirection { NORTH, SOUTH, EAST, WEST } 2013/2014 Fundamentos de Programação 6
  7. 7. public static void main(final String[] arguments) { final DayOfTheWeek day = DayOfTheWeek.MONDAY; DayOfTheWeek someDay = DayOfTheWeek.FRIDAY; out.println("Monday is " + day + "."); someDay = DayOfTheWeek.valueOf("FRIDAY"); someDay = DayOfTheWeek.valueOf("Friday"); if (someDay == DayOfTheWeek.FRIDAY) out.println("Some day is Friday."); out.println("Some day is " + someDay + "."); } 2013/2014 Fundamentos de Programação 7 _Monday is MONDAY. _ Monday is MONDAY. Some day is Friday. _ Monday is MONDAY. Some day is Friday. Some day is FRIDAY. _
  8. 8.  Disponibilizado automaticamente  Devolve valor enumerado dada cadeia de caracteres com o seu nome exacto  Exemplo public enum Sex { MALE, FEMALE } final Sex sex = Sex.valueOf("MALE"); 2013/2014 Fundamentos de Programação 8 «enumeration» Sex MALE FEMALE sex
  9. 9.  Disponibilizada automaticamente  Devolve cadeia de caracteres com nome exacto do valor enumerado  Exemplo public enum Sex { MALE, FEMALE } final Sex sex = Sex.FEMALE; final String sexName = sex.toString(); 2013/2014 Fundamentos de Programação 9 Mas pode sobrepor-se versão especializada! «enumeration» Sex MALE FEMALE sex sexName “FEMALE”
  10. 10.  Disponibilizada automaticamente  values() devolve uma array com todos os valores, por ordem de declaração  Exemplo public enum CardinalDirection { NORTH, SOUTH, EAST, WEST } for (CardinalDirection direction : CardinalDirection.values()) out.println(direction); 2013/2014 Fundamentos de Programação 10 «enumeration» CardinalDirection NORTH EAST SOUTH WEST direction
  11. 11.  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) 2013/2014 Fundamentos de Programação 11
  12. 12.  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 2013/2014 Fundamentos de Programação 12
  13. 13. public enum CardinalDirection { NORTH, SOUTH, EAST, WEST; public String prettyName() { return name().charAt(0) + name().substring(1).toLowerCase(); } } … out.println(CardinalDirection.NORTH.name()); out.println(CardinalDirection.SOUTH.prettyName()); 2013/2014 Fundamentos de Programação 13 _NORTH _ NORTH South _
  14. 14. 2013/2014 Fundamentos de Programação 14
  15. 15. switch (expressão) { case valor1: instruções1 break; case valor2: instruções2 break; … default: instruções break; } 2013/2014 Fundamentos de Programação 15
  16. 16.  Alternativa ao if-else  Quando fluxo de execução tem vários casos de acordo com valor de expressão  Expressão de controlo e valores dos casos  Tipos primitivos inteiros (byte, short, int, etc.)  char  String  Enumerações 2013/2014 Fundamentos de Programação 16 Mas não boolean!(obrigado Nélio! )
  17. 17. public enum Command { SAVE, LOAD, EXIT; } … final Scanner inputScanner = new Scanner(System.in); out.print("Introduza um comando: "); final String commandText = inputScanner.nextLine(); final Command command = Command.valueOf(commandText); switch(command) { case SAVE: … break; case LOAD: … break; case EXIT: … break; } 2013/2014 Fundamentos de Programação 17 Nos casos de um switch recorrendo a uma enumeração, usa-se apenas os valores enumerados, i.e., não se pode preceder o valor do nome da enumeração: Command.LOAD. Sem o break, a execução continua, passando para os casos seguintes!
  18. 18. 2013/2014 Fundamentos de Programação 18
  19. 19. 0 0 0 0 2013/2014 Fundamentos de Programação 19 1 1 1 1 0123456789101112131415 Suponhamos… Com 4 bits representamos 16 inteiros com valores entre 0 e 15. Com n bits representamos 2n inteiros com valores entre 0 e 2n-1.
  20. 20. 0 0 0 0 2013/2014 Fundamentos de Programação 20 0 0 0 10 0 1 00 0 1 10 1 0 00 1 0 10 1 1 00 1 1 11 0 0 01 0 0 11 0 1 01 0 1 11 1 0 01 1 0 11 1 1 01 1 1 1
  21. 21. 0 0 0 0 2013/2014 Fundamentos de Programação 21 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1
  22. 22. 2013/2014 Fundamentos de Programação 22 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
  23. 23. Negativos Positivos 2013/2014 Fundamentos de Programação 23 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 0 1 2 3 4 5 6 789 10 11 12 13 14 15 +1 -1 1000 1001 1010 1011 1100 1101 1110 1111 Primeiro bit simpático para identificar valores negativos.
  24. 24. Negativos Positivos 2013/2014 Fundamentos de Programação 24 0000 0001 0010 0011 0100 0101 0110 0111 0 1 2 3 4 5 6 7-8-7 -6 -5 -4 -3 -2 -1 +1 -1 1000 1001 1010 1011 1100 1101 1110 1111 +1 -1
  25. 25. 2013/2014 Fundamentos de Programação 25 Negativos Positivos 0000 0001 0010 0011 0100 0101 0110 0111 0 1 2 3 4 5 6 7-8-7 -6 -5 -4 -3 -2 -1 +1 -1 1000 1001 1010 1011 1100 1101 1110 1111 +1 -1
  26. 26. 7 + 1 = -8 6 + 2 = -8 5 + 4 = -7 -8 - 1 = 7 -5 - 6 = 5 2013/2014 Fundamentos de Programação 26 Negativos Positivos 0000 0001 0010 0011 0100 0101 0110 0111 0 1 2 3 4 5 6 7-8-7 -6 -5 -4 -3 -2 -1 +1 -1 1000 1001 1010 1011 1100 1101 1110 1111 +1 -1
  27. 27. 2013/2014 Fundamentos de Programação 27 0…0 00…01 0… 0… 01…11 0 1 … 2n-1-1-2n-1 … -1 10…00 10…01 1… 1… 11…11
  28. 28. (231 -1) + 1 = -231 -231 - 1 = 231 - 1 ou seja, 2147483647 + 1 = -2147483648 -2147483648 - 1 = 2147483647 2013/2014 Fundamentos de Programação 28 0…0 00…01 0… 0… 01…11 0 1 … 231-1-231 … -1 10…00 10…01 1… 1… 11…11
  29. 29. final int minimum = Integer.MIN_VALUE; final int maximum = Integer.MAX_VALUE; out.println(minimum); out.println(maximum); 2013/2014 Fundamentos de Programação 29 _-2147483648 _ -2147483648 2147483647 _ Também estão definidos os extremos dos outros tipos inteiros.
  30. 30. 2013/2014 Fundamentos de Programação 30 Tipo Bits Valor mínimo Valor máximo byte 8 -128 127 short 16 -32768 32767 int 32 -2147483648 2147483647 long 64 -9223372036854775808 9223372036854775807
  31. 31. import java.math.BigInteger; … public class BigIntegerTester { public static BigInteger factorialOf(BigInteger n) { BigInteger factorial = BigInteger.valueOf(1); while (n != BigInteger.ZERO) { factorial = factorial.multiply(n); n = n.subtract(BigInteger.ONE); } return factorial; } public static void main(final String[] arguments) { out.println("Number of different deck shuffles: " + factorialOf(BigInteger.valueOf(52))); } } 2013/2014 Fundamentos de Programação 31
  32. 32.  Enumerações em Java  Instrução de selecção switch  Limites dos tipos inteiros  Classe especial BigInteger 2013/2014 Fundamentos de Programação 32
  33. 33.  Enumerações no JavaTutorial  Classe BigInteger na API do Java 7 2013/2014 Fundamentos de Programação 33
  34. 34.  Enumerações  Instrução de selecção switch  Gama limitada dos tipos inteiros 2013/2014 Fundamentos de Programação 34

×