Você está na página 1de 157

UNIVERSIDADE FEDERAL DE SANTA CATARINA

INE - Curso de Sistemas de Informações

INE5605 - DESENVOLVIMENTO DE SISTEMAS ORIENTADOS A OBJETOS I

PARTE I – INTRODUÇÃO À LINGUAGEM JAVA

JAVA

Roberto C. S. Pacheco Ricardo Noronha Rieke Tatiana Souza Gonzaga


pacheco@stela.ufsc.br rieke@stela.ufsc.br tatianag@stela.ufsc.br
Professor Monitor Monitora
Visão Geral
Fase 1
O programa é criado no
Editor Disco editor e armazenado
em disco.
Fase 2
Compilador O compilador cria
Disco bytecodes e os
armazena em disco.
Fase 3
Carregador Memória Principal
de Classes
O carregador de classe
coloca bytecodes na
memória.
Disco
.
.
.

Fonte: Deitel & Deitel, 2003.


Visão Geral
Fase 4 Verificador de Memória Principal
bytecodes
O verificador de
bytecodes confirma que
todos os bytecodes são
válidos e não violam
. restrições de segurança
. do 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.

Fonte: Deitel & Deitel, 2003.


Visão Geral
Programando JAVA
Elementos da Programação Tradicional 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

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.

import java.lang.*; Import. Seção de importação de bibliotecas.

Comentários. Com sintaxe “// ... para


/** Nosso primeiro programa Java comentários simples ou “/* .... */” e a mais recente
Conhecendo a estrutura de um
“/** .. */ que permite geração de documentação
programa Java */
automática (ferramenta javadoc)

public class MinhaClassePublica { Classes.


…… Declaração de
…… classes, atributos
/** Comentário sobre o método */ e métodos do
public (private/protected) tipoRet programa Java. A
nomeMetodo(<parametros>) { declaração e a
// código do método definição dos
} // fim da definição do método métodos ocorre
} // fim da classe obrigatoriamente
dentro do limite de
declaração da
Método main(). Indica que a classe classe.
Java é um aplicativo que será
interpretado pela máquina virtual.
Lembre-se….
// Comentários: Use comentários para esclarecer conceitos
utilizados no programa. Utilize:
// para comentários de linha única
/* …. */ para comentários de várias linhas
/** ….*/ em ambos os casos e quando
desejar incluir o texto na
documentação de seu programa
(javadoc).
Sempre inicie seus programas com comentário
descrevendo o propósito do mesmo.

public class MeuPrimeiroPrograma { ….. }


• Classes são tipos de dados declarados com a palavra
reservada class.
• Cada arquivo .java deve ter somente uma classe pública e
essa deve ter o mesmo nome do arquivo
Lembre-se….
public static void main (String args[]) {….}
• O método “main()” faz parte de todo aplicativo Java;
• Deve estar entre os métodos da classe pública e será
sempre por onde o aplicativo se inicia.
• Os argumentos passados ao método “main()” são uma
lista de objetos da classe String, separados por espaços
em branco.

System.out.println (“parâmetros”) & System.out.print(....)


• System.out é o objeto de saída padrão em Java
• Permite exibir strings e outros tipos de informações na
Janela de Comando (console do sistema operacional)
• System.out.println() exibe seus parâmetros e pula uma
linha
Lembre-se….
import javax.swing.JOptionPane;
• A Classe Java JOptionPane oferece caixas de diálogo predefinidas
que permitem aos programas exibir mensagens aos usuários;
• As classes predefinidas da linguagem Java são agrupadas em
categorias de classes chamadas pacotes (package), conhecidos como
bibliotecas de classes Java ou interface de programação de aplicativos
Java (Java API)
• Os nomes dos pacotes Java começam com Java (pacotes do núcleo
da linguagem) ou Javax (extensões ao núcleo)
• A instrução import é utilizada para identificar e carregar classes
utilizadas em um programa Java. As classes importadas pertencem a
pacotes do núcleo, extensões oficiais ou extensões fornecidas por
terceiros.
• As instruções import devem aparecer sempre antes da definição das
classes
• JOptionPane é uma classe da biblioteca de interfaces gráficas do Java
As Bibliotecas JAVA – rt.jar & tools.jar
O que há na Biblioteca Java?
• A Biblioteca (API – Application Programming Interface) é
formada por conjunto de classes do JDK;
• Exemplos de pacotes Java:
• java.lang: Tipos e funcionalidades básicas da linguagem. Inclui,
entre outras, as classes String, Math, Integer e Thread. É
importada automaticamente em seus programas Java;
• java.awt: componentes gráficos originais da linguagem (Abstract
Window Toolkit);
• javax.swing: pacote de eXtensão aos componentes gráficos com
melhoramentos à biblioteca AWT
• java.applet: classes específicas para tratamento de applets;
• java.net: recursos de rede (sockets e URLs);
• java.io: classes para escrita e leitura em arquivos;
• java.util: classes para tarefas gerais, tais como vetores e string de
tokens.
Palavras Reservadas em Java
Palavras-chave de Java
abstract boolean break byte case
catch char class continue default
do double else extends false
final finally float for if
implements import instanceof int interface
long native new null package
private protected public return short
static super switch synchronized this
throw throws transient true try
void volatile while

• Como toda linguagem, Java possui identificadores reservados


para comandos que permitem a execução de suas instruções

• IMPORTANTE: você não pode utilizar palavras-chave Java como


nome de variáveis ou classes.
Precedência e Associatividade
Operadores Associatividade Tipo
() da esquerda para a direita parênteses
*/% da esquerda para a direita de multiplicação
+- da esquerda para a direita de adição
< <= > >= da esquerda para a direita relacional
== != da esquerda para a direita de igualdade
= da direita para a esquerda de atribuição

• Java fornece um conjunto de operadores similar ao C e C++.


Entretanto, um erro bastante comum é tentar utilizar o operador de
atribuição = como igualdade ==;

• Todos os operadores, com exceção do operador de atribuição =,


associam da esquerda para a direita.
Operadores Aritméticos de Atribuição
Operador de
atribuição Exemplo Exemplificação Atribui
+= c += 7 c=c+7 10 a c
-= d -= 4 d=d-4 1ad
*= e *= 5 e=e*5 20 a e
/= f /= 3 f=f/3 2af
%= g %=9 g=g%9 3ag
Exemplos: int c = 3, d = 5, e = 4, f = 6, g = 12

• Java fornece vários operadores que abreviam as expressões de


atribuição;

•A simplificação de sintaxe não é a única vantagem desses


operadores. Eles aumentam a velocidade de acesso às variáveis
em programas.
Operadores de Incremento e Decremento
Operador Chamado de Expressão exemplo Explicação
Incrementa 'a' por 1, depois utiliza o novo valor
++ pré-incremento ++a de 'a' na expressão em que 'a' reside.
Utiliza o valor atual de 'a' na expressão em que
++ pós-incremento a++ 'a' reside, depois incrementa 'a' por 1
Decrementa 'b' por 1, depois utiliza o novo
-- pré-decremento --b valor de 'b' na expressão em que 'b' reside.
Utiliza o valor atual de 'b' na expressão em que
-- pós-decremento b-- 'b' reside, depois decrementa 'b' por 1

• Java possui operadores que acrescentam ou diminuem valores


