• Nenhum resultado encontrado

Linguagem Java COMPLETA

N/A
N/A
Protected

Academic year: 2021

Share "Linguagem Java COMPLETA"

Copied!
161
0
0

Texto

(1)

Linguagem Java

www.3way.com.br

Apostila

(2)

//atribuindo valor a variável referência Carro carro1 = new Carro();

carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização //criando novo alias

Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância

Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.

2.3.1 Invocação de Métodos

Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela

chamada de um método em um objeto usando o operador binário "." (ponto),

devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). O método invocado no recebedor pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.

Os valores das variáveis em um objeto constituem

o seu estado. Dois objetos distintos têm

o mesmo estado se suas variáveis membro têm os

mesmos valores. Sumário

1 Introdução à Linguagem Java 6

1.1 O que é a Tecnologia Java ? 6

1.1.1 JSE - Java Standard Edition 6

1.1.2 JEE - Java Enterprise Edition 6

1.1.3 JME - Java Micro Edition 6

1.1.4 Java Card 7

1.2 Quanto tempo é necessário para aprender Java ? 7

1.3 O curso 8

1.3.1 Convenções de Código 8

1.3.2 Sobre os exercícios 8

1.4 Fazer Laboratório 0 8

2 Bases da Programação em Java 9

2.1 Classes 9

2.1.1 Declarando Membros: Variáveis e Métodos 10

2.2 Objetos 10

2.2.1 Instância de Classes 10

2.2.2 Referência de Objetos 11

2.3 Membros de Instância 12

2.3.1 Invocação de Métodos 12

2.3.1.1 Chamando Métodos de Objeto 13

2.3.2 Envio de Argumentos para Métodos 13

2.3.2.1 Passagem de Parâmetros por valor 13

2.3.2.2 Passagem de Parâmetros por referência 14

2.4 Membros Estáticos 15

2.5 Herança - Relacionamentos do tipo "é-um" 16

2.6 Agregação - Relacionamentos do tipo "tem-um" 17

2.7 Princípios de Programação Com Java 18

2.8 Estrutura de Arquivos Fontes em Java 18

2.9 O método main() 19

2.10 Fazer Laboratório 1 19

2.11 Exercícios 19

3 Identificadores, Palavras-chave e Tipos 19

3.1 Comentários 19

3.2 Ponto-e-Vírgula, Blocos e Espaço 20

3.3 Identificadores 20

3.4 Palavras Reservadas 20

3.5 Variáveis, Declarações e Atribuição 21

3.5.1 Declarando e inicializando Variáveis 21

3.5.2 Exibindo o valor de uma Variável 22

3.5.3 Variáveis de Referência e de Valor 22

3.6 Tipos Básicos em Java 23

3.6.1 Literais Java 23

3.6.2 Tipos Dados Primitivos 23

3.6.2.1 Lógico – boolean 23

3.6.2.2 Textual – char and String 23

3.6.2.3 Inteiro – byte, short, int e long 24

3.6.2.4 Ponto Flutuante – float e double 24

3.6.2.5 Exemplos de declarações e atribuições 25

3.7 Conversões 26

3.7.1 Casting de Tipos Primitivos 26

3.7.2 Literais numéricos e Promoção Numérica 26

3.8 Classes Wrapper (Empacotadoras) 27

3.8.1 Construtores Wrapper 28 7 7 7 7 7 8 8 10 10 10 10 11 11 12 12 12 14 15 15 16 16 16 18 19 20 22 23 23 24 24 24 24 24 23 23 23 26 26 28 28 29 29 29 29 29 30 30 31 32 32 32 33 34

(3)

Linguagem de Programação Java

Seja um Profissional Aprendendo com Profissionais

www.3way.com.br 12

//atribuindo valor a variável referência Carro carro1 = new Carro();

carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização //criando novo alias

Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância

Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.

2.3.1 Invocação de Métodos

Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela

chamada de um método em um objeto usando o operador binário "." (ponto),

devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). O método invocado no recebedor pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.

Os valores das variáveis em um objeto constituem

o seu estado. Dois objetos distintos têm

o mesmo estado se suas variáveis membro têm os

mesmos valores.

3

Todos os direitos reservados a 3Way Networks

Linguagem de Programação Java

Seja um Profissional Aprendendo com Profissionais

www.3way.com.br 2

3.9 AutoBoxing 29

3.9.1 Boxing e Unboxing Automático para Tipos Primitivos 29

3.9.2 Ocorrência de Boxing e Unboxing automático 29

3.10 Fazer Laboratório 2 30

3.11 Exercícios 30

4 Operadores 30

4.1 Operadores Aritméticos 30

4.2 Operadores de Incremento e Decremento 31

4.3 Operadores Relacionais 32

4.4 Operadores Lógicos 33

4.4.1 && (e lógico) e & (e binário) 34

4.4.2 || ( ou lógico) e | ( ou binário) 35

4.4.3 ^ (ou exclusivo binário) 36

4.4.4 ! (negação) 36

4.4.5 Operador Condicional ( ?: ) 37

4.5 Precedência de Operadores 37

4.6 Exercícios 38

5 Estruturas de controle 38

5.1 Estruturas de decisão if - else 38

5.2 Declaração switch 40

5.3 Iterações (Laços) 41

5.3.1 while 41

5.3.2 do-while 42

5.3.3 Declaração for 43

5.4 Declarações de Interrupção e Desvio 44

5.4.1 Declaração break 44

5.4.1.1 Declaração unlabeled break 44

5.4.1.2 Declaração labeled break 44

5.4.2 Declaração continue 45

5.4.2.1 Declaração unlabeled continue 45

5.4.2.2 Declaração labeled continue 45

5.4.3 Declaração return 46

5.5 Fazer Laboratório 3 46

5.6 Exercícios 46

6 Array 46

6.1 Declarando Array 46

6.2 Acessando um elemento do Array 47

6.3 Tamanho de Array 48

6.4 Arrays Multidimensionais 49

6.5 Copiando Arrays 50

6.6 Percorrendo Arrays com Enhaced-for 50

6.7 Manipulando Arrays com java.util.Arrays 51

