Java
Java
JAVA
Fase 5
Intepretador Memória Principal
O interpretador lê os
bytecodes e os traduz
para uma linguagem que
o computador pode
. entender, possivelmente
.
armazenando valores dos
dados enquanto executa o
. programa.
Parâmetros. Parâmetros em
funções permitem que essas
Função Principal. Programas iniciem com valores recebidos
em Linguagem C e C++ buscam externamente, para variáveis
seu início pela função principal que utilizarão internamente.
(main()).
Programando JAVA
Elementos da Orientação a Objetos no Programa
// Nosso primeiro programa Java
// Conhecendo a estrutura de um programa Java
public class MeuPrimeiroPrograma {
public static void main (String arg[]) {
System.out.println("Olá Aluno de JAVA");
} // fim do método main
} // fim da classe MeuPrimeiroPrograma
Método. A impressão da
Classe. Como qualquer programa mensagem “Olá Aluno de
JAVA, esse programa exige uma Java” se deu pela execução do
classe (palavra reservada “class”). método “println”, do objeto, da
O fato de ser pública (palavra classe “System”.
“public”) garante visibilidade em
qualquer contexto de sua utilização Objeto. Para imprimirmos a
mensagem de saída de nosso
Biblioteca. A organização das programa precisamos de um objeto
classes JAVA se dá na forma de “out” da classe “System” da
bibliotecas. Nesse programa utilizamos a biblioteca (pacote) padrão java.lang
biblioteca padrão da linguagem JAVA
(biblioteca java.lang)
Estrutura de um Programa JAVA
package meupacote.lib; Package. Utilizado quando o código do
programa deverá fazer parte de um pacote.
Intervalo Positivo:
1,40129846432481707E-45 a
3,4028234663852886E+38 754)
double 64 Intervalo Negativo: (ponto flutuante IEEE
-1,7976931348623157E+308 a
-4,94065645841246544E-324
Intervalo Positivo:
4,94065645841246544E-324 a
1,7976931348623157E+308 754)
Operadores Condicionais
Operador Forma Descrição
&& op1 && op2 op1 e op2 são verdadeiros
|| op1 || op2 op1 ou op2 são verdadeiros
Tipos de Referência
• Uma variável declarada como um tipo de classe é vista
como uma referência, o que não acontece para um tipo
primitivo;
int i = 1;
int j = i;
String a = “Java”;
String t = a; t = “XML”
i 1 i 1
j 1 j 1
“Java”
a Endereço 1 a Endereço 1 “Java”
Revisão
• Exemplo:
Se a média das notas do aluno for maior ou igual a 6
Imprimir “Aprovado”
Senão
Imprimir “Reprovado”
Sintaxe
if (condição)
comando Java;
[ou {bloco de comandos Java;}]
else
comando Java;
[ou {bloco de comandos Java;}]
Estrutura de Seleção if/else
O Exemplo em Java
if (media >= 6){
System.out.print(“O Aluno está”);
System.out.println(“Aprovado”);
} // fim do bloco if
else {
System.out.print(“O Aluno está”);
System.out.println(“Reprovado”);
} // fim do bloco else
verdadeiro
Media >=6 Imprimir “Aprovado”
falso
Imprimir “Reprovado”
Operador Ternário Condicional ?:
Sintaxe
(condição) ? {ação ou bloco verdade} : {ação ou bloco falso}
O Exemplo em Java
System.out.println(media >= 6 ? “Aprovado” : “Reprovado”);
verdadeiro
Media >=6 Imprimir “Aprovado”
falso
Imprimir “Reprovado”
Estruturas if/else Aninhadas
Seqüência de estruturas if/else
• São utilizadas para o teste de múltiplos casos.
• Exemplo:
Se a média das notas do aluno for maior ou igual a 9 conceito = ‘A’
Senão
Se a média das notas do aluno for maior ou igual a 7 conceito = ‘B’
Senão
Se a média das notas do aluno for maior ou igual a 6 conceito = ‘C’
Senão conceito = ‘D’
Estruturas if/else Aninhadas
Em Java
if (media >= 9)
System.out.print(“O Conceito é A”);
verdadeiro
else
Media >=9 A
if (media >= 7)
System.out.print(“O Conceito é B”);
else falso
if (media >= 6) verdadeiro
System.out.print(“O Conceito é C”); Media >=7 B
else
System.out.print(“O Conceito é D”);
falso
verdadeiro
Media >=6 C
falso
D
Estrutura de Seleção Múltipla switch
switch/case
• Utilizada em programas em que uma
variável ou expressão pode assumir
diferentes valores e há uma ação (ou
bloco de ações) para cada valor
possível.
int contador = 1
falso
Instruções break e continue
• As instruções break e continue modificam o comportamento
das estruturas de repetição while, for, do/while ou switch. .
• A instrução break interrompe o laço (no caso das estruturas de
repetição) e impede a execução de outros casos de um
comando switch.
• Exemplo:
Enquanto verdade permanente
(ex: x == 1, sem mudar x)
realize as operações …..
se condição de fim for alcançada break;
Fim do Enquanto
• A instrução continue permite o salto do conjunto de operações,
com retorno à expressão condicional do laço, reiniciando o
mesmo (portanto, ao contrário do break, não interrompe o laço).
• Normalmente break e continue interrompem laços em que
estão inseridos. Para interromper um conjunto aninhado de
estruturas, deve-se utilizar break e continue rotulados (com
denominação de blocos).
Estrutura de Repetição for e continue
- for e continue
- do/while e continue
do {
if ((contador % 2)!=0) // resto da divisão por dois não é zero
continue;
pares++;
saidaFinal += contador + " ";
} while (++contador<numero);
UNIVERSIDADE FEDERAL DE SANTA CATARINA
INE - Curso de Sistemas de Informações
Revisão
Métodos são chamados por seu nome, com a relação de argumentos colocada entre
parênteses. Quando os métodos são estáticos, o nome inclui o nome da classe.
Métodos da Classe Math
Expressões Matemáticas
• Os métodos da classe Math permitem realizar cálculos
comuns necessários em expressões matemáticas.
• Exemplos de chamadas de métodos da classe Math:
– Função raiz quadrada: double y = Math.sqrt(10.0);
– Função mínimo. double z = Math.min(x,10);
ceil ( x ) arredonda o valor de x para o menor ceil(9.2) é 10.0; ceil (-9.8) é -9.0;
inteiro não menor que x
cos( x ) co-seno trigonométrico de x (x em cos(0.0) é 1.0
radianos)
exp( x ) x exp(1.0) é 2.718281828
método esponencial e
floor( x ) arredonda o valor de x para o maior floor(9.2) é 9.0; floor(-9.8) é -10.0
inteiro não menor que x
log( x ) logaritmo natural de x (base e) log(2.718282) é 1.0; log(7.389056) é 2.0
max( x, y ) maior valor entre x e y (também em max( 2.3, 12.7) é 12.7; max(-2.3;-12.7) é -2.3
versões para float, int e long)
menor valor entre x e y (também em min
min( x, y ) ( 2.3, 12.7) é 2.3; min(-2.3;-12.7) é -12.7
versões para float, int e long)
pow( x, y ) x elevado à potência y (x y ) pow(2.0, 7.0) é 128.0; pow(9.0,0.5) é 3.0
sin( x ) seno trigonométrico de x (x em sin(0.0) é 0.0
radianos)
sqrt( x ) raiz quadrada de x sqrt(900.0) é 30.0; sqrt(9.0) é 3.0
tangente trigonométrica de x (x em tan
tan( x ) (0.0) é 0.0
radianos)
Métodos
Criando Seus Próprios Métodos
• Além dos métodos da API Java, o programador pode desenvolver
os métodos para suas próprias classes.
• Por exemplo: suponha uma classe ApresentaQuadrados que tem
por objetivo apresentar o quadrado da série de números pares entre
o número zero e um número digitado pelo usuário.
• Pode-se criar a classe em Java por:
class public ApresentaQuadrados {
public static void main (String args[]) {
int numeroEntrada;
String respostaFinal = “”;
// ler número digitado pelo usuário
// realizar laço de zero até o número digitado
// se o número na seqüência do laço for par,
// chamar o método de calcular o valor ao quadrado
// guardar o valor resultante no String de resposta
// se não for, continue no laço
// apresentar a resposta final
}
static double calculaQuadrado (int x) {
return Math.pow(x,2);
} // fim do método calculaQuadrados da classe ApresentaQuadrados
} // fim da classe ApresentaQuadrados
Métodos
// Programa que exemplifica a criação de métodos de Função
import javax.swing.JOptionPane;
public class ApresentaQuadrados {
public static void main (String args[]) {
String numeroInformado, serieFinal = "", quadradoSerie = "";
int numero;
int numeroAtual = 0;
numeroInformado = JOptionPane.showInputDialog("Entre com um inteiro:");
numero = Integer.parseInt(numeroInformado);
do {
if ((numeroAtual % 2)!=0) // resto da divisão por dois não é zero
continue;
serieFinal += Integer.toString(numeroAtual) + " ";
quadradoSerie += Double.toString(calculaQuadrado(numeroAtual)) + " ";
} while (++numeroAtual < numero);
// exibe números pares e seus quadrados
JOptionPane.showMessageDialog(null,serieFinal+"\n"+quadradoSerie);
} // fim do main()
static double calculaQuadrado( double x) {
return Math.pow(x,2);
}
} // fim da classe
PARTE IV – ARRAY
Revisão
C [ 0 ] - 128
C [ 1 ] 8
C [ 2 ] 0 ...
C [ 3 ] 82 public static void main (String args[]) {
C [ 4 ] 64
int c = new int[11];
C [ 5 ] - 12
...
c = {-128,8,0,82,64,-12,65,43,76,11};
C [ 6 ] 65
// c[11] é zero por default (inicialização)
C [ 7 ] 43
...
C [ 8 ] 76
c[4] += c[2]; // c[4] = 64 + 0 = 64
C [ 9 ] 11 }
C [ 10 ] 0
Número da posição do
elemento dentro de um array
(índice ou subscrito)
Arrays
Nunca esquecer que
• Arrays em Java (como em C e C++) iniciam pela
posição zero. Portanto, um array c de três
elementos tem as posições c[0], c[1] e
c[2].
• Para se encontrar o elemento de um array se
usa o nome do array, seguido do subscrito (i.e.,
posição desejada), entre colchetes.
• Os índices ou subscritos são valores inteiros e
pode ser tratado como expressão de cálculo
(lvalue). Por exemplo: c [ x + 2] = 3; se x
vale 6, o nono elemento do array (c[8])
receberá o valor 3.
Arrays
Nunca esquecer que
• Arrays em Java podem ter seu comprimento sempre
conhecido pela variável lenght. Para determinar o
comprimento, basta usar o nome do array, seguido de
ponto e dessa variável.
• Arrays são manipulados em expressões diretas (e.g.,
c[2] = 4; ) por laços de repetição (e.g., para calcular
a soma do array, utilizar o comando for)
• Erros comuns em programação Java (e em C/C++) é
confundir o n-ésimo elemento do array com o subscrito n.
Por exemplo: o sétimo elemento de um array c é o
elemento c[6] e não o c[7] (que é o oitavo)
Arrays
Declarando Arrays
• Arrays são objetos que ocupam espaços contíguos de memória. O
programador deve especificar o tipo, nome do array e utilizar o
operador new para reservar o espaço necessário.
int c[]; // declaração do array
Nome do array
int array1[][] = { { 1, 2, 3 }, { 4, 5, 6 } };
int array2[][] = { { 1, 2 }, { 3 }, { 4, 5, 6 } };
int b[][];
b = new int[3][4];
int array1[][] = { { 1, 2, 3 }, { 4, 5, 6 } };
int array2[][] = { { 1, 2 }, { 3 }, { 4, 5, 6 } };
Revisão
• Conceitos Chaves
– Abstração
– Encapsulamento
– Polimorfismo
– Persistência
• Mecanismos Básicos
– Objetos
– Atributos
– Métodos ou Serviços
– Mensagens
– Relacionamentos
– Herança
Abstração
• No paradigma da Programação
Estruturada identifica-se as funções como
sendo "operações abstratas que resolvem
um problema de programação", ou seja,
ocorre a abstração de procedimentos.
• No paradigma da Orientação a Objetos,
tem-se a Abstração de Dados, onde uma
estrutura de dados deve incluir as
operações que ocorrem com ela.
Abstração
Instanciação
classificação
Classe ou
categoria
Funcionários
categoria Pessoa
Generalização
Especialização
Funcionário Cliente
categoria
ver: herança
Generalização / Especialização
Decomposição
classe Pessoa
Agregação
Endereço Nom
atributo classe e atributo
}
Classe & Objeto
• Cálculos
– Tratam-se de serviços que calculam o resultado a
partir dos valores dos atributos de um Objeto.
– Exemplo :
• cálculo do salário líquido do funcionário.
• Serviços de Ocorrência
– Referem-se aos "Serviços Implícitos" (ex. Criar,
Conectar, Alterar, Acessar, Destruir, etc).
– São os serviços que obrigatoriamente todos os
objetos devem ter.
– Não são mostrados nos Diagramas da AOO.
Serviços - Tipos
• Monitoração
– Tratam-se de serviços que para serem utilizados
precisam de entradas e/ou saídas externas ao objeto
ou os serviços que controlam a aquisição de dados
de dispositivos.
– Estes serviços podem precisar de alguns serviços
associados, como Iniciar ou Terminar.
– Exemplo :
• Um caso típico é o serviço de gravação de dados em um
arquivo, os objetos precisam saber do sistema operacional o
nome do Arquivo, o local onde pode-se gravar e se existe
espaço disponível.
Notação Gráfica - UML - Exemplo
Funcionário
nome:texto Classes devem ser
residência:texto nomeadas usando o
salário Bruto:real vocabulário do
faltas:inteiro domínio
cálculo salarial():real •Padrões de
imprimir dados() nomenclatura devem
setResidencia(R:Residencia) ser estabelecidos
getFaltas():faltas •Ex: Todos os nomes
apagarFuncionário() de classes são
criarNovo() substantivos no
singular, iniciando
com letra maiúscula
Mensagens
• É uma forma de relacionamento entre objetos;
• É através delas que os objetos interagem (se
comunicam) em um programa.
• Tratam-se de pedidos enviados a um objeto, a
fim de que este modifique seu estado ou retorne
algum valor.
• Em um programa orientado a objeto, nenhuma
outra parte do programa pode acessar
diretamente os dados de um objeto. Toda a
comunicação entre os objetos ocorre única e
exclusivamente através de mensagens.
Mensagens
• Uma mensagem é uma solicitação feita por um
objeto A a um objeto B;
• Como resultado desta solicitação, o objeto B irá
modificar seu estado ou irá retornar algum valor;
• O conceito de mensagem está diretamente
associado ao conceito de operação;
• A interação entre os objetos é feita através da
troca de mensagens;
• São representados na UML através dos
diagramas de iteração e de colaboração.
Relacionamentos
• Associação:
– é uma conexão bi-direcional entre classes
– É mostrada como uma linha conectando as classes
relacionadas
• Agregação:
– é um tipo mais forte de conexão, especialização de
uma associação, aonde a relação é entre o todo e
suas partes (relacionamento “parte-de” ou
“contenção”)
– É mostrada como uma linha conectando as classes
relacionadas com um losango perto da classes que
representa o todo
Relacionamento entre Classes
• Herança:
– um dos princípios da OO, permite a reutilização, uma nova
classe pode ser definida a partir de outra já existente
• Dependência:
– é uma forma mais fraca de relação, mostrando uma relação
entre um cliente e um fornecedor, aonde o cliente não tem
conhecimento semântico do fornecedor
– é mostrada como uma linha pontilhada entre o cliente e o
fornecedor
Associação
• Uma associação é uma conexão entre classes;
• Associações são representadas em um diagrama de classe
através de uma linha conectando as classes associadas;
• Os dados podem fluir em uma ou em ambas as direções
através do link.
Professor Disciplina
Associação
• Para exemplificar será criada uma classe Disciplina que
terá como função armazenar todas as disciplinas
ministradas pelo professor ou cursadas pelo aluno.
Classe Disciplina
/**
* Implementação da classe Disciplina
*/
public class Disciplina {
private String nomeDis; Atributos
private int cargaHoraria;
Funcionário Cliente
Nome Nome
Endereço Endereço
Salário Compra
Faltas TipoPagamento
CalcularSalario( GerarRecibo()
Mostrar() Mostrar()
Nome
Endereço
Salário Compra
Faltas TipoPagamento
CalcularSalario() GerarRecibo()
Mostrar() Mostrar()
Herança: Exemplo
Pessoa
Nome
Endereço
Mostrar()
Funcionário Cliente
Salário Compra
Faltas TipoPagamento
CalcularSalario() GerarRecibo()
Mostrar() Mostrar()
Subclasse
/**
Implementação da classe Professor que é uma subclasse da
classe Pessoa. Desse modo a classe Pessoa é considerada A classe Professor é uma
a super classe. subclasse da classe Pessoa
*/
public class Professor extends Pessoa {
private String aTitMaxima = "";
Atributos
//Atribui a titulação máxima
public void setTitMaxima(String pTitMaxima) {
//Realiza do controle para verificar se a titulação é válida
if ((!pTitMaxima.equalsIgnoreCase(Util.GRADUACAO)) &&
(!pTitMaxima.equalsIgnoreCase(Util.ESPECIALIZACAO)) && Método de
(!pTitMaxima.equalsIgnoreCase(Util.MESTRADO)) &&
(!pTitMaxima.equalsIgnoreCase(Util.DOUTORADO))) {
atribuição de
System.out.println("A titulação informada não é válida!!!"); informação
} else { set...()
aTitMaxima = pTitMaxima;
}
}
Mostrar()
ClasseD1
Mostrar()
ClasseD2
Mostrar()
ClasseD3
objGeral.mostrar();
Mostrar()
Polimorfismo
ClasseBase
Mostrar()
ClasseD1
Mostrar()
ClasseD2
Mostrar()
ClasseD3
objGeral.mostrar();
Mostrar()
Polimorfismo
ClasseBase
Mostrar()
ClasseD1
Mostrar()
ClasseD2
Mostrar()
ClasseD3
objGeral.mostrar();
Mostrar()
Polimorfismo
ClasseBase
Mostrar()
ClasseD1
Mostrar()
ClasseD2
Mostrar()
ClasseD3
objGeral.mostrar();
Mostrar()
Polimorfismo
ClasseBase
Mostrar()
ClasseD1
Mostrar()
ClasseD2
Mostrar()
ClasseD3
objGeral.mostrar();
Mostrar()
Polimorfismo
• Essa característica permite implementar sistemas que são
mais facilmente extensíveis;
• Os programas podem ser escritos para processar
genericamente – como objetos de superclasse – objetos de
todas as classes existentes em uma hierarquia;
• Desse modo o objeto adquire comportamento polimórfico.
//Exemplo de polimorfismo
Pessoa pes; // Referência da classe Pessoa (que é abstrata)
Professor prof = new Professor(argumentos); //Objeto prof (instância da classe Professor)
Aluno alu = new Aluno(argumentos); //Objeto alu (instância da classe Aluno)
/**
Classe de definição de constantes gerais
*/
package info.geral; Definição do pacote
public class Util {
• Conceitos
• Relacionamentos
• Regras
• Estudo de Caso
Visão Geral
Estereótipos para o Diagrama
<<boundary>> (limite)
Vinculo entre o ator e o início do fluxo
das atividades do use-case
<<control>> (controladores)
Geralmente estão associados as regras
de negócio – fazem a relação entre os
objetos de limite e entidades
<<entity>> (entidade)
Objetos que armazenam informações
sobre o domínio do problema
Regras para o Diagrama de Classe
Correto Errado
Regras para o Diagrama de Classe
• Regras úteis:
1. Identificar todas as classes que participam da
solução, classificado-as como LIMITE,
CONTROLE e ENTIDADE;
1. Para dar nomes as classes, utilize um radical para
auxiliar na classificação (ex: eItemEstoque,
cItemEstoque e tItemEstoque)
2. Faça o relacionamento entre elas conforme
as regras descritas para LIMITE, CONTROL
e ENTIDADES (todos os relacionamentos
serão considerados do tipo ASSOCIAÇÃO);
3. Desenhe as classes num diagrama de classe.
Como Fazer um Diagrama de Classe
Teoria: Prática:
Já vimos as regras… Aplicando as regras e
entendendo sua razão…
Exemplificando as Regras
Regra
tListagemItemEstoque 5
eItemEstoque
Regra 1.1
Regra 2
Regra 4
cItemEstoque
Diagramas de Classe
• Estrutura:
– Classes, associações e atributos
– Interfaces (com operações e constantes)
– Informação sobre o tipo dos atributos
– Navegabilidade
– Dependências
Exemplo – Seleciona Loja Virtual
Cenário Exemplo:
: NavegaLojas
: SiteSistema : Loja
: Cliente : Sistema de
cadastro de
: ProdutosLoja : MontaProdutosLoja
: Produto