Programação por Objectos. Java



Documentos relacionados
Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

Programação por Objectos. Java

3 Classes e instanciação de objectos (em Java)

Criar a classe Aula.java com o seguinte código: Compilar e Executar

Programação por Objectos. Java

Lição 9 Trabalhando com bibliotecas de classes

Noções sobre Objetos e Classes

Módulo 06 Desenho de Classes

Sintaxe Básica de Java Parte 1

Roteiro 1: Dados, variáveis, operadores e precedência

A Linguagem Java. Alberto Costa Neto DComp - UFS

Keeper of Knowledge. Capítulo 1 Conceitos Básicos do Java

JSP - ORIENTADO A OBJETOS

2. OPERADORES ALGORITMOS, FLUXOGRAMAS E PROGRAMAS FUNÇÕES... 10

Algoritmia e Programação APROG. Linguagem JAVA. Básico. Nelson Freire (ISEP DEI-APROG 2012/13) 1/31

AULA 12 CLASSES DA API JAVA. Disciplina: Programação Orientada a Objetos Professora: Alba Lopes alba.lopes@ifrn.edu.br

Programação por Objectos. Java

Capítulo 2: Introdução à Linguagem C

Capítulo 2. Fundamentos de Java

Aula 4 Pseudocódigo Tipos de Dados, Expressões e Variáveis

Unidade IV: Ponteiros, Referências e Arrays

Programação de Computadores - I. Profª Beatriz Profº Israel

Introdução à linguagem

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento NetBeans Introdução à Linguagem de Programação JAVA

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento Eclipse Introdução à Linguagem de Programação JAVA

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição

Algoritmos e Programação

Java Como Programar, 8/E

Java para Desktop. Classes Utilitárias I java.lang.string JSE

Universidade de Mogi das Cruzes Implementação Orientada a Objetos - Profª. Danielle Martin. Guia da Sintaxe do Java

Algoritmos e Programação Conceitos e Estruturas básicas (Variáveis, constantes, tipos de dados)

Programação Básica em Arduino Aula 2

INF 1005 Programação I

Tabelas (arrays) (vetores, matrizes, etc) Algoritmos de pesquisa Algoritmos de ordenação

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

Algoritmos I Aula 13 Java: Tipos básicos, variáveis, atribuições e expressões

BSI UFRPE Prof. Gustavo Callou

Slides_Java_1 !"$ % & $ ' ' Output: Run java. Compile javac. Name of program. Must be the same as name of file. Java source code.

Utilizem a classe Aula.java da aula passada:

Java Como Programar, 8/E

Introdução aos cálculos de datas

Guia de Fatores de Qualidade de OO e Java

Capítulo 3. Programação por objectos em Java

Universidade Federal de Uberlândia

Algoritmos e Programação _ Departamento de Informática

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Programação Orientada a Objetos

Reuso com Herança a e Composiçã

Capítulo 14. Herança a e Polimorfismo. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Orientação a Objetos

Sintaxe Geral Tipos de Dados. Prof. Angelo Augusto Frozza, M.Sc.

Tipos agregados. Tipos estruturados

2 Orientação a objetos na prática

Tabela de símbolos: tabelas de espalhamento

Técnicas de Programação II

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

Arquitetura de Computadores. Tipos de Instruções

Java 2 Standard Edition Como criar classes e objetos

Faculdade de Ciências Universidade Agostinho Neto Departamento de Matemática e Engenharia Geográfica Ciências da Computação

Visual Basic e Java. À primeira vista o Java é completamente diferente do Visual Basic. Realmente as duas linguagens pertencem a mundos distintos.

Revisão da linguagem Java

Programação. Folha Prática 3. Lab. 3. Departamento de Informática Universidade da Beira Interior Portugal Copyright 2010 All rights reserved.

BCC221 Programação Orientada a Objetos. Prof. Marco Antonio M. Carvalho 2014/2

Programação Orientada a Objetos em Java. Herança