6.8 Fazer Laboratório 4 52

6.9 Exercícios 52

7 Programação Orientada a Objetos 52

7.1 Classes e Objetos 52

7.1.1 Definindo Classes 52

7.1.2 Definindo Métodos 53

7.1.2.1 Definindo Métodos na Classe 54

7.1.3 Métodos de Instância e a Referência this 55

7.1.4 Sobrecarga de Métodos (Overloading) 56

7.1.5 Construtores 57

7.1.6 Construtor Padrão (default) 57

7.1.7 Overloading de Construtores 58

7.1.8 Usando Construtores 58

7.1.9 Utilizando o Construtor this( ) 59

7.2 Fazer Laboratório 5 60 7.3 Herança 60 35 35 35 36 36 36 36 37 38 39 40 42 43 43 44 44 45 45 45 47 48 48 49 50 51 51 51 51 52 52 52 54 54 54 54 54 55 56 57 58 58 59 60 60 60 60 60 61 62 63 64 65 65 66 66 67 69 69

(4)

//atribuindo valor a variável referência Carro carro1 = new Carro();

carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização //criando novo alias

Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância

Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.

2.3.1 Invocação de Métodos

Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela

chamada de um método em um objeto usando o operador binário "." (ponto),

devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). O método invocado no recebedor pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.

Os valores das variáveis em um objeto constituem

o seu estado. Dois objetos distintos têm

o mesmo estado se suas variáveis membro têm os

mesmos valores.

7.3.1 Definindo Superclasses e Subclasses 60

7.3.2 Chamando Construtor super() e Referência super 63

7.3.3 Modificador de Classe final 63

7.4 Polimorfismo 64

7.4.1 Coleções Heterogêneas de Objetos 65

7.4.2 Determinando a Classe de um Objeto 65

7.4.3 Casting de Referências de Objetos 66

7.4.4 Operações Polimórficas por Sobreposição de Métodos 68

7.4.4.1 Invocando Métodos Sobrepostos 69

7.4.4.2 Regras sobre Sobreposição de Métodos 70

7.4.5 Modificador de Método final 71

7.5 Encapsulamento 71

7.5.1 Pacotes 71

7.5.1.1 Criando pacotes 71

7.5.1.2 Importando Pacotes 72

7.5.1.3 Localização de Classes e CLASSPATH 73

7.5.1.4 Importação Estática 74 7.5.2 Modificadores de Acesso 75 7.5.2.1 Público - public 75 7.5.2.2 Protegido – protected 76 7.5.2.3 Padrão ou Pacote 77 7.5.2.4 Privado - private 78

7.6 Métodos de Configuração e Captura 78

7.6.1 Métodos Getter 78

7.6.2 Métodos Setter 79

7.6.3 Aplicando Encapsulando no Exemplo Funcionario/Gerente 79

7.7 Fazer Laboratório 6 81

7.8 O operador == comparado ao Método equals 81

7.9 Classses Abstratas 83

7.10 Interfaces 86

7.10.1 Porque utilizar Interfaces? 86

7.10.2 Interface vs. Classe Abstrata 87

7.10.3 Criando Interfaces 87

7.10.4 Relacionamento de uma Interface para uma Classe 89

7.10.5 Herança entre Interfaces 89

7.10.6 Interface vs. Classe 90

7.11 Classes Aninhadas 90

7.11.1 Classe Aninhada 91

7.11.2 Classes aninhadas estáticas 91

7.11.3 Classes internas locais 92

7.11.4 Classes internas anônimas 93

7.11.5 Modificadores de acesso 93 7.12 Tipos Enumerados 95 7.13 Fazer Laboratório 7 97 7.14 Exercícios 97 8 Exceções 97 8.1 Manipulando Exceções 97 8.2 Categorias de Exceções 99

8.2.1 Exceções Verificadas e Não-verificadas 100

8.3 Lançando Exceções 100

8.3.1 A palavra-chave throw 100

8.3.2 Desviando Exceções 101

8.4 Criando Exceções 102

8.5 Sobrescrita de Métodos e Exceções 103

8.6 Fazer Laboratório 8 105

8.7 Exercício 105

9 Tipos Genéricos 105

9.1 Por que Generics? 105

69 72 72 73 74 74 75 77 78 79 80 80 80 80 81 83 84 85 85 86 87 88 88 88 89 89 91 91 93 97 97 98 98 100 100 101 101 102 102 103 104 104 106 108 108 108 108 111 112 112 112 113 114 115 117 117 117 117

(5)

Linguagem de Programação Java

Seja um Profissional Aprendendo com Profissionais

www.3way.com.br 12

//atribuindo valor a variável referência Carro carro1 = new Carro();

carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização //criando novo alias

Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância

Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.

2.3.1 Invocação de Métodos

Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela

chamada de um método em um objeto usando o operador binário "." (ponto),

devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). O método invocado no recebedor pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.

Os valores das variáveis em um objeto constituem

o seu estado. Dois objetos distintos têm

o mesmo estado se suas variáveis membro têm os

mesmos valores.

5

Todos os direitos reservados a 3Way Networks

Linguagem de Programação Java

Seja um Profissional Aprendendo com Profissionais

www.3way.com.br 4

9.2 Declarando uma Classe Utilizando Generics 106

9.2.1 Limitação "Primitiva" 107

9.2.2 Limitando Genéricos 107

9.3 Declarando Métodos Genéricos 108

9.4 Subtipagem 109

9.5 Usando o Coringa <?> 111

9.6 Fazer Laboratório 9 113

9.7 Exercício 113

10 Java Collections 113

10.1 Hierarquia Das Interfaces 113

10.2 Generics e Coleções Java 114

10.3 Percorrendo Collections 116

10.3.1 Laço for-each 116

10.3.2 Interface Iterator 116

10.4 Usando Listas – Interface List 117

10.4.1 LinkedList 117

10.5 ArrayList 118

10.5.1 Teste de Desempenho 119

10.6 Usando Conjuntos – Interface Set 120

10.6.1 HashSet 120

10.6.2 TreeSet 120