unitários em variáveis. Seu funcionamento é semelhante à aplicação
do operador de atribuição com valor 1 (ou seja: x += 1;), mas permite
que o programador determine o momento em que deseja incrementar
(ou decrementar) sua variável, com relação ao uso na expressão em
que essa variável está inserida.
Tipos de dados primitivos em Java
Tipo Tamanho de bits Valores Padrão
boolean 8 true ou false
char 16 \u0000 ' a ' \UFFFF' (conj. De caracteres
(0 a 65535) Unicode ISO)
byte 8 -128 a 127
('27 a 27 -1)
short 16 -32.768a+32.767
15 15
'(2 a 2 -1)
int 32 -2.147.483.648a+2.147.483.647
31 31
'(2 a 2 -1)
long 64 -9.223.372.036.854.775.808a
'+9.223.372.036.854.775.807
63 63
'(2 a 2 -1)
float 32 Intervalo Negativo: (ponto flutuante IEEE
-3.4028234663852886E+38 a
-1,40129846432481707E-45

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”

b Endereço 1 b Endereço 2 “XML”


Identificadores
• Um identificador é o nome de uma variável, classe ou
método;
• Não pode começar com número ou caracteres especiais.
tipo;
enderecoResidencial;
Endereco_Residencial;
_endereco_residencial;
$valorSalario;
Lembre-se….
String primeiroNumero;

int numero1;
• A declaração de variáveis em Java segue a sintaxe
tipo nomeVariavel; ou
tipo nomeVariavel1, nomeVariavel2, ...;
• tipo pode ser um dos tipos da linguagem Java ou uma classe
definida por seu programa Java.
• Utilize preferencialmente letras minúsculas e com nomes
significativos para o programa para declarar nomes de variáveis ;
• Os tipos de variáveis da linguagem Java incluem inteiros (short,
int e long), números reais (float ou double), caracteres (char),
tipo lógico (boolean) e variável binária (byte)
Lembre-se….
primeiroNumero = JOptionPane.showInputDialog(“Digite o primeiro Número
inteiro: “);
• O método showInputDialog() combina a montagem da janela de
edição com o prompt de digitação do string fornecido pelo usuário.
• Os argumentos passados ao método showInputDialog() são vistos
sempre como Strings em seus programas Java.
• Não há em Java método que faça para as entradas o que os
métodos print() e println() fazem para as saídas de programas, ou
seja, tratamento de qualquer tipo da linguagem.
• Por essa razão as variáveis informadas aos programas Java são
sempre Strings que devem ser convertidas.
• Erros de entradas inesperadas (tipos incompatíveis com as
conversões) devem ser tratados pelo usuário.
Lembre-se….
numero1 = Integer.parseInt (primeiroNumero);
• O método Integer.parseInt() converte um objeto String em um
tipo int.
• A classe Integer está definida no pacote java.lang.

soma = numero1 + numero2;


• A instrução combina o sinal de atribuição (‘=‘) com soma (‘+’)
• O programa Java segue a precedência de operadores. No
exemplo, primeiro faz a adição e depois a atribuição do
resultado na variável soma.
• Para maior visibilidade no programa, utilize espaços para
separar operadores aritméticos

“A soma é”+ soma


• O operador “+” nessa expressão é de concatenação. Para fazê-la, Java primeiro fará
a conversão da variável soma em String e depois combinará o resultado em um
String maior contendo a primeira parte “A soma é” acrescida do resultado da variável
soma na forma de um string.
Lembre-se….
if (numero1 == numero2)
resultado = resultado + numero1 + “ == ” + numero2;
• A estrutura if compara os valores das variáveis numero1 e numero2
para determinar sua igualdade de valores.
• Caso numero1 e numero2 sejam iguais, a condição da estrutura if será
verdadeira e o programa colocará na variável resultado o string que
concatena as expressões na seguinte ordem:
Substring1: (resultado + numero1) ou seja: “”+ valor de numero1
Substring2: ((resultado+numero1)+”==“) acresce “==“
Substring3: ((resultado+numero1+”==“)+numero2) acresce valor de numero2
Final: resultado = Substring3
Ponto e Vírgula, Blocos
• (;) representa o término de uma linha de código;
recurso = (x + y) * 100 + (a - b - c);

• Um bloco é composto por uma coleção de declarações


delimitadas por chaves { };
{
x = x + 1;
y = y + 1;
}
UNIVERSIDADE FEDERAL DE SANTA CATARINA
INE - Curso de Sistemas de Informações

INE5605 - DESENVOLVIMENTO DE SISTEMAS ORIENTADOS A OBJETOS I

PARTE II – ESTRUTURA DE CONTROLE

Revisão

Roberto C. S. Pacheco Ricardo Noronha Rieke Tatiana Souza Gonzaga


pacheco@stela.ufsc.br rieke@stela.ufsc.br tatianag@stela.ufsc.br
Professor Monitor Monitora
Estrutura de Seleção if
A estrutura if
• Necessária sempre que os programas encontrarem seqüências
alternativas de ações, dependendo do valor de determinada
condição.
• Exemplo:
Se a média das notas do aluno for maior ou igual a 6
Imprimir “Aprovado”
Sintaxe
if (condição)
comando Java;
[ou {bloco de comandos Java;}] verdadeiro
Media >=6 Imprimir “Aprovado”
O Exemplo em Java
falso
if (media >= 6)
System.out.println(“Aprovado”);
if (media >= 6) {
System.out.print(“O Aluno está”);
System.out.println(“Aprovado”);
} // fim do bloco if
Estrutura de Seleção if/else
A estrutura if/else
• Necessária sempre o programa deve executar uma ou mais ações quando uma
condição for verdadeira ou, quando essa for falsa, executar outra ação ou
seqüência de ações.

• 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.

• Exemplo (organizando as ações de um


programa):

De acordo com a opção solicitada pelo


usuário:
caso 1: solicite a nota da prova do aluno
caso 2: solicite a nota do trabalho do aluno
caso 3: solicite a nota do projeto do aluno • Utilize o comando break para não
caso 4: calcule a média final do aluno acionar as ações nos blocos
default: encerre o programa definidos nos “cases” (e no
default) abaixo do “case”
acionado.
Estrutura switch/case
// programa exemplo de utilização da estrutura switch/case
import javax.swing.JOptionPane;
public class SwitchCase {
public static void main(String arg[]) {
int notaProva = 0, notaTrab = 0, notaProj = 0;
float mediaFinal = 0;
String esc;
int escolha;
esc = JOptionPane.showInputDialog ("Digite sua Escolha : ");
escolha = Integer.parseInt(esc);
switch (escolha) {
case 1: notaProva= Integer.parseInt(JOptionPane.showInputDialog("Nota da Prova: "));
case 2: notaTrab = Integer.parseInt(JOptionPane.showInputDialog("Nota do Trabalho: "));
case 3: notaProj = Integer.parseInt(JOptionPane.showInputDialog("Nota do Projeto: "));
default: if(escolha<4) mediaFinal = (notaProva + notaTrab + notaProj)/(3-escolha+1);
}
JOptionPane.showMessageDialog(null,"Media Final: "+
mediaFinal,"Resultados",JOptionPane.INFORMATION_MESSAGE);
System.exit( 0 );
} // fim do main
} // fim da classe pública
Estrutura de Repetição while
• A estrutura de repetição while permite
especificar uma ação ou um bloco de ações que
devem permanecer sendo repetidas enquanto
determinada condição for verdadeira.
• Exemplo:
•Enquanto o usuário desejar continuar
calcule a média de cada aluno

• O corpo da estrutura while pode ser uma


instrução única ou um bloco de comandos.
• Quando a condição do comando while se tornar
falsa, a ação (ou bloco) do comando será
finalizada. O programa continuará com a ação
imediatamente após o comando while.
• IMPORTANTE: você deve sempre prever o
comando ou ação que tornará falsa a condição
do comando while. Caso contrário seu
programa entrará em loop.
Estrutura while
// programa exemplo de utilização da estrutura de repetição while
import javax.swing.JOptionPane;
public class SwitchCase {
public static void main(String arg[]) {
int notaProva = 0, notaTrab = 0, notaProj = 0;
float mediaFinal = 0;
String esc;
int escolha = 1;
while ((escolha >=1) && (escolha <=4)){
esc = JOptionPane.showInputDialog ("Digite sua Escolha : ");
escolha = Integer.parseInt(esc);
switch (escolha) {
case 1: notaProva= Integer.parseInt(JOptionPane.showInputDialog("Nota da Prova: "));
case 2: notaTrab = Integer.parseInt(JOptionPane.showInputDialog("Nota do Trabalho: "));
case 3: notaProj = Integer.parseInt(JOptionPane.showInputDialog("Nota do Projeto: "));
default: if(escolha<4) mediaFinal = (notaProva + notaTrab + notaProj)/(3-escolha+1);
}
JOptionPane.showMessageDialog(null,"Media Final: "+
mediaFinal,"Resultados",JOptionPane.INFORMATION_MESSAGE);
mediaFinal = notaProva = notaTrab = notaProj = 0;
} // fim do while
System.exit( 0 );
} // fim do main
} // fim da classe pública
Estrutura de Repetição while
// Programa de média da turma com repetição controlada por contador
import javax.swing.JOptionPane;
public class MediaWhile {
//o método main inicia a execução do aplicativo Java
public static void main(String args[]) {
int total, // soma das notas digitadas pelo usuário
contadorNotas, // número de notas lidas
valorNota, // valor da nota digitada
media; // média de todas as notas
String nota; // nota digitada pelo usuário
// Fase de Inicialização
total = 0; // limpa variável total
contadorNotas = 1; // prepara para executar laço
// Fase de Processamento
while (contadorNotas <= 10) {
// solicita entrada e lê a nota digitada pelo usuário
nota = JOptionPane.showInputDialog("Entre com a nota - valor inteiro:");
// converte nota de String para inteiro
valorNota = Integer.parseInt(nota);
// adiciona a nota ao total
total += valorNota;
// adiciona 1 ao contador de notas
contadorNotas++;
} // fim do laço while
media = total/10; // executa divisão inteira
// exibe média das notas do teste
JOptionPane.showMessageDialog(null,"Média da Turma é " + media,"Media turma",
JOptionPane.INFORMATION_MESSAGE);
System.exit( 0 );
} // fim do método main
} // fim da classe MediaWhile
Estrutura de Repetição do…while
• A estrutura de repetição do/while permite repetir uma
ação ou um bloco de ações até que determinada
condição seja verdadeira. A diferença para a estrutura
while está no fato de que do/while inicia pela execução Obtém notas da turma

do bloco e somente após a mesma analisa a condição.


• Exemplo: Calcula e apresenta média
Faça
Obtenha as notas da turma
Calcula e Apresente a média
Enquanto houver mais turmas para calcular a média Continua
Sim
• O do/while sempre admite que a primeira interação
ocorre antes da confirmação da condição falso

• O corpo da estrutura do/while pode ser uma instrução


única ou um bloco de comandos.
• Quando a condição do comando do/while se tornar
falsa, o programa continuará com a ação imediatamente
após o comando do/while.
• IMPORTANTE: você deve sempre prever o comando ou
ação que tornará falsa a condição do comando
do/while. Caso contrário seu programa entrará em loop.
Estrutura de Repetição for
• A estrutura de repetição for permite repetir uma ação ou um bloco de ações
com controle de contador ou da condição de permanência no looping.
• Exemplo:
Para o contador ‘i’ de 1 a 10 faça
Obtenha a nota do i-ésimo aluno
some a nota do i-ésimo aluno ao total;
Calcule a média da turma como sendo o total divido por 10
• O comando for tem três seções de variáveis:
for (inicializadores; condição de continuação; incrementos)
{
ação ou bloco de ações no comando;
}

int contador = 1

Contador <=10 Instruções no corpo contador++


Verdadeiro do laço “for”.

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

for (int contador=0; contador < numero; contador++) {


if ((contador % 2)!=0)//resto da divisão por dois não é zero
continue;
pares++;
saidaFinal += contador + " ";
}

- 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

INE5605 - DESENVOLVIMENTO DE SISTEMAS ORIENTADOS A OBJETOS I

PARTE III – MÉTODOS

Revisão

Roberto C. S. Pacheco Ricardo Noronha Rieke Tatiana Souza Gonzaga


pacheco@stela.ufsc.br rieke@stela.ufsc.br tatianag@stela.ufsc.br
Professor Monitor Monitora
Métodos
O que são Métodos
• Métodos são procedimentos de classe, onde estão
implementados os processos disponíveis a objetos
(instâncias) da classe.
• Os métodos permitem que objetos de uma classe realizem
tratamento de dados (normalmente atributos da própria
classe), cálculos, comunicação com outros objetos e todo
procedimento necessário às ações das instâncias da
classe.
• Em Java, métodos são funções de classes. Os programas
vistos até aqui no curso tinham a função main() como
método das respectivas classes públicas que deram nome
aos nossos programas.
Métodos
Módulos: Pacotes de Classes+Métodos
• A melhor forma de se construir programas está na
modularização, ou seja, na divisão do sistema em
módulos específicos.
• Em Java os módulos são descritos por métodos e
classes, que podem ser:
– Pré-empacotados: disponíveis na Java API (bibliotecas de
classes Java).
– Métodos definidos pelo programador. Tarefas específicas
que podem ser utilizadas muitas vezes por um programa.

• Um método é acionado (invocado) por uma chamada de


método. Essa pode ser realizada por objetos da classe
do método ou por chamadas à classe (métodos
estáticos)
Métodos – Exemplos conhecidos
// programa exemplo de utilização da estrutura de repetição while
import javax.swing.JOptionPane;
public class SwitchCase {
public static void main(String arg[]) {

case 1: notaProva= Integer.parseInt(JOptionPane.showInputDialog("Nota da Prova: "));

JOptionPane.showMessageDialog(null,"Media Final: "+
mediaFinal,"Resultados",JOptionPane.INFORMATION_MESSAGE);

System.exit( 0 );
} // fim do main
} // fim da classe pública
Chamadas de Método.
1. método parseInt() da classe
Integer (pacote java.lang).
API Java. Importação de classe
da API java. 2. método exit() da classe System
(pacote java.lang)
3. Método showMessageDialog()
da classe JOptionPane (pacote
javax.swing)

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);

• Os métodos da classe Math são métodos estáticos,


ou seja, não necessitam de objetos da classe para sua
chamada. Por essa razão você deve precer as
chamadas dos métodos com o nome da classe seguido
de ponto (como já fizemos nos programas anteriores):
– JOptionPane.showMessageDialog(…)
– System.exit( 0 );
Métodos da Classe Math
Chamada de Métodos
• Métodos podem ser chamados em declarações de variáveis ou
como parâmetros de outros métodos
float z = sqrt(4.0*x);
System.out.println(Math.sqrt(x+y*f));
Constantes
• Programas Java podem definir constantes cujo valor inicializado na
declaração permanece imutável. Para isso a declaração utilizada é
final. A tentativa de alteração de variável declarada como final
gera erro de sintaxe.
final float G = 9.81; // aceleração da gravidade;
• A classe Math possui duas constantes importantes em programas
matemáticos:
Math.E = 2.7282818284590452354
// valor base de logaritmos naturais
Math.PI = 3.14159265358979323846
// relação entre a circunferência e o diâmetro de círculos
Métodos da Classe Math
Método Descrição Exemplo
valor absoluto de x (tem versões para abs
abs( x ) (23.7) é 23.7; abs(0.0) é 0.0; abs(-23.7) é 23.7
float, int e log)

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

O método calculaQuadrado() da classe ApresentaQuadrados é chamado pelo método main()


da mesma classe. Para cada número na série de pares chama-se o método da classe para o
cálculo de seu quadrado (somente pelo nome, dado que o método é da própria classe). O
resultado é retornado à função main() e guardado no string de saída do sistema.
UNIVERSIDADE FEDERAL DE SANTA CATARINA
INE - Curso de Sistemas de Informações

INE5605 - DESENVOLVIMENTO DE SISTEMAS ORIENTADOS A OBJETOS I

PARTE IV – ARRAY

Revisão

Roberto C. S. Pacheco Ricardo Noronha Rieke Tatiana Souza Gonzaga


pacheco@stela.ufsc.br rieke@stela.ufsc.br tatianag@stela.ufsc.br
Professor Monitor Monitora
Arrays
O que são Arrays
• Estruturas de dados, na forma de um grupo de posições
contíguas na memória, com valores de mesmo nome e
mesmo tipo. Arrays são, portanto, a forma pela qual se
armazenam vetores de tipos.
• Os arrays são estruturas estáticas, isto é, uma vez criados
mantém seu tamanho inicial. Para estruturas dinâmicas a
Linguagem Java possui classes especiais (classes
Vector e Array)
• Os elementos de um array são encontrados pela
referência do nome do array e pelo número da posição em
que se encontra (também chamada índice ou subscrito).
Arrays
Nome do array (todos os
elementos do vetor passam a
ter o mesmo nome: ‘c’)

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

c = new int[12]; // declaração e reserva de espaço do do array

• Arrays podem ser declarados e inicializados ao mesmo tempo:


int c[] = {1,2,3,4,5,6,7,8,9,10,11,12};
• Nesse caso, a reserva de espaço feita pelo operador new é
automaticamente realizada pela máquina virtual Java.
• Quando os arrays são declarados sem inicialização, o Java faz a
inicialização para zeros (variáveis numéricas), false (variáveis lógicas
do tipo boolean) ou null para referências a tipos de objetos.
Arrays
Declaração Múltipla de Arrays
• Um programa Java pode declarar vários arrays em uma
única declaração.
int [] arrayA, arrayB, arrayC; // três arrays de
inteiros

int arrayD = new int[121]; // criação de espaço com


inicialização

String objTexto[] = new String [120], x[] = new


String[21];
// objTexto contém 120 objetos da classe String
// x contém 21 objetos da classe String

• Arrays de tipos não primitivos (ex. Objetos da classe String)


guardam referências a objetos em seus elementos. A
incialização de referências é null.
Arrays
Exemplo: programa de criação e apresentação dos
elementos do array (valores de inicialização automática).

// ArrayInicializacao - criação de um array


// Baseado em Deitel e Deitel.
import javax.swing.*;
public class ArrayInicializacao {
// função main
public static void main( String args[] ) {
int array[]; // declara a referência a um array
array = new int[ 10 ]; // aloca dinamicamente o espaço para o array
String saidaStr = "Subscrito\tValor\n"; // string alocado e inicializado
// adiciona cada valor dos elementos do array ao String de saída
for ( int contador = 0; contador < array.length; contador++ )
saidaStr += contador + "\t" + array[ contador ] + "\n";
JTextArea saidaArea = new JTextArea();
saidaArea.setText( saidaStr );
JOptionPane.showMessageDialog( null, saidaArea,
"Inicializando um Array de valores inteiros",
JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 );
}
}
Arrays
Utilizando uma lista de inicializadores para
inicializar os elementos de um array

• Programas Java podem declarar e inicializar


os arrays por meio de chaves e valores,
separados por vírgulas.
int array[] = {10,20,30,40,50}; // array de 5 ints

• Declarações com inicializações dispensam o


operador new porque o espaço é reservado
automaticamente pelo compilador.
Arrays
Exemplo: programa de criação e inicialização de array.

// ArrayInicializacao - criação de um array


// Baseado em Deitel e Deitel.
import javax.swing.*;
public class ArrayInicializacao2 {
// função main
public static void main( String args[] ) {
// declaração com inicialização (dispensando operador new)
int array[] = {11,22,33,44,55,66,77,88,99,100};
String saidaStr = "Subscrito\tValor\n"; // string alocado e inicializado
// adiciona cada valor dos elementos do array ao String de saída
for ( int contador = 0; contador < array.length; contador++ )
saidaStr += contador + "\t" + array[ contador ] + "\n";
JTextArea saidaArea = new JTextArea();
saidaArea.setText( saidaStr );
JOptionPane.showMessageDialog( null, saidaArea,
"Inicializando um Array de valores inteiros",
JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 );
}
}
Arrays
Calculando o valor a armazenar em cada
elemento de um array

• O tamanho de arrays pode ser declarado


com o tipo final.
final int TAM_ARRAY = 10;
int array[TAM_ARRAY]; // array de 10 ints (incializados com
zeros)