Introdução a JAVA. Variaveis, tipos, expressões, comandos e blocos

AULA Uma linguagem de programação orientada a objetos

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código }

5 Caso de estudo O cartão fidelidade

Capítulo 4. Packages e interfaces

Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: Prof. Dr. Raimundo Moura

e à Linguagem de Programação Python

Paradigmas da Programação PPROG. Linguagem JAVA. Interfaces. (Livro Big Java, Late Objects Capítulo 9) Nelson Freire (ISEP DEI-PPROG 2013/14) 1/33

Linguagem e Técnicas de Programação I Operadores, expressões e funções. Prof. MSc. Hugo Souza Material desenvolvido por: Profa.

Revisões de PG. Programação Orientada por Objetos (POO) Centro de Cálculo Instituto Superior de Engenharia de Lisboa

ESTRUTURA CONDICIONAL

Introdução à Linguagem

BSI UFRPE Prof. Gustavo Callou

Ambientação com a Sintaxe de Java: parte 1

Java 1 visão geral. Vitor Vaz da Silva

2.3. PHP Tipos de dados e operadores

POO Programação Orientada a Objetos. Classes em Java

Java - Introdução. Professor: Vilson Heck Junior. vilson.junior@ifsc.edu.br

Introdução a JAVA. Variáveis, tipos, expressões, comandos e blocos

Conceitos de Linguagens de Programação

Orientação a Objetos com Java

Programas simples em C

Componentes da linguagem C++

Aula 1. // exemplo1.cpp /* Incluímos a biblioteca C++ padrão de entrada e saída */ #include <iostream>

Polimorfismo. Prof. Leonardo Barreto Campos 1

Linguagem C Tipos de Dados. void; escalares; sizeof Vectores; strings em C Estruturas Introdução ao pré-processador

Capítulo 5 Reuso de Classes

Java Básico. Classes Abstratas, Exceções e Interfaces Prof. Fernando Vanini Ic-Unicamp

A declaração de uma variável vel define o seu tipo. O tipo do dado define como ele será: Armazenado na memória. Manipulado pela ULA.

Paradigmas da Programação APROG. Classes JAVA. Nelson Freire (ISEP DEI-APROG 2013/14) 1/43

Transcrição:

Programação por Objectos Java Parte 4: Classes de ambiente LEEC@IST Java 1

Pacote java.lang O pacote java.lang é automaticamente importado: Interfaces: Cloneable Runnable Classes: Class eobject Boolean,Number (e subclasses),character,void Math Process,Thread,System eruntime String e StringBuffer Throwable e Exception (e subclasses) LEEC@IST Java 2

Classe Object (1) A classeobject é a raíz na hierarquia de herança de qualquer classe em Java. Todas as classes estendem directa ou indirectamente Object. LEEC@IST Java 3

Classe Object (2) Métodos da classeobject: public int hashcode() Retorna valor da função de dispersão. public String tostring() Retorna cadeia de caracteres que descreve o objecto. Exemplo: Double x = new Double(3.0) String str = value: + x; public boolean equals(object obj) Retorna igualdade entre objectos. Nota: Igualdade entre objectos: duas referências para o mesmo objecto. Equivalência entre objectos: dois objectos com o mesmo estado (mesmo valor dos atributos). LEEC@IST Java 4

Classe Object (3) Ambos os métodos equals e hashcode devem ser redefinidos se o programador pretende oferecer, em vez de igualdade, equivalência entre objectos. Por omissão,equals implementa igualdade entre objectos (objectos distintos devolvem false). Nota: O operador== e!= retorna sempre igualdade entre objectos. Ou seja, se o programador redefinir o método equals continua a poder testar igualdade entre objectos através do auxílio do operador== e!=. Por omissão, dois objectos distintos devolvem um hashcode diferente. LEEC@IST Java 5

