scja

385
GUIA DE ESTUDOS PARA SUN CERTIFIED JAVA ASSOCIATE (SCJA) Prof. Rafael Guimarães Sakurai 12/2009 1

Upload: rafael-sakurai

Post on 06-Jun-2015

20.098 views

Category:

Technology


5 download

DESCRIPTION

Curso preparatório para a certificação SCJA.

TRANSCRIPT

Page 1: SCJA

1

GUIA DE ESTUDOS PARASUN CERTIFIED JAVA ASSOCIATE (SCJA)

Prof. Rafael Guimarães Sakurai

12/2009

Page 2: SCJA

2

Guia de Estudos para SCJA

QUEM SOU? Rafael Guimarães Sakurai

([email protected])Possui graduação em Ciência da Computação pela

Universidade Metodista de São Paulo (2005), especialista em Engenharia de Componentes com Java Enterprise e Webservices pela Faculdade de Informática e Administração Paulista (2007).

Atualmente é analista desenvolvedor de software da Virginia Surety e docente na Universidade Metodista de São Paulo. Tem experiência na área de Ciência da Computação, com ênfase em Linguagens de Programação.

Possui as seguintes certificações: SCJA 1.0, SCJP 5.0, SCWCD 1.4 e SCSNI.

Page 3: SCJA

3

Guia de Estudos para SCJA

AGENDA 1º Dia – Apresentação do curso

Conceitos basicos de Orientação a Objetos. 2º Dia – UML e implementação Java 3º Dia – Implementação Java (continuação) 4º Dia – Implementação de algoritmos

Principios básicos de desenvolvimento Java 5º Dia – Plataforma Java e tecnologias de integração

Tecnologia cliente 6º Dia – Tecnologia servidor e simulado

Page 4: SCJA

4

Guia de Estudos para SCJA

DETALHES Número de Questões: 51 Score: 68% (35 de 51 questões) Tempo: 115 minutos

Page 5: SCJA

5

Guia de Estudos para SCJA