• Também pode ser utilizado um determinado


valor atribuído a uma variável.
Arrays
Referências e Parâmetros por referência

• Métodos (ou funções) podem receber parâmetros


tanto por chamada por valor como por chamada
por referência.
• Passagem por valor: o método recebe uma cópia
do valor original e não alteram o valor original do
argumento passado ao método.
• Passagem por referência o método recebe a
localização da variável original e altera o próprio
argumento originalmente passado ao método. Há
um maior desempenho, pois elimina a
necessidade de cópias de valores.
Arrays
Referências e Parâmetros por referência
• Em Java o programador não pode decidir como
deseja trabalhar os parâmetros dos métodos. A
regra geral é:
• Tipos Primitivos: Passagem por cópia:
argumentos de tipos da linguagem são sempre
passados por cópia de valor e o return do método
sempre retorna uma cópia de valor.
• Objetos são passados por referência objetos de
classes são sempre passados por referência. Isso
significa que um objeto não é passado para
método e sim sua referência. Isso significa que o
método sempre manipula diretamente o objeto
Arrays
Referências e Parâmetros por referência
int array[] = {1,2,3,4,5}
• Passagem por cópia: deve-se passar o elemento
de determinada possição do array;
modificaElemento(array[3]);
• Passagem por referência: deve-se especificar o
nome do array sem nenhum colchetes.
modificaElemento(array);
Arrays
// PassandoArray.java
// Passando arrays e elementos individuais de arrays para métodos
// Deitel & Deitel
import javax.swing.*;
public class PassandoArray {
public static void main( String args[] ) {
JTextArea saidaArea = new JTextArea();
int array[] = { 1, 2, 3, 4, 5 };
String saida =
"Efeito da passagem de um array por referência:\n" +
"Os valors originais do array são:\n";
// acrescenta os elementos do array original ao String saida
for ( int counter = 0; counter < array.length; counter++ )
saida += " " + array[ counter ];
modifyArray( array ); // array passado por referência
saida += "\n\nOs valores modificados dos arrays são:\n";
// acrescenta os elementos do array modificado ao String saida
for ( int counter = 0; counter < array.length; counter++ )
saida += " " + array[ counter ];
saida += "\n\nEfeitos da passagem de elementos do array " +
"por valor:\n" +
"a[3] antes de modifyElement: " + array[ 3 ];
Arrays
// tentativa de modificar array[ 3 ]
modifyElement( array[ 3 ] );
saida += "\na[3] após modifyElement: " + array[ 3 ];
saidaArea.setText( saida );

JOptionPane.showMessageDialog( null, saidaArea,


"Programa dos modelos de passagem de valores",
JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 );
} // fim do método main

// multiplica cada elemento do array por 2


static void modifyArray(int array2[]) {
for ( int counter = 0; counter < array2.length; counter++ )
array2[ counter ] *= 2;
}

// multiplica o argumento (parâmetro) por 2


static void modifyElement( int element ) {
element *= 2;
}
} // final da classe PassandoArray
Arrays
Arrays Multidimensionais