Classe Object (4) Se o método equals for redefinido para implementar equivalência entre objectos, então o método hashcode também deve ser redefinido concordantemente, ou seja, deve ser redefinido por forma a que dois objectos equivalentes devolvam o mesmo código de dispersão. O método hashcode é chamado automaticamente quando referências do objeto forem usadas em coleções do tipo hash (por exemplo, Hashtable, HashMap). O método equals é usado como critério de desempate, portanto, se redefinir hashcode deve redefinir concordantemente equals. LEEC@IST Java 6

Classe Object (5) Normalmente as classes redefinem o método tostring. O método tem várias utilizações: Depuração. Geração de mensagem de apresentação. LEEC@IST Java 7

Classe Object (5) Métodos da classeobject (cont): protected void finalize() Chamado pelo garbage collector quando o objecto deixa de ser referenciado. Nota: No Java, um objecto existe enquanto for referenciado. O garbage collector destrói objectos não referenciados. protected Object clone() throws CloneNotSupportedException Cria cópia integral do objecto, que passa a ser autónomo. Contudo, se a classe desteobject não implementa a interface Cloneable então é lançada a excepção CloneNotSupportedException. Nota: Para qualquer objectoobj, tem-se obj.clone()!= obj; LEEC@IST Java 8

Tipos primitivos (1) Tipos de dados primitivos: boolean 1-bit (true ou false) char 16-bit Unicode UTF-16 (sem sinal) byte 8-bit inteiro com sinal short 16-bit inteiro com sinal int 32-bit inteiro com sinal long 64-bit inteiro com sinal float 32-bit IEEE 754 vírgula flutuante double 64-bit IEEE 754 vírgula flutuante LEEC@IST Java 9

Tipos primitivos (2) No Java, para cada tipo primitivo existe no pacote java.lang uma classe de embrulho correspondente. Estas classes de embrulho, Boolean, Character, Byte, Short, Integer, Long, Float e Double definem constantes e métodos úteis. Os tipos primitivos de dados oferecem: Acesso mais eficiente do que o acesso a objectos. Ocupam sempre o mesmo espaço, independente da máquina onde corre o programa. LEEC@IST Java 10

Tipos primitivos (3) Conversão de tipos: O Java efectua conversão implícita de tipos primitivos, na ordem: byte->short->int->long->float->double. Expressão envolvendo tipos distintos resulta num valor do tipo superior (por exemplo, 5+3.0 resulta no valor 8.0). Quando a conversão implícita não é possível, normalmente uma conversão explícita (casting) é usada (por exemplo, conversão de float paraint elimina parte fraccionária e (int)-72.3 resulta no valor 72). LEEC@IST Java 11

Classes de embrulho (1) Hierarquia das classes de embrulho: Object Character Number Boolean Byte Integer Float Double Short Long LEEC@IST Java 12

Classes de embrulho (2) As instâncias de uma classe de embrulho contêm um valor do correspondente tipo primitivo. O Java disponibiliza conversão automática entre tipo primitvo e correspondente classe de embrulho: Embrulhar (boxing): converter tipo primitivo para classe de embrulho. Desembrulhar (unboxing): converter classe de embrulho para tipo primitivo. Integer val = 3; Não há conversão implícita Byte->Short->..->Float->Double. LEEC@IST Java 13

Classes de embrulho (3) No que se segue, Type é usado para a classe de embrulho correspondente ao tipo primitivotype. A conversão automática tica torna muitos destes métodos desnecessários rios!! Todas as classes de embrulho possuem os seguintes métodos: public static Type valueof(type t) retorna um objecto do tipo Type com o valor t. Ou seja embrulha. Também pode ser utilizado o construtor. public static Type valueof(string str) retorna um objecto do tipotype com o valor parsado de str (excepto para Character). Mais uma vez pode ser utilizado o construtor. public type typevalue() retorna o valor do tipo primitivotype correspondente ao objecto de embrulho. Integer.valueOf(6).intValue(); ou Integer(6).intValue(); Embrulhar e desembrulhar LEEC@IST Java 14