10.7 Usando Mapas – Interface Map 120

10.7.1 HashMap 121

10.8 Classificando Coleções: Collections.sort 121

10.9 Fazer Laboratório 10 123

10.10 Exercício 123

11 Construindo Interfaces Graficas com AWT/Swing 123

11.1 AWT (Abstract Window Toolkit) vs. Swing 123

11.2 Componentes GUI AWT 124

11.2.1 Fundamental Window Classes 124

11.2.2 Graphics 125

11.2.3 Mais Componentes AWT 127

11.3 Gerenciadores de Layout 128

11.3.1 O Gerenciador FlowLayout 128

11.3.2 O Gerenciador BorderLayout 129

11.3.3 O gerenciador GridLayout 130

11.3.4 Painéis e Layouts Complexos 131

11.4 Componentes GUI Swing 132

11.4.1 Configurando Containers JFrame e JApplet 133

11.5 Manipulação de Eventos 134

11.5.1 Registrando Classes Ouvintes (Listeners) 135

11.5.2 Classes Event 135 11.5.3 Listeners de Evento 136 11.5.3.1 Método de ActionListener 136 11.5.3.2 Métodos de MouseListener 136 11.5.3.3 Métodos de MouseMotionListener 137 11.5.3.4 Métodos WindowListener 137

11.5.3.5 Roteiro para criação de Aplicações Gráficas com tratamento de eventos 137 11.5.4 Implementando Manipuladores de Eventos com Anonymous inner class 139

11.6 Classes Adaptadoras 140 11.7 Fazer Laboratório 11 143 11.8 Exercício 143 12 Internacionalização do código 143 12.1 Formatação 143 12.2 ResourceBoundle 144 12.3 Menssages Formatadas 144 12.4 Fazer Laboratório 12 145 12.5 Exercícios 145 118 119 119 120 121 123 125 125 125 125 126 129 129 129 130 130 131 132 133 133 133 133 134 134 136 136 136 136 137 137 138 140 141 141 142 143 144 147 147 148 149 149 150 150 150 151 151 151 153 154 157 157 157 157 158 158 159 159

(6)

//atribuindo valor a variável referência Carro carro1 = new Carro();

carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização //criando novo alias

Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância

Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.

2.3.1 Invocação de Métodos

Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela

chamada de um método em um objeto usando o operador binário "." (ponto),

devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). O método invocado no recebedor pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.

Os valores das variáveis em um objeto constituem

o seu estado. Dois objetos distintos têm

o mesmo estado se suas variáveis membro têm os

mesmos valores.

13 Exportação de Aplicação 145

13.1 Jar executável 145

13.2 Java Web Start 145

13.3 Fazer Laboratório 13 146 13.4 Exercícios 146 159 159 159 160 160

(7)

Linguagem de Programação Java

Seja um Profissional Aprendendo com Profissionais

www.3way.com.br 12

//atribuindo valor a variável referência Carro carro1 = new Carro();

carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização //criando novo alias

Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância

Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.

2.3.1 Invocação de Métodos

Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela

chamada de um método em um objeto usando o operador binário "." (ponto),

devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). O método invocado no recebedor pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.

Os valores das variáveis em um objeto constituem

o seu estado. Dois objetos distintos têm

o mesmo estado se suas variáveis membro têm os

mesmos valores.

7

Todos os direitos reservados a 3Way Networks

Linguagem de Programação Java

Seja um Profissional Aprendendo com Profissionais

www.3way.com.br 6

1

Introdução à

Linguagem Java

1.1 O que é a Tecnologia Java?

Talvez não seja a primeira vez que você ouve falar em Java, Java 5, Java 6, JRE, Máquina Virtual, J2SE,

J2EE, JSP, EJB e etc. Bom, a resposta é muito longa e pouco proveitosa neste momento. Você não vai encontrar

neste material todas as explicações para tantas siglas e nomes que estão relacionados com a tecnologia Java. De forma bastante simplificada podemos dizer que a tecnologia Java

é composta por uma gama de produtos pensados para utilizar o melhor das redes de computadores e capaz de serem executados (rodar) em diferentes máquinas, sistemas operacionais e dispositivos. Por diferentes dispositivos entendemos: PCs, servidores, notebooks, handhelds, PDAs (Palm), celulares,

TV, geladeiras e tudo que for possível instalar e executar uma JVM.

Os programas feitos em Java rodam em diferentes ambientes graças a um componente da plataforma chamado JVM (Java Virtual Machine) – que é um tipo de tradutor de código Java para instruções específicas de cada sistema operacional e/ou dispositivo.

A tecnologia Java foi lançada em 1995 e desde então tem crescido em popularidade e se tornado uma plataforma muito estável e madura.

A Plataforma Java pode ser subdividida nos seguintes grupos: - JSE (Java Standard Edition)

- JEE (Java Enterprise Edition) - JME (Java Micro Edition) - Java Card

1.1.1 JSE -

Java

Standard Edition

A JSE é uma rica plataforma que oferece um completo ambiente para o desenvolvimento de aplicações para clientes e servidores. A JSE é também a base da tecnologia JEE e está dividida em dois grupos conceituais:

Core Java e Desktop Java.

Empresas como Sun, IBM, BEA, entre outras, distribuem a JSE na forma de um SDK (Software

Development Kit), em conjunto com uma JRE (Java Runtime Environment).

O pacote do SDK da JSE vem com ferramentas para: compilação, debugging, geração de documentação

(javadoc), empacotador de componentes (jar) e a JRE, que contém a JVM e outros componentes necessários para

rodar aplicações Java.

O JDK (SDK Java) é usado para compilar e depurar programas, sendo utilizados pelos desenvolvedores de sistemas.

A JRE é o ambiente de execução, sendo utilizado por qualquer um que deseje executar um programa que tenha sido compilado como byte code Java.

1.1.2 JEE - Java Enterprise Edition

A tecnologia JEE não é um produto, mas sim uma especificação definida por grandes empresas, através do

JCP (Java Community Process). Simplifica o desenvolvimento de aplicações empresariais e multi-camadas. É