• Permitem representar estruturas mais


complexas, tais como tabelas
(bidimensional) ou de maior ordem;
• Para identificar um elemento específico da
tabela devemos especificar dois índices
(subscritos) - o primeiro identifica a linha e o
segundo a coluna (bidimensional);
Arrays
Arrays Multidimensionais
Coluna 0 Coluna 1 Coluna 2 Coluna 3
Linha 0 a [0] [0] a [0] [1] a [0] [2] a [0] [3]
Linha 1 a [1] [0] a [1] [1] a [1] [2] a [1] [3]
Linha 2 a [2] [0] a [2] [1] a [2] [2] a [2] [3]
Índice da coluna
Índice da linha

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 b[][] = new int[3][4];


String[][] desenhos = {
{ "Flintstones", "Fred", "Wilma", "Pebbles", "Dino" },
{ "Rubbles", "Barney", "Betty", "Bam Bam" },
{ "Scooby Doo", "Scooby Doo", "Shaggy", "Velma", "Fred", "Daphne" } };
Arrays
// ArrayMultiDim_1.java
// Inicialização de arrays multidimensionais
// Deitel & Deitel
import javax.swing.*;
public class ArrayMultiDim_1 {
static JTextArea saidaArea = new JTextArea();
public static void main( String args[] ) {

int array1[][] = { { 1, 2, 3 }, { 4, 5, 6 } };
int array2[][] = { { 1, 2 }, { 3 }, { 4, 5, 6 } };

saidaArea.setText( "Valores do 1. array\n" );


geraSaida( array1 );

saidaArea.append( "\nValores do 2. array\n" );


geraSaida( array2 );

JOptionPane.showMessageDialog( null, saidaArea,


"Array Multidimensional",JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 );

} // fim do método main


Arrays
// acrescenta linhas e colunas de um array a saida
static void geraSaida( int array[][] ) {
// percore as linhas do array com um laço
for ( int linha = 0; linha < array.length; linha++ ) {
// percorre as colunas da linha atual com um laço
for ( int coluna = 0;
coluna < array[ linha ].length;
coluna++ )
saidaArea.append( array[ linha ][ coluna ] + " " );
saidaArea.append( "\n" );
}
}
}

} // fim da classe ArrayMultiDim_1