Classes de embrulho (4) public static type parsetype(string str) converte a stringstr para um valor do tipo primitivo type. public static String tostring(type val) retorna a string representativa do valor val de tipo primitivo type. Todas as classes de embrulho, à excepção da classe Boolean, definem três atributos: public static final type MIN_VALUE o valor mínimo representável pelo tipo de dados type. public static fine type MAX_VALUE o valor máximo representável pelo tipo de dados type. public static final int SIZE o número de bits usado para representar um valor deste tipo. LEEC@IST Java 15

Classes de embrulho (5) Tipo primitivo boolean char byte short int long float double Classe de embrulho Boolean Character Byte Short Integer Long Float Double Recolha de valor booleanvalue() charvalue() bytevalue() shortvalue() intvalue() longvalue() floatvalue() doublevalue() Integer I = new Integer(3); int i = I.intValue(); // i passa a ter 3 String srt_i = Integer.toString(i); // str_i passa a ter "3" Mas podemos ter mais simplesmente: Integer I = new Integer(3); int i = I; ou Integer I = 3; int i = I; String srt = +I; LEEC@IST Java 16

Classes de embrulho Todas as classes de embrulho tem conversores para todos os tipos primitivos public Type.type2Value() Exemplo: Int Integer.intValue() byte Integer.byteValue() long Integer.longValue() float Integer.floatValue() double Integer.doubleValue() A utilidade de todas estes métodos pode ser questionada em vez de por exemplo int Integer.value() mas foi esta a abordagem utilizada. LEEC@IST Java 17

Classe Character (1) Métodos estáticos boolean islowercase(char) boolean isuppercase(char) boolean isdigit(char) boolean isspace(char) char tolowercase(char) char touppercase(char) int digit(char,int) Descrição Indica se é minúscula Indica se é maiúscula Indica se é dígito decimal Indica se é \t, \n, \f ou Converte para minúscula Converte para maiúscula Valor numérico na base indicada char c = Character.toUpperCase( g ); LEEC@IST Java 18

Classe Character (2) A classecharacter possui ainda o seguinte método: public static int gettype(char) retorna o código do caractere Unicode, que pode ser uma das seguintes contantes: CURRENCY_SYMBOL LOWERCASE_LETTER UPPERCASE_LETTER MATH_SYMBOL SPACE_SEPARATOR LEEC@IST Java 19

Classes Byte, Short, Integer e Float As classes Byte, Short, Integer e Float possuem ainda o seguinte método: public static type parsetype(string str, int radix) converte a stringstr para um valor do tipo primitivo type segundo a base indicada emradix (decimal, por omissão). LEEC@IST Java 20

Operadores (1) Operadores aritméticos: + adição - subtracção * multiplicação / divisão % resto divisão inteira Os operadores aritméticos podem ser aplicados a qualquer tipo primitivo numérico e a caracteres. LEEC@IST Java 21

Operadores (2) Operadores de incremento/decremento: ++ incremento -- decremento Os operadores de incremento/decremento podem ser aplicados a tipos primitivos numéricos e a caracteres (próximo/anterior código Unicode). LEEC@IST Java 22

Operadores (3) int var = 5; Instrução System.out.println(var++); System.out.println(++var); System.out.println(var--); System.out.println(--var); System.out.println(var%3); Resultado no terminal 5 6 5 4 2 Valor após instrução 6 6 4 4 5 LEEC@IST Java 23

Operadores (4) Operadores relacionais: > maior que >= maior ou igual a < menor que <= menor ou igual a Operadores de igualdade: == igual a!= diferente de Os operadores relacionais e de igualdade devolvem um valor Booleano, e podem ser aplicados aos tipos primitivos numéricos e a caracteres. LEEC@IST Java 24

