Escolar Documentos
Profissional Documentos
Cultura Documentos
JAVA
Roberto C. S. Pacheco
pacheco@stela.ufsc.br
Professor
Viso Geral
Fase 1 Editor Fase 2 Compilador Disco
O programa criado no editor e armazenado em disco. O compilador cria bytecodes e os armazena em disco.
Disco
Fase 3
Carregador de Classes
Memria Principal
Disco
. . .
Viso Geral
Fase 4
Verificador de bytecodes
Memria Principal
. . .
O verificador de bytecodes confirma que todos os bytecodes so vlidos e no violam restries de segurana do Java
Fase 5
Intepretador
Memria 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.
Viso Geral
Programando JAVA
Elementos da Programao 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 mtodo main } // fim da classe MeuPrimeiroPrograma
Programando JAVA
Elementos da Orientao 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 mtodo main } // fim da classe MeuPrimeiroPrograma
Mtodo. A impresso da Classe. Como qualquer programa
JAVA, esse programa exige uma classe (palavra reservada class). O fato de ser pblica (palavra public) garante visibilidade em qualquer contexto de sua utilizao mensagem Ol Aluno de Java se deu pela execuo do mtodo println, do objeto, da classe System.
/** Comentrio sobre o mtodo */ public (private/protected) tipoRet nomeMetodo(<parametros>) { // cdigo do mtodo } // fim da definio do mtodo
Classes.
Declarao de classes, atributos e mtodos do programa Java. A declarao e a definio dos mtodos ocorre obrigatoriamente dentro do limite de declarao da classe.
} // fim da classe
Lembre-se.
// Comentrios:
Use comentrios para esclarecer conceitos utilizados no programa. Utilize: // para comentrios de linha nica /* . */ para comentrios de vrias linhas /** .*/ em ambos os casos e quando desejar incluir o texto na documentao de seu programa (javadoc). Sempre inicie seus programas com comentrio descrevendo o propsito do mesmo.
Lembre-se.
public static void main (String args[]) {.}
O mtodo main() faz parte de todo aplicativo Java;
Deve estar entre os mtodos da classe pblica e ser sempre por onde o aplicativo se inicia. Os argumentos passados ao mtodo main() so uma lista de objetos da classe String, separados por espaos em branco.
Lembre-se.
import javax.swing.JOptionPane;
A Classe Java JOptionPane oferece caixas de dilogo predefinidas que permitem aos programas exibir mensagens aos usurios; As classes predefinidas da linguagem Java so agrupadas em categorias de classes chamadas pacotes (package), conhecidos como bibliotecas de classes Java ou interface de programao de aplicativos Java (Java API) Os nomes dos pacotes Java comeam com Java (pacotes do ncleo da linguagem) ou Javax (extenses ao ncleo) A instruo import utilizada para identificar e carregar classes utilizadas em um programa Java. As classes importadas pertencem a pacotes do ncleo, extenses oficiais ou extenses fornecidas por terceiros.
Como toda linguagem, Java possui identificadores reservados para comandos que permitem a execuo de suas instrues IMPORTANTE: voc no pode utilizar palavras-chave Java como nome de variveis ou classes.
Precedncia e Associatividade
Operadores () */% +< <= > >= == != = Associatividade da esquerda para a direita da esquerda para a direita da esquerda para a direita da esquerda para a direita da esquerda para a direita da direita para a esquerda Tipo parnteses de multiplicao de adio relacional de igualdade de atribuio
Java fornece um conjunto de operadores similar ao C e C++. Entretanto, um erro bastante comum tentar utilizar o operador de atribuio = como igualdade ==; Todos os operadores, com exceo do operador de atribuio =, associam da esquerda para a direita.
Exemplos: int c = 3, d = 5, e = 4, f = 6, g = 12
Java fornece vrios operadores que abreviam as expresses de atribuio; A simplificao de sintaxe no a nica vantagem desses operadores. Eles aumentam a velocidade de acesso s variveis em programas.
Java possui operadores que acrescentam ou diminuem valores unitrios em variveis. Seu funcionamento semelhante aplicao do operador de atribuio com valor 1 (ou seja: x += 1;), mas permite que o programador determine o momento em que deseja incrementar (ou decrementar) sua varivel, com relao ao uso na expresso em que essa varivel est inserida.
double
754)
Operadores Condicionais
Operador Forma Descrio && op1 && op2 op1 e op2 so verdadeiros || op1 || op2 op1 ou op2 so verdadeiros
Tipos de Referncia
Uma varivel declarada como um tipo de classe vista como uma referncia, o que no acontece para um tipo primitivo;
int i = 1; int j = i; String a = Java; String t = a;
i j a 1 1 Endereo 1 Endereo 1 Java i j 1 1 Endereo 1 Endereo 2 Java XML
t = XML
a
b
Identificadores
Um identificador o nome de uma varivel, classe ou mtodo; No pode comear com nmero ou caracteres especiais. tipo; enderecoResidencial; Endereco_Residencial; _endereco_residencial; $valorSalario;
Lembre-se.
String primeiroNumero; int numero1;
A declarao de variveis 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 minsculas e com nomes significativos para o programa para declarar nomes de variveis ; Os tipos de variveis da linguagem Java incluem inteiros (short, int e long), nmeros reais (float ou double), caracteres (char), tipo lgico (boolean) e varivel binria (byte)
Lembre-se.
primeiroNumero = JOptionPane.showInputDialog(Digite o primeiro Nmero inteiro: );
O mtodo showInputDialog() combina a montagem da janela de edio com o prompt de digitao do string fornecido pelo usurio.
Os argumentos passados ao mtodo showInputDialog() so vistos sempre como Strings em seus programas Java.
No h em Java mtodo que faa para as entradas o que os mtodos print() e println() fazem para as sadas de programas, ou seja, tratamento de qualquer tipo da linguagem.
Por essa razo as variveis informadas aos programas Java so sempre Strings que devem ser convertidas. Erros de entradas inesperadas (tipos incompatveis com as converses) devem ser tratados pelo usurio.
Lembre-se.
numero1 = Integer.parseInt (primeiroNumero); O mtodo Integer.parseInt() converte um objeto String em um tipo int. A classe Integer est definida no pacote java.lang. soma = numero1 + numero2; A instruo combina o sinal de atribuio (=) com soma (+) O programa Java segue a precedncia de operadores. No exemplo, primeiro faz a adio e depois a atribuio do resultado na varivel soma. Para maior visibilidade no programa, utilize espaos para separar operadores aritmticos A soma + soma
O operador + nessa expresso de concatenao. Para faz-la, Java primeiro far a converso da varivel soma em String e depois combinar o resultado em um String maior contendo a primeira parte A soma acrescida do resultado da varivel soma na forma de um string.
Lembre-se.
if (numero1 == numero2) resultado = resultado + numero1 + == + numero2; A estrutura if compara os valores das variveis numero1 e numero2 para determinar sua igualdade de valores. Caso numero1 e numero2 sejam iguais, a condio da estrutura if ser verdadeira e o programa colocar na varivel resultado o string que concatena as expresses 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
Reviso
Roberto C. S. Pacheco
pacheco@stela.ufsc.br
Professor
Estrutura de Seleo if
A estrutura if
Necessria sempre que os programas encontrarem seqncias alternativas de aes, dependendo do valor de determinada condio. Exemplo: Se a mdia das notas do aluno for maior ou igual a 6 Imprimir Aprovado
Sintaxe
if (condio) comando Java; [ou {bloco de comandos Java;}]
verdadeiro Media >=6 falso Imprimir Aprovado
O Exemplo em Java
if (media >= 6) System.out.println(Aprovado); if (media >= 6) { System.out.print(O Aluno est); System.out.println(Aprovado); } // fim do bloco if
Exemplo:
Se a mdia das notas do aluno for maior ou igual a 6 Imprimir Aprovado Seno Imprimir Reprovado
Sintaxe
if (condio) comando Java; [ou {bloco de comandos Java;}] else comando Java; [ou {bloco de comandos Java;}]
O Exemplo em Java
System.out.println(media >= 6 ? Aprovado : Reprovado);
falso
verdadeiro Media >=7 B
De acordo com a opo solicitada pelo usurio: 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 caso 4: calcule a mdia final do aluno default: encerre o programa
Utilize o comando break para no acionar as aes nos blocos definidos nos cases (e no default) abaixo do case acionado.
Estrutura switch/case
// programa exemplo de utilizao 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 pblica
O corpo da estrutura while pode ser uma instruo nica ou um bloco de comandos. Quando a condio do comando while se tornar falsa, a ao (ou bloco) do comando ser finalizada. O programa continuar com a ao imediatamente aps o comando while. IMPORTANTE: voc deve sempre prever o comando ou ao que tornar falsa a condio do comando while. Caso contrrio seu programa entrar em loop.
Estrutura while
// programa exemplo de utilizao da estrutura de repetio 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 pblica
Continua Sim
O do/while sempre admite que a primeira interao ocorre antes da confirmao da condio O corpo da estrutura do/while pode ser uma instruo nica ou um bloco de comandos. Quando a condio do comando do/while se tornar falsa, o programa continuar com a ao imediatamente aps o comando do/while. IMPORTANTE: voc deve sempre prever o comando ou ao que tornar falsa a condio do comando do/while. Caso contrrio seu programa entrar em loop.
falso
{
ao ou bloco de aes no comando; }
int contador = 1
contador++
A instruo continue permite o salto do conjunto de operaes, com retorno expresso condicional do lao, reiniciando o mesmo (portanto, ao contrrio do break, no interrompe o lao). Normalmente break e continue interrompem laos em que esto inseridos. Para interromper um conjunto aninhado de estruturas, deve-se utilizar break e continue rotulados (com denominao de blocos).
do/while e continue
do { if ((contador % 2)!=0) // resto da diviso por dois no zero continue; pares++; saidaFinal += contador + " "; } while (++contador<numero);
Reviso
Roberto C. S. Pacheco
pacheco@stela.ufsc.br
Professor
Mtodos
O que so Mtodos
Mtodos so procedimentos de classe, onde esto implementados os processos disponveis a objetos (instncias) da classe.
Os mtodos permitem que objetos de uma classe realizem tratamento de dados (normalmente atributos da prpria classe), clculos, comunicao com outros objetos e todo procedimento necessrio s aes das instncias da classe.
Em Java, mtodos so funes de classes. Os programas vistos at aqui no curso tinham a funo main() como mtodo das respectivas classes pblicas que deram nome aos nossos programas.
Mtodos
Mdulos: Pacotes de Classes+Mtodos
A melhor forma de se construir programas est na modularizao, ou seja, na diviso do sistema em mdulos especficos.
Em Java os mdulos so descritos por mtodos e classes, que podem ser:
Pr-empacotados: disponveis na Java API (bibliotecas de classes Java). Mtodos definidos pelo programador. Tarefas especficas que podem ser utilizadas muitas vezes por um programa.
Um mtodo acionado (invocado) por uma chamada de mtodo. Essa pode ser realizada por objetos da classe do mtodo ou por chamadas classe (mtodos estticos)
Chamadas de Mtodo.
1. mtodo parseInt() da classe Integer (pacote java.lang). 2. mtodo exit() da classe System (pacote java.lang) 3. Mtodo showMessageDialog() da classe JOptionPane (pacote javax.swing)
Mtodos so chamados por seu nome, com a relao de argumentos colocada entre parnteses. Quando os mtodos so estticos, o nome inclui o nome da classe.
Os mtodos da classe Math permitem realizar clculos comuns necessrios em expresses matemticas.
Exemplos de chamadas de mtodos da classe Math:
Funo raiz quadrada: double y = Math.sqrt(10.0); Funo mnimo. double z = Math.min(x,10);
Os mtodos da classe Math so mtodos estticos, ou seja, no necessitam de objetos da classe para sua chamada. Por essa razo voc deve precer as chamadas dos mtodos com o nome da classe seguido de ponto (como j fizemos nos programas anteriores): JOptionPane.showMessageDialog() System.exit( 0 );
Constantes
Programas Java podem definir constantes cujo valor inicializado na declarao permanece imutvel. Para isso a declarao utilizada final. A tentativa de alterao de varivel declarada como final gera erro de sintaxe.
final float G = 9.81; // acelerao da gravidade;
Descrio
Exemplo
valor absoluto de x (tem verses para abs(23.7) 23.7; abs(0.0) 0.0; abs(-23.7) 23.7 float, int e log) arredonda o valor de x para o menor inteiro no menor que x co-seno trigonomtrico de x (x em radianos) x mtodo esponencial e arredonda o valor de x para o maior inteiro no menor que x logaritmo natural de x (base e) maior valor entre x e y (tambm em verses para float, int e long)
ceil(9.2) 10.0; ceil (-9.8) -9.0; cos(0.0) 1.0 exp(1.0) 2.718281828 floor(9.2) 9.0; floor(-9.8) -10.0 log(2.718282) 1.0; log(7.389056) 2.0 max( 2.3, 12.7) 12.7; max(-2.3;-12.7) -2.3
menor valor entre x e y (tambm em min( 2.3, 12.7) 2.3; min(-2.3;-12.7) -12.7 verses para float, int e long) x elevado potncia y (x y ) seno trigonomtrico de x (x em radianos) raiz quadrada de x tangente trigonomtrica de x (x em radianos)
pow(2.0, 7.0) 128.0; pow(9.0,0.5) 3.0 sin(0.0) 0.0 sqrt(900.0) 30.0; sqrt(9.0) 3.0 tan(0.0) 0.0
Mtodos
Criando Seus Prprios Mtodos
Alm dos mtodos da API Java, o programador pode desenvolver os mtodos para suas prprias classes. Por exemplo: suponha uma classe ApresentaQuadrados que tem por objetivo apresentar o quadrado da srie de nmeros pares entre o nmero zero e um nmero digitado pelo usurio. Pode-se criar a classe em Java por:
class public ApresentaQuadrados { public static void main (String args[]) { int numeroEntrada; String respostaFinal = ; // ler nmero digitado pelo usurio // realizar lao de zero at o nmero digitado // se o nmero na seqncia do lao for par, // chamar o mtodo de calcular o valor ao quadrado // guardar o valor resultante no String de resposta // se no for, continue no lao // apresentar a resposta final } static double calculaQuadrado (int x) { return Math.pow(x,2); } // fim do mtodo calculaQuadrados da classe ApresentaQuadrados } // fim da classe ApresentaQuadrados
Mtodos
// Programa que exemplifica a criao de mtodos de Funo 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 diviso por dois no zero continue; serieFinal += Integer.toString(numeroAtual) + " "; quadradoSerie += Double.toString(calculaQuadrado(numeroAtual)) + " "; } while (++numeroAtual < numero); // exibe nmeros 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 mtodo calculaQuadrado() da classe ApresentaQuadrados chamado pelo mtodo main() da mesma classe. Para cada nmero na srie de pares chama-se o mtodo da classe para o clculo de seu quadrado (somente pelo nome, dado que o mtodo da prpria classe). O resultado retornado funo main() e guardado no string de sada do sistema.
Reviso
Roberto C. S. Pacheco
pacheco@stela.ufsc.br
Professor
Arrays
O que so Arrays
Estruturas de dados, na forma de um grupo de posies contguas na memria, com valores de mesmo nome e mesmo tipo. Arrays so, portanto, a forma pela qual se armazenam vetores de tipos. Os arrays so estruturas estticas, isto , uma vez criados mantm seu tamanho inicial. Para estruturas dinmicas a Linguagem Java possui classes especiais (classes Vector e Array) Os elementos de um array so encontrados pela referncia do nome do array e pelo nmero da posio em que se encontra (tambm chamada ndice ou subscrito).
Arrays
Nome do array (todos os elementos do vetor passam a ter o mesmo nome: c)
C [ 0 ] C [ 1 ] C [ 2 ] C [ 3 ] - 128 8 0 82
C [ 4 ]
C [ 5 ]
64
- 12
C [ 6 ]
C [ 7 ]
65
43
... public static void main (String args[]) { int c = new int[11]; ... c = {-128,8,0,82,64,-12,65,43,76,11};
// c[11] zero por default (inicializao)
C [ 8 ]
C [ 9 ] C [ 10 ]
76
11 0
// c[4] = 64 + 0 = 64
}
Nmero da posio do elemento dentro de um array (ndice ou subscrito)
Arrays
Nunca esquecer que
Arrays em Java (como em C e C++) iniciam pela posio zero. Portanto, um array c de trs elementos tem as posies 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., posio desejada), entre colchetes.
Os ndices ou subscritos so valores inteiros e pode ser tratado como expresso de clculo (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 varivel lenght. Para determinar o comprimento, basta usar o nome do array, seguido de ponto e dessa varivel. Arrays so manipulados em expresses diretas (e.g., c[2] = 4; ) por laos de repetio (e.g., para calcular a soma do array, utilizar o comando for)
Erros comuns em programao Java (e em C/C++) confundir o n-simo elemento do array com o subscrito n. Por exemplo: o stimo elemento de um array c o elemento c[6] e no o c[7] (que o oitavo)
Arrays
Declarando Arrays
Arrays so objetos que ocupam espaos contguos de memria. O programador deve especificar o tipo, nome do array e utilizar o operador new para reservar o espao necessrio.
int c[];
// declarao do array // declarao e reserva de espao do do array
c = new int[12];
Nesse caso, a reserva de espao feita pelo operador new automaticamente realizada pela mquina virtual Java.
Quando os arrays so declarados sem inicializao, o Java faz a inicializao para zeros (variveis numricas), false (variveis lgicas do tipo boolean) ou null para referncias a tipos de objetos.
Arrays
Declarao Mltipla de Arrays
Arrays de tipos no primitivos (ex. Objetos da classe String) guardam referncias a objetos em seus elementos. A incializao de referncias null.
Arrays
Exemplo: programa de criao e apresentao dos elementos do array (valores de inicializao automtica).
// ArrayInicializacao - criao de um array // Baseado em Deitel e Deitel. import javax.swing.*; public class ArrayInicializacao { // funo main public static void main( String args[] ) { int array[]; // declara a referncia a um array array = new int[ 10 ]; // aloca dinamicamente o espao para o array String saidaStr = "Subscrito\tValor\n"; // string alocado e inicializado // adiciona cada valor dos elementos do array ao String de sada 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 vrgulas.
int array[] = {10,20,30,40,50};
// array de 5 ints
Declaraes com inicializaes dispensam o operador new porque o espao reservado automaticamente pelo compilador.
Arrays
Exemplo: programa de criao e inicializao de array.
// ArrayInicializacao - criao de um array // Baseado em Deitel e Deitel. import javax.swing.*; public class ArrayInicializacao2 { // funo main public static void main( String args[] ) { // declarao com inicializao (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 sada 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
Arrays
Referncias e Parmetros por referncia
Mtodos (ou funes) podem receber parmetros tanto por chamada por valor como por chamada por referncia.
Passagem por valor: o mtodo recebe uma cpia do valor original e no alteram o valor original do argumento passado ao mtodo.
Passagem por referncia o mtodo recebe a localizao da varivel original e altera o prprio argumento originalmente passado ao mtodo. H um maior desempenho, pois elimina a necessidade de cpias de valores.
Arrays
Referncias e Parmetros por referncia
Em Java o programador no pode decidir como deseja trabalhar os parmetros dos mtodos. A regra geral : Tipos Primitivos: Passagem por cpia: argumentos de tipos da linguagem so sempre passados por cpia de valor e o return do mtodo sempre retorna uma cpia de valor. Objetos so passados por referncia objetos de classes so sempre passados por referncia. Isso significa que um objeto no passado para mtodo e sim sua referncia. Isso significa que o mtodo sempre manipula diretamente o objeto
Arrays
Referncias e Parmetros por referncia int array[] = {1,2,3,4,5}
Passagem por referncia: deve-se especificar o nome do array sem nenhum colchetes.
modificaElemento(array);
Arrays
// PassandoArray.java // Passando arrays e elementos individuais de arrays para mtodos // 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 referncia:\n" + "Os valors originais do array so:\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 referncia saida += "\n\nOs valores modificados dos arrays so:\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] aps 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 mtodo 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 (parmetro) 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 especfico da tabela devemos especificar dois ndices (subscritos) - o primeiro identifica a linha e o segundo a coluna (bidimensional);
Arrays
Arrays Multidimensionais
Coluna 0 Linha 0 a [0] [0] Linha 1 a [1] [0] Linha 2 a [2] [0] Coluna 1 a [0] [1] a [1] [1] a [2] [1] Coluna 2 Coluna 3 a [0] [2] a [0] [3] a [1] [2] a [1] [3] a [2] [2] a [2] [3]
ndice da coluna ndice da linha Nome do array
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 // Inicializao 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 );
Arrays
// acrescenta linhas e colunas de um array a saida static void geraSaida( int array[][] ) { // percore as linhas do array com um lao for ( int linha = 0; linha < array.length; linha++ ) { // percorre as colunas da linha atual com um lao for ( int coluna = 0; coluna < array[ linha ].length; coluna++ ) saidaArea.append( array[ linha ][ coluna ] + " " ); saidaArea.append( "\n" ); } } }
} // fim da classe ArrayMultiDim_1
Reviso
Roberto C. S. Pacheco
pacheco@stela.ufsc.br
Professor
Orientao a Objetos
Conceitos Chaves
Abstrao Encapsulamento Polimorfismo Persistncia Objetos Atributos Mtodos ou Servios Mensagens Relacionamentos Herana
Mecanismos Bsicos
Abstrao Nesta fase tenta-se retirar elementos e requisitos que iro ajudar na resoluo de um problema; o processo de retirar do domnio do problema os detalhes relevantes e represent-los no mais em uma linguagem do domnio e sim na linguagem da soluo. O sucesso de um Programa Orientado a Objeto est condicionado a uma boa abstrao do problema.
Abstrao
No paradigma da Programao Estruturada identifica-se as funes como sendo "operaes abstratas que resolvem um problema de programao", ou seja, ocorre a abstrao de procedimentos. No paradigma da Orientao a Objetos, tem-se a Abstrao de Dados, onde uma estrutura de dados deve incluir as operaes que ocorrem com ela.
Abstrao
Este conceito est relacionado s atividades de Modelagem de Negcio e de Requisitos e a fase de Concepo de um ciclo de vida iterativo; e representado pelo diagrama de Use Case (Caso de Uso) da UML.
Abstrao
Primeiramente procura-se dividir o problema por assuntos (pacotes ou subsistemas); Dentro de cada assunto pode-se observar alguns elementos tais como :
categorias; Aes; informaes de estado; Operaes;
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 instncia concreta, representando todas as bolas, poderia ser descrita pelas propriedades :
Peso; Cor; Dimetro; etc.
Operaes Abstratas As operaes mais relevantes para a modelagem conceitual de domnios, surgiram de Pesquisas oriundas das reas de Inteligncia Artificial e de Banco de Dados e so 3 : classificao (instanciao) generalizao (especializao)
agregao (decomposio)
Classificao / Instanciao
Trata-se da observao de propriedades comuns a entidades e a classificao das mesmas em grupos e classes. Por exemplo, duas pessoas, Abravanel e Edson, podem ser classificados como Funcionrios de uma loja
Classe ou categoria classificao Instanciao
Funcionrios
Edson
Indivduo Abravanel
Generalizao / Especializao
a operao de verificar semelhanas entre duas categorias, observando propriedades idnticas, de tal forma que origine uma categoria mais genrica.
Generalizao
Funcionrio
categoria
ver: herana
Cliente
Especializao
categoria
Pessoa
Generalizao / Especializao
A premissa bsica a de que categorias especializadas satisfaam todas as propriedades das categorias genricas, a qual est vinculada. Por outro lado, deve haver pelo menos uma propriedade que distinga uma categoria especializada de uma categoria genrica.
Agregao / Decomposio
Esta operao ocorre quando propriedades (e categorias) so combinadas (agregadas) para formar uma outra categoria A operao inversa caracterizada pela decomposio de uma categoria em partes. classe
Endereo
atributo classe
ver: Todo Parte
Nome
atributo
Agregao
Pessoa
Decomposio
Agregao / Decomposio
A idia de agregao e decomposio est na base da abordagem sistemtica de qualquer tarefa ou fenmeno complexo. Esta abordagem forma uma viso 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 viso mais detalhada da superfcie terrestre.
Abstrao Em conjunto com a abstrao temos o conceito, a prototipagem, isto , faz-se uma primeira anlise, abstraindo-se ao mximo que se puder. Parte-se para a parte de programao, no sentido de se construir um prottipo do sistema. Com o prottipo em mos volta a se fase da abstrao. E fica-se interagindo entre prottipoabstrao at que a Anlise 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 Programao Orientada a Objetos sobre a Programao Estruturada, principalmente na reutilizao de cdigos.
Encapsulamento
Pode-se entender intuitivamente o significado de encapsulamento quando se observa o mundo real. Nos objetos do mundo real, atributos e aes so inerentes ao prprio objeto. Exemplo :
A um automvel esto associados tanto atributos (modelo, kilometragem, capacidade do tanque, etc), quanto suas potencialidades (velocidade mdia, consumo de combustvel, etc).
Encapsulamento
Cdigo Cdigo
... ...
... ...
Cdigo
... ...
Dado
Dado
Dado
Cdigo
... ...
Cdigo
... ...
Cdigo
... ...
Dado
Orientao a Objetos
Dado
Dado
Objetos
Classe Classe & Objeto
Objetos Trata-se de uma abstrao de algo no domnio do problema. Reflete a capacidade do sistema de guardar informaes sobre o elemento abstrado, interagir com este, ou ambos. Nele esto contidos os dados (atributos) e os procedimentos (servios) exclusivos ao objeto.
Objetos - Exemplo
Na informatizao do cadastramento de pessoas de uma loja comercial, sero encontrados diversos objetos pertencentes ao domnio do problema. Um objeto abstrado poderia ser o Silvio, um funcionrio da loja. Este objeto possui suas particularidade : Abravanel dos Santos (Nome) , rua de Baixo, 13 (Endereo), 1 (Faltas) , 1000.00 (Salrio Base). H tambm os eventos que podem ocorrer sobre os atributos anteriores, como : o clculo salrial, alterao do endereo, etc; Um objeto refere-se a uma OCORRNCIA NICA.
Classes
Uma classe uma coleo de objetos com um estrutura, comportamento, relaes e semntica comuns Classes so descobertas pelo exame dos objetos nos diagramas de Sequncia e Colaborao; Nas classes esto descritas as caractersticas dos Atributos e Mtodos, que representaro as particularidades dos vrios objetos.
Tipos de Classes
Classe concreta: classe que permite que sejam realizadas instncia, ou seja, possvel atravs do operador new criar objetos; Classe abstrata: esse tipo de classe no permite que sejam realizas instncias. Em geral so implementadas como superclasses em situaes de herana, permitindo garantir que somente as subclasses possuam instncias.
Outra caracterstica possibilidade dessa classe ser uma interface de definio de mtodos, onde esses mtodos no possuem implementao. A implementao seria ento realizada pelas subclasses. Isso similar ao conceito de Interface. Entretanto a diferena, quando utilizando interface, a possibilidade de uma classe implementar vrias interfaces (isso ser visto mais adiante); Obs: vale ressaltar que uma superclasse no precisa ser necessariamente abstrata.
Classe Concreta
/** Classe de definio 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 public public public static static static static final final final final String String String String GRADUACAO = "Graduao"; ESPECIALIZACAO = "Especializao"; MESTRADO = "Mestrado"; DOUTORADO = "Doutorado";
Constantes
public static final String CC = "Cincias da Computao"; public static final String SI = "Sistemas de Informao"; }
static: permite indicar a um atributo ou mtodo que para ser acessado no precise de uma instncia, ou seja, no necessrio criar um objeto; final: nesse contexto (definio de uma varivel) final indica que esta varivel ir se comportar como uma constante.
Atributos
public void setNome(String pNome) { aNome = pNome; } public void setEndereco(String pEndereco) { aEndereco = pEndereco; } public void setIdade(int pIdade) { //Determina uma regra de validao do atributo idade, //evitando que qualquer valor seja atributo if ((pIdade < Util.MIN_IDADE) || (pIdade > Util.MAX_IDADE)) { System.out.println("Idade deve ser maior ou igual a "+ Util.MIN_IDADE +" e menor ou igual "+ Util.MAX_IDADE); } else { aIdade = pIdade; } } ...
return aEndereco; } }
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. Instncia
Um sinnimo para o termo Objeto, tambm encontrado na literatura, Instncia de Uma Classe, ou simplesmente Instncia. Por exemplo : o objeto Vectra" uma instncia da classe "Automvel".
Atributos
Um atributo qualquer propriedade, qualidade ou caracterstica que pode ser atribuda a uma pessoa ou objeto (Webster). um dado (informao de estado), para o qual cada objeto em uma classe tem seu prprio valor; Os atributos devem ser manipulados exclusivamente por servios, portanto so privativos da classe, no devendo ter seus valores alterados por nenhuma outra parte que no pertena a prpria classe.
Atributos A estrutura de uma classe representada pelos seus atributos Atributos podem ser encontrados pelo exame das definies de classes, requisitos de problemas, e pela aplicao do conhecimento do domnio
Atributos - exemplo
na classe Funcionrio, alguns atributos so : Nome, Endereo, Telefone, CPF, Cdigo, Data de Admisso, Turno, Faltas, Horas Extras, No. de dependentes e Salrio Base.
o objeto Silvio possui como informao de estado para o atributo nome o valor de : Abravanel dos Santos e para faltas : o valor 1.
Outros Exemplos :
classe Automvel - atributos : Modelo, Marca, Ano, Cor, Nmero do Chassi. Disco - atributos Ttulo, Cdigo, Gnero
Mtodos ou Servios
So as operaes efetuadas pelos objetos; O comportamento de uma classe representado pelas suas operaes; um comportamento especfico, residente no objeto, que define como este deve agir quando exigido, atravs do recebimento de uma mensagem So eles que iro alterar os valores dos atributos de um determinado objeto.
Do ponto de vista da programao, em um Programa Orientado a Objetos, os servios esto implementados em funes colocados a nvel do objeto.
Servios - Tipos
Clculos
Tratam-se de servios que calculam o resultado a partir dos valores dos atributos de um Objeto. Exemplo :
clculo do salrio lquido do funcionrio.
Servios de Ocorrncia
Referem-se aos "Servios Implcitos" (ex. Criar, Conectar, Alterar, Acessar, Destruir, etc). So os servios que obrigatoriamente todos os objetos devem ter. No so mostrados nos Diagramas da AOO.
Servios - Tipos
Monitorao
Tratam-se de servios que para serem utilizados precisam de entradas e/ou sadas externas ao objeto ou os servios que controlam a aquisio de dados de dispositivos. Estes servios podem precisar de alguns servios associados, como Iniciar ou Terminar. Exemplo :
Um caso tpico o servio de gravao 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 espao disponvel.
Padres de
nomenclatura devem ser estabelecidos Ex: Todos os nomes de classes so substantivos no singular, iniciando com letra maiscula
Mensagens
uma forma de relacionamento entre objetos; atravs 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 comunicao entre os objetos ocorre nica e exclusivamente atravs de mensagens.
Mensagens
Uma mensagem uma solicitao feita por um objeto A a um objeto B; Como resultado desta solicitao, o objeto B ir modificar seu estado ou ir retornar algum valor; O conceito de mensagem est diretamente associado ao conceito de operao; A interao entre os objetos feita atravs da troca de mensagens; So representados na UML atravs dos diagramas de iterao e de colaborao.
Relacionamentos Relaes fornecem um caminho para a comunicao entre os objetos Diagramas de sequncia e/ou colaborao so examinados para determinar quais ligaes entre objetos precisam existir para se chegar ao comportamento desejado. -- Caso dois objetos precisem conversar dever haver uma ligao entre elas
Relacionamentos
Relacionamentos
Associao:
uma conexo bi-direcional entre classes mostrada como uma linha conectando as classes relacionadas
Agregao:
um tipo mais forte de conexo, especializao de uma associao, aonde a relao entre o todo e suas partes (relacionamento parte-de ou conteno) mostrada como uma linha conectando as classes relacionadas com um losango perto da classes que representa o todo
Dependncia:
uma forma mais fraca de relao, mostrando uma relao entre um cliente e um fornecedor, aonde o cliente no tem conhecimento semntico do fornecedor mostrada como uma linha pontilhada entre o cliente e o fornecedor
Associao
Uma associao uma conexo entre classes; Associaes so representadas em um diagrama de classe atravs de uma linha conectando as classes associadas; Os dados podem fluir em uma ou em ambas as direes atravs do link.
Professor
Disciplina
Associao
Para exemplificar ser criada uma classe Disciplina que ter como funo armazenar todas as disciplinas ministradas pelo professor ou cursadas pelo aluno.
Classe Disciplina
/** * Implementao da classe Disciplina */ public class Disciplina { private String nomeDis; private int cargaHoraria; public Disciplina(String pnomeDis, int pcargaHoraria) { nomeDis = pnomeDis; cargaHoraria = pcargaHoraria; } public String getDescricao() { return " Disciplina: "+nomeDis+" "+cargaHoraria; } }
Atributos
Construtor
Mtodo de recuperao de informao get...()
Carga Horria:
Associao
Por questes de simplificao o atributo aDisc faz parte da classe Pessoa. Isso vlido porque todas as subclasses do modelo tero referncia a disciplinas ministradas (professor) ou cursadas (aluno). Entretanto, caso fosse implementado mais um nvel na hierarquia, por exemplo: criar uma classe funcionrio e as especializaes professor e diretor, eventualmente deveramos rever a hierarquia, pois somente professor e aluno teriam disciplinas.
da classe Disciplina
/** Implementao de uma classe abstrata */ Atributo public abstract class Pessoa { private String aNome = "", aEndereco = "", aSexo = ""; private int aIdade = 0; private Disciplina aDisc[]; //Atributo da classe Disciplina //Conjunto de mtodos j definidos public String getDisciplina(int pIndice) { return aDisc[pIndice].toString(); } public String getDisciplinas() { String retorno = ""; for (int i = 0; i < aDisc.length; i++) { retorno += aDisc[i].getDescricao()+"\n"; } return retorno; } }
Mtodo que retorna uma nica disciplina utilizando um ndice de acesso a array aDisc[]; Mtodo que retorna todas as disciplinas constantes no array aDisc[];
Herana
um mecanismo de hierarquia entre classes, onde uma classe mais especializada (filho) herda as propriedades da classe mais geral (pai). Este recurso no est disponvel em sistemas procedurais, caracterizando-se em uma das principais diferenas entre a Anlise Orientada a Objetos e a Anlise Estruturada. A classe mais geral denominada superclasse e a classe mais especializada chamada subclasse.
Herana
Herana uma relao entre uma superclasse e suas subclasses; A subclasse est subordinada a superclasse na hierarquia de classes. H duas formas de se descobrir heranas:
Generalizao Especializao
Herana sempre ocorrem de classe para classe; Herana representa um relacionamento " um tipo de". Assim, a partir da estrutura de Especializao, diz-se que esta " um tipo da" estrutura de Generalizao.
ver: Generalizao / Especializao
Herana
Atributos comuns, operaes, relaes e/ou, so mostradas no nvel aplicvel mais alto da hierarquia Ao se definir a hierarquia, deve-se ter em mente a premissa bsica de que as categorias inferiores sempre satisfazem todos os atributos e servios das categorias s quais elas representam especializaes. Uma classe filha deve ter, no mnimo, uma propriedade de distino em relao classe pai.
Herana - Exemplo
Voltando a velha loja comercial, onde tnhamos somente a classe Funcionrio. Se houver a necessidade de se guardar dados de Clientes que fizeram compras. Precisamos criar um classe Clientes, cujos dados necessrios seriam : nome, endereo, valor da compra, item comprado, etc. E partir desta classe criaramos objetos como o, cliente_0001, que poderia ter os valores : Joo das Couves (nome), Rua das Verduras, s/n, R$ 0.10, chiclete.
Herana: Exemplo
Funcionrio
Nome Endereo Salrio Faltas CalcularSalario( Mostrar() Nome Endereo Salrio Faltas CalcularSalario() Mostrar()
Cliente
Nome Endereo Compra TipoPagamento GerarRecibo() Mostrar()
Herana: Exemplo
Pessoa
Nome Endereo
Mostrar()
Funcionrio
Salrio Faltas CalcularSalario() Mostrar()
Cliente
Compra TipoPagamento GerarRecibo() Mostrar()
Subclasse
/** Implementao da classe Professor que uma subclasse da classe Pessoa. Desse modo a classe Pessoa considerada a super classe. */ public class Professor extends Pessoa { private String aTitMaxima = ""; //Atribui a titulao mxima public void setTitMaxima(String pTitMaxima) { //Realiza do controle para verificar se a titulao vlida if ((!pTitMaxima.equalsIgnoreCase(Util.GRADUACAO)) && (!pTitMaxima.equalsIgnoreCase(Util.ESPECIALIZACAO)) && (!pTitMaxima.equalsIgnoreCase(Util.MESTRADO)) && (!pTitMaxima.equalsIgnoreCase(Util.DOUTORADO))) { System.out.println("A titulao informada no vlida!!!"); } else { aTitMaxima = pTitMaxima; } } //Recupera a titulao mxima public String getTitMaxima() { return aTitMaxima; } }
Atributos
Classe de Teste
/** Classe utilizada para teste dos conceitos de OO */ public class ExemploClasse { public static void main (String par[]) { //Cria a instncia //Primeira intncia da classe Professor (objeto objProfessor) Professor objProfessor = new Professor();
Atributos
//Atribui o contedo para as variveis de instncia (Atributos) objProfessor.setNome("Professor 1"); objProfessor.setEndereco("R da Palmeiras 111"); objProfessor.setIdade(42); objProfessor.setSexo(Util.MASCULINO); objProfessor.setTitMaxima(Util.DOUTORADO); //Obtm o contedo dos atributos Nome, Endereo e Idade e imprime esse //contedo para a sada padro utilizando System.out.println(); System.out.println("Nome: "+objProfessor.getNome()); System.out.println("Endereo: "+objProfessor.getEndereco()); System.out.println("Idade: "+objProfessor.getIdade()); System.out.println("Sexo: "+objProfessor.getSexo()); System.out.println("Titulao Mxima: "+objProfessor.getTitMaxima()); //Imprime o contedo detalhado atravs do mtodo getDescricao() System.out.println(objProfessor.getDescricao()); } }
Polimorfismo
O significado da palavra, originada do grego, o de "possuir vrias formas". Na A.O.O. usado para indicar a propriedade de se utilizar o mesmo nome para mtodos diferentes. Uma vantagem do polimorfismo a relativa facilidade de manuteno e extenso dos programas. A idia de polimorfismo est ligada com a indicao de que os atributos s devem ter seus valores alterados por mtodos da classe.
Polimorfismo
Uma das estratgias adotadas na Programao Orientada a Objeto a de implementar os mtodos o mais alto possvel na hierarquia de classes. As variaes necessrias nos mtodos so feitas a medida em que se desa a rvore hierrquica. O conceito de Polimorfismo relevante pelo carter sinttico que d aos programas. Exemplo : ImprimirDados da loja Comercial
Polimorfismo
O Polimorfismo no consiste simplesmente na existncia de funes com o mesmo nome, que pode ser uma sobrecarga de funo. A diferena entre sobrecarga de funes e polimorfismo vem de 2 fatos :
O polimorfismo s existe em hierarquia de classes (herana) e deve ser feito em tempo de execuo (Run time). A sobrecarga no exige herana e o processo de associao com um objeto se d em tempo de compilao.
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 caracterstica permite implementar sistemas que so mais facilmente extensveis; 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 polimrfico.
//Exemplo de polimorfismo Pessoa pes; // Referncia da classe Pessoa (que abstrata) Professor prof = new Professor(argumentos); //Objeto prof (instncia da classe Professor) Aluno alu = new Aluno(argumentos); //Objeto alu (instncia da classe Aluno) // Associa a Referncia de um objeto Professor Referncia da classe Pessoa pes = prof; System.out.println(pes.getDescricao()+"\n Disciplinas Ministradas: \n"+ pes.getDisciplinas()); // Associa a Referncia de um objeto Aluno Referncia 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 (instncia da classe Pessoa) ainda no foi inicializado (isso apenas acontece quando se utilizado o operador new). Desse modo no permitido acessar qualquer contedo. Os objetos prof e alu, que so instncias de Professor e Alunos, respectivamente, possuem o comportamento prprio 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 atribudo; A partir do momento da atribuio, o objeto que recebe a referncia altera o seu comportamento; Entretanto somente os mtodos que possui a mesma assinatura na superclasse e na subclasse podem ser acessados.
Sobrescrio (override)
A sobrescrio ocorre pela redefinio de um mtodo da superclasse pela subclasse com a mesma assinatura.
public abstract class Pessoa { //Atributos //Demais mtodos 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; } } public class Professor extends Pessoa { //Atributos //Demais mtodos //Sobrescreve o mtodo public String getDescricao() { return super.getDescricao()+", e possui "+getTitMaxima()+"."; } }
Sobrecarga (overload)
A sobrecarga pode ocorrer em construtores e mtodos; caracterizada pela redefinio na mesma classe de um determinado construtor ou mtodo, onde a redefinio 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; Construtor com 4 aEndereco = pEndereco; argumentos aSexo = pSexo; aIdade = pIdade; } //Construtor da classe pessoa (5 argumentos) public Pessoa(String pNome, String pEndereco, String pSexo, int pIdade, Disciplina pDisc[]) { Sobrecarga do this(pNome, pEndereco, pSexo, pIdade); construtor agora aDisc = pDisc; 5 argumentos } //Construtor default public Pessoa() {} ... }
com
Persistncia
O termo persistncia est relacionado ao total de tempo que um objeto permanece na memria. De modo geral, as instncias das classes so criadas durante a execuo do programa e assim que o objeto no mais necessrio, ocorre uma destruio do mesmo, ou seja, o espao de memria reservado para ele liberado.
Persistncia
Um objeto em um Programa Orientado a Objetos surge das seguintes formas : a) O objeto criado esttica 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 utilizao.
Pacotes
Como visto em vrios exemplos desenvolvidos at aqui utilizamos bibliotecas preexistentes na API Java; Cada classe e interface da API pertence a um pacote especfico (ex: JOptionPane -> javax.swing.*; medida que os aplicativos se tornam mais complexos, os pacotes tornam-se cada vez mais necessrios pois ajudam a gerenciar a complexidade dos componentes do aplicativo; Os pacotes tambm facilitam a reutilizao de cdigo, permitindo que programas importem classes de outros pacotes; Analisando um pacote Java observa-se que o mesmo possui uma definio fsica representada por uma estrutura hierrquica atravs de diretrios 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 definio da classe; Veja o exemplo abaixo:
/** Classe de definio de constantes gerais */ package info.geral; 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 = "Graduao"; public static final String ESPECIALIZACAO = "Especializao"; public static final String MESTRADO = "Mestrado"; public static final String DOUTORADO = "Doutorado"; public static final String CC = "Cincias da Computao"; public static final String SI = "Sistemas de Informao"; }
Definio do pacote
Pacotes
Cada arquivo fonte (.java) deve estar no mesmo diretrio identificado na linha de definio do package (ex: c:\...\src\info\geral para o caso da classe Util); Para o projeto desenvolvido at agora teramos:
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 possvel a compilao 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 acessvel. Quando se deseja acessar mais de uma classe da hierarquia deve-se utilizar o * ;
Relacionando Classes
Apresentao
Conceitos
Relacionamentos Regras Estudo de Caso
Viso Geral
Relacionamentos
Relacionamentos provem o caminho de comunicao entre os objetos Os quatro tipos de relacionamento so:
Generalizao Associao Agregao Dependncia
Relacionamento - Associao
Dentro da perspectiva conceitual, associaes representam relaes entre ocorrncias de classes (uma pessoa trabalha para uma companhia; uma companhia tem vrios escritrios) Da perspectiva conceitual, associaes representam relaes conceituais
Pedido tem que vir de um Cliente Cliente pode ter vrios Pedidos ao longo do tempo Cada Pedido tem vrias Linhas de Pedido
Relacionamento - Associao
Regras teis:
1. Identificar todas as classes que participam da soluo, classificado-as como LIMITE, CONTROLE e ENTIDADE;
1. Para dar nomes as classes, utilize um radical para auxiliar na classificao (ex: eItemEstoque, cItemEstoque e tItemEstoque)
2. Faa o relacionamento entre elas conforme as regras descritas para LIMITE, CONTROL e ENTIDADES (todos os relacionamentos sero considerados do tipo ASSOCIAO); 3. Desenhe as classes num diagrama de
5. Adicione setas de navegabilidade para indicar a direo no acesso dos atributos. Para isto, utilize a regra de relacionamento
Teoria X Prtica
Exemplificando as Regras
Regra 5
tListagemItemEstoque
eItemEstoque
Regra 1.1
Regra 2
Regra 4
cItemEstoque
Diagramas de Classe
Estrutura:
Classes, associaes e atributos Interfaces (com operaes e constantes) Informao sobre o tipo dos atributos Navegabilidade Dependncias
Cenrio Exemplo: 1. O cliente inicia atravs da navegao pela pgina principal do sistema de pedidos. 2. O cliente pode selecionar uma loja virtual, atravs de um hyperlink disponvel na pgina principal. 3. Quando um dos links escolhido, o sistema ir montar uma pgina com os produtos daquela loja. 4. O sistema retorna a pgina com os produtos da loja virtual selecionada. 5. O cliente navega na pgina retornada e analisa os produtos.
: NavegaLojas : SiteSistema
: Loja
: Cliente
: Produto