UNIVERSIDADE FEDERAL DE SANTA CATARINA
INE - Curso de Sistemas de Informações

INE5605 - DESENVOLVIMENTO DE SISTEMAS ORIENTADOS A OBJETOS I

PARTE V – ORIENTAÇÃO A OBJETOS

Revisão

Roberto C. S. Pacheco Ricardo Noronha Rieke Tatiana Souza Gonzaga


pacheco@stela.ufsc.br rieke@stela.ufsc.br tatianag@stela.ufsc.br
Professor Monitor Monitora
Orientação a Objetos

• Conceitos Chaves
– Abstração
– Encapsulamento
– Polimorfismo
– Persistência
• Mecanismos Básicos
– Objetos
– Atributos
– Métodos ou Serviços
– Mensagens
– Relacionamentos
– Herança
Abstração

• Nesta fase tenta-se retirar elementos e


requisitos que irão ajudar na resolução de um
problema;
• É o processo de retirar do domínio do problema
os detalhes relevantes e representá-los não
mais em uma linguagem do domínio e sim na
linguagem da solução.
• O sucesso de um Programa Orientado a Objeto
está condicionado a uma boa abstração do
problema.
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

• Este conceito está relacionado às


atividades de Modelagem de Negócio e
de Requisitos e a fase de Concepção de
um ciclo de vida iterativo;
• e é representado pelo diagrama de Use
Case (Caso de Uso) da UML.
Abstração

• Primeiramente procura-se dividir o problema


por assuntos (pacotes ou subsistemas);
• Dentro de cada assunto pode-se observar
alguns elementos tais como :
– categorias;
– Ações;
– informações de estado;
– Operações;
Categoria

• Por exemplo, se tentarmos resolver um


problema ligado a esportes de modo geral
• Ao abstrair a categoria bola, que é utilizada em
esportes tais como: futebol, basquete, golfe, etc.
Esta instância concreta, representando todas as
bolas, poderia ser descrita pelas propriedades :
– Peso;
– Cor;
– Diâmetro;
– etc.
Operações Abstratas

• As operações mais relevantes para a


modelagem conceitual de domínios, surgiram de
Pesquisas oriundas das áreas de Inteligência
Artificial e de Banco de Dados e são 3 :
– classificação (instanciação)
– generalização (especialização)
– agregação (decomposição)
• cada uma delas possui a sua operação inversa
Classificação / Instanciação

• Trata-se da observação de propriedades


comuns a entidades e a classificação das
mesmas em grupos e classes.
• Por exemplo, duas pessoas, Abravanel e
Edson, podem ser classificados como
Funcionários de uma loja

Instanciação
classificação
Classe ou
categoria
Funcionários

Indivíduo Abravanel Edson


Generalização / Especialização

• É a operação de verificar semelhanças


entre duas categorias, observando
propriedades idênticas, de tal forma que
origine uma categoria mais genérica.

categoria Pessoa

Generalização

Especialização
Funcionário Cliente
categoria
ver: herança
Generalização / Especialização

• A premissa básica é a de que categorias


especializadas satisfaçam todas as
propriedades das categorias genéricas, a
qual está vinculada.
• Por outro lado, deve haver pelo menos
uma propriedade que distinga uma
categoria especializada de uma categoria
genérica.
Agregação / Decomposição
• Esta operação ocorre quando propriedades (e
categorias) são combinadas (agregadas) para
formar uma outra categoria
• A operação inversa é caracterizada pela
decomposição de uma categoria em partes.

Decomposição
classe Pessoa

Agregação
Endereço Nom
atributo classe e atributo

ver: Todo Parte


Agregação / Decomposição

• A idéia de agregação e decomposição está na


base da abordagem sistemática de qualquer
tarefa ou fenômeno complexo.
• Esta abordagem forma uma visão global, que
vai sendo detalhada a cada passo da tarefa,
temos um processo de refinamento.
• “Este processo se assemelha a uma nave que
vai se aproximando da Terra, permitindo a cada
instante, ter uma visão mais detalhada da
superfície terrestre”.
Abstração

• Em conjunto com a abstração temos o conceito,


a prototipagem, isto é, faz-se uma primeira
análise, abstraindo-se ao máximo que se puder.
• Parte-se para a parte de programação, no
sentido de se construir um protótipo do sistema.
Com o protótipo em mãos volta a se fase da
abstração. E fica-se interagindo entre protótipo-
abstração até que a Análise esteja completa.
Encapsulamento
• É a propriedade de se implementar dados
e procedimentos correlacionados em uma
mesma entidade (objeto).
• Trata-se de uma das principais vantagens
da Programação Orientada a Objetos
sobre a Programação Estruturada,
principalmente na reutilização de códigos.
Encapsulamento

• Pode-se entender intuitivamente o significado de


encapsulamento quando se observa o mundo
real. Nos objetos do mundo real, atributos e
ações são inerentes ao próprio objeto.
• Exemplo :
– A um automóvel estão associados tanto atributos
(modelo, kilometragem, capacidade do tanque, etc),
quanto suas potencialidades (velocidade média,
consumo de combustível, etc).
Encapsulamento

Código Código Código


... ... ...
... ... ...
Dado Dado Dado Dado
Programação estruturada

Código Código Código


... ... ...
... ... ...
Dado Dado Dado
Orientação a Objetos
Mecanismos Básicos da Análise Orientada a
Objetos
• Objetos
– Classe
– Classe & Objeto
• Atributos
• Métodos ou Serviços
• Mensagens
• Herança
Objetos

• Trata-se de uma abstração de algo no