Operadores (5) Os operadores de igualdade podem ser aplicados a tipos primitivos Booleanos. Os operadores de igualdade podem ainda ser usados para testar igualdade entre referências: Esta igualdade refere-se a uma igualdade entre objectos e não a uma equivalência entre objectos: Igualdade entre objectos: duas referências para o mesmo objecto. Equivalência entre objectos: dois objectos com o mesmo estado (mesmo valor dos atributos). LEEC@IST Java 25

Operadores (6) Operadores lógicos:! negação & conjunção disjunção ^ disjunção exclusiva && conjunção com lazzy evaluation disjunção com lazzy evaluation Os operadores lógicos combinam expressões Booleanas e resultam em valores Booleanos. LEEC@IST Java 26

Operadores (7) O operador instanceof avalia o tipo (classe ou intrface) de uma referência: Ref instanceof Ident verifica se a referência Ref é do tipo Ident. LEEC@IST Java 27

Operadores (8) Operadores de bits: & conjunção (AND) disjunção (OR) ^ disjunção exclusiva (XOR) ~ negação << deslocamento para a esquerda, com 0 s à direita >> deslocamento para a direita, preservando sinal >>> deslocamento para a direita, com 0 s à esquerda Os operadores de bits podem ser usados em tipos primitivos inteiros, incluindo caracteres. LEEC@IST Java 28

Operadores (9) O operador condicional?: devolve uma de duas expressões dependendo da avaliação de uma expressão Booleana: Expr-Bool?Expr1 : Expr2 se a expressão booleana Expr-Bool for verdadeira devolve Expr1 senão devolve Expr2. LEEC@IST Java 29

Operadores (10) Operadores de atribuição: = atribuição op= atribuição composta O operando à esquerda dos operadores de atribuição deve ser sempre uma variável. O operando à direita é uma expressão. O operador op pode ser qualquer operador aritmético, lógico ou de bits. LEEC@IST Java 30

Operadores (11) Operador para concatenação de strings: + String s1 = boo ; String s2 = s1+ hoo ; s2 +=! ; System.out.println(s2); Se um dos operandos não for uma string é automaticamente chamado o tostring() Double x = new Double(2.0); System.out.println( Value: +x); LEEC@IST Java 31

Operadores O operador new cria uma instância duma classe ou duma tabela. LEEC@IST Java 32

Operadores (12) Prioridade dos operadores (máxima para mínima): 1. Operadores unários ++ -- + - ~! 2. Criação ou cast new (type) 3. Multiplicativos * / % 4. Aditivos + - 5. Deslocamento << >> >>> 6. Relacional < > >= <= instanceof 7. Igualdade ==!= 8. Conjunção & 9. Disjunção exclusiva ^ 10. Disjunção ++x>3&&!b 11. Conjunção condicional && é equivalente a 12. Disjunção condicional ((++x)>3)&&(!b) 13. Condicional?: 14. Atribuição = += -= *= /= %= >>= <<= >>>= &= ^= = LEEC@IST Java 33

Operadores (13) Quando dois operadores com a mesma prioridade aparecem numa expressão, a associatividade do operador determina qual o operador que vai ser avaliado primeiro. Associatividade à esquerda: expr1 op expr2 op expr3 é equivalente a (expr1 op expr2) op expr3. Associatividade à direita: expr1 op expr2 op expr3 é equivalente a expr1 op (expr2 op expr3). Os operadores de atribuição são associativos à direita. Todos os restantes operadores binários são associativos à esquerda. O operador condicional é associativo à direita. LEEC@IST Java 34

Tabelas (1) Uma tabela (array) é um objecto autónomo contendo um número fixo de células, todas contendo dados do mesmo tipo base. As tabelas são objectos que estendem implicitamente a classeobject. Os tipos base podem ser primitivos ou referências (incluindo referências para outras tabelas). J2SE disponibiliza contentores de tabelas de capacidade variável, por exemplo, Vector, Stack,... LEEC@IST Java 35