SUN ACADEMIC INITIATIVE Site (https://sailearningconnection.skillport.com) Vantagens:

Cursos Materiais Simulados Desconto no voucher

Page 6: SCJA

6

Guia de Estudos para SCJA

OBJETIVOS DO EXAME 1- Conceitos básicos Orientados a Objetos (OO) 2- Representação UML de conceitos OO 3- Implementação Java de conceitos OO 4- Projeto e implementação de algoritmos 5- Princípios básicos do desenvolvimento em Java 6- Plataforma Java e tecnologias de integração 7- Tecnologias de cliente 8- Tecnologias de servidor

Page 7: SCJA

7

1- CONCEITOS BÁSICOS ORIENTADOS A

OBJETOS

Page 8: SCJA

8

1.1- DESCREVER, COMPARAR E CONTRASTAR PRIMITIVAS (NÚMERO INTEIRO, PONTO FLUTUANTE, BOOLEANO E CARACTERE), TIPOS DE ENUMERAÇÃO E OBJETOS.

Page 9: SCJA

Guia de Estudos para SCJA

TIPOS PRIMITIVOS

Os tipos primitivos são representações de dados/valores básicos. Todos são representados por letras minúsculas e estão divididos nos seguintes tipos:

Número Inteiro Número com Ponto Flutuante Caractere Booleano

9

Page 10: SCJA

Guia de Estudos para SCJA

TIPOS INTEIROS

Representam números inteiros em forma decimal, hexadecimal ou octal.

10

Recomendado quando o número é muito grande, capaz de armazenar 64 bits

Tipo inteiro mais utilizado, capaz de armazenar 32 bits

Valor numérico capaz de armazenar 16 bits

Utilizado para representar números pequenos, no intervalo de -128 e 127, capaz de armazenar 8 bits

Page 11: SCJA

11

Guia de Estudos para SCJA

TIPOS INTEIROS

11

Exemplos:

byte: 0, 1, 2

short: 1, 20, 100

int: 10, 100, 2000000

long: 1000, 21234300000, 56098001258

Page 12: SCJA

Guia de Estudos para SCJA

TIPOS DE PONTO FLUTUANTE

Representam valores reais, ou seja, com parte fracionária.

Exemplos:

float: 1.99, 13.14, 100.45

double: 1500.27, 409673.90, 12935878423.096675

12

Page 13: SCJA

13

Guia de Estudos para SCJA

TIPO CARACTERE

Representa um único caractere incluindo letras, números, caracteres especiais e outros, denominado char.

Exemplos:

char: a, b, c, 4, $, &

13

Page 14: SCJA

Guia de Estudos para SCJA

TIPO BOOLEANO

Representa o valor lógico true (verdadeiro) ou false (falso), denominado boolean.

Exemplos:

boolean: true, false

14

Page 15: SCJA

15

Guia de Estudos para SCJA

ENUMERAÇÃO

Tipo de classe com valores pré-definidos, ou seja, possui valores padrões previamente estabelecidos.

Exemplo:

15

public enum DiaSemana { SEGUNDA-FEIRA, TERÇA-FEIRA, QUARTA-FEIRA, QUINTA-FEIRA, SEXTA-FEIRA, SÁBADO, DOMINGO}

Page 16: SCJA

Guia de Estudos para SCJA

OBJETO

16

Características + Ações = Objeto

Page 17: SCJA

Guia de Estudos para SCJA

OBJETO Um objeto é a representação de um conjunto de

características e funcionalidades para representar algo do mundo real.

Podemos por exemplo representar pessoas como objetos, onde cada pessoa terá suas características próprias como nome, data de nascimento, documento de identidade e outros.

Também podemos representar as ações que uma objeto que é uma pessoa pode ter, como por exemplo andar, pensar, falar e outros.

Na OO as características são chamados de atributos e as ações são chamadas de métodos, onde todos os objetos do mesmo tipo possuem os mesmos métodos, mas cada um pode ter seus atributos com valores diferentes (estado).

17

Page 18: SCJA

Guia de Estudos para SCJA

OBJETO A partir de um modelo ou forma que define os atributos

e métodos dos objetos podemos criar vários objetos cada um com um estado diferente:

18

Modelo Objetos com diferentes estados

Page 19: SCJA

19

1.2 - DESCREVER, COMPARAR E CONTRASTAR CLASSES CONCRETAS, CLASSES ABSTRATAS E INTERFACES, E COMO A HERANÇA É APLICADA A ELAS.

Page 20: SCJA

Guia de Estudos para SCJA

CLASSE Uma Classe define quais as características (atributos) e

ações (métodos) para representar as “coisas” do mundo real, podemos dizer que uma classe é um modelo ou forma que define como devem ser os objetos.

Os atributos de uma classe podem ser de tipos primitivos, enumerações ou outro objeto.

Os métodos de uma classe vão representar as ações que aquela classe pode ter, dependendo do estado dos atributos os métodos podem executar de formas diferentes.

20

Page 21: SCJA

Guia de Estudos para SCJA

CLASSE CONCRETA

Classe concreta é uma classe que pode ser utilizada como base para a geração de objetos.

Exemplo:

public class Aluno { public String nome; public String matricula; public Aluno() { }

public Aluno(String _nome, String _matricula) { nome = _nome; matricula = _matricula; }}

21

Page 22: SCJA

Guia de Estudos para SCJA

CLASSE ABSTRATA

22

As classes abstratas servem como base para a criação de classes concretas mais especializadas.

A partir das classes abstratas não podemos instanciar objetos, pois ela pode ter métodos que não estão implementados.

Exemplo:public abstract class Pessoa { public String nome;

public void dizerNome() { System.out.println("Meu nome é:" + nome); }

public void estudar();}

Page 23: SCJA

Guia de Estudos para SCJA

INTERFACE

23

É utilizada para definir modelos de especificação de métodos. A partir de uma interface podemos ter diversas classes que seguem este modelo, sendo que obrigatoriamente todas os métodos definidos na interface deverão ser implementados pelas classes.

Exemplo:

public interface Transporte { public void entrarPessoa(Pessoa pessoa); public void sairPessoa(Pessoa pessoa); public void transportarPara(String localidade);}

Page 24: SCJA

Guia de Estudos para SCJA

INTERFACE

24

Page 25: SCJA

Guia de Estudos para SCJA

GENERALIZANDO INTERFACE

25

Page 26: SCJA

Guia de Estudos para SCJA

IMPLEMENTANDO MAIS DE UMA INTERFACE

26

Page 27: SCJA

Guia de Estudos para SCJA

HERANÇA Visando a reutilização de código, a herança permite que

classes herdem atributos e métodos de outras classes. É utilizada em objetos que possuem características e

funcionalidades semelhantes.

27

public class Pessoa { private String nome;

public void setNome(String nome) { this.nome = nome;} public String getNome() { return this.nome; }}

public class Programador extends Pessoa { public void dizerProfissao() { return "Meu nome eh " + getNome() + " eu sou Programador." }}

Page 28: SCJA

Guia de Estudos para SCJA

HERANÇA

28

Page 29: SCJA

29

1.3 - DESCREVER, COMPARAR E CONTRASTAR COMPOSIÇÕES E ASSOCIAÇÕES (INCLUINDO MULTIPLICIDADE: UM-PARA-UM, UM-PARA-VÁRIOS E VÁRIOS-PARA-VÁRIOS) DE CLASSES, BEM COMO A NAVEGAÇÃO DE ASSOCIAÇÕES.

Page 30: SCJA

30

Guia de Estudos para SCJA

ASSOCIAÇÃO Associação é quando uma classe pode utilizar uma

outra classe, por exemplo, um cliente possui um endereço.

A associação define que uma classe está relacionada com outra classe, mas elas podem ser utilizadas independente.

30

public class Cliente { public String nome; public Endereco endereco;}

public class Endereco { public String estado; public String cidade; public String bairro; public String logradouro;}

Page 31: SCJA

Guia de Estudos para SCJA

COMPOSIÇÃO Composição é quando uma classe depende de outra

classe para poder existir, por exemplo, um estado possui varias cidades.

Caso apaguem um estado do mapa, as cidades dele não devem continuar existindo.

31

public class Cidade { public String nome;}

public class Estado { public Cidade[] cidades;}

Page 32: SCJA

32

Guia de Estudos para SCJA

MULTIPLICIDADE Um-para-um

Um logradouro pode ter apenas um CEP.

Um-para-vários Exemplo: Um carro tem quatro pneus.

Vários-para-vários Um programador pode trabalhar em vários projetos, e um

projeto pode ter vários programadores.

Page 33: SCJA

33

Guia de Estudos para SCJA

NAVEGAÇÃO Navegação informa qual a direção do relacionamento

entre duas classes.

Neste exemplo através da classe Produto podemos chegar até a classe Modelo.

public class Modelo { public String nome;}

public class Produto { public Modelo modelo; public Modelo getModelo() { return this.modelo; }}

Page 34: SCJA

34

1.4 - DESCREVER A OCULTAÇÃO DE INFORMAÇÕES (USANDO MÉTODOS E ATRIBUTOS PRIVADOS), O ENCAPSULAMENTO E A FUNCIONALIDADE DE EXPOSIÇÃO DE OBJETOS USANDO MÉTODOS PÚBLICOS; E DESCREVER AS CONVENÇÕES DE JAVABEANS PARA OS MÉTODOS SETTER E GETTER.

Page 35: SCJA

35

Guia de Estudos para SCJA

OCULTAÇÃO DE INFORMAÇÕES Quando queremos restringir o acesso a atributos e

métodos dentro de uma classe, podemos definir sua visibilidade como privada utilizando a palavra-chave private, desta forma somente dentro da própria classe podem ser alterados os valores de um atributo ou chamado um método.

Page 36: SCJA

36

Guia de Estudos para SCJA

ENCAPSULAMENTO Quando temos uma classe com seus atributos com

visibilidade publica, esses atributos podem ser alterados a qualquer momento por qualquer outra classe.

nome

matricula

Page 37: SCJA

Guia de Estudos para SCJA

ENCAPSULAMENTO

O Java possui uma convenção para encapsulamento de dados onde definimos a visibilidade private para os atributos de uma classe e adicionamos métodos públicos para obter o valor do atributo e alterar o valor do atributo, que são chamados respectivamente de métodos “get” e “set”.

37

Page 38: SCJA

38

Guia de Estudos para SCJA

ENCAPSULAMENTO Definindo os atributos como privados e criando

métodos públicos para manipulação desses atributos podemos então restringir a manipulação desorganizada.

nome

matricula

Método Privado

Método Privado

MétodoPúblico

MétodoPúblico

Page 39: SCJA

Guia de Estudos para SCJA

EXEMPLO ENCAPSULAMENTO

39

public class Aluno { private String nome; private int matricula;

public void setNome(String _nome) { nome = _nome; } public String getNome() { return nome; }

public void setMatricula(int _matricula) { matricula = _matricula; } public int getMatricula() { return matricula; }}

Page 40: SCJA

Guia de Estudos para SCJA

CONVENÇÕES JAVABEANS As convenções Javabeans são boas práticas de programação

que definem como devem ser criadas as classes, normalmente essas convenções são seguidas pelos desenvolvedores Java. Nomes de classes são escritos com a primeira letra de cada

palavra em maiúsculo. Possuir um construtor padrão (default) Todos os atributos são privados (private) Os atributos são escritos com letras minúsculas, a menos que

ele seja composto por mais de uma palavra, a primeira palavra é toda em minúscula e as demais começam com a primeira letra em maiúsculo e o restante da palavra em minúscula.

Todos os atributos devem ser acessíveis através de métodos “get” e “set”.

Nomes de métodos seguem o mesmo padrão de escrita que atributos. 40

Page 41: SCJA

Guia de Estudos para SCJA

CONVENÇÕES JAVABEANS Exemplo: Precisamos desenvolver uma classe para

representar um produto que pode ter as informações nome, data de validade, preço e ativo.

public class Produto { private String nome; private String marca; private Date dataValidade; private double preco; private boolean ativo;

public void setNome(String nome) { this.nome = nome; } public String getNome() { return this.nome; }

public void setDataValidade(Date dataValidade) { this.dataValidade = dataValidade; }

41

Page 42: SCJA

Guia de Estudos para SCJA

CONVENÇÕES JAVABEANS

public Date getDataValidade() { return this.dataValidade; }

public void setPreco(double preco) { this.preco = preco; } public double getPreco() { return this.preco; }

public void setAtivo(boolean ativo) { this.ativo = ativo; } public boolean getAtivo() { return this.ativo; } // Quando é boolean podemos usar get ou is public boolean isAtivo() { return this.ativo; }}

42

Page 43: SCJA

43

1.5 - DESCREVER O POLIMORFISMO CONFORME APLICADO A CLASSES E INTERFACES, BEM COMO DESCREVER E APLICAR O PRINCÍPIO "PROGRAMA PARA UMA INTERFACE".

Page 44: SCJA

44

Guia de Estudos para SCJA

POLIMORFISMO O termo polimorfismo vem do grego que significa

“muitas formas”. Na Orientação a Objetos o polimorfismo é a forma de

representar um objeto de varias formas. Podemos aplicar o polimorfismo quando temos uma

estrutura de herança de classes (subclasse e superclasse) ou com estrutura de implementação de interface.

Page 45: SCJA

45

Guia de Estudos para SCJA

POLIMORFISMO Neste exemplo

podemos representar o CarroVoador como um Aereo ou como um Terrestre, pois o CarroVoador segue essas interfaces e tem implementado as funcionalidades que estão definidos nelas.

Da mesma forma podemos representar o CarroVoador como um Transporte.

Page 46: SCJA

Guia de Estudos para SCJA

PROGRAME PARA UMA INTERFACE “Programe para uma interface” deve ser entendido

como “Programe para um supertipo” dessa forma podemos: Generalizar o tipo de retorno de método Generalizar o tipo de um atributo Generalizar os parâmetros de método

46

Page 47: SCJA

47

2- REPRESENTAÇÃO UML DE CONCEITOS

ORIENTADOS A OBJETOS

Page 48: SCJA

48

Guia de Estudos para SCJA

UNIFIED MODELING LANGUAGE (UML) Definição:

“É uma família de notações gráficas, apoiada por um metamodelo único, que ajuda na descrição e no projeto de sistemas de software, particularmente daqueles construídos utilizando o estilo orientado a objetos.” Martin Fowler

Page 49: SCJA

49

2.1 - RECONHECER A REPRESENTAÇÃO UML DE CLASSES (INCLUINDO ATRIBUTOS E OPERAÇÕES, CLASSES ABSTRATAS E INTERFACES), A REPRESENTAÇÃO UML DE HERANÇA (IMPLEMENTAÇÃO E INTERFACE) E A REPRESENTAÇÃO UML DE MODIFICADORES DA VISIBILIDADE DOS MEMBROS DA CLASSE (-/PRIVADA E +/PÚBLICA).

Page 50: SCJA

50

Guia de Estudos para SCJA

ESTRUTURA DA CLASSE Uma classe em UML possui três partes:

Nome da Classe Atributos Operações

Podemos abreviar a declaração da classe, caso não influencie o entendimento do diagrama:

Page 51: SCJA

51

Guia de Estudos para SCJA

ATRIBUTOS Um atributo é formado por:

visibilidade nome : tipo [multiplicidade] = valor inicial {propriedades}

Page 52: SCJA

52

Guia de Estudos para SCJA

OPERAÇÕES Uma operação é formada por:

visibilidade nome (parâmetros) : tipo de retorno {propriedades}

O parâmetro de um método é formado por:nome : tipo [multiplicidade] = valor inicial

Page 53: SCJA

53

Guia de Estudos para SCJA

HERANÇA Utilizamos herança quando queremos declarar

subclasses, permitindo reutilizar os códigos já declarados na superclasse.

Page 54: SCJA

54

Guia de Estudos para SCJA

CLASSE ABSTRATA Utilizado para informar que uma classe não

implementa todos os seus métodos.

Page 55: SCJA

55

Guia de Estudos para SCJA

INTERFACE Utilizamos interface para definir as operações básicas

que uma classe de seu tipo precisa implementar.

ou

Page 56: SCJA

56

Guia de Estudos para SCJA

INTERFACE Exemplo:

Page 57: SCJA

57

Guia de Estudos para SCJA

VISIBILIDADE Podemos definir as seguintes visibilidades em atributos

e operações:

- private~ default# protected+ public

Page 58: SCJA

58

Guia de Estudos para SCJA

COMENTÁRIO Os comentários ou notas são utilizados para adicionar

mais informações ao diagrama.

Page 59: SCJA

59

Guia de Estudos para SCJA

PACOTE Utilizamos para organizar as classes:

Page 60: SCJA

60

2.2 - RECONHECER A REPRESENTAÇÃO UML DE ASSOCIAÇÕES DE CLASSES, COMPOSIÇÕES, INDICADORES DE MULTIPLICIDADE DE ASSOCIAÇÃO E INDICADORES DE NAVEGAÇÃO DE ASSOCIAÇÕES.

Page 61: SCJA

61

Guia de Estudos para SCJA

ASSOCIAÇÕES Utilizado para representar o relacionamento entre

classes, as associações podem ser: Associação Agregação Composição Classe de associação

As classes que fazem parte de um relacionamento também são chamadas de TODO (responsável pelo relacionamento) e PARTE (usado pelo relacionamento).

Page 62: SCJA

62

Guia de Estudos para SCJA

ASSOCIAÇÃO Relacionamento simples entre duas classes:

Page 63: SCJA

63

Guia de Estudos para SCJA

AGREGAÇÃO Informa que uma classe faz parte de outra classe, mas

não de forma exclusiva.

Page 64: SCJA

64

Guia de Estudos para SCJA

COMPOSIÇÃO Informa que uma classe faz parte de outra classe de

forma exclusiva.

Page 65: SCJA

65

Guia de Estudos para SCJA

AGREGAÇÃO X COMPOSIÇÃO A diferença entre ambos é:

Agregação – se excluir a classe responsável pelo relacionamento, não deve excluir a classe que ele possui relacionamento.

Composição – se excluir a classe responsável pelo relacionamento, então deve excluir a classe que ele possui relacionamento.

Page 66: SCJA

66

Guia de Estudos para SCJA

ASSOCIAÇÃO Podemos também ter uma associação para mesma

classe:

Page 67: SCJA

67

Guia de Estudos para SCJA

NAVEGABILIDADE Podemos informar qual a direção do relacionamento:

Page 68: SCJA

68

Guia de Estudos para SCJA

MULTIPLICIDADE A multiplicidade é utilizada para definir a quantidade

de objetos devem ser criados:0 .. 1 (zero ou um)1 (um)* (zero ou muitos)

Page 69: SCJA

69

Guia de Estudos para SCJA

DEPENDÊNCIA Utilizado para informar que uma classe depende de

outra classe para executar alguma operação:

Palavras - chave de dependência:<<call>><<create>><<dependency>><<use>>

Page 70: SCJA

70

Guia de Estudos para SCJA

ASSOCIAÇÃO X DEPENDÊNCIA A diferença básica entre ambos:

Associação temos um atributo da classe relacionada.

Dependência utilizamos a classe relacionada, para passar um parâmetro, chamar um método, criar um objeto, etc.

Page 71: SCJA

71

Guia de Estudos para SCJA

DIAGRAMA DE CLASSES

Page 72: SCJA

72

3- IMPLEMENTAÇÃO JAVA DE CONCEITOS

ORIENTADOS A OBJETOS

Page 73: SCJA

73

Guia de Estudos para SCJA

A LINGUAGEM JAVA 1991- A linguagem Oak surgiu através do projeto Green

financiado pela Sun Microsystems. 1995 – Divulgação do Java 1.0 – SunWorld 1998 – Lançamento da versão 1.2 – Java 2

Versão 1.3 e 1.4 - Java 2 2004 – Lançamento da versão 1.5 – Java 5 – Tiger 2006 – Lançamento da versão 1.6 – Java 6 – Mustang JCP (Java Community Process) – Diversas empresas

responsáveis pelo Java.

Page 74: SCJA

74

Guia de Estudos para SCJA

A LINGUAGEM JAVA Os conceitos chaves da linguagem Java são:

Programação Orientada a Objetos Independente de plataforma Seguro Distribuído Multi-thread

O tema principal do Java é “escreva uma vez, rode em qualquer lugar” (write once, run anywhere).

Page 75: SCJA

75

Guia de Estudos para SCJA

JRE X JDK Há dois principais produtos dentro da plataforma Java

SE: - Java Runtime Environment (JRE)

Fornece a Java Virtual Machine, bibliotecas Java e outros componentes para executar aplicações escritas em Java.

- Java Development Kit (JDK) Contém tudo que tem na JRE, mais ferramentas adicionais

para criar Java Archive (JAR) e desenvolver (compilar e depurar) aplicações feitas em Java.

Page 76: SCJA

76

Guia de Estudos para SCJA

JAVA VIRTUAL MACHINE (JVM) A Java Virtual Machine é uma maquina imaginaria que

é implementada através da emulação em software. Existe uma JVM diferente para cada Sistema

Operacional. Uma vez que sua aplicação é criada, a mesma pode

ser executada em diversos Sistemas Operacionais sem precisar recompilar. .java

.class bytecode

JVM JVM JVM

Linux Windows Outros

Page 77: SCJA

77

Guia de Estudos para SCJA

COMPILANDO E EXECUTANDO UM ARQUIVO JAVA Fases da programação Java:

EditorJava

CompilerJava

Interpreter

PrimeiraClasse.java

PrimeiraClasse.class

Page 78: SCJA

78

Guia de Estudos para SCJA

CRIANDO UM ARQUIVO .JAVA Crie um arquivo com a extensão .java com o seguinte

código:/** * Exemplo de uma classe simples em Java. */public class PrimeiraClasse { public static void main(String[] args) { System.out.println("Hello world !!!"); }}

Page 79: SCJA

79

Guia de Estudos para SCJA

COMPILANDO UM ARQUIVO .JAVA A aplicação javac é responsável por compilar o arquivo

.java. Após a execução deste comando, um arquivo com a

extensão .class contendo bytecode Java será criado em disco, com o seguinte nome: PrimeiraClasse.class.

A aplicação java é utilizada para executar um arquivo .class.

Page 80: SCJA

80

Guia de Estudos para SCJA

COMENTÁRIO EM JAVA// -> Comentário de uma única linha

 

/* Comentário longo com mais

de uma linha */

 

/**

* Javadoc

* @author Rafael Guimarães Sakurai

*/

Page 81: SCJA

81

Guia de Estudos para SCJA

COMENTÁRIO EM JAVA/** * Classe utilizada para demonstrar o uso de comentários. * * Depois que uma classe Java é compilada, os comentários não vão * para os códigos compilados .class, dessa forma os comentários * não interferem no tamanho final do projeto. * * @author Rafael Guimarães Sakurai */public class ExemploComentario { public static void main(String[] args) { //Imprime uma mensagem para o usuario. System.out.println("Demonstrando o uso dos comentarios.");

/* Podemos utilizar esta forma quando queremos escrever um comentário mais longo para exemplicar o código. */ }}

Page 82: SCJA

82

Guia de Estudos para SCJA

PALAVRAS-CHAVE DA LINGUAGEM JAVA

abstract assert boolean break bytecase catch char class constcontinue default do double elseenum extends final finally floatfor goto if implements importinstanceof int interface long nativenew package private protected publicreturn short static strictfp superswitch synchronized this throw throwstransient try void volatile while

Page 83: SCJA

83

3.1 - DESENVOLVER CÓDIGO QUE UTILIZE PRIMITIVAS, TIPOS DE ENUMERAÇÃO E REFERÊNCIAS A OBJETOS, E RECONHECER LITERAIS DESSES TIPOS.

Page 84: SCJA

84

Guia de Estudos para SCJA

TIPOS PRIMITIVOS Uma variável é a forma de representar valores

primitivos ou objetos:

  Variáveis primitivas: podem ser do tipo byte, short, int,

long, float, double, char ou boolean.

Variáveis de referência: usada para referenciar um objeto. Quando usamos uma variável de referencia definimos qual o tipo do objeto ou um subtipo do tipo do objeto (veremos isso mais para frente).

Page 85: SCJA

85

Guia de Estudos para SCJA

LISTA DE TIPOS PRIMITIVOS

Page 86: SCJA

86

Guia de Estudos para SCJA

TIPOS INTEIROS (BYTE, SHORT, INT, LONG) Tipos inteiros trabalham apenas com números inteiros,

positivos ou negativos. Os valores podem ser representados nas bases octal, decimal e hexadecimal.

Inteiro em octalQualquer valor escrito utilizando números de 0 a 7 começando com 0 é um valor na base octal, exemplo:

 short s = 010; // Equivale ao valor 8 em decimal.

int i = 025; // Equivale ao valor 21 em decimal.

Page 87: SCJA

87

Guia de Estudos para SCJA

TIPOS INTEIROS (BYTE, SHORT, INT, LONG) Inteiro em decimal

Qualquer valor escrito utilizando números de 0 a 9 é um valor decimal, este é o tipo de representação mais comum, pois é utilizada no dia a dia, exemplo:

int i = 9;

long b = 9871342132;

Page 88: SCJA

88

Guia de Estudos para SCJA

TIPOS INTEIROS (BYTE, SHORT, INT, LONG) Inteiro em hexadecimal

Qualquer valor escrito utilizando números de 0 a 9 e A a F começando com 0x ou 0X é um valor hexadecimal, exemplo:

 long a = OxCAFE; // Equivale ao valor 51966 em decimal

int b = 0X14a3; // Equivale ao valor 5283 em decimal

Page 89: SCJA

89

Guia de Estudos para SCJA

TIPOS INTEIROS (BYTE, SHORT, INT, LONG) Quando um número é maior que o tamanho de um tipo

inteiro precisamos especificar o tipo como um long, para isso devemos adicionar a letra l ou L depois do seu valor, exemplo:

long a = 0Xcafel;

long b = 0752L;

long c = 987654321L;

Page 90: SCJA

90

Guia de Estudos para SCJA

EXEMPLO TIPO PRIMITIVO INTEIRO/** * Exemplo de utilização dos tipos primitivos byte, short, int e long. */public class ExemploTipoPrimitivo { public static void main(String[] args) { //Inicializando atributos primitivos com valores na base octal. byte a = 077; short b = 010; int c = 025;

System.out.println(a); // Imprime 63 System.out.println(b); // Imprime 8 System.out.println(c); // Imprime 21

//Inicializando atributos primitivos com valores na base decimal. int d = 9; long e = 9871342132L;

System.out.println(d); // Imprime 9 System.out.println(e); // Imprime 9871342132

Page 91: SCJA

91

Guia de Estudos para SCJA

EXEMPLO TIPO PRIMITIVO INTEIRO //Inicializando atributos primitivos com valores na base hexadecimal. long f = 0XCAFE; long g = 0Xcafel; int h = 0X14a3; long i = 0752L; long j = 987654321L;

System.out.println(f); // Imprime 51966 System.out.println(g); // Imprime 51966 System.out.println(h); // Imprime 5283 System.out.println(i); // Imprime 490 System.out.println(j); // Imprime 987654321 }}

Page 92: SCJA

92

Guia de Estudos para SCJA

EXEMPLO TIPO PRIMITIVO INTEIRO Compilar e executar o arquivo

ExemploTipoPrimitivo. java

Page 93: SCJA

93

Guia de Estudos para SCJA

TIPOS PONTO FLUTUANTE (FLOAT E DOUBLE) Tipos de ponto flutuante servem para representar

números com casas decimais, tanto negativos quanto positivos. Todos números com ponto flutuante são por padrão do tipo double.

float f = 10.99f;

double b = 10.3D;

double c = 10.3;

// Erro de compilação, pois o padrão do valor é double.

floaf c = 1.99;

OBS: Números com ponto flutuante devem ser escritos com ponto final ( . ).

Page 94: SCJA

94

Guia de Estudos para SCJA

EXEMPLO TIPO PRIMITIVO INTEIRO COM PONTO FLUTUANTE/** * Exemplo de utilização dos tipos primitivos float e double. */public class ExemploTipoPrimitivo2 { public static void main(String[] args) { //Definindo explicitamente que o valor é float. float a = 10.99f;

//Definindo explicitamente que o valor é double. double b = 10.3D;

//Atribuindo o valor inteiro para um tipo double. double c = 5;

//Atribuindo um valor double, por padrão todos números // com casas decimais são do tipo double. double d = 7.2;

System.out.println(a); // Imprime 10.99 System.out.println(b); // Imprime 10.3 System.out.println(c); // Imprime 5.0 System.out.println(d); // Imprime 7.2 }}

Page 95: SCJA

95

Guia de Estudos para SCJA

EXEMPLO TIPO PRIMITIVO INTEIRO COM PONTO FLUTUANTE Compilar e executar o arquivo

ExemploTipoPrimitivo2. java

Page 96: SCJA

96

Guia de Estudos para SCJA

TIPO CARACTERE (CHAR) O tipo caractere, como o próprio nome já diz, serve

para representar um valor deste tipo. Sua inicialização permite 3 modelos:

char a = ‘a’; //Inicialização usual com 1 caractere.

char a = 97; //Inicialização com código ASCII.

char u = ‘\u0025’; //Equivale ao caractere ‘%’

Os caracteres podem ser representados por números e possuem o mesmo tamanho de um atributo short.

O unicode é no formato hexadecimal, portanto o exemplo anterior ‘0025’ equivale a 37 na base decimal.

Page 97: SCJA

97

Guia de Estudos para SCJA

EXEMPLO TIPO PRIMITIVO CARACTERE/** * Exemplo de utilização do tipo primitivo char. */public class ExemploTipoPrimitivo3 { public static void main(String[] args) { //Definindo explicitamente um valor caracter. char a = 'a'; //Definindo explicitamente um valor numerico. char b = 97; //Definindo explicitamente um valor unicode. char c = '\u0025';

System.out.println(a); // Imprime a System.out.println(b); // Imprime a System.out.println(c); // Imprime % }}

Page 98: SCJA

98

Guia de Estudos para SCJA

EXEMPLO TIPO PRIMITIVO CARACTERE Compilar e executar o arquivo

ExemploTipoPrimitivo3. java

Page 99: SCJA

99

Guia de Estudos para SCJA

TIPO BOOLEANO (BOOLEAN) Tipo que representa valores lógicos true (verdadeiro)

ou false (falso), exemplo:

boolean a = true;

boolean b = false;

Page 100: SCJA

100

Guia de Estudos para SCJA

CASTING

Page 101: SCJA

101

Guia de Estudos para SCJA

CASTING Para fazer um casting, basta sinalizar o tipo para o qual se deseja

converter entre parênteses, da seguinte forma: 

float f = (float) 5.0;Conversão do double 5.0 para float.

int b = (int) 5.1987;Conversão de double para int.

 

float c = 100;Conversão de int para float é implícito, não precisa de casting.

 int d = ‘d’;

Conversão de char para int é implícito, não precisa de casting. 

Page 102: SCJA

102

Guia de Estudos para SCJA

EXEMPLO CASTING/** * Exemplo de conversão de tipos primitivos utilizando casting. */public class ExemploCasting { public static void main(String[] args) { //Casting feito implicitamente, pois o valor possui um // tamanho menor que o tipo da variável que irá recebe-lo. char a = 'a'; int b = 'b'; float c = 100; System.out.println(a); // Imprime a System.out.println(b); // Imprime 98 System.out.println(c); // Imprime 100.0 //Casting feito explicitamente, pois o valor possui um tamanho // maior que o tipo da variável que irá recebe-lo. int d = (int) 5.1987; int e = (char) (a + 5); char f = (char) 110.5; System.out.println(d); // Imprime 5 System.out.println(e); // Imprime 102 System.out.println(f); // Imprime n }}

Page 103: SCJA

103

Guia de Estudos para SCJA

EXEMPLO CASTING Compilar e executar o arquivo ExemploCasting.java

Page 104: SCJA

104

Guia de Estudos para SCJA

VETOR (ARRAY) Segundo a definição mais clássica da informática, um

vetor é uma estrutura de dados homogenia, ou seja, todos os elementos de um vetor são do mesmo tipo.

A estrutura básica de um vetor é representada por seu nome e um índice, que deve ser utilizado toda a vez que se deseja acessar um determinado elemento dentro de sua estrutura.

Todo vetor possui um tamanho fixo, ou seja, não é possível redimensionar um vetor ou adicionar a ele mais elementos do que este pode suportar.

Em Java a posição inicial do vetor é definida pelo valor zero.

Page 105: SCJA

105

Guia de Estudos para SCJA

VETOR (ARRAY) Um vetor é composto de três partes:

Declaração

Criação

Inicialização

Podemos também criar e inicializar o vetor da seguinte forma:

int[] valores; // ou int valores[];String[] nomes; // ou String nomes[];

int[] valores = new int[100];String[] nomes = new String[50];

valores[0] = 5;nomes[10] = "Rafael";

int[] valores = {2, 5, 4, 8, 5};

Page 106: SCJA

106

Guia de Estudos para SCJA

VETOR (ARRAY) Exemplo de utilização de array:

índice 0 1 2 3 4

vetor 2 5 4 8 5

public class ExemploVetor { public static void main(String[] args) { int[] vetor = {2, 5, 4, 8, 5}; System.out.println("Elemento do indice 2 = " + vetor[2]); System.out.println("Elemento do indice 4 = " + vetor[4]);

System.out.println("\n\nPercorrendo todos os elementos do vetor"); for(int i = 0; i < vetor.length; i++) { System.out.println("Indice[" + i + "]= " + vetor[i]); } }}

Page 107: SCJA

107

Guia de Estudos para SCJA

VETOR (ARRAY) Todo vetor em Java é um objeto, mesmo que ele possua

apenas atributos primitivos. Quando os vetores são criados eles já são inicializado

com os valores padrões para os tipos que eles guardam.

O primeiro índice do vetor é sempre zero, logo, seu último elemento é sempre igual ao tamanho do vetor menos um.

Se acessar uma posição do vetor que não existe será lançado uma java.lang.ArrayIndexOutOfBoundsException.

Page 108: SCJA

108

Guia de Estudos para SCJA

ENUMERATION Enumeration ou enum é uma alternativa ao uso de

valores constantes. O enum criado pode ser criado em um arquivo

separado ou dentro de outra classe. Podem conter:

Variáveis de instância, métodos e construtores.

Problemas na utilização de constante: As constantes não oferecem segurança. Não há um domínio estabelecido. Fragilidade de modelo. Seus valores impressos são pouco informativos

Page 109: SCJA

109

Guia de Estudos para SCJA

ENUMERATION Exemplo de utilização de constantes:/** * Classe utilizada para demonstrar as fragilidades das contantes. */public class ExemploUsarEnums { public static final int CONCEITO_RUIM = 1; public static final int CONCEITO_BOM = 2; public static final int CONCEITO_OTIMO = 3;

public void calcularAprovacao(int conceito) { if(conceito == CONCEITO_OTIMO) { System.out.println("Aprovado com louvor!"); } else if (conceito == CONCEITO_BOM) { System.out.println("Aprovado!"); } else if (conceito == CONCEITO_RUIM) { System.out.println("Reprovado!"); } }}

Page 110: SCJA

110

Guia de Estudos para SCJA

ENUMERATION Exemplo de criação de enum:/** * Enum para conceitos de avaliação de disciplinas. */public enum ConceitoEnum { RUIM, BOM, REGULAR, OTIMO;

public void calcularAprovacao(ConceitosEnum conceito) { if(conceito == OTIMO) { System.out.println("Aprovado com louvor!"); } else if (conceito == REGULAR) { System.out.println("Regular!"); } else if (conceito == BOM) { System.out.println("Aprovado!"); } else if (conceito == RUIM) { System.out.println("Reprovado!"); } }}

Page 111: SCJA

111

Guia de Estudos para SCJA

ENUMERATION Exemplo de enum com atributo e construtor:/** * Enum para conceitos de avaliação de disciplinas. */public enum ConceitoEnumComConstrutor { RUIM("Reprovado!"), BOM("Aprovado!"), REGULAR("Regular"), OTIMO("Aprovado com louvor");

private final String mensagem;

//O construtor de um enum pode ser default ou private. private ConceitoEnumComConstrutor(String mensagem) { this.mensagem = mensagem; }

public String calcularAprovacao() { return this.mensagem; }}

Page 112: SCJA

112

Guia de Estudos para SCJA

ENUMERATION

Compilando e executando a classe PrincipalTesteEnum. java

/** * Classe para testar o uso de enum. */public class PrincipalTesteEnum { public static void main(String[] args) { System.out.println("Conceito..:" + ConceitoEnumComConstrutor.OTIMO.calcularAprovacao(); }}

Page 113: SCJA

113

Guia de Estudos para SCJA

Outros informações das enums:

ENUMERATION

public class PrincipalTesteEnum2 { public static void main(String[] args) { //Percorrendo todas as enums for(ConceitoEnumComConstrutor conceito : ConceitoEnumComConstrutor.values()) System.out.println(conceito);

//Buscando um enum pelo seu nome. System.out.println(ConceitoEnumComConstrutor.valueOf("BOM"));

//método name() que retorna o nome da propria enum. System.out.println(ConceitoEnumComConstrutor.OTIMO.name());

//método ordinal() retorna a posição da ordem em que a enum foi declarada. System.out.println(ConceitoEnumComConstrutor.OTIMO.ordinal()); }}

Page 114: SCJA

114

Guia de Estudos para SCJA

REFERÊNCIA A OBJETO Como Java é uma linguagem orientada a objetos é

muito comum declararmos atributos ou variáveis que possuem referência a objetos em memória.

Exemplo:

Produto prod = new Produto();

Pessoa paulo = new Pessoa("Paulo");

String texto = new String("Explicação de referência de objeto");

int[] valores = new int[100];

Page 115: SCJA

115

Guia de Estudos para SCJA

REFERÊNCIA A OBJETO

115

prod : Produtonome="Duke"preco=75.90

paulo : Pessoanome="Paulo"idade= 40cpf = "111.111.111-11"

Heap

public class ExemploReferencia{ public static void main(String[] args) { Produto prod = new Produto(); prod.setNome("Duke"); prod.setPreco(75.90);

Pessoa paulo = new Pessoa("Paulo"); paulo.setIdade(40); paulo.setCpf("111.111.111-11"); }}

Page 116: SCJA

116

3.2 - DESENVOLVER CÓDIGO QUE DECLARE CLASSES CONCRETAS, CLASSES ABSTRATAS E INTERFACES, CÓDIGO QUE OFEREÇA SUPORTE A HERANÇA DE INTERFACE E IMPLEMENTAÇÃO, CÓDIGO QUE DECLARE MÉTODOS E ATRIBUTOS DE INSTÂNCIAS E CÓDIGO QUE UTILIZE MODIFICADORES DE ACESSO JAVA: PRIVADOS E PÚBLICOS.

Page 117: SCJA

117

Guia de Estudos para SCJA

CLASSE CONCRETA Nome da Classe

Carro, Pessoa, ContaCorrente, CaixaCorreio Atributos

idade, nome, listaMensagens, notaAluno Métodos

getPessoa, consultarAluno, enviarMensagemEmail

Page 118: SCJA

118

Guia de Estudos para SCJA

CLASSE CONCRETA/** * Classe utilizada para demonstrar a estrutura de uma classe. */public class NovaClasse { /* Declaração dos atributos da classe. */ public int atributo1; public float atributo2; public boolean atributo3;

/* Declaração dos métodos da classe. */

public void metodo1() { //Comandos System.out.println("Chamando o metodo 1."); }

public void metodo2() { //Comandos System.out.println("Chamando o metodo 2."); }}

Page 119: SCJA

119

Guia de Estudos para SCJA

CLASSE CONCRETApublic class Livro {

private String titulo;

private String autor;

private double preco;

public Livro() {

}

public void setTitulo(String _titulo) { titulo = _titulo; }

public String getTitulo() { return titulo; }

public void setAutor(String _autor) { autor = _autor; }

public String getAutor() { return autor; }

public void setPreco(double _preco) { preco = _preco; }

public String getPreco() { return preco; }

}

Page 120: SCJA

120

Guia de Estudos para SCJA

ATRIBUTO DE INSTÂNCIA Atributos de instância são “variáveis” declaradas a

nível de classe, que são utilizados para representar as propriedades (estado) que o objeto desta classe pode ter.

Por convenção, costuma-se escrever o atributo com letras minúsculas, a menos que ele seja composto por mais de uma palavra, a primeira palavra é toda em minúscula e as demais começam com a primeira letra em maiúsculo e o restante da palavra em minúscula.

Exemplo: idade, nome, listaMensagens, notaAlunoTurma, etc

Page 121: SCJA

121

Guia de Estudos para SCJA

ATRIBUTO DE INSTÂNCIA Exemplo de declaração de atributo:

/** * Classe utilizada para demonstrar a utilização de atributos. */public class Atributo {

/* Declaração dos atributos da classe. */ public int atributo1; public float atributo2; public boolean atributo3;

}

Page 122: SCJA

122

Guia de Estudos para SCJA

MÉTODOS São blocos de códigos que representam as

funcionalidades (ações) que a classe apresentará. Por convenção, costuma-se escrever o método com

letras minúsculas, a menos que ele seja composto por mais de uma palavra, a primeira palavra é toda em minúscula e as demais começam com a primeira letra em maiúsculo e o restante da palavra em minúscula.

Exemplo: getPessoa, consultarDadosAluno, enviarMensagemEmail,

etc

Page 123: SCJA

123

Guia de Estudos para SCJA

MÉTODOS Os métodos podem ou não retornar algum valor no

final de sua execução, esta informação deve constar na assinatura do método.

Quando não desejamos retornar valor devemos a palavra chave void.

Podemos também informar o tipo de retorno que pode ser um tipo primitivo ou referencia de objeto, lembrando que quando informamos o tipo de retorno então é obrigatório que esse retorno aconteça.

Page 124: SCJA

124

Guia de Estudos para SCJA

MÉTODOS/** * Classe utilizada para demonstrar o uso de métodos com retorno de valor. */public class MetodoRetorno { public int atributo1;

/** * Método utilizado para retornar o atributo1. * @return int com o valor do atributo1. */ public int metodo1() { System.out.println("Chamou o metodo 1."); return atributo1; }

/** * Método que verificar se o atributo1 é maior ou igual a 0 (zero). * @return boolean informando se o atributo1 é positivo */ public boolean metodo2() { System.out.println("Chamou o metodo 2."); return atributo1 >= 0; }}

Page 125: SCJA

125

Guia de Estudos para SCJA

MÉTODOS Os métodos também podem receber valores para

serem utilizados durante sua execução, esses valores são chamados parâmetros.

Exemplo:/** * Classe utilizada para demonstrar o uso de métodos que recebem parâmetros. */public class MetodoParametro { public int atributo1;

/** * Método utilizado para atribuir o valor do atributo1. */ public void metodo1(int valor) { System.out.println("Chamando o metodo 1."); atributo1 = valor; System.out.println("O valor do atributo1 eh: " + atributo1); }

Page 126: SCJA

126

Guia de Estudos para SCJA

MÉTODOS /** * Método que recebe uma quantidade de parâmetros variados e imprime todos os * valores recebidos. Essa possibilidade de receber uma quantidade de * parâmetros variados é chamado de varargs e foi implementado a partir * da versão 5.0 do java. */ public void metodo2(int... valores) { System.out.println("Chamando o metodo 2."); if(valores.length > 0) { /* Para cada argumento recebido como parâmetro, imprime seu valor. */ for(int cont = 0; cont < valores.length; cont++) { int valor = valores[cont]; System.out.print(valor + " "); } System.out.println("\n");

/* Este for faz a mesma coisa que o anterior, este novo tipo de for chamado foreach foi implementado a partir da versão 5.0 do java. */ for(int valor : valores) { System.out.print(valor + " "); } } }}

Page 127: SCJA

127

Guia de Estudos para SCJA

MÉTODOS COM PASSAGEM DE PARÂMETRO

20

1.96

3

Livrotitulo=“Java com Aveia”autor=“Sakurai”valor=“35.90”

Sta

ckH

eap

public class VendaLivro { public static void main(String[] args) { int quantidade = 3; Livro livro = new Livro(); livro.setTitulo("Java com Aveia"); livro.setAutor("Sakurai"); livro.setPreco(35.90);

Comprovante c = new Comprovante(); c.emitir(quantidade, livro); }}

public class Comprovante { public void emitir(int qtd, Livro l) { /* utiliza o qtd e o l para emitir comprovante. */ }}

Page 128: SCJA

128

Guia de Estudos para SCJA

MÉTODOS COM PASSAGEM DE PARÂMETRO

20

1.96

3

3

Livrotitulo=“Java com Aveia”autor=“Sakurai”valor=“35.90”

Sta

ckH

eap

public class VendaLivro { public static void main(String[] args) { int quantidade = 3; Livro livro = new Livro(); livro.setTitulo("Java com Aveia"); livro.setAutor("Sakurai"); livro.setPreco(35.90);

Comprovante c = new Comprovante(); c.emitir(quantidade, livro); }}

public class Comprovante { public void emitir(int qtd, Livro l) { /* utiliza o qtd e o l para emitir comprovante. */ }}

Page 129: SCJA

129

Guia de Estudos para SCJA

MÉTODOS Para construirmos uma classe precisamos chamar um

método construtor, exemplo:Livro livro = new Livro();

O método construtor é especial pois através dele é criado um objeto da classe.

Um construtor tem a seguinte assinatura:visibilidade NomeClasse(parâmetros)

Note que neste exemplo o método construtor Livro() não recebe nenhum parâmetro, também chamado de construtor padrão.

Quando não declaramos nenhum construtor na classe, o compilador do Java adiciona um construtor padrão.

Page 130: SCJA

130

Guia de Estudos para SCJA

CLASSE ABSTRATA Define um modelo (template) para representar

entidades e conceitos abstratos. Utilizada como classe pai (base) para criação de outras

classes. Pode ter métodos implementados de forma genérica Pode definir métodos abstratos que devem ser

implementados pelas subclasses concretas. Em Java para criarmos uma classe abstrata utilizamos a

palavra-chave abstract.

Page 131: SCJA

131

Guia de Estudos para SCJA

EXEMPLO UML DE CLASSE ABSTRATA

Page 132: SCJA

132

Guia de Estudos para SCJA

EXEMPLO DE CLASSE ABSTRATA/** * Classe abstrata que possui os métodos básicos para * as telas do computador de bordo de um veiculo. */public abstract class Tela { private String titulo; public void setTitulo(String titulo) { this.titulo = titulo; } public abstract String obterInformacao(); public void imprimir() { System.out.println(this.titulo); System.out.println("\t" + obterInformacao()); }}

Page 133: SCJA

133

Guia de Estudos para SCJA

EXEMPLO DE CLASSE ABSTRATA/** * Tela que mostra a kilometragem percorrida por um veiculo. */public class TelaKilometragem extends Tela { /* Atributo que guarda o valor da km atual do veiculo. */ int km = 0; /* Construtor que iniciliza o titulo da tela. */ public TelaKilometragem() { /* Atribui o valor do titulo desta tela. */ super.setTitulo("Km Atual"); } /** * Implementa o método abstrato da classe Tela, * neste método buscamos a km atual do veiculo. * @return Texto com a km atual. */ @Override public String obterInformacao() { km += 10; return String.valueOf(km) + " km"; }}

Page 134: SCJA

134

Guia de Estudos para SCJA

EXEMPLO DE CLASSE ABSTRATA/** * Classe utilizada para testar a Tela Kilometragem. */public class TesteTelaKm { public static void main(String[] args) { TelaKilometragem tk = new TelaKilometragem(); tk.imprimir(); System.out.println("\n------------\n"); tk.imprimir(); }}

Page 135: SCJA

135

Guia de Estudos para SCJA

EXEMPLO DE CLASSE ABSTRATA Compilar os arquivos Tela.java,

TelaKilometragem.java e TesteTelaKm e executar o arquivo TesteTelaKm.class.

Page 136: SCJA

136

Guia de Estudos para SCJA

INTERFACE A interface é utilizada para definir assinaturas de

métodos que todas as classes que forem implementá-la devem seguir.

Podemos associar uma interface a um contrato onde todas as classes que querem ter esse contrato precisam implementar seus métodos.

Para criar uma interface em Java utilizamos a palavra-chave interface.

Page 137: SCJA

137

Guia de Estudos para SCJA

INTERFACE A interface pode:

uma interface pode extender outra interface declarar atributos como constantes declarar assinatura de métodos públicos

A interface não pode: implementar método declarar construtor extender classe implementar outra interface não pode ser final não pode ter métodos com visibilidade private, protected

ou default (padrão)

Page 138: SCJA

138

Guia de Estudos para SCJA

EXEMPLO DE INTERFACE

Page 139: SCJA

139

Guia de Estudos para SCJA

EXEMPLO DE INTERFACE/** * Classe utilizada para representar uma Conta bancaria. */public class Conta { // Nome do proprietário da Conta. private String nomeProprietario; // Número da Conta. private int numero; // Saldo da Conta. private double saldo;

public String getNomeProprietario() { return nomeProprietario; } public void setNomeProprietario(String nomeProprietario) { this.nomeProprietario = nomeProprietario; }

public int getNumero() { return numero; } public void setNumero(int numero) { this.numero = numero; }

public double getSaldo() { return saldo; } public void setSaldo(double saldo) { this.saldo = saldo; }}

Page 140: SCJA

140

Guia de Estudos para SCJA

EXEMPLO DE INTERFACE/** * Interface utilizada para representar os métodos mínimos que * os bancos precisam implementar. */public interface Banco { public abstract void manutencaoConta(Conta conta); public abstract boolean saque(Conta conta, double valor); public abstract boolean deposito(Conta conta, double valor); public abstract void extrato(Conta conta);}

Page 141: SCJA

141

Guia de Estudos para SCJA

EXEMPLO DE INTERFACE/** * Classe utilizada para representar o Banco Sakurai */public class BancoSakurai implements Banco { // Conta que representa o Banco Sakurai. private Conta contaBancoSakurai = null; /** * Construtor padrão da classe. * Cria uma conta para o banco sakurai. */ public BancoSakurai() { this.contaBancoSakurai = new Conta(); this.contaBancoSakurai.setNomeProprietario("Banco Sakurai"); this.contaBancoSakurai.setNumero(0); this.contaBancoSakurai.setSaldo(0d); }

public void manutencaoConta(Conta conta) { boolean temSaldo = conta.getSaldo() >= 0.25;

Page 142: SCJA

142

Guia de Estudos para SCJA

EXEMPLO DE INTERFACE //Verifica se tem saldo para realizar a manutenção da conta. if(temSaldo) { double novoSaldo = conta.getSaldo() - 0.25; conta.setSaldo(novoSaldo); //Deposita o dinheiro da manutenção na conta do banco sakurai. deposito(this.contaBancoSakurai, 0.25); } else { System.out.println("Não conseguiu cobrar a manutenção da conta " + conta.getNumero() + " !!!"); } }

public boolean saque(Conta conta, double valor) { //Verifica se tem saldo suficiente para fazer o saque if(conta.getSaldo() >= valor) { //Realiza o saque na conta. double novoValor = conta.getSaldo() - valor; conta.setSaldo( novoValor ); System.out.println("Saque efetuado!!!"); //Toda vez que fizer um saque faz cobra a manutenção da conta. manutencaoConta(conta); return true;

Page 143: SCJA

143

Guia de Estudos para SCJA

EXEMPLO DE INTERFACE } else { System.out.println("Não conseguiu fazer o saque!!!"); //Se não conseguir fazer o saque, mostra o extrato da conta. extrato(conta); return false; } }

public boolean deposito(Conta conta, double valor) { //Realiza o deposito na conta. double novoValor = conta.getSaldo() + valor; conta.setSaldo(novoValor); System.out.println("Deposito efetuado!!!"); return true; }

public void extrato(Conta conta) { System.out.println("\n -- BANCO SAKURAI -- \n"); System.out.println("-> EXTRATO CONTA\n"); System.out.println("Nome: " + conta.getNomeProprietario()); System.out.println("Numero: " + conta.getNumero()); System.out.println("Saldo: " + conta.getSaldo()); System.out.println("\n---------------------\n"); }

Page 144: SCJA

144

Guia de Estudos para SCJA

EXEMPLO DE INTERFACE public boolean transferencia(Conta contaOrigem, Conta contaDestino, double valor) { boolean fezSaque = saque(contaOrigem, valor); //Verifica se conseguiu sacar dinheiro na conta de origem. if(fezSaque) { //Faz o deposito na conta de destino. deposito(contaDestino, valor); System.out.println("Transferencia efetuada."); return true; } else { System.out.println("Não conseguiu fazer a transferencia."); return false; } }}

Page 145: SCJA

145

Guia de Estudos para SCJA

EXEMPLO DE INTERFACE/** * Classe utilizada para representar o Banco Cristiano. */public class BancoCristiano implements Banco { private Conta contaBancoCristiano = null; public BancoCristiano() { this.contaBancoCristiano = new Conta(); this.contaBancoCristiano.setNomeProprietario("Banco Cristiano"); this.contaBancoCristiano.setNumero(0); this.contaBancoCristiano.setSaldo(0d); }

public void manutencaoConta(Conta conta) { //Sempre executa o saque na conta bancaria. double novoSaldo = conta.getSaldo() - 0.01; conta.setSaldo(novoSaldo); //Deposita o dinheiro da manutenção na conta do Banco Cristiano. double saldoBanco = this.contaBancoCristiano.getSaldo() + 0.01; this.contaBancoCristiano.setSaldo(saldoBanco); }

Page 146: SCJA

146

Guia de Estudos para SCJA

EXEMPLO DE INTERFACE public boolean saque(Conta conta, double valor) { //Verifica se tem saldo suficiente para fazer o saque if(conta.getSaldo() >= valor) { //Realiza o saque na conta. double novoValor = conta.getSaldo() - valor; conta.setSaldo( novoValor ); System.out.println("Saque efetuado!!!"); //Toda vez que fizer um saque faz cobra a manutenção da conta. manutencaoConta(conta); return true; } else { System.out.println("Não conseguiu fazer o saque!!!"); //Se não conseguir fazer o saque, mostra o extrato da conta. extrato(conta); return false; } }

Page 147: SCJA

147

Guia de Estudos para SCJA

EXEMPLO DE INTERFACE public boolean deposito(Conta conta, double valor) { //Realiza o deposito na conta. double novoValor = conta.getSaldo() + valor; conta.setSaldo(novoValor); System.out.println("Deposito efetuado!!!"); //Toda vez que fizer um deposito faz cobra a manutenção da conta. manutencaoConta(conta); return true; }

public void extrato(Conta conta) { System.out.println("\n -- BANCO CRISTIANO -- \n"); System.out.println("-> EXTRATO CONTA\n"); System.out.println("Nome: " + conta.getNomeProprietario()); System.out.println("Numero: " + conta.getNumero()); System.out.println("Saldo: " + conta.getSaldo()); System.out.println("\n---------------------\n"); }}

Page 148: SCJA

148

Guia de Estudos para SCJA

EXEMPLO DE INTERFACE/** * Classe utilizada para testar a interface Banco, e as * classes BancoCristiano e BancoSakurai. */public class BancoTeste { public static void main(String[] args) { Banco bancoCristiano = new BancoCristiano(); Conta contaC = new Conta(); contaC.setNomeProprietario("Cristiano Camilo"); contaC.setNumero(1); contaC.setSaldo(1000); bancoCristiano.deposito(contaC, 150.50); bancoCristiano.saque(contaC, 500); bancoCristiano.extrato(contaC); Banco bancoSakurai = new BancoSakurai(); Conta contaS = new Conta(); contaS.setNomeProprietario("Rafael Sakurai"); contaS.setNumero(1); contaS.setSaldo(500); bancoSakurai.deposito(contaS, 40.99); bancoSakurai.saque(contaS, 300); bancoSakurai.extrato(contaS); }}

Page 149: SCJA

149

Guia de Estudos para SCJA

EXEMPLO DE INTERFACE

Page 150: SCJA

150

Guia de Estudos para SCJA

COMPARATIVO CLASSE ABSTRATA X INTERFACE

Classe Abstrata InterfacePossui atributos de instância Possui apenas constantes

Possui métodos de diversas visibilidades e métodos implementados ou abstratos Todos métodos são public e abstract

É estendida por classes (sub-classes) É implementada por classes

Uma sub-classe só pode estender uma única classe abstrata (regra básica da herança em Java)

Uma classe pode implementar mais de uma interface

Hierarquia de herança com outras classes abstratas

Hierarquia de herança com outrasinterfaces

Page 151: SCJA

151

Guia de Estudos para SCJA

HERANÇA Em Java, podemos criar classes que herdam atributos e

métodos de outras classes, evitando reescrita de código. Este tipo de relacionamento é chamado de Herança.

Para representarmos este tipo de relacionamento na linguagem, devemos utilizar a palavra reservada extends, de forma a apontar para qual classe a nossa nova classe deve herdar seus atributos e métodos.

Utilizando herança podemos também guardar instâncias de objetos de subclasses em variáveis do tipo das superclasses.

Page 152: SCJA

152

Guia de Estudos para SCJA

HERANÇA Uma classe pode herdar apenas de uma classe

(superclasse). Quando uma classe não define explicitamente que está herdando outra classe então esta classe é filha de java.lang.Object, ou seja, a classe Object é a classe pai de todas as classes.

Por Object ser pai de todas as classes, todas as classes herdam os seguintes métodos dela:

Page 153: SCJA

153

Guia de Estudos para SCJA

HERANÇA Quando lidamos com classes que possuem a relação de

herança, podemos fazer uso de duas palavras-chave que servem para identificar se estamos utilizando um método e ou atributo da classe atual ou de sua super classe, estes comandos são: this Define que o recurso pertence à classe atual. super Define que o recurso pertence à super classe.

Page 154: SCJA

154

Guia de Estudos para SCJA

HERANÇA Neste exemplo temos a superclasse Pessoa, e três

subclasses Funcionario, Aluno e Coordenador.

Page 155: SCJA

155

Guia de Estudos para SCJA

HERANÇA/** * Classe utilizada para representar a Pessoa. */public class Pessoa { private String nome; private int matricula; /** * Construtor que recebe o nome da pessoa. * @param nome */ public Pessoa(String nome, int matricula) { this.nome = nome; this.matricula = matricula; }

public int getMatricula() { return matricula; } public void setMatricula(int matricula) { this.matricula = matricula; }

public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; }}

Page 156: SCJA

156

Guia de Estudos para SCJA

HERANÇA/** * Classe utilizada para representar um Funcionario que é uma Pessoa. */public class Funcionario extends Pessoa { private String departamento; public Funcionario(String nome, int matricula, String departamento) { super(nome, matricula); this.departamento = departamento; }

public String getDepartamento() { return departamento; }

public void setDepartamento(String departamento) { this.departamento = departamento; }}

Page 157: SCJA

157

Guia de Estudos para SCJA

HERANÇA/** * Classe utilizada para representar um Coordenador que é uma Pessoa. */public class Coordenador extends Pessoa { private String cursoCoordenado;

public Coordenador(String nome, int matricula, String cursoCoordenado) { super(nome, matricula); this.cursoCoordenado = cursoCoordenado; }

public String getCursoCoordenado() { return cursoCoordenado; }

public void setCursoCoordenado(String cursoCoordenado) { this.cursoCoordenado = cursoCoordenado; }}

Page 158: SCJA

158

Guia de Estudos para SCJA

HERANÇA/** * Classe utilizada para testar a Herança da classe Funcionario. */public class TesteFuncionario { public static void main(String[] args) { /* Declarações comuns. */ Pessoa camilo = new Pessoa("Camilo", 123); Funcionario rafael = new Funcionario("Rafael", 111, "informatica"); /* Todo Funcionario é uma Pessoa. */ Pessoa sakurai = new Funcionario("Sakurai", 222, "telecomunicação"); /* Erro de compilação, porque nem toda Pessoa é um Funcionario. */ Funcionario cristiano = new Pessoa("Cristiano", 456); }}

Page 159: SCJA

159

Guia de Estudos para SCJA

HERANÇA Com a declaração acima, temos as classe Funcionario

e Coordenador como classes filha ou subclasses da classe pai Pessoa. Com isso podemos dizer que as subclasses Funcionario e Coordenador herdam todos os atributos e métodos da sua superclasse Pessoa.

Por isso lembre-se, o Funcionario É UMA Pessoa, pois é uma subclasse, logo apenas possui algumas características a mais do que Pessoa, porém podemos sempre manuseá-lo como uma Pessoa.

Page 160: SCJA

160

Guia de Estudos para SCJA

MODIFICADOR DE ACESSO Os modificadores de acesso são utilizados para proteger o

acesso a um atributo, método ou uma classe de outras classes, em Java temos os seguintes modificadores: private (Restringe totalmente o acesso do atributo ou método

da classe de todas as demais classes) default (Apenas classes do mesmo pacote tem acesso a

classe, método ou atributo que possui este modificador) protected (Um atributo ou método é visível apenas para as

classes do mesmo pacote ou para as subclasses daquela classe)

public (classes, métodos e atributos podem ser acessados a partir de qualquer outra classe)

Dentro de um arquivo .java, só pode existir uma classe do tipo public e esta classe precisa obrigatoriamente ter o mesmo nome que o nome do arquivo .java.

Page 161: SCJA

161

Guia de Estudos para SCJA

MODIFICADORES DE ACESSO

Modificador Em uma classe Em um método Em um atributoprivate Não aplicável Acesso pela classe Acesso pela classe

protected Não aplicávelAcesso pelo pacote e subclasses

Acesso pelo pacote e subclasses

default Somente pacote Acesso pelo pacote Acesso pelo pacotepublic Acesso total Acesso total Acesso totalabstract Não instância Deve ser sobrescrito Não aplicávelfinal Sem herança Não pode ser sobrescrito Constantestatic Não aplicável Acesso pela classe Acesso pela classenative Não aplicável Indica código nativo Não aplicáveltransient Não aplicável Não aplicável Não serializavel

synchonized Não aplicável Sem acesso simultâneo Não aplicável

Page 162: SCJA

162

3.3 - DESENVOLVER CÓDIGO QUE IMPLEMENTE ASSOCIAÇÕES DE CLASSES SIMPLES E CÓDIGO QUE IMPLEMENTE MULTIPLICIDADE USANDO MATRIZES; E RECONHECER CÓDIGO QUE IMPLEMENTE COMPOSIÇÕES EM OPOSIÇÃO A ASSOCIAÇÕES SIMPLES E CÓDIGO QUE IMPLEMENTE CORRETAMENTE A NAVEGAÇÃO DE ASSOCIAÇÕES.

Page 163: SCJA

163

Guia de Estudos para SCJA

ASSOCIAÇÃO DE CLASSE SIMPLES Associação é quando uma classe possui um

relacionamento com outra classe, exemplo:

A classe Usuario possui um atributo chamado perfil que é do tipo da classe Perfil e um atributo chamado endereco que é do tipo da classe Endereco.

Page 164: SCJA

164

Guia de Estudos para SCJA

A implementação em Java fica da seguinte forma:

ASSOCIAÇÃO DE CLASSE SIMPLES

public class Perfil { private String nome;}

public class Endereco { private String estado; private String cidade; private String bairro; private String logradouro; private String cep;}

public class Usuario{ private String nome; private String cpf; private String login; private String senha; private Perfil perfil; private Endereco endereco;}

Page 165: SCJA

165

Guia de Estudos para SCJA

COMPOSIÇÃO Uma composição é um relacionamento mais forte que a

associação, pois uma classe depende da outra para existir, exemplo:

A classe DetalheUsuario depende da classe Usuario para ser criada, sem a classe Usuario não tem porque ela existir.

Page 166: SCJA

166

Guia de Estudos para SCJA

COMPOSIÇÃO A implementação em Java fica da seguinte forma:

public class Usuario{ private String nome; private String login; private String senha; private Perfil perfil; private DetalheUsuario detalhe;}

public class DetalheUsuario { private String endereco; private String telefone; private String email;}

Page 167: SCJA

167

Guia de Estudos para SCJA

NAVEGAÇÃO A navegação informa a direção entre os

relacionamentos.

A partir da classe Venda podemos chegar nas classes Funcionario, Produto e Cliente.

Page 168: SCJA

168

Guia de Estudos para SCJA

NAVEGAÇÃO A implementação em Java fica da seguinte forma:public class Funcionario { private String nome; }

public class Cliente { private String nome;}

public class Produto{ private String nome; private double preco;}

public class Venda { private Cliente cliente; private Produto produto; private Funcionario funcionario;

public Cliente getCliente() { return this.cliente; } public Produto getProduto() { return this.produto; } public Funcionario getFuncionario() { return this.funcionario; }}

Page 169: SCJA

169

Guia de Estudos para SCJA

MULTIPLICIDADE COM MATRIZES Quando uma classe pode guardar mais de uma

referencia para outra classe, podemos utilizar uma estrutura de vetor, matriz, lista e outros, exemplo:

A classe Pagamento possui um conjunto da classe Servico, através do relacionamento da UML sabemos que é no mínimo 1 e não tem limite de quantidade máxima.

Page 170: SCJA

170

Guia de Estudos para SCJA

MULTIPLICIDADE COM MATRIZES A implementação em Java fica da seguinte forma:

public class Pagamento{ private Prestador prestador; private Servico[] servicos; private long numero;

public Servico[] getServicos() { return this.servicos; }}

public class Servico { private String nome; private BigDecimal preco; private char status;}

Page 171: SCJA

171

3.4 - DESENVOLVER CÓDIGO QUE UTILIZE POLIMORFISMO PARA CLASSES E INTERFACES, BEM COMO RECONHECER CÓDIGO QUE UTILIZE O PRINCÍPIO "PROGRAMA PARA UMA INTERFACE".

Page 172: SCJA

172

Guia de Estudos para SCJA

POLIMORFISMO Polimorfismo é a capacidade de um objeto ser

referenciado de diversas formas e com isso realizar as mesmas tarefas (ou chamadas de métodos) de diferentes formas.

Durante a execução do programa, a JVM verifica qual a classe de origem do objeto e chama o método desta classe.

Page 173: SCJA

173

Guia de Estudos para SCJA

POLIMORFISMO COM HERANÇA

Page 174: SCJA

174

Guia de Estudos para SCJA

POLIMORFISMO COM HERANÇA/** * Classe utilizada para representar uma Pessoa. */public class Pessoa { private String nome;

public String getNome() { return nome; }

public void setNome(final String nome) { this.nome = nome; }}

Page 175: SCJA

175

Guia de Estudos para SCJA

POLIMORFISMO COM HERANÇA/** * Classe utilizada para representar uma Pessoa Fisica * que É UMA subclasse de Pessoa. */public class PessoaFisica extends Pessoa { private String cpf;

public String getCpf() { return cpf; }

public void setCpf(String cpf) { this.cpf = cpf; }

public String getNome() { return "Pessoa Fisica: " + super.getNome() + " - CPF: " + this.getCpf(); }}

Page 176: SCJA

176

Guia de Estudos para SCJA

POLIMORFISMO COM HERANÇA/** * Classe utilizada para representar uma Pessoa Fisica * que É UMA subclasse de Pessoa. */public class PessoaJuridica extends Pessoa { private String cnpj;

public String getCnpj() { return cnpj; }

public void setCnpj(String cnpj) { this.cnpj = cnpj; }

public String getNome() { return "Pessoa Juridica: " + super.getNome() + " - CNPJ: " + this.getCnpj(); }}

Page 177: SCJA

177

Guia de Estudos para SCJA

POLIMORFISMO COM HERANÇA/** * Classe utilizada para demonstrar o uso do polimorfismo, vamos criar um vetor * de Pessoa e adicionar nele objetos do tipo PessoaFisica e PessoaJuridica. */public class TestePessoa { public static void main(String[] args) { PessoaFisica fisica = new PessoaFisica(); fisica.setNome("Cristiano"); fisica.setCpf("12345678901");

PessoaJuridica juridica = new PessoaJuridica(); juridica.setNome("Rafael"); juridica.setCnpj("010101010101010101");

Pessoa[] pessoas = new Pessoa[2]; pessoas[0] = fisica; pessoas[1] = juridica;

for(Pessoa pessoa : pessoas) { System.out.println(pessoa.getNome()); } }}

Page 178: SCJA

178

Guia de Estudos para SCJA

POLIMORFISMO COM HERANÇA Durante o laço for, mesmo as variáveis sendo do tipo

Pessoa, o método getNome() foi chamado da classe PessoaFisica e PessoaJuridica, porque durante a execução do programa, a JVM percebe de qual classe foi criada o objeto que está guardado na variável pessoa.

Page 179: SCJA

179

Guia de Estudos para SCJA

POLIMORFISMO COM INTERFACE

Page 180: SCJA

180

Guia de Estudos para SCJA

POLIMORFISMO COM INTERFACE/** * Interface que deve ser implementada por todas as classes que devem * ser ordenadas. */public interface Comparavel { /** * Assinatura de método que toda classe que quer permitir * a comparação entre seus objetos precisa implementar. * * @param o - Objeto que será comparado. * @return 0 se os objetos forem iguais * > 0 se o objeto recebido é menor que o objeto que será comparado. * < 0 se o objeto recebido é maior que o objeto que será comparado. */ public abstract int comparar(Object o);}

Page 181: SCJA

181

Guia de Estudos para SCJA

POLIMORFISMO COM INTERFACE/** * Classe utilizada para ordenar qualquer tipo de classe * que implementa a interface Comparavel. */public class Ordenar { /** * Método que utiliza o algoritmo de bubble sort * para ordenar um vetor de objetos do tipo <code>Comparavel</code>. * @param objetos - Vetor de objetos que ordenados. */ public void ordenar(Comparavel[] objetos) { for (int i = 0; i < objetos.length; i++) { for (int j = i + 1; j < objetos.length; j++) { /* Verifica se os objetos não estão na ordem. */ if(objetos[i].comparar(objetos[j]) > 0) { /* Troca os objetos de lugar no vetor. */ Comparavel temp = objetos[i]; objetos[i] = objetos[j]; objetos[j] = temp; } } } }}

Page 182: SCJA

182

Guia de Estudos para SCJA

POLIMORFISMO COM INTERFACE/** * Classe utilizada para representar um Livro, esta classe * implementa a interface Comparavel. */public class Livro implements Comparavel { private String autor; private String titulo;

public Livro(String autor, String titulo) { this.autor = autor; this.titulo = titulo; }

public String getAutor() { return autor; }

public void setAutor(String autor) { this.autor = autor; }

public String getTitulo() { return titulo; }

Page 183: SCJA

183

Guia de Estudos para SCJA

POLIMORFISMO COM INTERFACE public void setTitulo(String titulo) { this.titulo = titulo; }

public int comparar(Object o) { int comparacao = 0; //Verifica se o objeto que vai comparar é do tipo Livro. if (o instanceof Livro) { Livro livro = (Livro) o; comparacao = this.getAutor().compareTo(livro.getAutor());

//Se os autores forem iguais, compara o titulo dos livros. if (comparacao == 0) { comparacao = this.getTitulo().compareTo(livro.getTitulo()); } }

return comparacao; }}

Page 184: SCJA

184

Guia de Estudos para SCJA

POLIMORFISMO COM INTERFACE/** * Classe utilizada para testar a ordenação genérica. */public class TestarOrdenacao { public static void main(String[] args) { /* Cria uma vetor de livros. */ Livro[] livros = new Livro[4]; livros[0] = new Livro("Sakurai", "Almoçando com Java"); livros[1] = new Livro("Cristiano", "Classes Java em fila indiana"); livros[2] = new Livro("Sakurai", "Java em todo lugar"); livros[3] = new Livro("Cristiano", "Viajando no Java"); /* Ordena os livros */ Ordenar o = new Ordenar(); o.ordenar(livros); /* Imprime os livros ordenados. */ for(int cont = 0; cont < livros.length; cont++) { System.out.println("Autor: " + livros[cont].getAutor()); System.out.println("Livro: " + livros[cont].getTitulo()); System.out.println("\n---------\n"); } }}

Page 185: SCJA

185

Guia de Estudos para SCJA

POLIMORFISMO Quando utilizamos polimorfismo estamos restringindo

os métodos baseado no tipo de referencia do objeto, exemplo:

O tipo de referencia do objeto é Comparavel e através dela podemos chamar apenas o método comparar(), não podemos chamar os métodos que foram declarados na classe Livro.

Comparavel livro = new Livro("Java com Aveia", "Rafael");

Livro onlyJava = new Livro("Only Java", "Sakurai");livro.comparar(onlyJava);

livro.getNome(); //Erro de compilação

Page 186: SCJA

186

Guia de Estudos para SCJA

DINAMIC BINDING Mas porque quando chamamos o método comparar()

da interface Comparavel é chamado o método comparar() da classe Livro?

Em tempo de execução a JVM verifica qual o objeto está sendo referenciado e chama seu método, isto é chamado Dinamic Binding.

Comparavel livro = new Livro("Java com Aveia", "Rafael");Livro onlyJava = new Livro("Only Java", "Sakurai");

livro.comparar(onlyJava);

Page 187: SCJA

187

Guia de Estudos para SCJA

CASTING DE OBJETO Vimos anteriormente que uma Pessoa (superclasse)

nem sempre É UMA PessoaFisica (subclasse), mas quando estamos trabalhando com uma superclasse e temos a certeza de qual o tipo de subclasse ele está representando podemos fazer o casting de objetos, para guardar o objeto em sua classe, funciona de forma similar ao casting de atributos primitivos.

No exemplo abaixo vamos criar duas variáveis do tipo Pessoa com objetos do tipo PessoaFisica e PessoaJuridica, depois vamos também criar uma variável do tipo Object (que é a superclasse de todas as classes) e guardar nela um objeto do tipo String.

Page 188: SCJA

188

Guia de Estudos para SCJA

CASTING DE OBJETO/** * Classe utilizada para demonstrar o uso do polimorfismo, vamos criar duas * variáveis do tipo Pessoa e adicionar nele objetos do tipo PessoaFisica e * PessoaJuridica. */public class TestePessoa4 { public static void main(String[] args) { Pessoa pessoa1 = new PessoaFisica(); pessoa1.setNome("Cristiano"); Pessoa pessoa2 = new PessoaJuridica(); pessoa2.setNome("Rafael");

PessoaFisica fisica = (PessoaFisica) pessoa1; fisica.setCpf(12345678901L); PessoaJuridica juridica = (PessoaJuridica) pessoa2; juridica.setCnpj(1000100012345678L); System.out.println(fisica.getNome()); System.out.println(juridica.getNome());

Object objeto = "Programacao Orientada a Objetos"; String texto = (String) objeto; System.out.println(texto); }}

Page 189: SCJA

189

Guia de Estudos para SCJA

CASTING DE OBJETO Compilar e executar o arquivo TestePessoa4.java.

Page 190: SCJA

190

Guia de Estudos para SCJA

PROGRAME PARA UMA INTERFACE

Programando para implementação

Programando para interface

OrdenarLivro ordenadorDeLivros = new OrdenadorLivro();Livro[] livros = new Livros[] { new Livro("Only Java", "Sakurai"), new Livro("Java com Aveia", "Rafael") };ordenadorDeLivros.ordenarLivro(livros);

OrdenarPessoa ordenadorDePessoas = new OrdenarPessoa();Pessoa[] pessoas = new Pessoa[] { new PessoaFisica("Sakurai"), new PessoaJuridica("Rafael") };ordenadorDePessoas.ordenar(pessoas);

Ordenar o = new Ordenar();Livro[] livros = new Livros[] { new Livro("Only Java", "Sakurai"), new Livro("Java com Aveia", "Rafael") };o.ordenar(livros);

Pessoa[] pessoas = new Pessoa[] { new PessoaFisica("Sakurai"), new PessoaJuridica("Rafael") };o.ordenar(pessoas);

Page 191: SCJA

191

4- PROJETO E IMPLEMENTAÇÃO DE

ALGORITMOS

Page 192: SCJA

192

4.1 - DESCREVER, COMPARAR E CONTRASTAR ESTES TRÊS TIPOS DE INSTRUÇÕES FUNDAMENTAIS: ATRIBUIÇÃO, CONDICIONAL E ITERAÇÃO; COM BASE NA DESCRIÇÃO DE UM ALGORITMO, SELECIONAR O TIPO APROPRIADO DE INSTRUÇÃO PARA PROJETAR O ALGORITMO.

Page 193: SCJA

193

Guia de Estudos para SCJA

INSTRUÇÕES FUNDAMENTAIS Quando queremos guardar o valor de um tipo primitivo

ou uma referência para um objeto, podemos guardá-los em variáveis, isto também é chamado de atribuição.

Page 194: SCJA

194

Guia de Estudos para SCJA

INSTRUÇÕES FUNDAMENTAIS Quando queremos executar um determinado conjunto

de instruções, em uma determinada condição ou situação, podemos utilizar estruturas do tipo condicional.

Page 195: SCJA

195

Guia de Estudos para SCJA

INSTRUÇÕES FUNDAMENTAIS Quando queremos executar um certo conjunto de

instruções n vezes, durante uma determinada condição ou situação, podemos utilizar estruturas do tipo iteração.

Page 196: SCJA

196

4.2 - COM BASE EM UM ALGORITMO COMO PSEUDO-CÓDIGO, DETERMINAR O ESCOPO CORRETO DE UMA VARIÁVEL USADA NO ALGORITMO E DESENVOLVER CÓDIGO PARA DECLARAR VARIÁVEIS EM QUALQUER UM DOS SEGUINTES ESCOPOS: VARIÁVEL DE INSTÂNCIA, PARÂMETRO DE MÉTODO E VARIÁVEL LOCAL.

Page 197: SCJA

197

Guia de Estudos para SCJA

ESCOPO DE VARIÁVEL Variáveis de instância são criadas em nível de classe

que podem ser utilizadas para guardar informações (estado) para cada objeto que estiver em memória.

Este tipo de variável tem um escopo de vida igual a vida do objeto onde ele está referenciado.

Page 198: SCJA

198

Guia de Estudos para SCJA

ESCOPO DE VARIÁVEL Parâmetros de método são variáveis recebidas por

parâmetro de método. Todo parâmetro é passado por cópia, ou seja: Se o parâmetro for do tipo primitivo, então é copiado o

valor da variável de origem para o parâmetro do método. Se o parâmetro for um objeto, então é copiado o valor da

referência ao objeto original. Este tipo de variável tem o escopo de vida igual ao

tempo da chamada do método.

Page 199: SCJA

199

Guia de Estudos para SCJA

ESCOPO DE VARIÁVEL Variável local é criada dentro de blocos de chave { },

este tipo de variável tem um escopo de vida limitado ao bloco. Estas variáveis são criadas para serem utilizadas para executar uma determinada instrução e depois são descartadas.

Page 200: SCJA

200

4.3 - COM BASE EM UM ALGORITMO COMO PSEUDO-CÓDIGO, DESENVOLVER CÓDIGO DE MÉTODO QUE IMPLEMENTE O ALGORITMO USANDO INSTRUÇÕES CONDICIONAIS (IF E SWITCH), INSTRUÇÕES DE ITERAÇÃO (FOR, FOR-EACH, WHILE E DO-WHILE), INSTRUÇÕES DE ATRIBUIÇÃO E INSTRUÇÕES BREAK E CONTINUE PARA CONTROLAR O FLUXO DENTRO DAS INSTRUÇÕES SWITCH E DE ITERAÇÃO.

Page 201: SCJA

201

Guia de Estudos para SCJA

INSTRUÇÕES CONDICIONAIS (IF / ELSE) A instrução condicionais if, é utilizada para executar

alguns comandos apenas se sua condição for true (verdadeira).

O else pode ou não acompanhar o if, mas o else não pode ser usado sozinho, e é utilizado para executar alguns comandos caso a condição do if for false (falso).

if (condição) { //Comandos executados caso a condição verdadeira.}

if (condição) { //Comandos executados caso a condição verdadeira.} else { //Comandos executados caso a condição falsa.}

Page 202: SCJA

202

Guia de Estudos para SCJA

INSTRUÇÕES CONDICIONAIS (IF / ELSE) Podemos também utilizar vários if / else aninhados:

if (condição1) { //Comandos executados caso a condição1 verdadeira.} else if (condição2) { //Comandos executados caso a condição2 verdadeira.} else if (condição3) { //Comandos executados caso a condição3 verdadeira.} else { //Comandos executados caso nenhuma das condições for verdadeira.}

Page 203: SCJA

203

Guia de Estudos para SCJA

INSTRUÇÕES CONDICIONAIS (IF / ELSE) Exemplo:

/** * Exemplo de estrutura de controle IF. */public class ExemploIf { public static void main(String[] args) { int idade = 15; if(idade >= 18) { System.out.println("Permissão para dirigir"); } else { System.out.println("Idade minima para dirigir eh 18 anos"); } }}

Page 204: SCJA

204

Guia de Estudos para SCJA

INSTRUÇÕES CONDICIONAIS (SWITCH) A instrução condicional switch é utilizada quando

queremos testar se o valor de uma variável pode atender um determinado caso.

switch( variável ) { case <possível valor da constante> : < instruções > break; case <possível valor da constante> : < instruções > break; default: < instruções > break;}

Page 205: SCJA

205

Guia de Estudos para SCJA

INSTRUÇÕES CONDICIONAIS (SWITCH) A instrução switch aceita apenas variáveis do tipo:

byte, short, int, char e enumeração. Cada case é um caso onde os comandos dentro dele

são executados se o valor constante dele for o mesmo que o valor da variável recebida no switch.

O bloco de comandos default representa uma condição geral de execução caso nenhuma das anteriores tenha sido atendida, sendo a sua utilização também é opcional.

O comando break é utilizado para bloquear a execução de blocos cases de forma desnecessária.

Page 206: SCJA

206

Guia de Estudos para SCJA

INSTRUÇÕES CONDICIONAIS (SWITCH)/** * Exemplo de estrutura de seleção SWITCH. */public class ExemploSwitch { public static void main(String[] args) { char nota = 'D'; switch(nota) { case 'A': System.out.println("Aluno aprovado. Conceito excelente!"); break; case 'B': System.out.println("Aluno aprovado. Conceito bom!"); break; case 'C': System.out.println("Aluno aprovado. Conceito medio!"); break; default: System.out.println("Aluno reprovado!"); break; } }}

Page 207: SCJA

207

Guia de Estudos para SCJA

INSTRUÇÕES DE ITERAÇÃO (FOR) Utilizamos a instrução for quando queremos executar um

bloco de instruções n vezes.for(<inicialização>; <condição de execução>; <pós-instruções>) {

<< instruções >>

}

Utilizamos a área inicialização para criar variáveis ou atribuir valores para variáveis já declaradas, mas todas as variáveis precisam ser do mesmo tipo, está área é executada antes de começar a estrutura de repetição do for.

Utilizamos a área condição de execução para definir a lógica de parada da estrutura de repetição for.

Utilizamos a área pós-instruções para executar alguma ação que deve ocorrer cada vez que as instruções dentro for forem executados.

Page 208: SCJA

208

Guia de Estudos para SCJA

INSTRUÇÕES DE ITERAÇÃO (FOR) Exemplo1:/** * Exemplo de estrutura de repetição FOR */public class ExemploFor { public static void main(String[] args) { for(int i = 0; i <= 10; i++) { if(i % 2 == 0) { System.out.println(i + " e um numero par."); } else { System.out.println(i + " e um numero impar."); } } }}

Page 209: SCJA

209

Guia de Estudos para SCJA

INSTRUÇÕES DE ITERAÇÃO (FOR) Exemplo2:/** * Exemplo de estrutura de repetição FOR */public class ExemploFor2 { public static void main(String[] args) { for(int i = 0, j = 10; i <= 10; i++, j--) { if(i == j) { System.out.println("i " + i + " eh igual a j " + j); } } }}

Page 210: SCJA

210

Guia de Estudos para SCJA

INSTRUÇÕES DE ITERAÇÃO (FOR-EACH) Muitas vezes o for é utilizado para percorrer um array

ou uma coleção de objetos, para facilitar seu uso foi adicionado na versão 5 do Java o for-each.

for(<Tipo> <identificador> : <expressão>) { <instruções>}

Page 211: SCJA

211

Guia de Estudos para SCJA

INSTRUÇÕES DE ITERAÇÃO (FOR-EACH)import java.util.ArrayList;import java.util.List;

/** * Exemplo de estrutura de repetição For Each. */public class ExemploForEach { public static void main(String[] args) { String[] nomes = {"Altrano", "Beltrano", "Ciclano", "Deltrano"}; //Percorre um array. for(String nome : nomes) { System.out.println(nome); } List<Integer> valores = new ArrayList<Integer>(); valores.add(100); valores.add(322); valores.add(57); //Percorre uma coleção. for(Integer numero : valores) { System.out.println(numero); } }}

Page 212: SCJA

212

Guia de Estudos para SCJA

INSTRUÇÕES DE ITERAÇÃO (WHILE) A instrução while executa um bloco de instruções

enquanto uma determinada condição for verdadeira (true).

while(condição) { < instruções >}

Page 213: SCJA

213

Guia de Estudos para SCJA

INSTRUÇÕES DE ITERAÇÃO (WHILE) Exemplo:

/** * Exemplo de estrutura de repetição WHILE */public class ExemploWhile { public static void main(String[] args) { int i = 0; while(i < 10) { System.out.println(++i); } }}

Page 214: SCJA

214

Guia de Estudos para SCJA

INSTRUÇÕES DE ITERAÇÃO (DO / WHILE) A estrutura do / while tem seu bloco de instruções

executados pelo menos uma vez, então se a condição ao final das instruções for verdadeira (true), então o bloco de instruções é executado novamente.

do { < instruções >} while(condição);

Page 215: SCJA

215

Guia de Estudos para SCJA

INSTRUÇÕES DE ITERAÇÃO (DO / WHILE) Exemplo:import java.util.Scanner;

/** * Exemplo de estrutura de repetição DO / WHILE */public class ExemploDoWhile { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); int opcao = 0; do { System.out.println("Escolha uma opcao:"); System.out.println("1 - Iniciar jogo"); System.out.println("2 - Ajuda"); System.out.println("3 - Sair"); System.out.println("OPCAO: "); opcao = entrada.nextInt(); } while (opcao != 3); }}

Page 216: SCJA

216

Guia de Estudos para SCJA

INSTRUÇÃO BREAK O comando break é uma instrução de interrupção

imediata de qualquer laço, seja ele qual for e independente de sua condição de parada ter sido atendida./**

* Exemplo do comando break. */public class ExemploBreak { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); System.out.println("Digite um numero de 1 a 9 exceto o 5:"); int numero = entrada.nextInt(); System.out.println("Contando de 1 ate o numero que voce digitou... "); for(int cont = 1; cont <= numero; cont++) { if(numero == 5 || numero < 1 || numero > 9) { System.out.println("Um numero invalido foi digitado!!!"); break; } System.out.println(cont + " "); } }}

Page 217: SCJA

217

Guia de Estudos para SCJA

INSTRUÇÃO CONTINUE O comando continue faz com que o laço salte para sua

próxima iteração. Este comando pode ser utilizado com qualquer laço.

/** * Exemplo do comando continue. */public class ExemploContinue { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); System.out.println("Digite um numero de 1 a 9: (saltaremos o 5)"); int numero = entrada.nextInt(); System.out.println("Contando de 1 ate o numero que voce digitou..."); for(int cont = 0; cont <= numero; cont++) { if(cont == 5) { System.out.println("# PULANDO O 5 #"); continue; } System.out.println(cont + " "); } }}

Page 218: SCJA

218

4.4 - COM BASE EM UM ALGORITMO COMO PSEUDO-CÓDIGO, DESENVOLVER CÓDIGO QUE APLIQUE CORRETAMENTE OS OPERADORES APROPRIADOS, INCLUINDO OPERADORES DE ATRIBUIÇÃO (LIMITADOS A: =, +=, -=), OPERADORES ARITMÉTICOS (LIMITADOS A: +, -, *, /, %, ++, --), OPERADORES RELACIONAIS (LIMITADOS A: <, <=, >, >=, ==, !=) E OPERADORES LÓGICOS (LIMITADOS A: !, &&, ||) PARA PRODUZIR O RESULTADO DESEJADO. ALÉM DISSO, ESCREVER CÓDIGO QUE DETERMINE A IGUALDADE DE DOIS OBJETOS OU DUAS PRIMITIVAS.

Page 219: SCJA

219

Guia de Estudos para SCJA

OPERADORES DE ATRIBUIÇÃO Símbolo = é chamado de atribuição, utilizado para

atribuir o valor de um operando a uma variável.

/** * Classe utilizada para demonstrar o uso do operador de atribuição ( = ). */public class OperadorAtribuicao { public static void main(String[] args) { int x; x = 25; System.out.println(x); }}

Page 220: SCJA

220

Guia de Estudos para SCJA

OPERADORES DE ATRIBUIÇÃO Símbolo += é utilizado para atribuir a uma variável o

valor desta variável somada ao valor de um operando.

/** * Classe utilizada para demonstrar o uso do operador de atribuição * junto com o operador de adição ( += ). */public class OperadorAtribuicaoAdicao { public static void main(String[] args) { int x = 4; x += 2; System.out.println(x); }}

Page 221: SCJA

221

Guia de Estudos para SCJA

OPERADORES DE ATRIBUIÇÃO

Símbolo -= é utilizado para atribuir a uma variável o valor desta variável subtraindo o valor de um operando.

/** * Classe utilizada para demonstrar o uso do operador de atribuição * junto com o operador de subtração ( -= ). */public class OperadorAtribuicaoSubtracao { public static void main(String[] args) { int x = 4; x -= 2; System.out.println(x); }}

Page 222: SCJA

222

Guia de Estudos para SCJA

OPERADORES RELACIONAIS Símbolo > é chamado de maior que.

<operando1> > <operando2>

  Retorna true se o valor do operando1 for maior que o valor do operando2, caso contrario retorna false.

/** * Classe utilizada para demonstrar o uso do operador * relacional maior que ( > ). */public class OperadorMaiorQue { public static void main(String[] args) { int a = 5; int b = 3; System.out.println(a > b); }}

Page 223: SCJA

223

Guia de Estudos para SCJA

OPERADORES RELACIONAIS Símbolo < é chamado de menor que.

<operando1> < <operando2>

Retorna true se o valor do operando1 for menor que o valor do operando2, caso contrario retorna false.

/** * Classe utilizada para demonstrar o uso do operador relacional menor que ( < ). */public class OperadorMenorQue { public static void main(String[] args) { int a = 5; int b = 3; System.out.println(a < b); }}

Page 224: SCJA

224

Guia de Estudos para SCJA

OPERADORES RELACIONAIS Símbolo >= é chamado de maior ou igual que.

<operando1> >= <operando2>

Retorna true se o valor do operando1 for maior ou igual que o valor do operando2, caso contrario retorna false./**

* Classe utilizada para demonstrar o uso do operador * relacional maior ou igual que ( >= ). */public class OperadorMaiorIgualQue { public static void main(String[] args) { int a = 5; int b = 3; System.out.println(a >= b); int c = 5; System.out.println(a >= c); }}

Page 225: SCJA

225

Guia de Estudos para SCJA

OPERADORES RELACIONAIS Símbolo <= é chamado de menor ou igual que.

<operando1> <= <operando2> 

Retorna true se o valor do operando1 for menor ou igual que o valor do operando2, caso contrario retorna false./**

* Classe utilizada para demonstrar o uso do operador * relacional menor ou igual que ( <= ). */public class OperadorMenorIgualQue { public static void main(String[] args) { int a = 5; int b = 5; System.out.println(a <= b); }}

Page 226: SCJA

226

Guia de Estudos para SCJA

OPERADORES RELACIONAIS Símbolo != é chamado de diferente.

<operando1> != <operando2>

  Retorna true se o valor do operando1 for diferente do valor do operando2, caso contrario retorna false.

/** * Classe utilizada para demonstrar o uso do operador * relacional diferente ( != ). */public class OperadorDiferente { public static void main(String[] args) { int a = 5; int b = 3; System.out.println(a != b); int c = 3; System.out.println(b != c); }}

Page 227: SCJA

227

Guia de Estudos para SCJA

OPERADORES ARITMÉTICOS Símbolo + é chamado de adição, utilizado para somar

o valor de dois operandos./** * Classe utilizada para demonstrar o uso do operador de adição ( + ). */public class OperadorAdicao { public static void main(String[] args) { System.out.println(3 + 7); //ou int a = 3; int b = 7; System.out.println(a + b); }}

Page 228: SCJA

228

Guia de Estudos para SCJA

OPERADORES ARITMÉTICOS Símbolo - é chamado de subtração, utilizado para

subtrair o valor de dois operandos.

/** * Classe utilizada para demonstrar o uso do operador de subtração ( - ). */public class OperadorSubtracao { public static void main(String[] args) { System.out.println(5 - 2); //ou int a = 5; int b = 2; System.out.println(a - b); }}

Page 229: SCJA

229

Guia de Estudos para SCJA

OPERADORES ARITMÉTICOS Símbolo * é chamado de multiplicação, utilizado

para multiplicar o valor de dois operandos.

/** * Classe utilizada para demonstrar o uso do operador de multiplicação ( * ). */public class OperadorMultiplicacao { public static void main(String[] args) { System.out.println(3 * 2); //ou int a = 3; int b = 2; System.out.println(a * b); }}

Page 230: SCJA

230

Guia de Estudos para SCJA

OPERADORES ARITMÉTICOS Símbolo / é chamado de divisão, utilizado para dividir o valor

de dois operandos.

OBS: Divisão de números inteiro retorna um int, divisão com pelo menos um número com ponto flutuante retorna um double.

Divisão por zero lança um erro java.lang.ArithmeticException.

/** * Classe utilizada para demonstrar o uso do operador de divisão ( / ). */public class OperadorDivisao { public static void main(String[] args) { System.out.println(3.0 / 2); //ou int a = 3; int b = 2; System.out.println(a / b); }}

Page 231: SCJA

231

Guia de Estudos para SCJA

OPERADORES ARITMÉTICOS Símbolo % é chamado de módulo, utilizado para

saber qual o resto da divisão de dois operandos./** * Classe utilizada para demonstrar o uso do operador de modulo ( % ). */public class OperadorModulo { public static void main(String[] args) { System.out.println(4.5 % 2); //ou int a = 5; int b = 3; System.out.println(a % b); }}

Page 232: SCJA

232

Guia de Estudos para SCJA

OPERADORES ARITMÉTICOS Símbolo ++ é utilizado para incrementar em 1 o valor

de uma variável, podendo ser feita das seguintes formas:

++ <variável>

Primeiro incrementa a variável depois devolve seu valor.

<variável> ++

Primeiro devolve o valor da variável depois incrementa seu valor.

Page 233: SCJA

233

Guia de Estudos para SCJA

OPERADORES ARITMÉTICOS Operador de incremento

/** * Classe utilizada para demonstrar o uso do operador de incremento ( ++ ). */public class OperadorIncremento { public static void main(String[] args) { int a = 1; int b = 1; System.out.println(++a); System.out.println(b++); System.out.println(a); System.out.println(b); }}

Page 234: SCJA

234

Guia de Estudos para SCJA

OPERADORES ARITMÉTICOS Símbolo -- é utilizado para decrementar em 1 o valor

de uma variável, podendo ser feita das seguintes formas:-- <variável>

Primeiro decrementa o valor da variável, depois devolve seu valor.

 <variável> --

Primeiro devolve o valor da variável, depois ela é decrementada.

Page 235: SCJA

235

Guia de Estudos para SCJA

OPERADORES ARITMÉTICOS Operador de decremento

/** * Classe utilizada para demonstrar o uso do operador de decremento ( -- ). */public class OperadorDecremento { public static void main(String[] args) { int a = 1; int b = 1; System.out.println(--a); System.out.println(b--); System.out.println(a); System.out.println(b); }}

Page 236: SCJA

236

Guia de Estudos para SCJA

OPERADORES LÓGICOS Símbolo && é chamado de E. Este operador retorna

true somente se os dois operandos forem true.<operando1> && <operando2>

Se o valor do operando1 for false, então o operador && não verifica o valor do operador2, pois sabe que o resultado já é false.

Tabela verdade:

 Operando1 Operando2 Resultadotrue true truetrue false falsefalse true falsefalse false false

Page 237: SCJA

237

Guia de Estudos para SCJA

OPERADORES LÓGICOS Operador Lógico E ( && )

/** * Classe utilizada para demonstrar o uso do operador logico E ( && ). */public class OperadorLogicoE { public static void main(String[] args) { boolean a = true; boolean b = false; boolean c = true; System.out.println(a && b); System.out.println(a && c); }}

Page 238: SCJA

238

Guia de Estudos para SCJA

OPERADORES LÓGICOS Símbolo || é chamado de OU. Este operado retorna

true caso tenha pelo menos um operando com o valor true.

<operando1> || <operando2>

Se o valor do operando1 for true, então o operador || não verifica o valor do operando2, pois já sabe que o resultado é true. 

Tabela verdade:Operando1 Operando2 Resultadotrue true truetrue false truefalse true truefalse false false

Page 239: SCJA

239

Guia de Estudos para SCJA

OPERADORES LÓGICOS Operador Lógico OU ( || )

/** * Classe utilizada para demonstrar o uso do operador logico OU ( || ). */public class OperadorLogicoOU { public static void main(String[] args) { boolean a = true; boolean b = false; boolean c = false; System.out.println(a || b); System.out.println(b || c); }}

Page 240: SCJA

240

Guia de Estudos para SCJA

OPERADORES LÓGICOS Símbolo ! é chamado de negação. Este operador

retorna true se o operando tem o valor false, e retorna false se o operando o valor true.

! <operando>

Tabela verdade:

Operando Resultadofalse truetrue false

Page 241: SCJA

241

Guia de Estudos para SCJA

OPERADORES LÓGICOS Operador Lógico Negação ( ! )

/** * Classe utilizada para demonstrar o uso do operador logico negação ( ! ). */public class OperadorLogicoNegacao { public static void main(String[] args) { boolean a = true; boolean b = false; boolean c = false; System.out.println(!a); System.out.println(!(b || c)); }}

Page 242: SCJA

242

Guia de Estudos para SCJA

IGUALDADE DE TIPOS PRIMITIVOS Símbolo == é chamado de igualdade.

<operando1> == <operando2>

Retorna true se o valor do operando1 for igual ao valor do operando2, caso contrario retorna false.

/** * Classe utilizada para demonstrar o uso do operador * relacional de igualdade ( == ). */public class OperadorIgualdade { public static void main(String[] args) { int a = 3; int b = 3; System.out.println(a == b); }}

Page 243: SCJA

243

Guia de Estudos para SCJA

IGUALDADE DE OBJETOS Quando criamos um novo objeto precisamos utilizar a

palavra-chave new, que cria um novo objeto em memória e fornece o seu “endereço” a variável declarada.

A variável que então obtém uma referência a um objeto.

Exemplo: A variável manuel é uma referência a um objeto do tipo

Pessoa.Pessoa manuel = new Pessoa();

Page 244: SCJA

244

Guia de Estudos para SCJA

IGUALDADE DE OBJETOS Exemplo:

/** * Classe utilizada para mostrar identidade de objeto. */public class TestePessoa { public static void main(String[] args) { Pessoa paulo = new Pessoa(); paulo.setIdade(24); Pessoa pedro = paulo; pedro.setIdade(pedro.getIdade() + 1); System.out.println("A idade de Paulo eh: " + paulo.getIdade()); System.out.println("A idade de Pedro eh: " + pedro.getIdade()); }}

Page 245: SCJA

245

Guia de Estudos para SCJA

IGUALDADE DE OBJETOS Neste exemplo as variáveis paulo e pedro possuem a

referência ao mesmo objeto na memória.

Page 246: SCJA

246

Guia de Estudos para SCJA

IGUALDADE DE OBJETOS Quando queremos comparar se duas variáveis

apontam para o mesmo objeto podemos usar a igualdade ( == ), exemplo:/**

* Classe utilizada para mostrar igualdade de objeto. */public class TestePessoa2 { public static void main(String[] args) { Pessoa paulo = new Pessoa(); paulo.setIdade(24); Pessoa pedro = paulo; if(paulo == pedro) { System.out.println("Eh a mesma pessoa!!!"); } else { System.out.println("Sao pessoas diferentes!!!"); } }}

Page 247: SCJA

247

Guia de Estudos para SCJA

IGUALDADE DE OBJETOS Quando queremos saber se o conteúdo de dois

objetos são iguais devemos utilizar o método equals(), todas as classes recebem este método através de herança da classe java.lang.Object.

O método equals(), que existe na classe java.lang.Object, tem a mesma função que a igualdade ( == ). Caso precisemos saber se duas instancias desta mesma classe são iguais, então temos de sobrescrever o método equals().

Page 248: SCJA

248

Guia de Estudos para SCJA

IGUALDADE DE OBJETOS/** * Classe utilizada para representar uma Pessoa, sobrescrevendo o * metodo equals() para comparar objetos deste tipo. */public class Pessoa { private String nome; private int idade; public Pessoa(String nome, int idade) { this.nome = nome; this.idade = idade; } public boolean equals(Object obj) { if(obj != null && obj instanceof Pessoa) { Pessoa pessoa = (Pessoa) obj;

if(this.nome == null || pessoa.nome == null || !this.nome.equals(pessoa.nome)) { return false; } if(this.idade != pessoa.idade) { return false; } } return true; }}

Page 249: SCJA

249

Guia de Estudos para SCJA

IGUALDADE DE OBJETOS Testando a comparação de objetos através da

igualdade e método equals():/** * Comparação de objetos através do método equals(). */public class TestePessoa2 { public static void main(String[] args) { Pessoa rafael1 = new Pessoa("Rafael", 20); Pessoa rafael2 = new Pessoa("Rafael", 20);

System.out.println(rafael1 == rafael2); System.out.println(rafael1.equals(rafael2)); }}

Page 250: SCJA

250

Guia de Estudos para SCJA

IGUALDADE DE OBJETOS Na memória será criado dois objetos do tipo Pessoa:

Portanto: rafael1 == rafael2 é false. rafael1.equals(rafael2) é true.

Page 251: SCJA

251

4.5- DESENVOLVER CÓDIGO QUE UTILIZE O OPERADOR DE CONCATENAÇÃO (+) E OS SEGUINTES MÉTODOS DA CLASSE STRING: CHARAT, INDEXOF, TRIM, SUBSTRING, REPLACE, LENGTH, STARTSWITH E ENDSWITH.

Page 252: SCJA

252

Guia de Estudos para SCJA

JAVA.LANG.STRING A classe java.lang.String é utilizada para representar

textos (sequência de caracteres), portanto todo texto em Java é considerado um objeto.

Para criarmos uma String podemos fazer das seguintes formas:

String nome = new String("Rafael");

// ou

String sobrenome = "Sakurai";

R a f a e l S a k u r a i

0 1 2 3 4 5 6 7 8 9 10

11

12

13

String nome = " "

Page 253: SCJA

253

Guia de Estudos para SCJA

JAVA.LANG.STRING Alguns caracteres não podem ser adicionados a uma

String: Aspas duplas ( “ ), pois é utilizado para definir o inicio e

fim de uma String

Para definir uma aspas duplas dentro de uma String precisamos usar a barra invertida \ como escape de caracteres.

Page 254: SCJA

254

Guia de Estudos para SCJA

JAVA.LANG.STRING Abaixo temos uma tabela com alguns escapes de

caracteres e o que eles representam dentro da String:

\t Tabulação horizontal\n Nova linha\” Aspas duplas\’ Aspas simples\\ Barra invertida

Page 255: SCJA

255

Guia de Estudos para SCJA

JAVA.LANG.STRING Para concatenarmos (unir) objetos Strings podemos

usar o símbolo + ou o método concat, exemplo:

String nomeCompleto = nome + " " + sobrenome;

// ou

String sobrenome = "Cristiano".concat(" Camilo");

Page 256: SCJA

256

Guia de Estudos para SCJA

JAVA.LANG.STRING O objeto String é imutável portanto quando fazemos a

seguinte operação:

Estamos na verdade criando 3 Strings:

“Cris”

“tiano”

“Cristiano”

Page 257: SCJA

257

Guia de Estudos para SCJA

JAVA.LANG.STRING A classe String possui alguns métodos para trabalhar

com textos (http://java.sun.com/javase/6/docs/api/java/lang/String .html), por exemplo:

public char charAt(int index) Retorna o valor char a partir de um indice especificado.

public int indexOf(int char) Retorna o indice da String onde tem a primeira ocorrencia do

caractere especificado. public int indexOf(int char, int fromIndex)

Retorna o indice da String onde tem a primeira ocorrencia do caractere especificado, iniciando a procura a partir de um indice especificado.

Page 258: SCJA

258

Guia de Estudos para SCJA

JAVA.LANG.STRING public int indexOf(String string)

Retorna o indice da String onde tem a primeira ocorrencia da String especificada.

public int indexOf(String string, int fromIndex) Retorna o indice da String onde tem a primeira ocorrencia

da String especificada, iniciando a procura a partir de um indice especificado.

public String trim() Retorna uma copia da String, omitindo os espaços em

branco do começo e fim do texto. public String substring(int beginIndex)

Retorna uma nova String contendo os caracteres do indice inicial até o final da String.

Page 259: SCJA

259

Guia de Estudos para SCJA

JAVA.LANG.STRING public String substring(int beginIndex, int endIndex)

Retorna uma nova String contendo os caracteres do indice inicial até o indice final.

public String replace(char oldChar, char newChar) Retorna uma nova String resultado da atualização dos

caracteres antigos pelo novo caractere.

public int length() Retorna o tamanho da String.

public boolean startsWith(String prefix) Testa se a String inicia com um especifico prefixo.

public boolean endsWith(String suffix) Teste se a String termina com um especifico sufixo.

Page 260: SCJA

260

Guia de Estudos para SCJA

JAVA.LANG.STRING Exemplos:

Converter 2009.07.22 para 2009/07/22

Converter 2009/07/22 para 22/07/2009

Validar se um texto é referente ao nome de um arquivo com a extensão .txt

String data = "2009.07.22";data = data.replace('.', '/');System.out.println(data);

data = data.substring(8, 10) + "/"+ data.substring(5, 7) + "/" + data.substring(0, 4);System.out.println(data);

String arquivo = "C:/scja/documentos/guiaSCJA.txt";System.out.println(arquivo.endsWith(".txt"));

Page 261: SCJA

261

5- PRINCÍPIOS BÁSICOS DO DESENVOLVIMENTO

EM JAVA

Page 262: SCJA

262

5.1 - DESCREVER O OBJETIVO DE PACOTES DESENVOLVIDOS NA LINGUAGEM JAVA E RECONHECER O USO APROPRIADO DAS INSTRUÇÕES IMPORT E PACKAGE.

Page 263: SCJA

263

Guia de Estudos para SCJA

PACKAGE Quando precisamos organizar as classes de uma

aplicação Java, podemos separá-las em diversos pacotes (pastas), para isto utilizamos a palavra-chave package.

A organização de classes em pacotes ocorre do forma semelhante a um diretório de arquivos, onde será criado uma estrutura de pastas para armazenar as classes Java.

package pacote.subPacote.subSubPacote;

Page 264: SCJA

264

Guia de Estudos para SCJA

PACKAGE No exemplo abaixo vamos criar a estrutura de pacotes

br.metodista.telas e dentro deste pacote vamos colocar a classe CadastroLivro:

Note que na hierarquia de package, temos um pacote chamado br, dentro dele temos outro pacote chamado biblioteca, que dentro dele temos outro pacote chamado telas, que dentro dele criamos o arquivo CadastroLivro.java.

Page 265: SCJA

265

Guia de Estudos para SCJA

PACKAGE No arquivo da classe devemos declarar o nome do

pacote ao qual ela pertence. Esta declaração deve ser feita obrigatoriamente na primeira linha do arquivo:

Note que na declaração acima separamos os packages por ponto.

//Declaração do pacote onde está a classe.package br.biblioteca.telas;

/** * Classe utilizada para demonstrar o uso de package. */public class CadastroLivro { //código}

Page 266: SCJA

266

Guia de Estudos para SCJA

PACKAGE Boas praticas

Utilizar apenas uma palavra no nome do package. Escrever o nome do package em minúsculo. Agrupar classes por funcionalidade ou assunto em comum.

Restrição O nome do package não pode ser o nome de nenhuma

palavra-chave do Java e não pode começar com números ou caracteres especiais (exceto $ e _).

A declaração do package deve ser feita na primeira linha do arquivo Java (sem contar comentários).

Page 267: SCJA

267

Guia de Estudos para SCJA

PACKAGE Depois de organizar as classes em packages podemos

ter classes com o mesmo nome mas em packages diferentes:

Neste exemplo temos as classes Pessoa com o mesmo nome mas em packages diferentes.

Note que seguimos o padrão de escrita de nome do package e da classe, facilitando a identificação dos mesmos.

-br|--- metodista| |--- modelo| | |--- Pessoa| |--- relatorio| |--- Pessoa

Page 268: SCJA

268

Guia de Estudos para SCJA

PACKAGE A linguagem Java traz muitos packages, exemplos:

Package Descrição

java.lang Pacote com as principais classes da linguagem Java.

java.util Pacote com utilitários para a linguagem.

java.io Pacote de entrada e saída de dados.

java.awt Pacote de interface gráfica.

java.net Pacote de rede.

javax.swing

Pacote de extensão de interface gráfica.

Page 269: SCJA

269

Guia de Estudos para SCJA

IMPORT Quando desejamos utilizar alguma classe que está em

um package diferente, precisamos informar sua utilização através da palavra-chave import.

Quando queremos importar alguma classe precisamos informar o nome completo desta classe, incluindo sua hierarquia de packages.

import pacote.subPacote.NomeClasse;

Page 270: SCJA

270

Guia de Estudos para SCJA

IMPORT Neste exemplo declaramos que a classe

CadastroLivro irá utilizar a classe Livro do package “br.metodista.modelo”, e as classes MostrarTela e XmlConvert do package “br.metodista.util”.

package br.biblioteca.telas;

//Declaração dos imports.import br.biblioteca.Livro;import br.biblioteca.util.MostrarTela;import br.biblioteca.util.XmlConverter;

/** * Classe utilizada para demonstrar o uso de imports. */public class CadastroLivro2 { //código}

Page 271: SCJA

271

Guia de Estudos para SCJA

IMPORT A declaração do import precisa ser obrigatoriamente

após a declaração do package (se o mesmo existir) e antes da declaração da classe ou interface.

Quando queremos utilizar muitas classes de um mesmo package, podemos importar o package inteiro utilizando o caractere asterisco ( * ) no lugar do nome das classes, exemplo:

Assim a classe pode utilizar todas as classes que existirem dentro do package br.metodista.util.

import br.metodista.util.*;

Page 272: SCJA

272

Guia de Estudos para SCJA

IMPORT A linguagem Java possui um package chamado

java.lang que possui as classes básicas para o desenvolvimento em Java, este package é importado automaticamente por todas as classes, portanto para utilizar as classes String, System, Math e outros, não precisamos declarar seu import.

OBS: Durante o processo de compilação do arquivo .java para .class, o compilador primeiro importa as classes que estão com o package completo e depois procura pelas classes que tiveram o package inteiro importado, então normalmente é utilizado o nome inteiro do package e da classe, assim as classes são compiladas um pouco mais rápido.

Page 273: SCJA

273

Guia de Estudos para SCJA

IMPORT Quando importamos mais de uma classe com o mesmo

nome, precisamos declarar o nome completo da classe quando vamos utilizá-la.

package br.metodista.teste;

//Declaração dos imports.import br.metodista.modelo.Pessoa;import br.metodista.relatorio.Pessoa;

/** * Classe utilizada para demonstrar o uso de imports com mesmo nome. */public class TesteImports { public static void main(String[] args) { br.metodista.modelo.Pessoa p1 = new br.metodista.modelo.Pessoa(); br.metodista.relatorio.Pessoa p2 = new br.metodista.relatorio.Pessoa(); }}

Page 274: SCJA

274

5.2 - DEMONSTRAR O USO ADEQUADO DO COMANDO "JAVAC" (INCLUINDO AS OPÇÕES DA LINHA DE COMANDO -D E –CLASSPATH) E DEMONSTRAR O USO APROPRIADO DO COMANDO "JAVA" (INCLUINDO AS OPÇÕES DA LINHA DE COMANDO -CLASSPATH, -D E –VERSION).

Page 275: SCJA

275

Guia de Estudos para SCJA

JAVAC javac é um comando utilizada para invocar o

compilador Java.

Este comando pode receber diversos parâmetros, como por exemplo: -classpath <path> Especifica onde encontrar os

arquivos de classes e anotações -d <directory> Especifica o local onde gerar os

arquivos .class. -help Imprime todas as opções disponíveis.

javac <opções> <ClasseJava.java>

Page 276: SCJA

276

Guia de Estudos para SCJA

JAVAC (COMPILANDO COM -d) Por padrão todas as classes compiladas (.class) são

criadas no mesmo diretório que suas classes .java. A opção –d permite especificar o local onde o

arquivo .class deve ser gerado, dessa forma podemos organizar melhor os arquivos.

No exemplo abaixo vamos compilar a classe MinhaClasse.java que está na pasta fonte e gerar o compilado na pasta classes:

javac –d classes fonte\MinhaClasse.java

Page 277: SCJA

277

Guia de Estudos para SCJA

JAVAC (COMPILANDO COM -d) Exemplo: Compilar a classe MinhaClasse.java que

está no package metodista dentro da pasta fonte e gerar o compilado na pasta classes:

OBS: Neste exemplo executamos o comando javac a partir da pasta fonte.

javac –d ..\classes metodista\MinhaClasse.java

Page 278: SCJA

278

Guia de Estudos para SCJA

JAVAC (COMPILANDO COM -d) Quando utilizamos a opção –d e não temos a estrutura

de packages, então o javac cria os diretórios:

Este comando vai criar a pasta metodista dentro da pasta classes.

OBS: se não tivermos a pasta de destino (ex: classes), o javac lançará um erro. (No such file or directory).

javac –d ..\classes metodista\MinhaClasse.java

Page 279: SCJA

279

Guia de Estudos para SCJA

JAVAC (COMPILANDO COM –CLASSPATH) Classpath é o caminho onde podemos encontrar as

classes do Java que são necessárias para compilar ou executar um programa.

As vezes precisamos utilizar classes que não estão dentro das classes fornecidas pelo J2SE, para usar estas classes é necessário declará-las no classpath.

Podemos informar o classpath através de variável de ambiente no sistema operacional, ou declarado em linha de comando através da opção –classpath.

O classpath declarado através da linha de comando sobrescrevem o classpath declarado via variável de ambiente.

Page 280: SCJA

280

Guia de Estudos para SCJA

JAVAC (COMPILANDO COM –CLASSPATH) O classpath é composto por vários diretórios

No windows separamos os diretórios por ponto e virgula ( ; ) e as pastas dos diretórios separamos com barra invertida (\).

No linux separamos os diretórios por dois pontos ( : ) e as pastas dos diretórios separamos com barra normal ( / ).

javac -classpath <diretórios> NomeClasse.java

javac –classpath metodista\modelo;metodista\relatorio\metodista\teste\RelatorioAluno.java

javac –classpath metodista/modelo:metodista/relatorio/metodista/teste/RelatorioAluno.java

Page 281: SCJA

281

Guia de Estudos para SCJA

JAVAC (COMPILANDO COM –CLASSPATH) Exemplo: Temos a seguinte estrutura de diretorio:

C:\|- SCJA| |- codigos| | |- metodista| | | |- modelo| | | | |- Pessoa.java| | | |- relatorio| | | | |- Relatorio.java| | | |- teste| | | | |- Teste.java

Page 282: SCJA

282

Guia de Estudos para SCJA

JAVAC (COMPILANDO COM –CLASSPATH)package metodista.modelo;

public class Aluno {

private String nome;

public Aluno(String nome) {

this.nome = nome;

}

public String getNome() {

return this.nome;

}

}

Page 283: SCJA

283

Guia de Estudos para SCJA

JAVAC (COMPILANDO COM –CLASSPATH) Para compilar a classe Aluno.java podemos fazer da

seguinte forma:

Se compilarmos a partir da pasta C:\SCJA

OBS: Note que a classe Aluno não tem relacionamento com nenhuma outra classe.

C:\SCJA>javac codigos\metodista\modelo\Aluno.java

Page 284: SCJA

284

Guia de Estudos para SCJA

JAVAC (COMPILANDO COM –CLASSPATH)package metodista.relatorio;

import java.util.List;

import metodista.modelo.Aluno;

public class Relatorio {

public void imprimir(List<Aluno> alunos) {

System.out.println("Lista de alunos");

for(Aluno aluno : alunos) {

System.out.println(aluno.getNome());

}

}

}

Page 285: SCJA

285

Guia de Estudos para SCJA

JAVAC (COMPILANDO COM –CLASSPATH) Para compilar a classe Relatorio.java podemos fazer da

seguinte forma:

Se compilarmos a partir da pasta C:\SCJA

OBS: Note que a classe Relatorio tem referencia para a classe Aluno, portanto vamos adicionar no classpath o diretorio codigos.

C:\SCJA>javac -classpath codigos codigos\metodista\relatorio\Relatorio.java

Page 286: SCJA

286

Guia de Estudos para SCJA

JAVAC (COMPILANDO COM –CLASSPATH)package metodista.teste;

import metodista.modelo.Aluno;

import metodista.relatorio.Relatorio;

import java.util.List;

import java.util.ArrayList;

public class Teste {

public static void main(String[] args) {

List<Aluno> alunos = new ArrayList<Aluno>();

alunos.add(new Aluno("Rafael"));

alunos.add(new Aluno("Maria"));

alunos.add(new Aluno("Jose"));

Relatorio rel = new Relatorio();

rel.imprimir(alunos);

}

}

Page 287: SCJA

287

Guia de Estudos para SCJA

JAVAC (COMPILANDO COM –CLASSPATH) Para compilar a classe Teste.java podemos fazer da

seguinte forma:

Se compilarmos a partir da pasta C:\SCJA

OBS: Note que a classe Teste tem referencia para a classe Aluno e Relatorio, portanto vamos adicionar no classpath o diretorio codigos.

OBS2: Se precisarmos compilar uma classe que utiliza alguma classe que está dentro de um arquivo .jar, podemos também utilizar a opção –classpath.

C:\POO>javac -classpath codigos codigos\metodista\teste\Teste.java

Page 288: SCJA

288

Guia de Estudos para SCJA

JAVA java é um comando utilizada para invocar a JVM para

executar um arquivo .class com os bytecodes Java.

Este comando deve receber pelo menos o nome da classe que precisa ser executado e está classe deve possuir um método com a seguinte assinatura:

A partir deste método main que será executado a aplicação.

Este comando pode também receber argumentos:

Os argumentos são passados através de um vetor (array) de Strings para o método main.

java [-opções] class [argumentos...]

public static void main(String[] args)

java MinhaClasse arg1 arg2 arg3

Page 289: SCJA

289

Guia de Estudos para SCJA

JAVA – EXEMPLO No exemplo abaixo criamos um programa que recebe

alguns nomes como parâmetro:

/** * Classe utilizada para mostrar a passagem de parametros para o método main. */public class ParametrosMain { public static void main(String[] args) { if(args.length > 0) { for(String nome : args) { System.out.println(nome); } } else { System.out.println("Nenhum nome foi passado como parametro."); } }}

Page 290: SCJA

290

Guia de Estudos para SCJA

JAVA – EXEMPLO Se executarmos esta classe sem passar parâmetros

imprime a seguinte mensagem:

Page 291: SCJA

291

Guia de Estudos para SCJA

JAVA - EXEMPLO Quando executamos a aplicação passando os nomes

como parâmetro, estes nomes são impressos no console.

Note que quando precisamos passar um parâmetro que possua espaços em brancos, devemos utilizar as aspas duplas para delimitar a área do parâmetro, exemplo “Rafael Sakurai”.

Page 292: SCJA

292

Guia de Estudos para SCJA

JAVA Este comando pode receber diversas opções, como por

exemplo: -classpath (ou -cp) <path> Especifica onde encontrar

os arquivos de classes e anotações. -D <name>=<value> Passa propriedades de sistema

para aplicação. -help Imprime todas as opções disponíveis. -version – Imprime a versão do Java instalado.

Page 293: SCJA

293

Guia de Estudos para SCJA

JAVA (EXECUTADO COM -VERSION) A opção –version permite visualizar a versão da JVM

que esta instalada.

Page 294: SCJA

294

Guia de Estudos para SCJA

JAVA (EXECUTADO COM –D)

Com a opção –D podemos passar uma propriedade de sistema para a aplicação, exemplo:

Dentro da aplicação Java podemos pegar as propriedades do sistema utilizando a classe java.util.Properties, exemplo:

import java.util.Properties;public class TestePropriedades { public static void main(String[] args) { Properties props = System.getProperties(); System.out.println("config = " + props.getProperty("config")); props.list(System.out); }}

java –Dconfig=C:\SCJA\config.txt NomeClasse

Page 295: SCJA

295

Guia de Estudos para SCJA

JAVA (EXECUTADO COM –D)C:\POO\codigos>java -Dconfig=C:\SCJA\config.txt TestePropriedades

config = C:\SCJA\config.txt

-- listing properties --

java.runtime.name=Java(TM) SE Runtime Environment

java.vm.version=11.0-b16

java.vm.vendor=Sun Microsystems Inc.

java.vendor.url=http://java.sun.com/

path.separator=;

java.vm.name=Java HotSpot(TM) Client VM

user.country=BR

Page 296: SCJA

296

Guia de Estudos para SCJA

JAVA (EXECUTADO COM –CLASSPATH) Para executar classes Java que utilizam outras classes

também precisamos informa o classpath, exemplo:

A classe Teste tem referencia para as classes Aluno e Relatorio que estão em uma estrutura de packages dentro do diretorio codigos.

C:\POO>java -classpath codigos metodista.teste.TesteLista de alunosRafaelMariaJose

Page 297: SCJA

297

5.3 - DESCREVER O OBJETIVO E OS TIPOS DE CLASSES DOS SEGUINTES PACOTES JAVA: JAVA.AWT, JAVAX.SWING, JAVA.IO, JAVA.NET, JAVA.UTIL.

Page 298: SCJA

298

Guia de Estudos para SCJA

JAVA.AWT O Abstract Window Toolkit (AWT) é utilizado para

desenvolvimento de Graphical User Interface (GUI), composto por: Um conjunto nativo de componentes de interfaces de

usuário. Um modelo robusto de tratamento de eventos. Ferramentas de gráfico e imagem, incluindo classes de

formas, cores e fontes. Gerenciamento de layout para flexibilizar os layouts de

telas que não depende de um tamanho particular de tela ou resolução de janela.

Classes para transformação de dados para cortar-e-colar

Mais informações: http://java.sun.com/javase/6/docs/technotes/guides/awt/index.html

Page 299: SCJA

299

Guia de Estudos para SCJA

JAVA.AWT Exemplo de Tela utilizando AWT

Page 300: SCJA

300

Guia de Estudos para SCJA

JAVAX.SWING As classes swing implementam um conjunto de

componentes para construir Graphical User Interface (GUI) e adicionar ricas funcionalidades gráficas e interatividade para aplicações Java. O look and feel permite criar GUIs com variadas formas

de interface gráfica ou pode assumir a forma do Sistema Operacional utilizado.

Permite a internacionalização de diversos idiomas e convenções culturais.

Desenvolver gráficos, imagens e textos em 2D. Permite que leitores de tela aumentem a acessibilidade do

usuários.

Mais informações: http://java.sun.com/javase/6/docs/technotes/guides/swing/index.html

Page 301: SCJA

301

Guia de Estudos para SCJA

JAVAX.SWING Exemplo de aplicação SWING

Page 302: SCJA

302

Guia de Estudos para SCJA

JAVA.NET O package net fornece diversas interfaces e classes

para trabalho com networking. Endereçamento Conexões TCP Enviar / receber pacotes via UDP Localizar / identificar recursos de rede Segurança (Autenticação e Permissão)

Mais informações: http://java.sun.com/javase/6/technotes/guides/net/overview/overview.html

Page 303: SCJA

303

Guia de Estudos para SCJA

JAVA.NET Saída do servidor:

Aplicação Cliente:

Page 304: SCJA

304

Guia de Estudos para SCJA

JAVA.IO Suporte ao pacote de entrada / saída (input / output) de

informações : Arquivo e dispositivo de entrada e saída. Serialização de objetos. Buffer para dados de tipos primitivos. Conjunto de codificadores e decodificadores de caracteres. Interface de arquivos com suporte a bloqueio e

mapeamento de memória.

Mais informações: http://java.sun.com/javase/6/docs/technotes/guides/io/index.html

Page 305: SCJA

305

Guia de Estudos para SCJA

JAVA.IO Exemplo de aplicação que lê todos os arquivos de um

diretório:

Page 306: SCJA

306

Guia de Estudos para SCJA

JAVA.UTIL Pacote que fornece utilitários básicos para todas as

aplicações: Framework de coleções Facilidades de data e tempo Internacionalização Classes utilitárias (String tokenizer, gerador de números

randômicos e array)

Mais informações: http://java.sun.com/javase/6/docs/technotes/guides/lang/index.html

Page 307: SCJA

307

Guia de Estudos para SCJA

JAVA.UTIL java.util.Collection

Page 308: SCJA

308

Guia de Estudos para SCJA

JAVA.UTIL Exemplo de utilização de lista

package colecao.lista;

import java.util.ArrayList;import java.util.List;

/** * Exemplo de utilização de lista. */public class ExemploLista { public static void main(String[] args) { List nomes = new ArrayList(); nomes.add("Zezinho"); nomes.add("Luizinho"); nomes.add("Joãozinho"); for(int i = 0; i < nomes.size(); i++) { System.out.println(nomes.get(i)); } }}

0 1 2

"Zezinho" "Luizinho" "Joãozinho"

Lista

Page 309: SCJA

309

Guia de Estudos para SCJA

JAVA.UTIL Exemplo de utilização de mapapackage colecao.mapa;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.Map;

/** * Exemplo de utilização de Mapa. */public class ExemploMapa { public static void main(String[] args) { Map mapa = new HashMap(); mapa.put("nome", "Rafael"); mapa.put(2, new Pessoa()); mapa.put("lista", new ArrayList());

for (Iterator it = mapa.keySet().iterator(); it.hasNext();) { System.out.println(mapa.get(it.next())); } }}

chave valor

"nome" "Rafael"

2 new Pessoa()

"lista" new ArrayList()

Mapa

Page 310: SCJA

310

Guia de Estudos para SCJA

JAVA.UTIL Exemplo de utilização de conjunto

package colecao.conjunto;

import java.util.HashSet;import java.util.Iterator;import java.util.Set;

public class ExemploConjunto { public static void main(String[] args) { Set nomes = new HashSet(); nomes.add("Zezinho"); nomes.add("Luizinho"); nomes.add("Joãozinho");

for (Iterator it = nomes.iterator(); it.hasNext();) { System.out.println(it.next()); } }}

Zezinho

Joãozinho

Luizinho

Conjunto

Page 311: SCJA

311

Guia de Estudos para SCJA

JAVA.UTIL Exemplo de Date e Calendar

Exemplo de Arrays

Exemplo de geração de número randômico

Date d = new Date();//Mon Jul 13 20:48:44 BRT 2009Calendar c = new GregorianCalendar();//java.util.GregorianCalendar[time=1247528924422,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="America/Sao_Paulo",...]

int[] valores = new int[] {5, 10, 9 ,1 ,3, 8, 2};Arrays.sort(valores);for(int v : valores) System.out.println(v); //1 2 3 5 8 9 10

Random r = new Random();//Gera um número randômico entre 0 e 9System.out.println(r.nextInt(10));

Page 312: SCJA

312

6- PLATAFORMAS JAVA E TECNOLOGIAS DE

INTEGRAÇÃO

Page 313: SCJA

313

6.1 - DISTINGUIR AS CARACTERÍSTICAS BÁSICAS DAS TRÊS PLATAFORMAS JAVA: J2SE, J2ME E J2EE; COM BASE EM UMA META DE ARQUITETURA DE ALTO NÍVEL, SELECIONAR AS PLATAFORMAS JAVA APROPRIADAS.

Page 314: SCJA

314

Guia de Estudos para SCJA

A PLATAFORMA JAVA

Plataforma Java (http://www.javaman.com.br/apres/java&jini/index.html)

Page 315: SCJA

315

Guia de Estudos para SCJA

JAVA 2 PLATFORM, STANDARD EDITION (J2SE) A plataforma Java Standard Edition possui todas as APIs

que são base para o desenvolvimento em Java, com seu foco principal em desenvolvimento de aplicações Desktop, mas também possui funcionalidades para: Applets Conexão ao banco de dados Rede, chamada de método remotos e outros Interface Gráfica Diversas ferramentas para segurança, monitoramento,

publicação e outros

Page 316: SCJA

316

Guia de Estudos para SCJA

JAVA 2 PLATFORM, STANDARD EDITION (J2SE)

Tecnologias J2SE (http://java.sun.com/javase/technologies/index.jsp)

Page 317: SCJA

317

Guia de Estudos para SCJA

JAVA 2 PLATFORM, ENTERPRISE EDITION (J2EE) A plataforma Java Enterprise Edition é composta por

todas as APIs do J2SE e também adiciona novas APIs para desenvolvimento de aplicações corporativas.

Dentro desta plataforma podemos encontrar: Tecnologias para Web Services

JAX-RPC, SOAP e outros Tecnologias para Aplicações Web

JSF, JSP, Servlet, JSTL e outros Tecnologias para Aplicações Comerciais

EJB, JTA, JMS, JavaMail e outros Tecnologias de Gerenciamento e Segurança

JAAS, J2EE Management, J2EE Aplication Development e outros

Page 318: SCJA

318

Guia de Estudos para SCJA

JAVA 2 PLATFORM, MICRO EDITION (J2ME) A plataforma Java Micro Edition foi criada para

desenvolver aplicações para dispositivos pequenos como celular, PDA, set-top boxes de TV digital e aplicações embarcadas.

Por rodar em dispositivos de pouca memória, tamanho de tela e capacidade de processamento, as bibliotecas incluídas dentro da J2ME são limitadas.

O J2ME é dividido em configuração, profile e APIs opcionais, que fornecem informações especificas sobre qual tipo de aparelho será utilizada a aplicação

Page 319: SCJA

319

Guia de Estudos para SCJA

JAVA 2 PLATFORM, MICRO EDITION (J2ME) A aplicação J2ME pode ter dois tipos de configurações:

Connected Limited Device Configuration (CLDC) Connected Device Configuration (CDC)

Utilizando aplicações J2ME podemos: Utilizar arquivos de áudio e vídeo Armazenar informações nos dispositivos.

Page 320: SCJA

320

Guia de Estudos para SCJA

JAVA 2 PLATFORM, MICRO EDITION (J2ME)

Mais informações: http://java.sun.com/javame/technology

Page 321: SCJA

321

Guia de Estudos para SCJA

JAVA 2 PLATFORM, MICRO EDITION (J2ME)

Profiles e configurações comuns do J2ME adaptado de Li & Knudsen (pág. 2).

Page 322: SCJA

322

Guia de Estudos para SCJA

EXTENSÕES DE PROGRAMAS FEITOS EM JAVA Dependendo da aplicação que estamos desenvolvendo

precisamos agrupar todas as classes e documentos adicionais da aplicação.

JAR – Java Archive Para aplicações desktop, mobile ou componentes java

WAR – Web Archive Para aplicações web

EAR – Enterprise Archive Para aplicações que utilizam war + jar

JAD – Java Application Descriptor Para aplicações mobile

Page 323: SCJA

323

6.2 - DESCREVER, EM ALTO NÍVEL, OS BENEFÍCIOS E AS CARACTERÍSTICAS BÁSICAS DA RMI.

Page 324: SCJA

324

Guia de Estudos para SCJA

REMOTE METHOD INVOCATION (RMI) O objetivo do RMI é promover uma camada de

comunicação em rede de forma transparente. Possibilita a chamada remota a um método. Toda parte de comunicação entre os componentes EJB

é feito automaticamente pelo container EJB, usando RMI.

Quando chamamos um método utilizando RMI podemos enviar parâmetros ou receber retorno do método de tipos primitivos, objetos serializáveis, vetor ou coleções.

Page 325: SCJA

325

Guia de Estudos para SCJA

REMOTE METHOD INVOCATION (RMI) Uma chamada de método RMI funciona da seguinte

forma: O objeto cliente chama o método a partir do Stub. O Stub por sua vez irá chamar o método no Skeleton. O Skeleton chama o método do objeto no servidor.

Page 326: SCJA

326

6.3 - DESCREVER, EM ALTO NÍVEL, OS BENEFÍCIOS E AS CARACTERÍSTICAS BÁSICAS DAS TECNOLOGIAS JDBC, SQL E RDBMS.

Page 327: SCJA

327

Guia de Estudos para SCJA

BANCO DE DADOS

Banco de Dados

RDBMS

SQL

Servidor Enterprise

Container Web

JavaServer Pages

Servlet

Container EJB

Session Bean

Message-Driven Bean

Entity Bean

Cliente

HTML

JavaScript

Page 328: SCJA

328

Guia de Estudos para SCJA

RELATIONAL DATABASE MANAGEMENT SYSTEM (RDBMS) RDBMS é um Sistema Gerenciador de Banco de Dados

Relacional composto por diversos programas responsáveis por manipular informações no banco de dados.

O RDBMS controla: Criação de estruturas para armazenar os dados. Armazenamento e manipulação dos dados. Integridade dos dados. Segurança as informações.

Exemplo de RDBMS: Oracle Microsoft SQLServer MySQL

Page 329: SCJA

329

Guia de Estudos para SCJA

STRUCTURED QUERY LANGUAGE (SQL) SQL é uma Linguagem de Consulta Estruturada

utilizada para viabilizar o uso do banco de dados. Através do SQL podemos:

Manipular os dados Definir estrutura de armazenamento de dados Controle de permissão Transação Consulta de dados

Page 330: SCJA

330

Guia de Estudos para SCJA

JAVA DATABASE CONNECTIVITY (JDBC) A linguagem Java implementa um conceito de ponte para

realizar a conexão com o banco de dados, que implementa todas as funcionalidades que um banco de dados padrão deve nos fornecer.

O relacionamento da JDBC com o banco de dados depende também da extensão desta ponte que é representada pela implementação JDBC escolhida. Esta implementação depende do banco de dados com o qual queremos nos comunicar e a ela damos o nome de Driver.

Page 331: SCJA

331

6.4 - DESCREVER, EM ALTO NÍVEL, OS BENEFÍCIOS E AS CARACTERÍSTICAS BÁSICAS DAS TECNOLOGIAS JNDI, JMS E DE MENSAGENS.

Page 332: SCJA

332

Guia de Estudos para SCJA

JAVA NAMING AND DIRECTORY INTERFACE (JNDI) API para acesso ao serviço de nomes e diretórios. Para criar uma conexão com o serviço de nomes e

diretórios utilizamos a classe java.naming.InitialContext.

Utilizamos o método lookup() do InitialContext para localizar algum objeto.

Page 333: SCJA

333

Guia de Estudos para SCJA

MENSAGEM (MENSAGERIA) Mensageria é utilizado para realizar a comunicação

entre aplicações e componentes. Esta forma de comunicação fornece um baixo

acoplamento, pois o componente remetente envia uma mensagem para um agente de mensageria e o receptor pode a qualquer momento pegar na fila a mensagem.

Page 334: SCJA

334

Guia de Estudos para SCJA

JAVA MESSAGE SERVICE (JMS) JMS é uma API Java que permite criar, enviar, receber e

ler mensagens. Através desta API podemos diminuir o acoplamento

entre as aplicações ou componentes Trabalha de forma síncrona e assíncrona onde podemos

consumir a mensagem no momento que for mais apropriado e também garante que não haverá mensagens duplicas.

Page 335: SCJA

335

7- TECNOLOGIAS DE CLIENTE

Page 336: SCJA

336

Guia de Estudos para SCJA

ARQUITETURA Durante a década de 80 as aplicações eram centralizadas, tinham apenas

uma camada de aplicação que era responsável por todo processamento, tratava dos dados e a interface com usuário era de difícil utilização.

Depois começou a surgir as aplicações com 2 camadas, onde em uma camada temos a parte visual juntamente com a lógica de negocio e a outra camada é a base de dados, também chamado (aplicação cliente / servidor). Utilizando esta arquitetura poderíamos aproveitar melhor os Pcs, oferecendo uma interface mais visual mais dinâmica e deixar os servidores tratarem dos dados.

Mas a aplicação de 2 camadas tinha seus problemas, era realmente difícil dar manutenção na telas, porque a lógica de negocio estava espalhada por toda aplicação.

Com isso começou a separar as telas do negocio criando duas camadas diferentes e mais uma terceira camada para parte de banco de dados.

Na arquitetura de n camadas, começamos a utilizar a mesma camada de negocio para diferentes tipos de aplicações, temos camada de telas para desktop, web ou mobile, camada de servidor web, camada de negocio, camada de banco de dados, dessa forma ficam bem separas as camadas da aplicação facilitando o reaproveitamento dos componentes.

Page 337: SCJA

337

7.1 - DESCREVER, EM ALTO NÍVEL, AS CARACTERÍSTICAS BÁSICAS, OS BENEFÍCIOS E AS DESVANTAGENS DA CRIAÇÃO DE THIN-CLIENTS USANDO HTML E JAVASCRIPT, BEM COMO OS PROBLEMAS DE IMPLANTAÇÃO RELACIONADOS E AS SOLUÇÕES.

Page 338: SCJA

338

Guia de Estudos para SCJA

CLIENTE WEB

Banco de Dados

RDBMS

SQL

Servidor Enterprise

Container Web

JavaServer Pages

Servlet

Container EJB

Session Bean

Message-Driven Bean

Entity Bean

Cliente

HTML

JavaScript

Page 339: SCJA

339

Guia de Estudos para SCJA

HYPERTEXT MARKUP LANGUAGE (HTML) HTML é uma linguagem de marcação de hipertexto

utilizado para criar páginas web. O HTML é baseado em tags entre sinal de menor < e

maior >, através dessas tags podemos formatar textos, criar tabelas, visualizar imagens, criar hiperlinks para outras páginas ou recursos da web e outros.

O código HTML na página web diz para o browser tudo o que precisa ser apresentado na tela.

Page 340: SCJA

340

Guia de Estudos para SCJA

HYPERTEXT MARKUP LANGUAGE (HTML)

Page 341: SCJA

341

Guia de Estudos para SCJA

JAVASCRIPT JavaScript é uma linguagem de script que pode ser

utilizada para atualizar informações dinamicamente da página web, validar formulários, apresentar mensagens e outros.

JavaScript é uma linguagem tipada dinamicamente e interpretada pelo browser.

Os códigos JavaScript podem ser declarados em arquivos com a extensão .js ou declarados na página web HTML.

<script type="text/javascript"> /* Código javascript */</script>

Page 342: SCJA

342

7.2 - DESCREVER, EM ALTO NÍVEL, AS CARACTERÍSTICAS BÁSICAS, OS BENEFÍCIOS, AS DESVANTAGENS E OS PROBLEMAS DE IMPLANTAÇÃO RELACIONADOS À CRIAÇÃO DE CLIENTES USANDO MIDLETS J2ME.

Page 343: SCJA

343

Guia de Estudos para SCJA

MIDLET Midlet são aplicações para pequenos dispositivos

moveis que possuem limitação de processamento, memória e conectividade, como por exemplo aparelhos celulares.

A vantagem de utilizar Midlet é desenvolver aplicações como jogos ou programas que podem ser criados e compilados uma única vez e executado em diversos dispositivos moveis com suporte a MIDP.

MIDP também fornece segurança para os dispositivos moveis. As aplicações midlets possuem algumas limitações como por exemplo não podem usar memória que não faz parte da JVM, permissão de acesso para escrever no dispositivo e outros.

Page 344: SCJA

344

Guia de Estudos para SCJA

MIDLET Exemplo de aplicação mobile:

Page 345: SCJA

345

7.3 - DESCREVER, EM ALTO NÍVEL, AS CARACTERÍSTICAS BÁSICAS, OS BENEFÍCIOS, AS DESVANTAGENS E OS PROBLEMAS DE IMPLANTAÇÃO RELACIONADOS À CRIAÇÃO DE FAT-CLIENTS USANDO APPLETS.

Page 346: SCJA

346

Guia de Estudos para SCJA

APPLET Applet é uma aplicação Java que pode ser utilizada

através de um browser. Os applets podem ser adicionados dentro de páginas web através da tag <applet>.

O applet foi desenvolvido com o intuito de distribuir de forma mais flexível as aplicações stand-alone, através de um browser e o JRE instalado o cliente poderia usar o applet.

Como a web ainda estava no começo e a grande maioria dos sites eram apenas com informações estáticas, utilizando o applet os clientes poderiam obter informações dinâmicas realizando a comunicação com um servidor.

Page 347: SCJA

347

Guia de Estudos para SCJA

APPLET As desvantagens de utilizar applet são:

O cliente precisa ter instalado o JRE no computador. O cliente precisa fazer download do applet, se o mesmo

for grande pode demorar para iniciar. Possuem algumas restrições de memória e segurança.

Page 348: SCJA

348

Guia de Estudos para SCJA

APPLET Exemplos de Applet que pode ser encontrado dentro da

pasta demo, dentro da pasta onde o Java foi instalado:

Page 349: SCJA

349

7.4 - DESCREVER, EM ALTO NÍVEL, AS CARACTERÍSTICAS BÁSICAS, OS BENEFÍCIOS, AS DESVANTAGENS E OS PROBLEMAS DE IMPLANTAÇÃO RELACIONADOS À CRIAÇÃO DE FAT-CLIENTS USANDO SWING.

Page 350: SCJA

350

Guia de Estudos para SCJA

SWING Swing é uma API do Java que fornece os componentes

para criação de interfaces gráficas para o usuário. Podemos desenvolver aplicações desktop onde os componentes visuais possuem a aparência de acordo com o Sistema Operacional.

Desenvolver uma aplicação utilizando Swing fornece: Independente de plataforma Os componentes não precisam delegar para o Sistema

Operacional para eles serem pintados na tela, como é o caso do AWT.

Fácil troca da aparência dos componentes Extensível, customizado e fracamente acoplado

Page 351: SCJA

351

Guia de Estudos para SCJA

SWING As desvantagens de utilizar Swing são:

A distribuição da aplicação deve ser feita manualmente em todos os clientes.

A atualização da aplicação também precisa ser feita manualmente em todos os clientes.

As aplicações feitas em Swing costumam ser um pouco mais lentas que as aplicações desktops feitas para um único sistema operacional.

Page 352: SCJA

352

Guia de Estudos para SCJA

SWING Exemplo de aplicação Swing:

Page 353: SCJA

353

8- TECNOLOGIAS DE SERVIDOR

Page 354: SCJA

354

8.1 - DESCREVER, EM ALTO NÍVEL, AS CARACTERÍSTICAS BÁSICAS DE: EJB, SERVLETS, JSP, JMS, JNDI, SMTP, JAX-RPC, SERVIÇOS DA WEB (INCLUINDO SOAP, UDDI, WSDL E XML) E JAVAMAIL.

Page 355: SCJA

355

Guia de Estudos para SCJA

APIS DA PLATAFORMA J2EE

APIs da plataforma J2EE: http://java.sun.com/j2ee/1.4/docs/tutorial/doc/Overview7.html

Page 356: SCJA

356

Guia de Estudos para SCJA

ENTERPRISE JAVABEANS (EJB) EJB é um framework que simplifica o processo de

desenvolvimento de componentes de aplicações distribuídas em Java.

Utilizando EJB o desenvolvedor pode utilizar mais seu tempo na lógica de negocio, preocupando-se menos com transação, persistência, serviços de rede, etc.

Serviços disponibilizados por um container EJB. Gerenciamento de transação Segurança Concorrência Serviço de rede Gerenciamento de recursos Persistência de dados Serviço de mensageria

Page 357: SCJA

357

Guia de Estudos para SCJA

JAVASERVER PAGES (JSP) Permite criar paginas web com conteúdo estático e

dinâmico utilizando HTML com Java. Pode utilizar expression language para acessar objetos

do servidor. Pode criar tags customizadas para o desenvolvimento

das páginas.

Page 358: SCJA

358

Guia de Estudos para SCJA

JAVA MESSAGE SERVICE (JMS) A JMS pode ser utilizada de duas formas: Point to Point

onde um programa envia mensagens para uma fila e serão armazenadas nesta fila até que outro programa consuma estas mensagens.

Se for necessário podemos ter mais um programa ou processo esperando pelas mensagens na fila.

Conceitos básicos da API JMS: http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JMS3.html

Page 359: SCJA

359

Guia de Estudos para SCJA

JAVA MESSAGE SERVICE (JMS) Publish / Subscribe

Um programa envia as mensagens para um tópico e todos os programas clientes desse tópico vão receber as mensagens.

Conceitos básicos da API JMS: http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JMS3.html

Page 360: SCJA

360

Guia de Estudos para SCJA

JAVA MESSAGE SERVICE (JMS) Utilizando JMS podemos desenvolver aplicações que

executam um grande processamento de informações de forma assíncrona, exemplo: Geração de relatórios com informações referente ao

estoque de todos os produtos no centro de distribuição X. O usuário pode entrar na aplicação e solicitar a geração desse relatório mas pode continuar a utilizar a aplicação normalmente, durante a geração do relatório.

Podemos utilizar JMS para integrar diversas aplicações, exemplo: Um portal de cursos on-line pode oferecer uma interface

para novas pessoas se cadastrarem, e o cadastro desses novos clientes pode enviar uma mensagem para um outro sistema por exemplo um ERP da empresa processar e gerar o boleto de mensalidade.

Page 361: SCJA

361

Guia de Estudos para SCJA

JAVA NAMING AND DIRECTORY INTERFACE (JNDI) Quando desenvolvemos aplicações muitas vezes

precisamos obter alguns componentes ou recursos adicionais como por exemplo componentes EJB, conexão com banco de dados, filas de mensagerias e outros.

Utilizando JNDI podemos especificar um contexto informando onde os componentes ou recursos estão e através de seus nomes podemos obter seus objetos.

Page 362: SCJA

362

Guia de Estudos para SCJA

WEB SERVICE Web Services são aplicações baseadas na web que utilizam

XML para trocar informações e protocolos para transporte dos dados XML.

Simple Object Access Protocol (SOAP) Envelope baseado em XML que define o que é a mensagem e

como processá-la. Universal Description, Discovery and Integration (UDDI)

Forma de publicar os web services na internet para deixar disponivel globalmente.

Web Service Definition Language (WSDL) Padrão no formato XML que descreve o serviço.

Extensible Markup Language (XML) Forma de escrita de arquivo texto composto de tags.

Page 363: SCJA

363

Guia de Estudos para SCJA

JAVA API FOR XML-BASED REMOTE PROCEDURE CALL (JAX-RPC) JAX-RPC é uma tecnologia para construir Web Services

e clientes que utiliza chamada de funções remotas utilizando mensagens XML baseadas no protocolo SOAP.

A API JAX-RPC facilita a utilização de Web Services, pois oculta a conversão da chamadas e resposta das mensagens SOAP.

Criando um Web Service e seu cliente com JAX-RPC: http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JAXRPC3.html

Page 364: SCJA

364

Guia de Estudos para SCJA

SIMPLE MAIL TRANSFER PROTOCOL (SMTP) SMTP é um protocolo para enviar e receber emails. Este protocolo utiliza a porta 25 do TCP.

Page 365: SCJA

365

Guia de Estudos para SCJA

JAVAMAIL API que fornece o serviço de envio e recebimento de

email. Faz uso dos protocolos de envio e recebimento de email

(SMTP, POP3, MIME e IMAP). Lida com envio e recebimento de anexos, trabalha

com mensagens em HTML e procura por termos em mensagens.

Page 366: SCJA

366

8.2 - DESCREVER, EM ALTO NÍVEL, AS CARACTERÍSTICAS BÁSICAS DO SUPORTE A JSP E A SERVLET PARA THIN-CLIENTS HTML.

Page 367: SCJA

367

Guia de Estudos para SCJA

CONTAINER WEB

Banco de Dados

RDBMS

SQL

Servidor Enterprise

Container Web

JavaServer Pages

Servlet

Container EJB

Session Bean

Message-Driven Bean

Entity Bean

Cliente

HTML

JavaScript

Page 368: SCJA

368

Guia de Estudos para SCJA

SERVIDOR WEB Software que fica aguardando requisições HTTP

(Hypertext Transfer Protocol). Seu cliente normalmente é um browser como por

exemplo: Mozilla, Opera, Internet Explorer, etc. Existem diversos servidores web que possuem suporte

ao Java: Tomcat, Jboss, GlassFish, IAS, WebSphere, etc.

Page 369: SCJA

369

Guia de Estudos para SCJA

SERVLET A tecnologia Servlet permite processar requisições e

gerar respostas HTTP para atender um cliente (browser).

Através da requisição HTTP o cliente pode solicitar alguma informação ou enviar informações para a aplicação web.

Através da resposta HTTP o Servlet pode enviar um código HTML que representa uma pagina web, pode enviar parâmetros ou atributos.

O ciclo de vida de um Servlet é controlado através de um container web.

Page 370: SCJA

370

Guia de Estudos para SCJA

SERVLET

Page 371: SCJA

371

Guia de Estudos para SCJA

JAVASERVER PAGES (JSP) A tecnologia JSP permite desenvolver paginas web em

HTML de forma dinâmica, pois podemos utilizar código Java junto com código HTML.

Com o JSP podemos desenvolver páginas web para enviar informações para Servlets, apresentar as informações que são recebidas pelas Servlets gerando código HTML de forma dinâmica.

Page 372: SCJA

372

Guia de Estudos para SCJA

EXEMPLO DE APLICAÇÃO JSP + SERVLET

Page 373: SCJA

373

8.3 - DESCREVER, EM ALTO NÍVEL, O USO E AS CARACTERÍSTICAS BÁSICAS DE BEANS CONTROLADOS POR MENSAGENS, DE ENTIDADE E DE SESSÃO EJB.

Page 374: SCJA

374

Guia de Estudos para SCJA

CONTAINER EJB

Banco de Dados

RDBMS

SQL

Servidor Enterprise

Container Web

JavaServer Pages

Servlet

Container EJB

Session Bean

Message-Driven Bean

Entity Bean

Cliente

HTML

JavaScript

Page 375: SCJA

375

Guia de Estudos para SCJA

ENTERPRISE JAVABEANS (EJB) Existem três tipos de EJBs que podemos utilizar:

Session Bean – Utilizado para guardar a lógica de negocio da aplicação.

Message Drive Bean – Utilizado para troca de mensagens.

Entity Bean – Utilizado para representar as entidades do banco de dados.

Page 376: SCJA

376

Guia de Estudos para SCJA

ENTERPRISE JAVABEANS (EJB) Entity Bean

São componentes reutilizaveis que representam as entidades do banco de dados.

Page 377: SCJA

377

Guia de Estudos para SCJA

ENTERPRISE JAVABEANS (EJB) Container-managed persistence (CMP)

O container fica responsável por gerenciar o estado das entidades com o banco de dados, ou seja, o container pode salvar, atualizar, consultar ou excluir uma entidade do banco de dados.

Podemos escrever EJB-QL para dizer para o container como fazer as consultas.

Bean-managed persistence (BMP) O desenvolvedor fica responsável por sincronizar (inserir,

atualizar, consultar, excluir) as entidades e gerenciar a transação das entidades do banco de dados.

Pode solicitar uma conexão com o banco de dados, enviar comandos JDBC.

Page 378: SCJA

378

Guia de Estudos para SCJA

ENTERPRISE JAVABEANS (EJB) Session Bean

São componentes reutilizáveis que contém a lógica do negocio. O container EJB é responsável por criar e destruir o session

bean. Stateless Session Bean

Não mantém o estado. O Stateless Session Bean tem seu ciclo de vida durante o tempo

de uma simples chamada de método. O problema do Stateless Session Bean é que a cada requisição

um novo bean pode ser criado. Stateful Session Bean

Mantém o estado durante as chamadas dos métodos. O ciclo de vida do Stateful Session Bean pode durar no máximo

o mesmo tempo que o sessão do cliente. O problema do Stateful Session Bean é que pode haver um

número muito grande de instancias na memória.

Page 379: SCJA

379

Guia de Estudos para SCJA

ENTERPRISE JAVABEANS (EJB) Message Drive Bean

São componentes reutilizáveis que permitem a execução de mensagens de forma assíncrona.

Esse componente fica aguardando até que recebe alguma mensagem para processar.

São stateless portanto não guardam o estado dos atributos.

Page 380: SCJA

380

8.4 - DESCREVER, EM ALTO NÍVEL, AS PRINCIPAIS VANTAGENS E DESVANTAGENS DE USAR TECNOLOGIAS DE SERVIDOR J2EE, ALÉM DE DESCREVER E COMPARAR AS CARACTERÍSTICAS BÁSICAS DO NÍVEL WEB, DO NÍVEL DE NEGÓCIOS E DO NÍVEL EIS.

Page 381: SCJA

381

Guia de Estudos para SCJA

VANTAGENS E DESVANTAGENS J2EE No nível Web podemos desenvolver aplicações que

podem ser executadas em browsers diferentes, onde através de uma conexão com a internet o usuário pode acessar a aplicação.

No nível Negocio podemos desenvolver componentes que podem ser reutilizados por outras aplicações, criar serviços disponíveis pela web, ter clientes que podem ser aplicações desktop ou web e outros.

No nível EIS (Enterprise Information System) podemos integrar as aplicações com outras aplicações que podem ser até de outra plataforma utilizando serviços web ou mensageria.

Page 382: SCJA

382

Guia de Estudos para SCJA

BIBLIOGRAFIA [MUCHOW] John W. Muchow, Core J2ME , Pearson, 2004 [HORSTMANN & CORNELL] Cay S. Horstmann & Gary

Cornell, Core Java, 8º Ed. Prentice Hall, 2008 [SIERRA & BATES] Kathy Sierra & Bert Bates, Head

First EJB, O’Reilly – 2003 [BASHAM, SIERRA & BATES] Bryan Basham, Kathy

Sierra & Bert Bates, Head First Servlet & JSP, O’Reilly, 2004

[FOWLER] Martin Fowler, UML Essencial, 3ª Ed. Bookman, 2005.

[LI & KNUDSEN] Sing Li & Jonathan Knudsen, Beginning J2ME: From Novice to Professional, 3ª Ed. Apress, 2005.

Page 383: SCJA

383

Guia de Estudos para SCJA

BIBLIOGRAFIA Documentação Java SE - http://java.sun.com/javase/6/docs Java EE - http://java.sun.com/javaee Java ME - http://java.sun.com/javame Java SE - http://java.sun.com/javase SCJA – Sun Certified Java Associate

http://www.sun.com/training/certification/java/scja.xml The J2EE 1.4 Tutorial -

http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html UML - http://www.uml.org UML for the Java Associate -

http://www.esnips.com/doc/bf534606-bf87-4107-a884-efc791c80fc5/hfoo-associateuml

Page 384: SCJA

384

Guia de Estudos para SCJA

SIMULADOS SCJA Certification Mock Exam Questions – SCJA -

http://www.scja.de/

SCJA Mock Exam 1 - Q1 - http://www.cafe4java.com/mockexams/scja/mock1/q1.php

SCJA Mini Mock Exam - http://www.ejavaguru.com/scjafreemockexam.php

Page 385: SCJA

385

Guia de Estudos para SCJA

E AGORA? Agora é só estudar, faça vários simulados, marque a aprova

e boa sorte.

PS: Se você passar na prova depois me manda pelo menos um email falando PASSEI.