domínio do problema.
• Reflete a capacidade do sistema de
guardar informações sobre o elemento
abstraído, interagir com este, ou ambos.
• Nele estão contidos os dados (atributos) e
os procedimentos (serviços) exclusivos ao
objeto.
Objetos - Exemplo
– Na informatização do cadastramento de pessoas de
uma loja comercial, serão encontrados diversos
objetos pertencentes ao domínio do problema.
– Um objeto abstraído poderia ser o Silvio, um
funcionário da loja.
– Este objeto possui suas particularidade : “Abravanel
dos Santos” (Nome) , “rua de Baixo, 13” (Endereço),
1 (Faltas) , 1000.00 (Salário Base).
– Há também os eventos que podem ocorrer sobre os
atributos anteriores, como : o cálculo salárial,
alteração do endereço, etc;
– Um objeto refere-se a uma OCORRÊNCIA ÚNICA.
Classes
• Uma classe é uma coleção de objetos com um
estrutura, comportamento, relações e semântica
comuns
• Classes são descobertas pelo exame dos
objetos nos diagramas de Sequência e
Colaboração;
• Nas classes estão descritas as características
dos Atributos e Métodos, que representarão as
particularidades dos vários objetos.
Tipos de Classes
• Classe concreta: classe que permite que sejam realizadas
instância, ou seja, é possível através do operador new criar
objetos;
• Classe abstrata: esse tipo de classe não permite que sejam
realizas instâncias. Em geral são implementadas como
superclasses em situações de herança, permitindo garantir
que somente as subclasses possuam instâncias.
– Outra característica é possibilidade dessa classe ser uma
interface de definição de métodos, onde esses métodos não
possuem implementação. A implementação seria então realizada
pelas subclasses. Isso é similar ao conceito de Interface.
Entretanto a diferença, quando utilizando interface, é a
possibilidade de uma classe implementar várias interfaces (isso
será visto mais adiante);
– Obs: vale ressaltar que uma superclasse não precisa ser
necessariamente abstrata.
Classe Concreta
/**
Classe de definição de constantes gerais
*/
public class Util {
public static final String MASCULINO = "M";
public static final String FEMININO = "F";

public static final int MIN_IDADE = 10;


public static final int MAX_IDADE = 120;

public static final String GRADUACAO = "Graduação";


public static final String ESPECIALIZACAO = "Especialização"; Constantes
public static final String MESTRADO = "Mestrado";
public static final String DOUTORADO = "Doutorado";

public static final String CC = "Ciências da Computação";


public static final String SI = "Sistemas de Informação";
}

• static: permite indicar a um atributo ou método que para ser


acessado não precise de uma instância, ou seja, não é
necessário criar um objeto;
• final: nesse contexto (definição de uma variável) final indica
que esta variável irá se comportar como uma constante.
Classe Abstrata (Superclasse)
/**
Implementação de uma classe abstrata
*/
public abstract class Pessoa {
private String aNome = "", aEndereco = "", aSexo = "";
private int aIdade = 0; //Atributos do tipo in Atributos

public void setNome(String pNome) {


aNome = pNome;
}

public void setEndereco(String pEndereco) {


aEndereco = pEndereco;
}
Métodos de
public void setIdade(int pIdade) { atribuição de
//Determina uma regra de validação do atributo idade, informação
//evitando que qualquer valor seja atributo
if ((pIdade < Util.MIN_IDADE) || (pIdade > Util.MAX_IDADE))
set...()
{
System.out.println("Idade deve ser maior ou igual a "+
Util.MIN_IDADE +" e menor ou igual "+
Util.MAX_IDADE);
} else {
aIdade = pIdade;
}
}
...
Classe Abstrata (Superclasse)
public void setSexo(String pSexo) {
if ((!pSexo.equalsIgnoreCase(Util.MASCULINO)) &&
(!pSexo.equalsIgnoreCase(Util.FEMININO))) {
System.out.println("O conteúdo informado para“+
“ o atributo sexo não é válido");
} else {
aSexo = pSexo;
}
}

public String getNome() { return aNome; }

public String getEndereco() { return aEndereco; }


Métodos de
public int getIdade() { return aIdade; } recuperação de
informação
public String getSexo() { return aSexo; }
get...()
public String getDescricao() {
String mensagem = aNome+" reside na "+aEndereco+
" possui "+aIdade+" anos de idade";
if (aSexo.equalsIgnoreCase(Util.MASCULINO))
return mensagem = "O Sr. "+mensagem;
else
return mensagem = "A Sra. "+mensagem;
}

}
Classe & Objeto

• Usa-se o termo "Classe & Objeto" para se


referenciar uma Classe e os Objetos que
a ela pertencem.
• Instância
– Um sinônimo para o termo Objeto, também
encontrado na literatura, é Instância de Uma
Classe, ou simplesmente Instância.
– Por exemplo : o objeto “Vectra" é uma
instância da classe "Automóvel".
Atributos

• Um atributo é qualquer propriedade, qualidade


ou característica que pode ser atribuída a uma
pessoa ou objeto (Webster).
• É um dado (informação de estado), para o qual
cada objeto em uma classe tem seu próprio
valor;
• Os atributos devem ser manipulados
exclusivamente por serviços, portanto são
privativos da classe, não devendo ter seus
valores alterados por nenhuma outra parte que
não pertença a própria classe.
Atributos

• A estrutura de uma classe é representada


pelos seus atributos
• Atributos podem ser encontrados pelo
exame das definições de classes,
requisitos de problemas, e pela aplicação
do conhecimento do domínio
Atributos - exemplo

• na classe Funcionário, alguns atributos são :


• Nome, Endereço, Telefone, CPF, Código, Data
de Admissão, Turno, Faltas, Horas Extras, No.
de dependentes e Salário Base.
– o objeto Silvio possui como informação de estado
para o atributo nome o valor de : “Abravanel dos
Santos” e para faltas : o valor 1.
• Outros Exemplos :
– classe Automóvel - atributos : Modelo, Marca, Ano,
Cor, Número do Chassi.
– Disco - atributos Título, Código, Gênero
Métodos ou Serviços
• São as operações efetuadas pelos objetos;
• O comportamento de uma classe é representado pelas
suas operações;
• “É um comportamento específico, residente no objeto,
que define como este deve agir quando exigido, através
do recebimento de uma mensagem”
• São eles que irão alterar os valores dos atributos de um
determinado objeto.
– Do ponto de vista da programação, em um Programa Orientado
a Objetos, os serviços estão implementados em funções
colocados a nível do objeto.
Métodos ou Serviços - Exemplo

• No sistema da loja comercial, alguns dos


serviços são as operações de Cálculo do
salário, Alteração do Endereço. Que podem ser
efetuadas sobre os atributos de um funcionário.
• no caso do Cálculo do salário, alguém enviará
uma mensagem para que o objeto calcule o
salário, e o objeto (que já possui conhecimento
dos dados necessários para o cálculo), fará o
processamento e retornará para o alguém o
valor do salário líquido.
Serviços - Tipos

• 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

• Relações fornecem um caminho para a


comunicação entre os objetos
• Diagramas de sequência e/ou colaboração
são examinados para determinar quais
ligações entre objetos precisam existir para
se chegar ao comportamento desejado. --
Caso dois objetos precisem “conversar”
deverá haver uma ligação entre elas
Relacionamentos
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;

public Disciplina(String pnomeDis, int pcargaHoraria) {


nomeDis = pnomeDis; Construtor
cargaHoraria = pcargaHoraria;
}
Método de
public String getDescricao() {
return " Disciplina: "+nomeDis+" Carga Horária: recuperação de
"+cargaHoraria; informação
} get...()
}
Associação
• Por questões de simplificação o atributo aDisc faz parte da classe Pessoa.
Isso é válido porque todas as subclasses do modelo terão referência a
disciplinas ministradas (professor) ou cursadas (aluno). Entretanto, caso
fosse implementado mais um nível na hierarquia, por exemplo: criar uma
classe funcionário e as especializações professor e diretor, eventualmente
deveríamos rever a hierarquia, pois somente professor e aluno teriam
disciplinas.
/**
Implementação de uma classe abstrata
*/
public abstract class Pessoa {
Atributo da classe Disciplina
private String aNome = "", aEndereco = "", aSexo = "";
private int aIdade = 0;
private Disciplina aDisc[]; //Atributo da classe Disciplina

//Conjunto de métodos já definidos


Método que retorna uma única
public String getDisciplina(int pIndice) { disciplina utilizando um índice
return aDisc[pIndice].toString();
} de acesso a array aDisc[];

public String getDisciplinas() {


String retorno = ""; Método que retorna todas as
for (int i = 0; i < aDisc.length; i++) { disciplinas constantes no array
retorno += aDisc[i].getDescricao()+"\n";
}
aDisc[];
return retorno;
}
}
Herança
• É um mecanismo de hierarquia entre classes,
onde uma classe mais especializada (filho)
herda as propriedades da classe mais geral
(pai).
• Este recurso não está disponível em sistemas
procedurais, caracterizando-se em uma das
principais diferenças entre a Análise Orientada a
Objetos e a Análise Estruturada.
• A classe mais geral é denominada superclasse
e a classe mais especializada é chamada
subclasse.
Herança
• Herança é uma relação entre uma superclasse e suas
subclasses;
• A subclasse está subordinada a superclasse na
hierarquia de classes.
• Há duas formas de se descobrir heranças:
– Generalização
– Especialização
• Herança sempre ocorrem de classe para classe;
• Herança representa um relacionamento "É um tipo de".
Assim, a partir da estrutura de Especialização, diz-se
que esta "é um tipo da" estrutura de Generalização.