Tabelas (2) Sintaxe Tipo_base Ident [ ] = new Tipo_base [comprimento] A dimensão da tabela é omitida na sua declaração, sendo apenas dada quando é criada com o operadornew. A dimensão de uma tabela é fixada na sua criação e não pode ser modificada. Os parêntesis rectos na declaração da tabela podem ser colocados depois do Tipo_base (Tipo_base [ ] Ident em vez de Tipo_base Ident [ ]). LEEC@IST Java 36

Tabelas (3) Tabelas multidimensionais: Declaradas com vários [ ]. Instanciação apenas exige a primeira dimensão (mais à esquerda). Especificar mais do que uma dimensão poupa em número de operadoresnew a usar. float[][] mat = new float[4][4]; float[][] mat = new float[4][]; for (int i=0; i < mat.length; i++) mat[i] = new float[4]; LEEC@IST Java 37

Tabelas (4) Numa tabela multidimensional, cada tabela pode ter uma dimensão diferente, o que permite criar tabelas multidimensionais de vários tipos: Triangulares Rectangulares LEEC@IST Java 38

Tabelas (5) A dimensão da tabela é armazenada no atributo public final int length O acesso aos elementos da tabela é feito depois de instanciada, com cada um dos índices indicado entre parêntesis rectos (Ident[pos]). O primeiro elemento da tabela tem índice 0, e o último elemento da tabela tem índicelength-1. O acesso a índices fora da gama gera excepção. int[] ia = new int[3];... //inicialização de ia for (int i=0; i < ia.length; i++) System.out.println(i + : + ia[i]); LEEC@IST Java 39

Tabelas (6) Uma tabela pode ter dimensão 0. Uma referência para uma tabela de dimensão 0 é diferente de uma referência para null. Útil no retorno de métodos. Os qualificadores usuais podem ser usados na declaração de atributos/variáveis do tipo tabela. Os qualificadores aplicam-se ao atributo/variável tabela e não aos seu elementos. Quando uma tabela é declarada final significa que a sua referência não pode ser modificada após a sua inicialização. Não significa que os seus elementos não podem ser modificados! LEEC@IST Java 40

Tabelas (7) Inicialização de tabelas: Quando uma tabela é criada, cada elemento é inicializado com um valor por omissão (dependendo do seu tipo). A inicialização pode ser feita de duas formas: 1. Listagem de todas a células entre { }: Não é necessário criar a tabela explicitamente com o operadornew. A dimensão da tabela é determinada pelo número de elementos incializados. String[] animais = { Leão, Tigre, Urso }; LEEC@IST Java 41

Tabelas (8) Pode usar-se o operadornew explicitamente, mas nesse caso a dimensão tem de ser omitida (porque, mais uma vez, esta é determinada pela lista de elementos inicializados). String[] animais = new String[]{ Leão, Tigre, Urso }; É possível que o último elemento de uma lista de inicialização seja seguido por uma vírgula. Tabelas multidimensionais podem ser inicializadas por aninhamento de listagem. LEEC@IST Java 42

Tabelas (8) 2. Por atribuição directa dos seus elementos: String[] animais = new String[3]; animais[0] = Leão ; animais[1] = Tigre ; Animais[2] = Urso ; LEEC@IST Java 43

Tabelas (9) A classe System oferece um método que permite copiar os valores de uma tabela para outra: public static void arraycopy (Object src, int srcpos, Object dst, int dstpos, int count) copia o conteúdo da tabelasrc, começando em src[srcpos], para a tabeladst, começando em dst[dstpos]; são copiados exactamentecount elementos. LEEC@IST Java 44

Tabelas (10) As tabelas como extensão da classe Object: As tabelas não definem métodos próprios, apenas herdam os métodos da classe Object. Para tabelas o método equals é sempre baseado em igualdade dos ponteiros e não em equivalência. O método deepequals da classe utilitária java.util.arrays permite comparar tabelas por equivalência. Verifica a equivalência entre dois Object recursivamente, tendo em consideração equivalência de tabelas multidimensionais. LEEC@IST Java 45