baseado nos componentes padronizados, modulares e reusáveis, como os EJB (Enterprise JavaBeans). Oferece um conjunto completo de serviços para estes componentes. Define muitos comportamentos da aplicação. Você não precisa reaprender a programar pois você vai utilizar os mesmo recursos do Java SE . Necessita de servidores de aplicações JEE. A tecnologia JEE não está no escopo deste curso.

1.1.3 JME - Java Micro Edition

A tecnologia JME é voltada para aplicações que rodam em pequenos dispositivos como celulares, PDAs,

smart cards e etc. Ela possui uma API bastante completa para o desenvolvimento de aplicações de dispositivos

móveis. A tecnologia J2ME não está no escopo deste curso.

Os programas feitos em Java rodam em diferentes ambientes graças a JVM (Java

(8)

//atribuindo valor a variável referência Carro carro1 = new Carro();

carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização //criando novo alias

Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância

Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.

2.3.1 Invocação de Métodos

Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela

chamada de um método em um objeto usando o operador binário "." (ponto),

devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). O método invocado no recebedor pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.

Os valores das variáveis em um objeto constituem

o seu estado. Dois objetos distintos têm

o mesmo estado se suas variáveis membro têm os

mesmos valores.

1.1.4 Java Card

Java Card é uma tecnologia que permite pequenos aplicativos (applets)

baseados em plataforma Java sejam executados com segurança em smart cards e dispositivos similares com limitações de processamento e armazenamento, como o Java Ring. É muito utilizado em cartões SIM (usados em celulares GSM) e em caixas eletrônicos.

Os produtos Java Card são baseados nas especificações da plataforma Java Card desenvolvida pela Sun Microsystems, e suas principais características são portabilidade e segurança.

1.2 Quanto tempo é necessário para aprender Java?

Podemos dizer que muito tempo, basicamente o que será apresentado neste material. Como já dissemos e você vai perceber, Java é muito mais que uma linguagem de programação, é um conjunto de ferramentas e bibliotecas de apoio ao desenvolvimento de sistemas em diversas áreas de tecnologia de software. Porém, mais importante que aprender a linguagem é aprender a programar no paradigma de orientação a objetos.

O texto abaixo é uma tradução do artigo de autoria de Peter Norvig (http://norvig.com/21-days.html, para ver original ou busque na internet "Aprenda a programar em dez anos"), os conselhos apresentados servem para todos os que desejam ou necessitam aprender programar.

Abaixo está a receita de Peter Norvig para sucesso na programação:

 Aprenda inglês. Leia o texto original. Essa tradução só está aqui para exercitar o meu inglês, não o seu. (Nota do tradutor)

 Se interesse por programação e programe porque você acha legal. Tenha certeza que isso continue a ser legal para você dedicar dez anos nisso.

 Converse com outros programadores; leia outros programas. Isso é mais importante do que qualquer livro ou curso de treinamento.

 Programe. O melhor tipo de aprendizado é aprender fazendo. Colocando de uma forma mais técnica, "o nível máximo de performance individual em um domínio não é alcançado automaticamente em função de uma experiência estendida, mas sim aumentado, mesmo por indivíduos extremamente experientes, por um esforço deliberativo de melhorar." (p. 366) e "o aprendizado mais efetivo requer uma tarefa bem definida com uma dificuldade apropriada para o indivíduo em particular, dado que exista um retorno sobre a experiência e oportunidades de repetição e correções de erros." (p. 20-21) do livro Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life, que é uma referência interessante deste ponto de vista.

 Se você quiser, gaste quatro anos em uma universidade (ou mais em uma pós-graduação). Isso lhe dará acesso a alguns empregos que requerem alguma formação e um grande entendimento do campo de trabalho, mas se você não gosta muito de ir para escola, você pode (com alguma dedicação) conseguir alguma experiência similar sobre esse tipo de trabalho. Em qualquer caso, apenas ler livros não será suficiente. "Educação em ciências da computação não faz de ninguém um gênio em programação

tanto quanto estudar pincéis e pigmentos não fazem um bom pintor." diz Eric Raymond, autor de The New Hacker’s Dictionary. Um dos melhores programadores que eu já contratei tinha apenas o

segundo grau, e ele produziu vários softwares incríveis, tem seu próprio grupo de discussão, e fez dinheiro suficiente em ações para comprar seu próprio clube noturno.

 Trabalhe em projetos com outros programadores. Seja o melhor programador em alguns projetos, seja o pior em outros. Quando você é o melhor você testa suas habilidades para liderar um projeto e para inspirar os outros com a sua visão. Quando você for o pior aprenderá o que os mestres ensinam e o que eles não gostam de fazer (porque eles fazem você fazer por eles).

Não se preocupe com o quanto tempo, mas com o

que devo aprender para programar em Java. Mais importante que aprender a linguagem

Java é aprender a programar no paradigma

(9)

Linguagem de Programação Java

Seja um Profissional Aprendendo com Profissionais

www.3way.com.br 12

//atribuindo valor a variável referência Carro carro1 = new Carro();

carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização //criando novo alias

Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância

Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.

2.3.1 Invocação de Métodos

Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela

chamada de um método em um objeto usando o operador binário "." (ponto),

devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). O método invocado no recebedor pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.

Os valores das variáveis em um objeto constituem

o seu estado. Dois objetos distintos têm

o mesmo estado se suas variáveis membro têm os

mesmos valores.

9

Todos os direitos reservados a 3Way Networks

(10)

//atribuindo valor a variável referência Carro carro1 = new Carro();

carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização //criando novo alias

Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância

Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.

2.3.1 Invocação de Métodos

Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela

chamada de um método em um objeto usando o operador binário "." (ponto),

devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). O método invocado no recebedor pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.

Os valores das variáveis em um objeto constituem

o seu estado. Dois objetos distintos têm

o mesmo estado se suas variáveis membro têm os

mesmos valores. por outro. Veja o que é preciso para entender e consertar quando o programador original não está por perto. Pense em como desenvolver seus programas para que seja fácil mantê-los, se não for você.  Aprenda pelo menos meia dúzia de linguagens de programação. Inclua na lista uma linguagem