ver: Generalização / Especialização


Herança
• Atributos comuns, operações, relações e/ou,
são mostradas no nível aplicável mais alto da
hierarquia
• Ao se definir a hierarquia, deve-se ter em mente
a premissa básica de que as categorias
inferiores sempre satisfazem todos os atributos
e serviços das categorias às quais elas
representam especializações.
• Uma classe filha deve ter, no mínimo, uma
propriedade de distinção em relação à classe
pai.
Herança - Exemplo
• Voltando a velha loja comercial, onde tínhamos
somente a classe Funcionário. Se houver a
necessidade de se guardar dados de Clientes
que fizeram compras.
• Precisamos criar um classe Clientes, cujos
dados necessários seriam : nome, endereço,
valor da compra, item comprado, etc.
• E partir desta classe criaríamos objetos como o,
cliente_0001, que poderia ter os valores : “João
das Couves” (nome), “Rua das Verduras, s/n”,
R$ 0.10, chiclete.
Herança: Exemplo

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;
}
}

//Recupera a titulação máxima Método de


public String getTitMaxima() {
return aTitMaxima;
recuperação de
} informação
get...()
}
Classe de Teste
/**
Classe utilizada para teste dos conceitos de OO
*/
public class ExemploClasse {
public static void main (String par[]) {
//Cria a instância
//Primeira intância da classe Professor (objeto ‘objProfessor’)
Professor objProfessor = new Professor();
Atributos
//Atribui o conteúdo para as variáveis de instância (Atributos)
objProfessor.setNome("Professor 1");
objProfessor.setEndereco("R da Palmeiras 111");
objProfessor.setIdade(42);
objProfessor.setSexo(Util.MASCULINO);
objProfessor.setTitMaxima(Util.DOUTORADO); Método de
atribuição de
//Obtém o conteúdo dos atributos Nome, Endereço e Idade e imprime esse
//conteúdo para a saída padrão utilizando System.out.println();
informação
System.out.println("Nome: "+objProfessor.getNome()); set...()
System.out.println("Endereço: "+objProfessor.getEndereco());
System.out.println("Idade: "+objProfessor.getIdade());
System.out.println("Sexo: "+objProfessor.getSexo());
System.out.println("Titulação Máxima: "+objProfessor.getTitMaxima());

//Imprime o conteúdo detalhado através do método getDescricao()


Método de
System.out.println(objProfessor.getDescricao()); recuperação de
} informação
}
get...()
Polimorfismo
• O significado da palavra, originada do grego, é o
de "possuir várias formas".
• Na A.O.O. é usado para indicar a propriedade
de se utilizar o mesmo nome para métodos
diferentes.
• Uma vantagem do polimorfismo é a relativa
facilidade de manutenção e extensão dos
programas.
• A idéia de polimorfismo está ligada com a
indicação de que os atributos só devem ter seus
valores alterados por métodos da classe.
Polimorfismo
• Uma das estratégias adotadas na Programação
Orientada a Objeto é a de implementar os
métodos o mais alto possível na hierarquia de
classes. As variações necessárias nos métodos
são feitas a medida em que se desça a árvore
hierárquica.
• O conceito de Polimorfismo é relevante pelo
caráter sintético que dá aos programas.
• Exemplo :
• ImprimirDados da loja Comercial
Polimorfismo
• O Polimorfismo não consiste simplesmente na
existência de funções com o mesmo nome, que
pode ser uma sobrecarga de função.
• A diferença entre sobrecarga de funções e
polimorfismo vem de 2 fatos :
– O polimorfismo só existe em hierarquia de classes
(herança) e deve ser feito em tempo de execução
(Run time).
– A sobrecarga não exige herança e o processo de
associação com um objeto se dá em tempo de
compilação.
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
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)

// Associa a Referência de um objeto Professor à Referência da classe Pessoa


pes = prof;
System.out.println(pes.getDescricao()+"\n Disciplinas Ministradas: \n"+
pes.getDisciplinas());

// Associa a Referência de um objeto Aluno à Referência da classe Pessoa


pes = alu;
System.out.println(pes.getDescricao()+"\n Disciplinas Cursadas: \n"+
pes.getDisciplinas());
Polimorfismo
• Considerando o exemplo anterior podemos notar os
seguintes pontos:
– O objeto pes (instância da classe Pessoa) ainda não foi
inicializado (isso apenas acontece quando se utilizado o
operador new). Desse modo não é permitido acessar qualquer
conteúdo.
– Os objetos prof e alu, que são instâncias de Professor e
Alunos, respectivamente, possuem o comportamento próprio
dessas classes;
– Ao se atribuir o objeto prof ou alu para pes, esse objeto passa
a ter o comportamento correspondente ao objeto que lhe foi
atribuído;
– A partir do momento da atribuição, o objeto que recebe a
referência altera o seu comportamento;
– Entretanto somente os métodos que possui a mesma
assinatura na superclasse e na subclasse podem ser
acessados.
Sobrescrição (override)
• A sobrescrição ocorre pela redefinição de um método da
superclasse pela subclasse com a mesma assinatura.

public abstract class Pessoa {


//Atributos
//Demais métodos
public String getDescricao() { Definição do método
String mensagem = aNome+", reside na "+aEndereco+ getDescricao()
", possui "+aIdade+" anos de idade";
if (aSexo.equalsIgnoreCase(Util.MASCULINO))
return mensagem = "O Sr. "+mensagem;
else
return mensagem = "A Sra. "+mensagem;
}
}

public class Professor extends Pessoa {


//Atributos Sobrescrição do
//Demais métodos método
//Sobrescreve o método getDescrição() na
public String getDescricao() { subclasse.
return super.getDescricao()+", e possui "+getTitMaxima()+".";
}
}
Sobrecarga (overload)
• A sobrecarga pode ocorrer em construtores e métodos;
• É caracterizada pela redefinição na mesma classe de um
determinado construtor ou método, onde a redefinição deve
possuir o mesmo nome mas um conjunto diferente de
argumentos.
public abstract class Pessoa {
...
//Construtor da classe pessoa (4 argumentos)
public Pessoa(String pNome, String pEndereco, String pSexo, int pIdade) {
aNome = pNome;
aEndereco = pEndereco;
aSexo = pSexo;
Construtor com 4
aIdade = pIdade; argumentos
}
//Construtor da classe pessoa (5 argumentos)
public Pessoa(String pNome, String pEndereco, String pSexo, int pIdade,
Disciplina pDisc[]) {
this(pNome, pEndereco, pSexo, pIdade);
aDisc = pDisc; Sobrecarga do
} construtor agora com
//Construtor default
5 argumentos
public Pessoa() {}
...
}
Persistência
• O termo persistência está relacionado ao total
de tempo que um objeto permanece na
memória.
• De modo geral, as instâncias das classes são
criadas durante a execução do programa e
assim que o objeto não é mais necessário,
ocorre uma destruição do mesmo, ou seja, o
espaço de memória reservado para ele é
liberado.
Persistência