Tabelas (11) String[] animais = {"Leão", "Tigre", "Urso", }; String[] aux = new String[animais.length]; System.arraycopy(animais, 0, aux, 0, animais.length); for (int i=0; i<aux.length; i++) System.out.println(i + ": " + aux[i]); System.out.println(aux.equals(animais)); System.out.println(java.util.Arrays.deepEquals(aux, animais)); No terminal é impresso 0: Leão 1: Tigre 2: Urso false true LEEC@IST Java 46

Tabelas (12) int[][] triangulopascal1 = { { 1 },{ 1, 1 },{ 1, 2, 1 },{ 1, 3, 3, 1},{ 1, 4, 6, 4, 1}}; int[][] triangulopascal2 = new int[5][]; triangulopascal2[0] = new int[]{ 1 }; triangulopascal2[1] = new int[]{ 1, 1 }; triangulopascal2[2] = new int[]{ 1, 2, 1 }; triangulopascal2[3] = new int[]{ 1, 3, 3, 1 }; triangulopascal2[4] = new int[]{ 1, 4, 6, 4, 1 }; System.out.println(trianguloPascal1.equals(trianguloPascal2)); System.out.println(java.util.Arrays.deepEquals( triangulopascal1, triangulopascal2)); No terminal é impresso false true LEEC@IST Java 47

Tabelas Se x é uma subclasse de y então x[] também é considerada como uma subclasse de y[] Integer tab[] = {3,2,5}; Number tab2[] = tab; //Ok LEEC@IST Java 48

Classe String (1) Uma cadeia de caracteres (string) é um objecto autónomo/pré-definido contendo sequências de caracteres. As cadeias de caracteres são instâncias da classestring. As cadeias de caracteres não podem ser alteradas, pelo que têm de ser determinadas na instanciação. No entanto, o identificador pode mudar a referência para outra cadeia de caracteres. Se for mesmo necessário alterar o conteúdo, usar a classe StringBuffer. A sequência de caracteres é delimitada por aspas ( e ). O operador+concatena duas cadeias de caracteres. LEEC@IST Java 49

Classe String (2) Construção de cadeias de caracteres: Implicitamente, através do uso de um literal, ou com o auxílio dos operadores + e += sobre dois objectos String. Explicitamente, com o auxílio do operador new (apenas alguns dos construtores, ver documentação): public String() Cria uma nova cadeia de caracteres vazia ( ). public String(String valor) Construtor por cópia, cria uma nova cadeia de caracteres com o mesmo valor que a cadeia de caracteres recebida. LEEC@IST Java 50

Classe String (3) public String (char[] valor) Cria uma cadeia de caracteres cujo valor representa a sequência de caracteres da tabela de caracteres recebida. public String(char[] valor, int pos, int num) Cria uma cadeia de caracteres, que contém a sequência de caracteres, a partir da posição pos, da tabela recebida. Apenas num elementos são considerados. LEEC@IST Java 51

Classe String (4) String s1 = "Bom"; String s2 = s1 + " dia"; String vazia = ""; String vazia = new String(); String s1 = new String( Bom dia ); char valor[] = { B, o, m,, d, i, a }; String s2 = new String(valor); String s3 = new String(valor,4,3); //Objectos são automaticamente convertidos em string através do tostring Double x = New Double(3.0); String str = valor: + x; LEEC@IST Java 52

Classe String (5) Métodos públicos da classestring: 1. Propriedades da cadeia: int length() Comprimento da cadeia. int compareto(string str) Devolve um inteiro que é menor que 0, igual a 0, ou maior que 0, quando a cadeia de carateres na qual o método foi invocado é menor que str, igual a str, ou maior que str. A ordem usada é a ordem dos caracteres Unicode. LEEC@IST Java 53

Classe String (6) 2. Acesso a partes da cadeia: char charat(int) Caractere na posição. char[] tochararray() Devolve tabela de caracteres. int indexof(char) Primeira posição em que ocorre caractere. int lastindexof(char) Última posição em que ocorre caractere. O primeiro caractere numa cadeia tem posição 0. String substring(int a,int b) Subcadeia entre posições a e b-1. String substring(int) Subcadeia a partir de posição. LEEC@IST Java 54