orientada a objetos (como Java ou C++), uma que seja de abstração funcional (como Lisp ou ML),

uma que suporte abstração sintática (como Lisp), uma que suporte especificação declarativa (como

Prolog ou C++ com templates), uma que suporte co-rotinas (como Icon ou Scheme), e uma que

suporte paralelismo (como Sisal).

 Lembre-se que há um "computador" em "ciência da computação". Saiba quanto tempo leva para o seu computador computar uma instrução, carregar uma palavra até a memória (com e sem cache), ler palavras consecutivas do disco rígido, procurar por uma nova posição no disco.

 Se envolva no esforço de padronização de uma linguagem. Pode ser o comité ANSI C++, ou na padronização de programação na sua empresa, se utilizaram edentação com 2 ou 4 espaços. Em qualquer caso, você aprende o que outras pessoas gostam em uma linguagem, o quanto elas gostam e talvez um pouco do porque elas gostam.

 Tenha o bom senso de cair fora desse processo de padronização tão rápido quanto possível.

1.3 O curso

Este curso é abordado de forma bastante prática, ou seja, construindo programas com a linguagem de programação o máximo possível durante o treinamento.

Você tem um material com a teoria necessária e um conjunto de atividades práticas, denominadas laboratórios. Todo o conteúdo corresponde ao que já definimos como JSE.

O material não é e não deve ser adotado como sua única referência para estudos da linguagem, a aquisição de livros ou leitura do tutorial oficial da Sun é recomendado.

Seu material está ordenado numa seqüência didática que consideramos a mais adequada para o seu aprendizado. A cada exemplo ou exercício apresentado em um capítulo tentamos não utilizar recursos da linguagem que ainda não tenham sido apresentados no capítulo corrente ou anterior. No entanto, sempre que possível nós introduzimos vários destes recursos em exemplos de códigos com o objetivo de apresentá-lo deliberadamente para você ou simplesmente para simplificar o código exemplo. Assim vamos apresentado algumas bibliotecas da linguagem, sem entrar em detalhes, para que você vá se familiarizando com uso das mesmas.

1.3.1 Convenções de Código

Os códigos e exemplos apresentados neste material seguem as convenções de código-fonte Java, sempre que possível, mas podem sofrer adaptações para melhorar a impressão.

Você deve se familiarizar com essa convenção veja em

http://www.oracle.com/technetwork/java/codeconv-138413.html 1.3.2 Sobre os exercícios

No curso Java e Orientação a Objetos, é recomendado estudar em casa aquilo que foi visto durante a aula, fazendo os exercícios que não foram feitos ou refazendo os que já foram feitos em sala.

Os laboratórios deverão ser resolvidos durante o treinamento com objetivo de exercitar a linguagem de programação e não a sua capacidade de programar. Contudo eles apresentam uma pequena aplicação que será completada ao final de todos os laboratórios.

Durante a execução de um laboratório o mesmo pode necessitar de listagem de códigos que já foram construídos nos laboratórios anteriores, portanto não deixe de fazer o exercício do laboratório, especialmente as tarefas que forem indicadas para você fazer. Os laboratórios possuem uma duração estimada e o instrutor deverá segui-la a fim de concluir os laboratórios com sucesso. Não atrase o andamento do curso, se sentir dificuldade chame o instrutor.

1.4 Fazer Laboratório 0

Siga instruções do Laboratório 0 e tome cuidado com o tempo de execução, sempre recorra ao instrutor em caso de dúvida, nunca deixe uma dúvida sem reposta.

(11)

Linguagem de Programação Java

Seja um Profissional Aprendendo com Profissionais

www.3way.com.br 12

//atribuindo valor a variável referência Carro carro1 = new Carro();

carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização //criando novo alias

Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância

Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.

2.3.1 Invocação de Métodos

Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela

chamada de um método em um objeto usando o operador binário "." (ponto),

devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). O método invocado no recebedor pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.

Os valores das variáveis em um objeto constituem

o seu estado. Dois objetos distintos têm

o mesmo estado se suas variáveis membro têm os

mesmos valores.

11

Todos os direitos reservados a 3Way Networks

Linguagem de Programação Java

Seja um Profissional Aprendendo com Profissionais

www.3way.com.br 9

2

Bases da Programação em Java

Antes de começarmos nossa jornada no mundo da programação em Java, é importante compreendermos a terminologia básica e os conceitos em programação orientada a objetos. Neste capítulo veremos os princípios básicos da programação em Java sem aprofundamento dos temas, que serão revistos com maior profundidade nos capítulos subseqüentes.

2.1 Classes

Abstrações são o fundamento utilizado por nós, seres humanos, a fim de

lidar com a complexidade. Uma abstração demonstra o comportamento e propriedades essenciais de um objeto, que o diferencia de outro objeto qualquer. Por exemplo, ao utilizar um carro, você não pensa nele como um conjunto de dezenas de milhares de peças individuais. Pensamos em um carro como um único objeto sobre qual podemos realizar um determinado conjunto de operações. Essa abstração permite que as pessoas utilizem um carro sem nenhum conhecimento sobre mecânica de automóveis. Podemos ignorar os detalhes do motor como: sistema de injeção de combustíveis, transmissão, sistema de freios funcionam

individualmente ou em conjunto. Ao invés disso, utilizamos o objeto automóvel como um elemento único.

A essência da Programação Orientada a Objetos (POO) consiste modelar as abstrações usando Classes e Objetos. A parte difícil deste trabalho é encontrar a abstração mais correta. Uma Classe modela uma abstração pela definição das propriedades e comportamentos dos objetos representados pela abstração. Uma Classe, então, especifica a categoria dos Objetos e funciona como uma "planta

baixa" na criação desses objetos. Um Objeto é qualquer coisa criada a partir dessa Classe, algo contendo as propriedades e comportamentos definidos na Classe.

Voltando ao exemplo do carro, um grupo de engenheiros mecânicos criam o projeto de um carro (a Classe) e a partir deste projeto são reproduzidos milhares de automóveis (os Objetos), praticamente idênticos entre si.