• Um objeto em um Programa Orientado a


Objetos surge das seguintes formas :
• a) O objeto é criado estática ou dinamicamente
pelo programa.
• b) O objeto é recuperado de um arquivo ou de
uma base de dados relacional e levado à forma
de objeto.
• c) O objeto é recuperado de uma base de dados
orientada a objeto e lido diretamente para
utilização.
Pacotes
• Como visto em vários exemplos desenvolvidos até aqui utilizamos
bibliotecas preexistentes na API Java;
• Cada classe e interface da API pertence a um pacote específico
(ex: JOptionPane -> javax.swing.*;
• À medida que os aplicativos se tornam mais complexos, os
pacotes tornam-se cada vez mais necessários pois ajudam a
gerenciar a complexidade dos componentes do aplicativo;
• Os pacotes também facilitam a reutilização de código, permitindo
que programas importem classes de outros pacotes;
• Analisando um pacote Java observa-se que o mesmo possui uma
definição física representada por uma estrutura hierárquica
através de diretórios no sistema operacional ex:
info
academico
disciplina -> Disciplina
pessoa -> (Pessoa, Professor e Aluno)
geral -> Util
Pacotes
• Para declarar um pacote utilize a palavra reservada package
antes da definição da classe;
• Veja o exemplo abaixo:

/**
Classe de definição de constantes gerais
*/
package info.geral; Definição do pacote
public class Util {

public static final String MASCULINO = "M";


public static final String FEMININO = "F";

public static final int MIN_IDADE = 10;


public static final int MAX_IDADE = 120;

public static final String GRADUACAO = "Graduação";


public static final String ESPECIALIZACAO = "Especialização";
public static final String MESTRADO = "Mestrado";
public static final String DOUTORADO = "Doutorado";

public static final String CC = "Ciências da Computação";


public static final String SI = "Sistemas de Informação";
}
Pacotes
• Cada arquivo fonte (.java) deve estar no mesmo diretório identificado na linha
de definição do package (ex: c:\...\src\info\geral para o caso da classe Util);
• Para o projeto desenvolvido até agora teríamos:
c:\...\src\info\academico\disciplina\Disciplina.java
c:\...\src\info\academico\pessoa\Pessoa.java
c:\...\src\info\academico\pessoa\Aluno.java
c:\...\src\info\academico\pessoa\Professor.java
c:\...\src\info\geral\Util.java
c:\...\src\ExemploClasse.java

• Agora para que seja possível a compilação devemos realizar os imports


correspondentes;
• Na classe ExemploClasse deve-se importar os pacotes e classes abaixo:
import info.geral.Util;
import info.academico.disciplina.*;
import info.academico.pessoa.*;

• Obs: no primeiro import somente a classe Util estará acessível. Quando se


deseja acessar mais de uma classe da hierarquia deve-se utilizar o * ;
Relacionando Classes

com a UML e Java


Copyright@ Prof. José Francisco Salm Jr.
Apresentação

• 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

• Atores podem interagir somente com objetos


<<boundary>>.

• Objetos <<entity>> podem interagir somente


com objetos <<control>>.

• Objetos <<control>> podem interagir com


qualquer objetos de análise, inclusive outros
objetos <<control>>.
Relacionamentos

• Relacionamentos provem o caminho de


comunicação entre os objetos

Os quatro tipos de relacionamento são:


– Generalização
– Associação
– Agregação
– Dependência
Relacionamento - Associação

• Dentro da perspectiva conceitual, associações


representam relações entre ocorrências de classes
(uma pessoa trabalha para uma companhia; uma
companhia tem vários escritórios)
• Da perspectiva conceitual, associações representam
relações conceituais
– Pedido tem que vir de um Cliente
– Cliente pode ter vários Pedidos ao longo do tempo
– Cada Pedido tem várias Linhas de Pedido
Relacionamento - Associação

• Cada associação tem duas pontas de


associação
– Cada ponta é ligada a uma das classes na
associação

– Uma ponta pode ser explicitamente rotulada;


este rótulo é chamado de nome de papel
Como Fazer um 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

• Regras úteis (cont.):


4. Inclua os atributos e operações identificados nas
classes do tipo ENTIDADE.
1. Adicione a visibilidade PRIVADA aos atributos.
2. Adicione informação sobre o tipo dos atributos conforme
descrito em seu problema.
3. Inclua uma operação SET e GET para cada atributos da
classe ENTIDADE.

4. Adicione setas de navegabilidade para indicar a


direção no acesso dos atributos. Para isto, utilize a
regra de relacionamento entre as classes CONTROLE,
ENTIDADE E LIMITE;
Refinando os Relacionamentos e Atributos

• Regras úteis no Refinamento:


1. Para todos os relacionamentos entre classes do tipo
ENTIDADE e seu respectivo CONTROLADOR:

1. Substitua o relacionamento do tipo ASSOCIAÇÃO por um


de AGREGAÇÃO em que o símbolo do LOSANGULO (que
representa a agregação na UML) fique ao lado da classe
CONTROLADORA.
2. Adicione UM atributo do tipo LISTA+<nome da entidade> na
classe CONTROLADORA, cujo tipo será um VETOR e seu
encapsulamento será PRIVADO.
3. Inclua as operações necessárias para manipulação desta
lista de objetos
1. ADICIONAR, RETIRAR, ATUALIZAR e LOCALIZAR um objeto
ENTIDADE na lista do CONTROLADOR.
Refinando os Relacionamentos e Atributos

• Regras úteis no Refinamento (cont.):


2. Inclua um método CONSTRUTOR na classe ENTIDADE,
capaz de inicializar seus atributos através de parâmetros
passados a ele;
3. Inclua um método CONSTRUTOR na classe
CONTROLADORA cuja responsabilidade será o de criar
a lista de objetos do tipo ENTIDADE (visto no passo 1.2);
4. Inclua todas as operações descritas no problema no
CONTROLADOR específico da ENTIDADE (ex:
calcularMedia, precoMaisBaixo; carroDisponivel).
5. Identifique os relacionamentos necessários entre
CONTROLADORES;
Refinando os Relacionamentos e Atributos

• Regras úteis no Refinamento (cont.):


6. Para as classes do tipo ENTIDADE, verifique a
possibilidade do uso do relacionamento de
HERANÇA (lembre-se que a herança é o
relacionamento que aumenta o acoplamento
entre classes, desta forma, utilize com
prudência);
7. O relacionamento de COMPOSIÇÃO ocorre
entre o controlador da entidade e a classe do
vetor escolhida. Assim, o controlador sempre
terá uma estrutura de um vetor para guardar os
objetos do tipo entidade;
Teoria X Prática

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:

1. O cliente inicia através da navegação pela página principal do


sistema de pedidos.
2. O cliente pode selecionar uma loja virtual, através de um
hyperlink disponível na página principal.
3. Quando um dos links é escolhido, o sistema irá montar uma
página com os produtos daquela loja.
4. O sistema retorna a página com os produtos da loja virtual
selecionada.
5. O cliente navega na página retornada e analisa os produtos.
Exemplo – Seleciona Loja Virtual

: NavegaLojas
: SiteSistema : Loja

: Cliente : Sistema de
cadastro de

: ProdutosLoja : MontaProdutosLoja

: Produto