Classe String (7) 3. Alterações em cadeias: String replace(char oldchar,char newchar) Obtém nova cadeia alterando todas as ocorrências do 1º caractere. String tolowercase() Obtém nova cadeia em minúsculas. String touppercase() Obtém nova cadeia em maiúsculas. String trim() Obtém nova cadeia sem espaços em branco no início e no fim. String concat(string) Obtém nova cadeia estendida no fim com o parâmetro. LEEC@IST Java 55

Classe String (8) String s = "/home/asmc/aula-po.ppt";... int inicio, fim; inicio = s.lastindexof('/'); fim = s.lastindexof('.'); System.out.println(s.substring(inicio+1,fim)); No terminal é impresso aula-po LEEC@IST Java 56

Classe String (9) Métodos de conversão entre cadeia de caracteres e tipo primitivo: Tipo boolean int long float double Para cadeia String.valueOf(boolean) String.valueOf(int) String.valueOf(long) String.valueOf(float) String.valueOf(double) De cadeia Boolean.parseBooelan(String) Integer.parseInt(String,int) Long.parseLong(String,int) Float.parseFloat(String) Double.parseDouble(String) LEEC@IST Java 57

Classe String Outras formas de conversão (Type: tipo de embrulho; type: tipo primitivo) Para Cadeia: Static String.valueOf(type) StringBuffer.append(type x) Type.toString() Static Type.toString(type x) De cadeia Static type Type.parseType(String s) Static Type Type.valueOf(String s) Type(String s) - construtor LEEC@IST Java 58

Classe String (10) Conversão entre cadeias de caracteres e tabela de caracteres: A classe String disponibiliza a conversão de cadeias de caracteres para tabela de caracteres: public char[] tochararray() A classe System disponibiliza a conversão de tabela de caracteres para cadeia de caracteres: public static void arraycopy( Object src, int srcpos, Object dst, int dstpos, int count) copia o conteúdo da tabela src, começando em src[srcpos], para a tabela dst, começando em dst[dstpos]; serão copiados exactamente count elementos. LEEC@IST Java 59

Classe String (11) public static String squeezeout(string from, char toss){ char chars[]=from.tochararray(); // transfere cadeia para tabela int len=chars.length; // recolhe comprimento } for (int i=0; i<len; i++) { if (chars[i]==toss) { --len; // cadeia final tem menos 1 caractere System.arraycopy(chars, i+1, chars, i, len-i); // desloca parte direita --i; // para continuar a procura na mesma posição } } return new String(chars, 0, len); System.out.println(squeezeOut("Programação por Objetos", 'o')); imprime no terminal Prgramaçã pr Objets LEEC@IST Java 60

Classe String (12) A classe String redefine o método equals de Object para devolver true sse duas cadeias de caracteres têm o mesmo conteúdo. Também redefine o método hashcode, de tal forma que duas cadeias de caracteres com o mesmo conteúdo tem o mesmo hashcode. String s1 "abc", s2= "abc"; Expressão s1==s2 s1.equals(s2) Resultado false true Justificação Objectos distintos Valores iguais LEEC@IST Java 61

Classe Math (1) Classe disponibilizada no J2SE, define constantes matemáticas e implementa métodos de cálculo. Constante PI E Significado π e System.out.println( Pi= + Math.PI); LEEC@IST Java 62

Classe Math (2) Todos os métodos são estáticos (num éint, long, float oudouble) double Math.powers(double,double) num Math.abs(num) Métodos double Math.sin(double) num Math.max(num,num) num Math.min(num,num) int Math.round(float) long Math.round(double) double Math.sqrt(double) Descrição Seno Potência Valor absoluto Valor máximo Valor mínimo Arredondamento Raiz quadrada LEEC@IST Java 63