Propriedades de um Objeto da Classe são chamados de atributos e são definidos usando variáveis em Java, também denominado Campos da Classe. O comportamento de um Objeto, também conhecido por operações, são definidos usando-se métodos em Java. Variáveis e métodos utilizados na definição da classe são, juntos, denominados de Membros da Classe.

Usando notação de Classe da UML (Unified Modeling Language), podemos descrever graficamente o exemplo de uma classe Carro, ver Figura 2.1. Ambos atributos (variáveis) e métodos são mostrados na forma expandida na

Figura 2.1.

Figura 2.1 Notação UML para Classe

A essência da Programação Orientada a

Objetos (POO) consiste em modelar as abstrações usando Classes e Objetos.

Um Objeto é qualquer coisa criada a partir dessa

Classe, algo contendo as propriedades e comportamentos definidos na Classe.

(12)

//atribuindo valor a variável referência Carro carro1 = new Carro();

carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização //criando novo alias

Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância

Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.

2.3.1 Invocação de Métodos

Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela

chamada de um método em um objeto usando o operador binário "." (ponto),

devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). O método invocado no recebedor pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.

Os valores das variáveis em um objeto constituem

o seu estado. Dois objetos distintos têm

o mesmo estado se suas variáveis membro têm os

mesmos valores.

2.1.1 Declarando Membros: Variáveis e Métodos

Na Listagem 2.1 mostra a implementação em Java da definição da classe mostrada na Figura 2.1. O exemplo, apesar de não se preocupar com a utilidade desta implementação, mostra as principais características da definição de uma classe em Java.

public class Carro { // nome da classe // Variaveis

private String cor; private String ano; private String modelo; private String nome; // Constructor

public Carro() {

modelo = "2000"; }

// Métodos

public String acelerar() { return "acelerando !"; }

public String frear() { return "freando !"; }

public String abrirPorta() { return "abre porta !"; }

}

Listagem 2.1 – Elementos Básicos da Definição de uma Classe

A classe possui quatro variáveis, toda variável em Java deve ter um tipo, neste caso todas são do tipoString

(linhas 4 a 7), possui três métodos (linhas 13 a 15) representado as operações disponíveis aos objetos da classe e um método especial (linha 10) com o mesmo nome da classe, este método é denominado construtor e seu propósito é inicializar o objeto quando este é criado a partir da classe.

String é uma classe em Java, ela armazena um conjunto de caracteres.

Como estamos aprendendo o que é uma classe, detalharemos a classe String posteriormente.

2.2 Objetos

Um objeto é uma instância de uma classe. Ele é construído usando-se a classe, da mesma maneira que usamos uma "planta baixa" para construir uma casa, é uma entidade real da abstração que a classe representa; usando o exemplo do carro, uma instância representa um veículo criado a partir do projeto dos engenheiros mecânicos. Um objeto deve ser explicitamente criado a partir de uma classe antes que possa ser utilizado em um

programa.

2.2.1 Instância de Classes

Em Java, objetos são manipulados através de referências de objetos (ou simplesmente referência). O processo de criação de um objeto normalmente envolve os seguintes passos:

Declaração de uma variável de referência: isto corresponde a declarar

uma variável de uma classe apropriada para armazenar a referência ao objeto criado.

Um Objeto é instância de uma Classe.

O propósito da chamada ao construtor é inicializar

o objeto que está sendo criado.

(13)

Linguagem de Programação Java

Seja um Profissional Aprendendo com Profissionais

www.3way.com.br 12

//atribuindo valor a variável referência Carro carro1 = new Carro();

carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização //criando novo alias

Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância

Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.

2.3.1 Invocação de Métodos

Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela

chamada de um método em um objeto usando o operador binário "." (ponto),

devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). O método invocado no recebedor pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.

Os valores das variáveis em um objeto constituem

o seu estado. Dois objetos distintos têm

o mesmo estado se suas variáveis membro têm os

mesmos valores.

13

Todos os direitos reservados a 3Way Networks

(14)

//atribuindo valor a variável referência Carro carro1 = new Carro();

carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização //criando novo alias

Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância

Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.

2.3.1 Invocação de Métodos

Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela

chamada de um método em um objeto usando o operador binário "." (ponto),

devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). O método invocado no recebedor pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.

Os valores das variáveis em um objeto constituem

o seu estado. Dois objetos distintos têm

o mesmo estado se suas variáveis membro têm os

mesmos valores.

//declaracao de duas variaveis referência que denota dois

//objetos distintos, nomeando dois objetos carro respectivamente Carro carro1, carro2;

Criação do Objeto: para criar o objeto fazemos uso do operador new, juntamente com a chamada do construtor da classe, assim criamos uma instância da classe.

//criacao de dois Objetos distintos carro1 = new Carro();

carro2 = new Carro();

O operador new retorna a referência da nova instância de uma classe Carro. Esta referência pode ser atribuída a uma variável de referência da classe apropriada. Cada objeto tem uma identidade única e sua própria cópia das variáveis (atributos) declarados na definição da classe, ou seja, os dois objetos carro, referenciados por

carro1 e carro2 têm sua própria cópia das variáveis: cor, ano, modelo, nome.

A declaração e instanciação também podem ser combinadas: Carro carro1 = new Carro(),

carro2 = new Carro();

Figura 2.2 – Instâncias da Classe em UML

A Figura 2.2 mostra a notação UML para classe e objetos. A representação gráfica de um objeto é muito parecida com a de um classe.

2.2.2 Referência de Objetos

Com já foi observado, uma referência nos permite manipular objetos que foram criados e armazenados na memória do computador. Em Java, objetos só podem ser utilizados a partir de uma referência que está armazenada em uma variável. Um objeto pode ter várias referências, também chamadas de aliases. O objeto pode ser manipulado por qualquer um desses aliases.

//declaracao Carro carro1;

(15)

Linguagem de Programação Java

Seja um Profissional Aprendendo com Profissionais

www.3way.com.br 12

//atribuindo valor a variável referência Carro carro1 = new Carro();

carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização //criando novo alias

Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância

Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.

2.3.1 Invocação de Métodos

Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela

chamada de um método em um objeto usando o operador binário "." (ponto),

devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). O método invocado no recebedor pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.

Os valores das variáveis em um objeto constituem

o seu estado. Dois objetos distintos têm

o mesmo estado se suas variáveis membro têm os

mesmos valores.

15

Todos os direitos reservados a 3Way Networks

Linguagem de Programação Java

Seja um Profissional Aprendendo com Profissionais

www.3way.com.br 12

//atribuindo valor a variável referência Carro carro1 = new Carro();

carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização //criando novo alias

Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância

Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.

2.3.1 Invocação de Métodos

Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela

chamada de um método em um objeto usando o operador binário "." (ponto),

devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). O método invocado no recebedor pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.

Os valores das variáveis em um objeto constituem

o seu estado. Dois objetos distintos têm

o mesmo estado se suas variáveis membro têm os

(16)

//atribuindo valor a variável referência Carro carro1 = new Carro();

carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização //criando novo alias

Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância

Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.

2.3.1 Invocação de Métodos

Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela

chamada de um método em um objeto usando o operador binário "." (ponto),

devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). O método invocado no recebedor pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.

Os valores das variáveis em um objeto constituem

o seu estado. Dois objetos distintos têm

o mesmo estado se suas variáveis membro têm os

mesmos valores.

//declaracao

Carro carro = new Carro(); //invocando método

String retorno=carro.acelerar();

//A sentença a baixo causa erro compilação, //método não está definido no obejeto invocador carro.print();

2.3.1.1 Chamando Métodos de Objeto

Para ilustrar como chamar os métodos, utilizaremos como exemplo a classe String. Pode-se usar a documentação da API Java para conhecer todos os atributos e métodos disponíveis na classe String. Posteriormente, iremos criar nossos próprios métodos.

Para chamar um método a partir de um objeto, escrevemos o seguinte: nomeDoObjeto.nomeDoMétodo([argumentos]);

Vamos pegar dois métodos encontrados na classe String como exemplo:

Declaração do método Definição

public char charAt(int index)

Retorna o caractere especificado no índice. Um índice vai de 0 até length() - 1. O primeiro caractere da seqüência está no índice 0, o seguinte, no índice 1, e assim sucessivamente por todo o array.

public boolean equalsIgnoreCase (String outraString)

Compara o conteúdo de duas Strings, ignorando maiúsculas e minúsculas. Duas strings são consideradas iguais quando elas têm o mesmo tamanho e os caracteres das duas strings são iguais, sem considerar caixa alta ou baixa.

Tabela 4: Exemplos de Métodos da classe String

Usando os métodos:

String str1 = "Hello"; char x = str1.charAt(0);

// retornará o caracter H e o armazenará no atributo x String str2 = "hello";

// aqui será retornado o valor booleano true boolean result = str1.equalsIgnoreCase(str2);

2.3.2 Envio de Argumentos para Métodos

Em exemplos anteriores, enviamos atributos para os métodos. Entretanto, não fizemos nenhuma distinção entre os diferentes tipos de atributos que podem ser enviados como argumento para os métodos.

2.3.2.1 Passagem de Parâmetros por valor

Quando ocorre uma passagem por valor, a chamada do método faz uma cópia do valor do atributo e o envia como argumento. O método chamado não modifica o valor original do argumento mesmo que estes valores sejam modificados durante operações de cálculo implementadas pelo método.

Há duas formas para se enviar argumentos para um método, o primeiro é

envio por valor e o segundo é envio por

referência.

Em Java a chamada de um método é feito

usando o operador binário "." (ponto).

(17)

Linguagem de Programação Java

Seja um Profissional Aprendendo com Profissionais

www.3way.com.br 12

//atribuindo valor a variável referência Carro carro1 = new Carro();

carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização //criando novo alias

Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância

Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.

2.3.1 Invocação de Métodos

Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela

chamada de um método em um objeto usando o operador binário "." (ponto),

devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). O método invocado no recebedor pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.

Os valores das variáveis em um objeto constituem

o seu estado. Dois objetos distintos têm

o mesmo estado se suas variáveis membro têm os

mesmos valores.

17

Todos os direitos reservados a 3Way Networks

(18)

//atribuindo valor a variável referência Carro carro1 = new Carro();

carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização //criando novo alias

Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância

Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.

2.3.1 Invocação de Métodos

Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela

chamada de um método em um objeto usando o operador binário "." (ponto),

devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). O método invocado no recebedor pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.

Os valores das variáveis em um objeto constituem

o seu estado. Dois objetos distintos têm

o mesmo estado se suas variáveis membro têm os

mesmos valores.

public class PassagemPorValor {

public static void main(String[] args) { int i = 10;

// exibe o valor de i System.out.println(i); // chama o método teste

// envia i para o método teste

teste(i);---+ // exibe o valor de i não modificado | +--->System.out.println(i); |

| } |

| public static void teste(int j) { <---+

| // muda o valor do argumento

+---j = 33; }

}

Listagem 2.2 – Passagem por valor

No exemplo dado, o método teste() foi chamado e o valor de i foi enviado como argumento. O valor de i é copiado para o atributo j do método. Já que j é o atributo modificado no método teste(), não afetará o valor do atributo i, o que significa uma cópia diferente do atributo.

Como padrão, todo tipo primitivo, quando enviado para um método, utiliza a forma de envio por valor. 2.3.2.2 Passagem de Parâmetros por referência

Quando ocorre um envio por referência, a referência de um objeto é enviada para o método chamado. Isto significa que o método faz uma cópia da referência do objeto enviado. Entretanto, diferentemente do que ocorre no envio por valor, o método pode modificar o objeto para o qual a referência está apontando. Mesmo que diferentes referências sejam usadas nos métodos, a localização do dado para o qual ela aponta é a mesma. Veja próximo exemplo, Listagem 2.3:

public class PassagemPorReferencia {

public static void main(String[] args) { // criar um array de inteiros int[] idades = { 10, 11, 12 }; // exibir os valores do array

for (int i = 0; i < idades.length; i++) { System.out.println(idades[i]); }

// chamar o método teste e enviar a // referência para o array

+---teste(idades);

| // exibir os valores do array

| for (int i = 0; i < idades.length; i++) {

| System.out.println(idades[i]);<---+

| } |

| } |

+---->public static void teste(int[] arr) { |

// mudar os valores do array |

for (int i = 0; i < arr.length; i++) { | arr[i] = i + 50;---+ }

} }

(19)

Linguagem de Programação Java

Seja um Profissional Aprendendo com Profissionais

www.3way.com.br 12

//atribuindo valor a variável referência Carro carro1 = new Carro();

carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização //criando novo alias

Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância

Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.

2.3.1 Invocação de Métodos

Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela

chamada de um método em um objeto usando o operador binário "." (ponto),

devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). O método invocado no recebedor pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.

Os valores das variáveis em um objeto constituem

o seu estado. Dois objetos distintos têm

o mesmo estado se suas variáveis membro têm os

mesmos valores.

19

Todos os direitos reservados a 3Way Networks

Linguagem de Programação Java

Seja um Profissional Aprendendo com Profissionais

www.3way.com.br 15

A Figura 2.3 ilustra o resultado da execução do código na Listagem 2.3:

Figura 2.6 - Exemplo de Envio por referência

2.4 Membros Estáticos

Há casos em que você precisará que alguns atributos sejam compartilhados por todos os objetos de uma classe em particular, ou seja, esses atributos devem pertencer somente à Classe e não aos objetos criados a partir dessa classe. Por exemplo, imagine que você queira manter um controle de quantos objetos de uma classe foram criados e permitir que cada objetos consiga recuperar esta informação. Definir um contador como uma variável de instância na definição da classe não resolveria o problema, pois já sabemos que são criadas cópias desta variável para cada objeto criado a partir da definição de uma classe. Então como resolver o problema? A solução é usar

variáveis estáticas - usar a palavra chave static antes da declaração da variável. Uma variável estática é inicializada

quando a classe é carregada em tempo de execução. De forma similar, os métodos também podem ser estáticos.

Figura 2.7 – Diagrama Classe mostrando definição de membros estáticos

A Figura 2.7 mostra a redefinição da classe Carro que foi acrescentado dois membros estáticos, ou membros da classe, marcado sublinhado abaixo do nome, conforme notação definida na UML. Em sua implementação usamos a palavra reservada static como mostrado na Listagem 2.4 abaixo:

(20)

//atribuindo valor a variável referência Carro carro1 = new Carro();

carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização //criando novo alias

Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância

Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.

2.3.1 Invocação de Métodos

Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela

chamada de um método em um objeto usando o operador binário "." (ponto),

devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). O método invocado no recebedor pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.

Os valores das variáveis em um objeto constituem

o seu estado. Dois objetos distintos têm

o mesmo estado se suas variáveis membro têm os

mesmos valores.

public class Carro {

// Variáveis de Instância String modelo;

String cor; String ano;

// declaração variável estática static int contador; // 1

// construtor modificado para incrementar o contador // para cada objeto criado

public Carro() { // 2

contador = contador + 1; }

// Métodos de Instância public String acelerar() {

return "acelerando !"; }

public String frear() { return "freando !"; }

public String abrirPorta() { return "abre porta !"; }

// Método Estático //3

static int getContadorInstancia() { return contador;

} }

Listagem 2.4 – Exemplo de membros de classe

A variável estática contador é declarada em (1, linha 7), ela será alocada e inicializada por padrão com o valor 0 (zero) quando a classe for carregada. Toda vez que um objeto Carro for criado o construtor da classe em (2, linha 10) será executado. O construtor incrementa explicitamente o contador da classe. O método

getContadorInstancia() em (3, linha 18) é estático e é um método da classe, ele retorna o valor do contador quando

for invocado.

O código seguinte invoca o método getContadorInstancia() da classe Carro:

//Nome da classe invoca método estatico int retorno = Carro.getContadorInstancia();

Membros estáticos também podem ser acessados via referência para objetos da classe:

//Referencia de objeto invoca método estatico Carro carro1 = new Carro();

int retorno = carro1.getContadorInstancia();

Note que membros de classe podem ser acessados tanto pelo nome da classe quanto pela referência de objetos da classe, porém membros de instância só são acessíveis via referência de objetos da classe.

2.5 Herança - Relacionamentos do tipo "é-um"

Você dispõem de dois mecanismos fundamentais afim de se construir novas classes a partir de classes existentes: herança e agregação. Faz todo sentido construir nossa classe Carro herdando todas as características de uma classe Veículo que já exista, uma vez que um Carro é um Veículo. Mas um Veículo é constituído de diversas

Temos acesso aos membros estáticos de

uma classe usando diretamente o nome da

classe seguido do operador ponto (.), não

precisamos de uma instância.

Referências

Documentos relacionados

Os trabalhos inscritos no Colóquio de Pesquisa e Pós-Graduação poderão ser apresentados na forma de Resumo Expandido ou na forma de Relatório Técnico de

Este relatório reproduz os resultados do Encontro II da Câmara Técnica de Energias Renováveis (CTER), realizado no dia 06 de maio de 2015 nas dependências da

As águas das praias de Palmas apresentaram valores baixos de coliformes totais e termotolerantes para o biênio considerado, indicando que estão próprias e excelentes para a

“Por  sua  vez,  impressoras  a  laser  são  equipamentos  cujo  processo  de  funcionamento  é  semelhante  ao  utilizado  na  reprodução  eletrostática. 

DE PRODUTOS HOSPITALARES S.A... DE

ABSTRACT: The toxicological effects of crude ethanolic extracts (CEE) of the seed and bark of Persea americana have been analyzed on larvae and pupae of

A espectrofotometria é uma técnica quantitativa e qualitativa, a qual se A espectrofotometria é uma técnica quantitativa e qualitativa, a qual se baseia no fato de que uma

Entrando para a segunda me- tade do encontro com outra di- nâmica, a equipa de Eugénio Bartolomeu mostrou-se mais consistente nas saídas para o contra-ataque, fazendo alguns golos