SlideShare uma empresa Scribd logo
PROGRAMAÇÃO ORIENTADA A OBJETOS 
COM JAVA 
https://www.facebook.com/alvarofpinheiroaulas/ 
br.linkedin.com/in/alvarofpinheiro/ 
www.alvarofpinheiro.eti.br
Apresentação 
JAVA 
Java Apresentação 
www.alvarofpinheiro.eti.br *
Eclipse 
Java Apresentação 
●Se trata de um Ambiente de Desenvolvimento Integrado ou Integrated Development 
Environment (IDE). É um software livre e permite suporte a algumas linguagens de 
programação, a exemplo, Java, PHP, C e C++. Possui portabilidade paras as plataformas 
Linux, Windows e Mac OS. Uma das características dessa IDE é a flexibilidade na 
personalização, o que faz muitos o classificarem como um Framework, justamente devido 
a esse poder de customização. Podendo assim ser utilizado um dos pacotes disponíveis 
na Web ou você mesmo montar o seu pacote. Outra característica marcante dessa IDE é 
que ela é portable, ou seja, não precisa de instalação, bastando extrair os arquivos na 
pasta e executá-lo. 
●Existem várias versões , as que estão disponíveis como é mostrado abaixo: 
●* 3.7 – Indigo (Cor entre azul e violeta) – lançado em 28 de Junho de 2011; 
●* 3.6 – Helios (Sol para os gregos) – lançado em 23 de Junho de 2010; 
●* 3.5 – Galileo (Conjunto de quatro luas de Jupiter) – lançado em 24 de Junho de 2009; 
●* 3.4 – Ganymede (Lua de Jupiter) – lançado em 25 de Junho de 2008; 
●* 3.3 – Europa (Lua de Jupiter) – lançado em 29 de Junho de 2007; 
●* 3.2 – Callisto (Lua de Jupiter) – lançado em 30 de Junho de 2006; 
●* 3.1 – sem codinome – lançado em28 de Junho de 2005; 
●* 3.0 – sem codinome – lançado em 28 de Junho de 2004. 
* www.alvarofpinheiro.eti.br
Eclipse 
Java Apresentação 
●Além das versões acima existem os pacotes. Esses existem para agrupar por 
linguagem e plugins direcionados para um tipo de desenvolvimento. Para Java 
usa-se normalmente o Eclipse IDE for Java EE Developers (JEE), pois é a mais 
completa ou o Eclipse IDE for Java and Report Developers (Reporting), que 
tem os mesmos componentes da primeira mais o Birt, que é um recurso para 
desenvolver relatórios. Os plugins, além os do pacote, existem diversos 
disponíveis na Web e para instalar é normalmente só baixá-los e descompactá-los 
dentro da pasta eclipse. 
●Para baixar as versões e pacotes segue link: 
●http://www.eclipse.org/downloads/ 
●Para baixar os plugins segue link: 
●http://www.eclipse.org/modeling/mdt/?project=uml2 
* www.alvarofpinheiro.eti.br
JDK / JRE / JVM 
Java Apresentação 
●JDK é um Pacote de Desenvolvimento de Aplicativos ou Java Developers Kit e servem 
para que desenvolvedores tenham condições de interagir com o software, 
disponibilizando para isso documentação, código e utilitários. Basicamente o JDK contém 
diversas ferramentas entre as quais estão as de compilação e execução do programa 
Java. JDK e SDK são as mesmas coisas. 
●JRE significa Ambiente de Tempo de Execução ou Java Runtime Environment e é 
utilizado para executar as aplicações da plataforma Java. Basicamente ele é composto 
de bibliotecas ou Application Program Interface (API) e da Máquina virtual Java ou Java 
Virtual Machine (JVM). Ele é utilizado como um interpretador de código de bytes em 
código de máquina, assim o JRE é o interpretador do programa Java. JRE contém o 
ambiente de execução, como JVM e outras classes Java (AWT, SWING), mas não 
contém todas as ferramentas de desenvolvimento tais como um compilador ou um 
depurador. 
●JVM é a Máquina Virtual Java e é usada para interpretar o programa em Java para 
plataforma para corrente. Ambos JDK e JRE contém a JVM . 
* www.alvarofpinheiro.eti.br
JDK / JRE / JVM 
Java Apresentação 
●O Java Developers Kit (JDK) inclui a JVM, bibliotecas de 
classe standard, e muita outras ferramentas que um 
desenvolvedor utiliza para desenvolver um programa 
Java 
●O Java Runtime Environment (JRE) inclui a JVM, 
bibliotecas de classe standard, desta forma pode-se 
executar um programa Java, mesmo não possuindo 
todas as ferramentas. 
●O Java Virtual Machine (JVM), é o responsável em 
carregar os arquivos da classe para a sua execução. 
* www.alvarofpinheiro.eti.br
JAR 
Java Apresentação 
●O Java Archive (JAR) é um arquivo compactado usado para distribuir classes 
compiladas, metadados associados que podem constituir um programa, 
imagens, XMLs, etc. Mas, normalmente é usada para distribuir uma aplicação 
Java que contém tudo que foi citado. 
●Os arquivos JAR podem ser criados e extraídos usando o utilitário "jar" da 
JDK. Esse tipo de arquivo possui um manifesto localizado no caminho META-INF/ 
MANIFEST.MF. As entradas do arquivo manifesto determinam como o ele 
será usado. O que é normalmente usado como um executável, desta forma ele 
terá uma de suas classes especificada como a classe principal. 
●O arquivo manifesto terá uma entrada do tipo: 
●Main-Class:meusProgramas.MinhaClasse. 
●As aplicações contidas neste tipo de arquivo são tipicamente executadas com 
o comando java -jar exemplo.jar 
* www.alvarofpinheiro.eti.br
História 
Java Apresentação 
●O Java foi concebido inicialmente como uma ferramenta de programação para um 
projeto da empresa Sun Microsystems, denominado de O Projeto Verde, pelos 
desenvolvedores Patrick Naughton, Mike Sheridan e James Gosling, no ano de 1991. 
Esse projeto tinha o objetivo criar uma nova plataforma para a computação interativa, 
desta forma, a linguagem de programação não era o principal objetivo desse projeto. Um 
ano após o início foi concluído o sistema que permitia controle remoto e possuía interface 
sensível ao toque interativa, sendo o sistema denominado de *7 (star seven). Com esse 
sistema era possível controlar uma grande variedade de dispositivos de uso doméstico, 
além de possuir interface com alta usabilidade e gráfica. 
●A linguagem utilizada nesse sistema foi batizada de Oak o que significa carvalho em 
inglês, em referência a árvore que James Gosling via todos os dias de sua janela no 
período de desenvolvimento. Em 1995, John Gage, diretor da Sun Microsystems, e Marc 
Andreessen, um executivo da Netscape, anunciaram o lançamento da plataforma Java, 
que era composta do Java Virtual Machine (JVM) e do Application Programming Interface 
(API) Java. Essa plataforma foi inserida no Netscape Navigator, um dos principais 
browsers nessa época. 
* www.alvarofpinheiro.eti.br
Biografia 
Java Apresentação 
●Patrick Naughton, americano nascido em 1965 é um desenvolvedor de software 
conhecido como sendo um dos criadores originais da linguagem de programação Java, 
pois trabalho na Sun Microsystems no Projeto Verde a origem do Java. Em 1994, saiu da 
Sun e foi para Starwave de propriedade de Paul Allen para desenvolver um servidor Java. 
É autor do livro O Manual do Java, Osborne, 1995 e co-autor do Java: The Complete 
Reference, com Herbert Schildt, Osborne , 1996. Em 1998, torna-se vice-presidente 
executivo da Infoseek. 
●James Gosling, nasceu em Calgary no Canadá em 1955 é conhecido como o pai da 
linguagem de programação Java. Em 1977, formou Bacharel em Ciência da Computação 
pela Universidade de Calgary, e em 1983 tornou-se PhD em Ciência da Computação pela 
Universidade Carnegie Mellon. Enquanto estudava no doutorado, Gosling programou a 
versão original do editor de texto Emacs para UNIX, e antes de se juntar a Sun 
Microsystems ele construiu uma versão de UNIX para máquinas multi-processadas, 
assim como diversos compiladores e sistemas de mensagens eletrônicas. Trabalhou de 
1984 até 2010 na Sun Microsystems, atualmente está na Google. 
* www.alvarofpinheiro.eti.br
Independência 
Java Apresentação 
●O código é armazenado em arquivos com extensão 
.java; Um programa .java compilado se transforma em 
.class; Bytecodes são interpretados em tempo de 
execução. 
* www.alvarofpinheiro.eti.br
Applets 
Java Apresentação 
●Utilizado em páginas HTML; Pode incluir formulários, 
áudio, imagens, vídeo, etc.; Aparece nos browsers e 
pode se comunicar com o servidor. 
* www.alvarofpinheiro.eti.br
Aplicação 
Java Apresentação 
●Instalação no lado do cliente: JVM é executado; Não faz 
carga das classes na rede; 
●Instalação do lado do servidor; Pode servir múltiplos 
clientes; Faz uso dos modelos multi-camada. 
* www.alvarofpinheiro.eti.br
Java 
●Código é compilado para bytecodes; 
Java Apresentação 
●Código bytecodes é independentes de plataforma; 
●Os bytecodes são interpretados por uma JVM; 
●As applets são executados em um browser no cliente; 
●As aplicações Java são executadas de forma autônoma. 
* www.alvarofpinheiro.eti.br
Introdução 
JAVA 
Java Introdução 
www.alvarofpinheiro.eti.br *
Convenções 
Java Introdução 
●Nomes dos arquivos = palavras capitalizadas: 
●Ex.: ArquivoX.java, NomeComposto.java 
●Nomes das Classes = palavras capitalizadas: 
●Ex.: Classe, NomeComposto 
●Nomes dos Métodos = verbo + palavras capitalizadas: 
●Ex.: getCampoNome(), setCampoNome() 
* www.alvarofpinheiro.eti.br
Definição de Classe 
●Modificador de acesso: public, private 
●A palavra-chave class 
●Campos das instâncias 
●Construtores 
●Métodos das instâncias 
●Campos da classe 
●Métodos da classe 
Java Introdução 
* 
public class ClasseExemplo { 
// campos das instâncias 
private int campoExemplo1; 
private String campoExemplo2; 
// construtores 
public ClassExemplo() { 
this.campoExemplo1 = 0; 
this.campoExemplo2 = ""; 
} 
public ClassExemplo(int paramExemplo1; String paramExemplo2) { 
this.campoExemplo1 = paramExemplo1; 
this.campoExemplo2 = paramExemplo2; 
} 
// métodos das instâncias 
private int getCampoExemplo1() { 
return campoExemplo1; 
} 
private void setCampoExemplo1(int campoExemplo1) { 
this.campoExemplo1 = campoExemplo1; 
} 
private String getCampoExemplo2() { 
return campoExemplo2; 
} 
private void setCampoExemplo2(String campoExemplo2) { 
this.campoExemplo2 = campoExemplo2; 
} 
} 
www.alvarofpinheiro.eti.br
Bloco de código 
Java Introdução 
●Em java se usa chaves “{ }” para: Agrupar todas as 
declarações de classe; Agrupar todas as declarações de 
métodos; e Agrupar outros segmentos de código 
relacionado entre si. 
* www.alvarofpinheiro.eti.br
Instruções 
Java Introdução 
●Os comandos terminam sempre com ponto-e-vírgula “;” 
●Todos os comandos devem estar entre chaves “{}” 
* www.alvarofpinheiro.eti.br
Java Introdução 
Variáveis / Constantes 
●A declaração de variáveis basta especificar o escopo, o tipo de 
dado o nome da variável e se for desejado o valor que será 
inicializado, caso contrário usará o default do tipo. 
● int v1; 
● static int v2; 
● static int v3 = 9; 
●A declaração de constantes segue a mesma especificação com 
a adição da palavra final. 
● final float PI = 3.14159265f; 
● static final float PI = 3.14159265f; 
●Obs: com o uso da palavra static temos uma especificação de 
escopo global, sem ela local. 
* www.alvarofpinheiro.eti.br
Tipos de Dados 
●boolean: lógico - boolean b = true; 
●byte: inteiros entre -128 e 127 - byte b = 111; 
●char: caracter - char letra = ‘A’; 
Java Introdução 
●double: números reais de precisão dupla - double d = 123.4; 
●float: números reais de precisão simples - float f = 12.3; 
●int: inteiro entre -2.147.483.648 e 2.147.483.647 - int i =0; 
●long: inteiro entre -9.223.372.036.854.775.808 
● e 9.223.372.036.854.775.807 
●short: inteiro entre -32.768 e 32.767 - short s = 1; 
●void: método sem retorno ou vazio. 
* www.alvarofpinheiro.eti.br
Java Introdução 
Declaração de Variáveis 
●Variáveis de instância pertencem as classes. 
●Variáveis locais pertencem aos métodos e devem ser 
inicializadas antes de serem usadas. 
●class Exemplo { 
● private int exVar; // variável de instância 
● public void exMetodo() { 
● float exVarLoc = 1.0; // variável local 
● } 
●} 
* www.alvarofpinheiro.eti.br
Tipo Literal 
Java Introdução 
●Se declarado como char usar aspas simples. 
●Se declarado como String usar aspas duplas. 
●class Exemplo { 
● public void exMetodo() { 
● char exVar1 = ‘A’; 
● String exVar2 = “A”; 
● } 
●} 
* www.alvarofpinheiro.eti.br
Atribuição 
●São possibilidades de atribuição: 
●int var1 = 1; 
●int var1, var2, var3 = 2; 
●var1 = var2 = var3 = 3; 
Java Introdução 
* www.alvarofpinheiro.eti.br
Aritmética 
●int a, b, c, d, e; 
●a = 8 + 7; // adição 
●b = 6 - 5; // subtração 
●c = 4 * 3; // multiplicação 
Java Introdução 
●d = 2 / 1; // divisão que retorna o quociente 
●e = 2 % 1; // divisão que retorna o resto 
* www.alvarofpinheiro.eti.br
Java Introdução 
Conversões implícitas 
●Java converter um tipo menor para um maior 
automaticamente, mas não faz o contrário (downcast). 
● byte -> short -> int -> long (FAZ) 
● byte <- short <- int <- long (NÃO FAZ) 
● 
* www.alvarofpinheiro.eti.br
Java Introdução 
Incrementador / Decrementador 
●Exemplos: 
●int var1 = 3, var2 = 0; 
●var2 = ++var1; // Pré: Incrementa var1 primeiro para depois 
atribuir para var2. 
●var2 = var1++; // Pós: Atribui para var2 primeiro para depois 
incrementar var1. 
●var2 = --var1; // Pré: Decrementa var1 primeiro para depois 
atribuir para var2. 
●var2 = var1--; // Pós: Atribui para var2 primeiro para depois 
decrementar var1. 
* www.alvarofpinheiro.eti.br
Relacionais 
●== igual 
●!= diferente 
●> maior que 
●>= maior ou igual 
●< menor que 
●<= menor ou igual 
●Exemplos: 
● int var1 = 1, var2 = 2; 
● boolean res = true; 
● res = (var1 == var2); // falso 
● res = (var2 > var1); // verdadeiro 
Java Introdução 
* www.alvarofpinheiro.eti.br
Lógicos 
●&& e lógico 
●|| ou lógico 
●^ ou exclusivo 
●! Negação 
●Exemplos: 
● int var1 = 1, var2 = 2, var3 = 3; 
● boolean res = true; 
Java Introdução 
● res = (var2 > var1) & (var3 == 3); // falso 
* www.alvarofpinheiro.eti.br
Atribuição Composta 
●int x = 0; 
●x = x + 1; // x passa a ser 1 
●é o mesmo que 
●x += x; // x passa a ser 2 
●outras possibilidades 
●x -= 1; // x passa a ser 1 
●x *= 2; // x passa a ser 2 
●x /= 2; // x passa a ser 1 
Java Introdução 
* www.alvarofpinheiro.eti.br
Concatenação 
●String var1 = “Álvaro”; 
●String var2 = “Pinheiro”; 
Java Introdução 
●var1 = var1 + var2; // resulta em “ÁlvaroPinheiro” 
●Var1 += var2 // resulta em “ÁlvaroPinheiro” 
* www.alvarofpinheiro.eti.br
Array 
● public static int obterVetorInteito() { 
● int[] vI = new int[3]; 
● vI[0]=0; 
● vI[1]=1; 
● vI[2]=2; 
● return (vI[2]); 
● } 
● public static String obterVetorString() { 
● String[] vS = new String[3]; 
● vS[0] = "a"; 
● vS[1] = "b"; 
● vS[2] = "c"; 
● return (vS[2]); 
● } 
Java Introdução 
* www.alvarofpinheiro.eti.br
Array 
● public static float obterMatrizFloat() { 
● float[][] mF = new float[1][2]; 
● mF[0][0] = 0.0f; 
● mF[0][1] = 0.1f; 
● return (mF[0][1]); 
● } 
● public static double obterMatrizDouble() { 
● double[][][] mD = new double[1][2][3]; 
● mD[0][0][0] = 0.0; 
● mD[0][0][1] = 0.001; 
● mD[0][0][2] = 0.002; 
● mD[0][1][0] = 0.01; 
● mD[0][1][1] = 0.011; 
● mD[0][1][2] = 0.012; 
● return (mD[0][1][2]); 
● } 
Java Introdução 
* www.alvarofpinheiro.eti.br
Array 
● public static int obterArrayListInteiro() { 
● ArrayList<Integer> al = new ArrayList<Integer>(); 
● al.add(10); 
● al.add(11); 
● al.add(12); 
● return (al.get(2)); 
● } 
● public static String obterArrayListString() { 
● ArrayList<String> al = new ArrayList<String>(); 
● al.add("a"); 
● al.add("b"); 
● return (al.get(1)); 
● } 
Java Introdução 
* www.alvarofpinheiro.eti.br
if 
Java Introdução 
* 
if ( cond ) 
cmd1; 
[else] 
cmd2; 
www.alvarofpinheiro.eti.br
If else if else 
Java Introdução 
* 
if (cond1) 
if (cond2) 
cmd1; 
else 
cmd2; 
else 
cmd3; 
www.alvarofpinheiro.eti.br
( ? : ) 
Java Introdução 
* 
(expr1 ? expr2 : expr3) 
int var1; 
var1 = (val1 > val2) ? ret_verdadeiro : ret_falso; 
www.alvarofpinheiro.eti.br
while 
Java Introdução 
* 
while ( cond ) 
cmd; 
www.alvarofpinheiro.eti.br
do...while 
Java Introdução 
* 
do 
cmd; 
while ( cond ); 
www.alvarofpinheiro.eti.br
for 
Java Introdução 
* 
for ( início; cond; passo ) 
cmd; 
www.alvarofpinheiro.eti.br
break 
Java Introdução 
* 
● Interrompe um ciclo ou uma instrução 
switch; 
● Transfere o controle para a primeira 
instrução depois do corpo do ciclo ou 
instrução switch; e 
● Pode simplificar o código. 
www.alvarofpinheiro.eti.br
continue 
Java Introdução 
* 
● Apenas pode ser usado em ciclos; 
● Abandona a iteração em curso e salta para a 
próxima iteração do ciclo 
www.alvarofpinheiro.eti.br
Java Introdução 
Labeled break, continue 
* 
Pode ser usado para saltar fora de ciclos 
encaixados ou continuar um ciclo exterior ao 
ciclo corrente 
lacoexterno: 
for (int i = 0; i < 10; i++) { 
for (int j = 0; j < 5; j++) { 
System.out.println(i, j); 
if (i + j > 7) 
break lacoexterno; 
} 
} 
www.alvarofpinheiro.eti.br
Entrada e Saída de Dados 
JAVA 
Java Entrada/Saída 
www.alvarofpinheiro.eti.br *
Saída 
Java Entrada/Saída 
* 
Para sair com dados no dispositivo corrente 
basta usar System.out.print() ou 
System.out.println(), onde o primeiro imprime e 
fica com o controle na mesma linha e o 
segundo imprime e o controle vai para a 
próxima linha. 
www.alvarofpinheiro.eti.br
Saída 
Java Entrada/Saída 
* 
Para sair com dados no dispositivo corrente 
basta usar System.out.print() ou 
System.out.println(), onde o primeiro imprime e 
fica com o controle na mesma linha e o 
segundo imprime e o controle vai para a 
próxima linha. 
public class Principal { 
public static void main(String[] args) { 
System.out.print("Imprime e não muda de linha"); 
System.out.println("-Veja a saída no console! Percebeu?"); 
System.out.println("Imprimiu a cadeia anterior e mudou de 
linha"); 
System.out.print("-Olhe o console! Percebeu?"); 
} 
} 
www.alvarofpinheiro.eti.br
Entrada 
Java Entrada/Saída 
* 
Para entrar com dados usar a classe Scanner. 
import java.util.*; 
public class Principal { 
public static void main(String[] args) { 
int codigo = 0; 
String nome = ""; 
Scanner scanner = new Scanner(System.in); 
System.out.println("Código:"); 
codigo = scanner.nextInt(); 
System.out.println("Nome:"); 
nome = scanner.next(); 
System.out.println("Código:" + codigo + " e Nome:" + nome + " informados!"); 
} 
} 
www.alvarofpinheiro.eti.br
Stream 
Java Entrada/Saída 
* 
Trata-se de uma abstração para a entrada ou 
saída de dados. Os bytes trafegam do input 
para o output por stream. E esse pode 
representar múltiplas fontes de dados, como 
arquivos em disco, outros computadores em 
rede, páginas da web, dispositivos de entrada 
como teclado, pendrive, ... 
www.alvarofpinheiro.eti.br
Stream Hierarquia 
Java Entrada/Saída 
* 
java.io.InputStream 
AudioInputStream 
FileInputStream 
ObjectInputStream 
java.io.OutputStream 
ByteArrayOutputStream 
FileOutputStream 
ObjectOutputStream 
www.alvarofpinheiro.eti.br
Input Stream 
Java Entrada/Saída 
* 
Métodos comuns a todas as input streams: 
// para ler um um caracter 
int read() throws IOException 
// inicia a stream para que os seus 
// bytes possam ser lidos novamente 
void reset() throws IOException 
// notifica a stream de que ela vai 
// ser fechada 
void close() throws IOException 
www.alvarofpinheiro.eti.br
Output Stream 
Java Entrada/Saída 
* 
Métodos comuns a todas as output streams: 
// escreve um caracter 
void write(int n) throws IOException 
// escreve os bytes que estavam 
// à espera para ser escritos 
void flush() throws IOException 
// notifica a stream de que de que ela 
// vai ser fechada 
void close() throws IOException 
www.alvarofpinheiro.eti.br
Exemplo de Stream 
Java Entrada/Saída 
* 
try { 
InputStream ler = new FileInputStream(“arq.txt”); 
char caracter = (char)ler.read(); 
String cadeia = “exemplo”; 
OutputStream gravar = new FileOutputStream(“arq.txt”); 
for (int i = 0; i < cadeia.length(); i++) 
gravar.write(cadeia.charAt(i)); 
gravar.close(); 
} 
catch (IOException excecao) { 
System.out.print(excecao.getMessage()); 
} 
www.alvarofpinheiro.eti.br
Thread 
Java Entrada/Saída 
* 
É uma execução sequencial de um programa. Cada 
programa tem pelo menos um thread. Cada thread tem 
a sua própria pilha, prioridade e conjunto de registos 
virtuais. Os threads subdividem o comportamento de 
um programa 
em subtarefas independentes. 
São usados virtualmente em todos os computadores: 
Em muitas aplicações (imprimir); Em programas como 
browsers Internet; Em bases de dados; No sistema 
operacional; e Assim os Threads são normalmente 
usados, mas não são percebidos pelo usuário. 
www.alvarofpinheiro.eti.br
Thread 
Java Entrada/Saída 
* 
Se usa threads para melhor aproveitar as 
capacidades do computador e assim utilizar a 
CPU enquanto se faz entrada/saída de dados. 
Para maior produtividade do usuário, através 
de uma interface mais interativa. E pelas 
vantagens na simplificação da lógica 
algoritmica. 
www.alvarofpinheiro.eti.br
Thread 
Java Entrada/Saída 
* 
A Classe Thread: Mantém o estado de um 
thread; Fornece diversos construtores; Fornece 
diversos métodos; São escalonados pela JVM; 
e Utiliza o sistema operacional. 
Thread.currentThread() 
Thread.sleep() 
Thread.setName() 
Thread.isAlive() 
www.alvarofpinheiro.eti.br
Thread 
Java Entrada/Saída 
* 
Cada programa corre numa thread e em 
seguida adormecer, assim uma thread é uma 
técnica que permite que outras threads possam 
ser executadas. 
public static void main (args[] s) { 
System.out.println(“thread " + Thread.currentThread().getName()); 
try { 
Thread.sleep(5000) 
} 
catch (InterruptedException e) { 
} 
… 
} 
www.alvarofpinheiro.eti.br
Thread 
Java Entrada/Saída 
* 
// criar um thread 
public class Dormir extends Thread { 
public void run () { 
Date inicio = new Date(); 
try { 
Thread.currentThread().sleep 
((int) (1000 * Math.random())); 
} 
catch (Exception es) {} 
long lapso = new Date().getTime() - inicio.getTime(); 
System.out.println(Thread.currentThread().getName() + 
": lapso de " + lapso + "milisegundos"); 
} 
} 
www.alvarofpinheiro.eti.br
Thread 
Java Entrada/Saída 
* 
// instanciar a Dormir 
public static void main(String[] args) { 
new Dormir().start(); 
new Dormir().start(); 
System.out.println(“2 threads iniciadas:"); 
} 
// Saída 
2 threads iniciadas: 
Thread-1: lapso de 78 milisegundos 
Thread-2: lapso de 428 milisegundos 
www.alvarofpinheiro.eti.br
Thread 
Java Entrada/Saída 
* 
Ciclo de vida: 
www.alvarofpinheiro.eti.br
Thread 
Java Entrada/Saída 
* 
Se uma thread invocar um método 
synchronized, nenhuma outra thread pode 
executar um método sincronizado no 
mesmo objeto até a primeira thread completar 
a sua tarefa. 
public class Moldura extends JFrame { 
public synchronized void Atualiza() { 
… 
} 
… 
} 
www.alvarofpinheiro.eti.br
Thread 
Java Entrada/Saída 
* 
Cada thread tem uma prioridade que vai de 1 
até 10 e o escalonamento é dependente do 
sistema operacional. Uma thread de alta 
prioridade pode interromper uma de baixa 
prioridade, assim threads de alta prioridade 
podem dominar o processador e de prioridades 
idênticas podem ser escalonados de forma 
Circular, então cuidado ao usar synchronized. 
www.alvarofpinheiro.eti.br
Java MVC/JDBC 
Model-View-Controller (MVC) 
* 
Arquitetura para construção de aplicações OO 
em que se separam três dimensões, as quais 
são: Modelo, que mantém dados usando os 
algoritmos apropriados e fornece métodos de 
acesso; Visão, que constrói uma representação 
visual de parte ou todos os dados do modelo; e 
Controlador, que trata das regras de negócio. 
Quando o modelo altera os seus dados, gera 
eventos que fazem com que a visão atualize a 
sua representação, segundo as ordens do 
controlador. 
www.alvarofpinheiro.eti.br
Java MVC/JDBC 
Model-View-Controller (MVC) 
* 
Podem existir várias visões e controladores 
para o mesmo modelo, o qual pode 
permanecer inalterado quando este evolui. 
Uma alteração no modelo provoca um evento 
de alteração que é difundido para todos os 
objetos que estão à escuta desse evento e 
desencadeia as alterações, assim facilita 
manter o sincronismo entre visões diferentes 
de um mesmo modelo. Atuar numa visão pode 
provocar alterações no modelo que são 
refletidas nas outras visões. 
www.alvarofpinheiro.eti.br
Java MVC/JDBC 
Model-View-Controller (MVC) 
* 
A arquitetura de desenvolvimento em três camadas 
divide um aplicativo permitindo que a lógica de 
negócio resida no meio das três camadas (camada 
intermediária ou camada de negócios), como a maior 
parte do código que normalmente é escrito fica na 
MVC - 
camada de negócio, deixando-a no meio, torna mais 
prática a construção e manutenção. 
A arquitetura Modelo Visualização Controle (MVC) 
permite dividir a funcionalidade da apresentação dos 
dados. Assim torna mais fácil mapear os conceitos no 
domínio de aplicações. 
www.alvarofpinheiro.eti.br
Java MVC/JDBC 
Model-View-Controller (MVC) 
* 
Na arquitetura MVC o modelo representa 
os dados da aplicação que governam o 
acesso e a modificação dos dados. 
O modelo mantém o estado persistente do negócio e fornece 
ao controlador a capacidade de acessar as funcionalidades da 
aplicação encapsuladas pelo próprio modelo. É a camada de 
lógica da aplicação e é o coração da aplicação. Modela os 
dados e o comportamento por atrás do processo de negócios 
e se preocupa apenas com o armazenamento, manipulação e 
geração de dados É um encapsulamento de dados e de 
comportamento independente da apresentação. 
www.alvarofpinheiro.eti.br
Java MVC/JDBC 
Model-View-Controller (MVC) 
* 
Um componente de visualização renderiza 
o conteúdo de uma parte particular do 
modelo e encaminha para o controlador as 
ações do usuário e acessa também os 
dados do modelo via controlador definindo 
como esses dados devem ser 
aAp Creasmeandtaadodse. apresentação ou visualização, não esta 
preocupada em como a informação foi obtida ou onde ela foi 
obtida apenas exibe a informação. inclui os elementos de 
exibição no cliente, tipo HTML, XML, ASPX, JSP, JFC, 
Applets, ... É a camada com o interface com o usuário. E é 
usada para receber a entrada de dados e apresentar o 
resultado. 
www.alvarofpinheiro.eti.br
Java MVC/JDBC 
Model-View-Controller (MVC) 
* 
Um controlador define o comportamento da 
aplicação, é ele que interpreta as ações do 
usuário e as mapeia para chamadas do 
modelo. 
Em um cliente de aplicações Web essas ações do usuário 
poderiam ser cliques de botões ou seleções de menus. As 
ações realizadas pelo modelo incluem ativar processos de 
negócio ou alterar o estado do modelo. Com base na ação do 
usuário e no resultado do processamento do modelo , o 
controlador seleciona uma visualização a ser exibida como 
parte da resposta a solicitação do usuário. Há normalmente um 
controlador para cada conjunto de funcionalidades 
relacionadas. 
www.alvarofpinheiro.eti.br
Java MVC/JDBC 
Model-View-Controller (MVC) 
* 
Em um cliente de aplicações Web essas ações do 
usuário poderiam ser cliques de botões ou seleções de 
menus. As ações realizadas pelo modelo incluem 
ativar processos de negócio ou alterar o estado do 
modelo. Com base na ação do usuário e no resultado 
do processamento do modelo , o controlador seleciona 
uma visualização a ser exibida como parte da resposta 
a solicitação do usuário. Há normalmente um 
controlador para cada conjunto de funcionalidades 
relacionadas. 
www.alvarofpinheiro.eti.br
Java MVC/JDBC 
Model-View-Controller (MVC) 
* 
Algumas vantagens do uso do modelo MVC: gerenciar 
múltiplos visualizadores usando o mesmo modelo e é fácil 
manter, testar e atualizar sistemas múltiplos; É muito simples 
incluir novos clientes apenas incluindo seus visualizadores e 
controles; Torna a aplicação escalável; É possível ter 
desenvolvimento em paralelo para o modelo, visualizador e 
controle pois são independentes. 
Algumas desvantagens do uso MVC: Requer uma quantidade 
maior de tempo para analisar e modelar o sistema; Requer 
pessoal especializado; Não é aconselhável para pequenas 
aplicações. 
www.alvarofpinheiro.eti.br
Java MVC/JDBC 
Java DataBase Connective (JDBC) 
* 
Etapas de uso de JDBC: 
1. Carregar o driver JDBC; 
2. Estabelecer a ligação à base de dados; 
3. Criar um objeto SQL; 
4. Executar uma consulta; 
5. Processar os resultados; e 
6. Fechar a ligação. 
www.alvarofpinheiro.eti.br
Java MVC/JDBC 
Java DataBase Connective (JDBC) 
* 
Para usar um driver JDBC, é necessário carregar o 
driver através do método Class.forName(), através do 
código Class.forName("jdbc.DriverXYZ") em que o 
jbdc.DriverXYZ é o driver JDBC que se pretende 
carregar. Se usarmos um driver JDBC-ODBC, o 
código será algo como: 
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
www.alvarofpinheiro.eti.br
Java MVC/JDBC 
Java DataBase Connective (JDBC) 
* 
Digitar o 
mysql-connector-java-5.1.18-bin.jar; e para isso é 
necessário clicar sobre o projeto e acionar a opção do 
menu Build Path executando a subopção Add External 
Archives... 
Depois é só digitar o código que cria o objeto de 
conexão e que estabelece a mesma. 
www.alvarofpinheiro.eti.br
Java MVC/JDBC 
Java DataBase Connective (JDBC) 
* 
O objeto JDBC Statement envia comandos SQL para a 
base de dados. Os objetos Statement são criados a 
partir de objetos Connection ativos. 
Exemplo: 
Statement cmd = con.createStatement(); 
Com um objeto Statement, pode-se enviar chamadas 
SQL diretamente à base de dados. 
www.alvarofpinheiro.eti.br
Java MVC/JDBC 
Java DataBase Connective (JDBC) 
* 
executeQuery() - executa uma query SQL e retorna os 
dados numa tabela (ResultSet). A tabela resultante 
pode estar vazia mas nunca null. 
String sCmd = "SELECT campo FROM tabela" 
ResultSet oResultado = cmd.executeQuery(sCmd); 
www.alvarofpinheiro.eti.br
Java MVC/JDBC 
Java DataBase Connective (JDBC) 
* 
executeUpdate() - utilizado para executar instruções 
Data Definition Language (DDL). O resultado é o 
número de linhas que foram afetadas na base de 
dados. 
www.alvarofpinheiro.eti.br
Java MVC/JDBC 
Java DataBase Connective (JDBC) 
* 
getMaxRows/setMaxRows - Determina o número de 
linhas que um ResultSet pode conter. Por omissão, o 
número de linhas é ilimitado (return 0). 
getQueryTimeout/setQueryTimeout - Especifica o 
tempo que um driver deve esperar pela execução de 
um STATEMENT antes de lançar a exceção 
SQLException. 
www.alvarofpinheiro.eti.br
Java MVC/JDBC 
Java DataBase Connective (JDBC) 
* 
A ResultSet contém os resultados da query SQL. 
Métodos úteis: 
● close - Liberta os recursos alocados pelo JDBC; 
● getMetaDataObject - Retorna um objeto; 
● ResultSetMetaData - que contém informação sobre 
as colunas do ResultSet; 
● next - Tenta mover para próxima linha do ResultSet, 
se bem sucedido é devolvido true; senão, false; A 
primeira invocação de next posiciona o cursor na 
primeira linha. 
www.alvarofpinheiro.eti.br
Java MVC/JDBC 
Java DataBase Connective (JDBC) 
* 
● findColumn - Retorna o valor inteiro correspondente 
à coluna especificada por nome, os números das 
colunas nos resultados não mapeiam 
necessariamente para as mesmas colunas na base 
de dados; 
● getXxx - Retorna o valor da coluna especificada 
pelo nome ou índice como um tipo Xxx do Java, 
retorna 0 ou null. 
www.alvarofpinheiro.eti.br
Java MVC/JDBC 
Java DataBase Connective (JDBC) 
* 
Excepções SQL - Quase todos os métodos JDBC 
podem originar uma SQLException em resposta a um 
erro de acesso a dados. Se mais do que um erro 
ocorrer, eles são encadeados. As excepções SQL 
contêm: Descrição do erro, getMessage. O SQLState 
(Open Group SQL specification) identificado a 
excepção, getSQLState. Um código de erro específico 
do vendedor da base de dados, getErrorCode. Uma 
referência para a próxima SQLException, 
getNextException 
www.alvarofpinheiro.eti.br
Java MVC/JDBC 
Java DataBase Connective (JDBC) 
* 
import java.sql.*; 
public class Principal { 
public static void main(String[] args) throws Exception { 
String comandoSQL; 
try { 
Connection conexao = BD.obtemConexao("127.0.0.1", "exemplo", "root", 
“***"); 
comandoSQL = "CREATE TABLE EXEMPLO COD INTEGER"; 
BD.executaDDL(conexao, comandoSQL); 
comandoSQL = “INSERT INTO EXEMPLO (COD) VALUES (1) "; 
BD.executaDDL(conexao, comandoSQL); 
comandoSQL = “SELECT * FROM EXEMPLO"; 
BD.executaDML(conexao, comandoSQL); 
} 
catch (Exception excecao) { 
System.out.print(excecao.getMessage()); 
} 
} 
} 
www.alvarofpinheiro.eti.br
Java MVC/JDBC 
Java DataBase Connective (JDBC) 
* 
import java.sql.*; 
public class BD { 
public static Connection Conexao( 
String servidorNome, 
String bancoNome, 
String bdUsuario, String bdSenha) throws Exception { 
Connection cnx = null; 
try { 
String driverNome = "com.mysql.jdbc.Driver"; 
Class.forName(driverNome); 
String bdCaminho = "jdbc:mysql://" + servidorNome + "/" + bancoNome; 
cnx = DriverManager.getConnection(bdCaminho, bdUsuario, bdSenha); 
return (cnx); 
} 
catch (ClassNotFoundException e) { 
throw new Exception("O driver expecificado não foi encontrado"); 
} 
catch (SQLException e) { 
throw new Exception("Não foi possível conectar ao Banco de Dados"); 
} 
} 
} 
www.alvarofpinheiro.eti.br
Java MVC/JDBC 
Java DataBase Connective (JDBC) 
public static void executaDDL(Connection conexao, String comandoSQL) throws SQLException { 
* 
Statement comando; 
try { 
comando = conexao.createStatement(); 
comando.executeUpdate(comandoSQL); 
comando.close(); 
conexao.close(); 
} 
catch(SQLException excecao) { 
throw (excecao); 
} 
} 
www.alvarofpinheiro.eti.br
Java Outros Recursos 
Garbage Collection 
● Quando todas as referência para um objeto são 
eliminadas, o objeto é marcado para ser destruído. O 
Garbage Collection (GC) liberta a memória utilizada 
pelo objeto. Não existe necessidade de intervenção do 
programador, mas não possui qualquer controle sobre 
quando o objeto é realmente destruído. 
* www.alvarofpinheiro.eti.br
finalize() 
Java Outros Recursos 
* 
Se um objeto utilizar um recurso de acesso a base de 
dados, esse deve ser liberado através do método 
finalize(). Esse é invocado antes do objeto ser destruído. 
public class Classe { 
… 
public void finalize() { 
System.out.println(“Tchau"); 
} 
} 
www.alvarofpinheiro.eti.br
Collections 
Java Outros Recursos 
* 
Java Collection Framework (JCF) 
Permite interoperabilidade entre APIs diferentes; Reduz 
o esforço de aprendizagem de APIs; Reduz o esforço de 
desenho e implementaçao de APIs; e Promove 
reutilização de software. 
Interfaces 
• Comparator 
• Iterator 
Classes 
• Collections 
• Arrays 
www.alvarofpinheiro.eti.br
Java Outros Recursos 
Métodos de Collections 
* 
int size(); 
boolean isEmpty(); 
boolean contains(Object); 
Iterator iterator(); 
Object[] toArray(); 
boolean add(Object); 
boolean remove(Object); 
void clear(); 
www.alvarofpinheiro.eti.br
Set 
Java Outros Recursos 
* 
Herdado de Collection; Trata-se de uma coleção de 
objetos não ordenados; Não permite elementos 
duplicados; São os mesmos métodos de Collection; A 
semântica é diferente, pois obriga a utilizar uma interface 
diferente; e é implementada por AbstractSet, HashSet, 
TreeSet. 
www.alvarofpinheiro.eti.br
List 
Java Outros Recursos 
* 
Herdado de Collection; Uma coleção de objetos não 
ordenados; Permite elementos duplicados; e 
Implementada por AbstractList, ArrayList, LinkedList, 
Vector. 
Os principais métodos: 
Object get(int); 
Object set(int, Object); 
int indexOf(Object); 
int lastIndexOf(Object); 
void add(int, Object); 
Object remove(int); 
List subList(int, int); 
www.alvarofpinheiro.eti.br
List 
Java Outros Recursos 
* 
ArrayList - Uma implementação sem métodos legados, 
baseada num array de tamanho dinâmico; 
LinkedList - Uma implementação baseada numa lista 
duplamente ligada, podendo ter melhor performance do 
que a ArrayList se os elementos forem frequentemente 
inseridos/apagados no meio da lista. Útil para queues e 
double-ended queues (deques); e 
Vector - Uma implementação baseada num array de 
tamanho dinâmico e com métodos legados adicionais. 
www.alvarofpinheiro.eti.br
Iterator 
Java Outros Recursos 
* 
Representa um iterador para um ciclo; Criado por 
Collection.iterator(); Similar à Enumeration; Permite a 
operação remove() no item corrente. 
Principais métodos: 
boolean hasNext(); 
Object next(); 
void remove(); 
www.alvarofpinheiro.eti.br
Java Outros Recursos 
Java DataBase Connective (JDBC) 
public static void executaDML(Connection conexao, String comandoSQL) throws SQLException { 
* 
try { 
Statement comando = conexao.createStatement(); 
ResultSet retorno = comando.executeQuery(comandoSQL); 
int codigo; 
while (retorno.next()) { 
codigo = retorno.getInt("COD"); 
System.out.println("Código: " + codigo); 
} 
retorno.close(); 
comando.close(); 
conexao.close(); 
} 
catch(SQLException excecao) { 
throw (excecao); 
} 
} 
www.alvarofpinheiro.eti.br
Java Conceitos Gerias 
Java é uma linguagem de programação que usa o paradigma 
orientado a objetos e que foi criada na década de 90 por James 
Gosling da Sun Microsystems, que não gera código nativo, mas sim 
um bytecode que é executado por uma máquina virtual. 
A linguagem Java possui diversas características muito úteis para o 
desenvolvimento Web, as quais são: Orientação a objetos baseado 
no Simula67; portabilidade; APIs para rede; segurança; sintaxe 
semelhante a linguagem C; e desalocação de memória automática. 
BYTECODE é um código intermediário que serve para ser 
interpretado pela Máquina Virtual Java (MVJ), essa característica faz 
com que os os programas Java sejam independentes de sistemas 
operacionais. Cada opcode tem o tamanho de um byte, por isso é 
chamado de bytecode. 
* 
www.alvarofpinheiro.eti.br
Java Conceitos Gerias 
MVJ é um programa que carrega e executa códigos Java, 
convertendo os bytecodes em código executável do sistema 
operacional instalado, sendo responsável pelo gerenciamento dos 
aplicativos, à medida que são executados. A arquitetura de uma MVJ 
permite um controle sofisticado sobre o código que está sendo 
executado. 
APPLETS são códigos que rodam dentro de uma VM incorporada ao 
browser do usuário, executando código baixado de um servidor 
HTTP remoto. O código remoto roda em uma sandbox, que protege 
o usuário de códigos maliciosos. O autor do applet pode aplicar um 
certificado para assinar digitalmente o applet como "seguro", dando a 
ele permissão de sair do sandbox e acessar livremente a máquina 
onde está rodando. 
* 
www.alvarofpinheiro.eti.br
Java Conceitos Gerias 
J2SE (Java 2 Standard Edition) é uma ferramenta de desenvolvimento para a 
plataforma Java. Ela contém todo o ambiente necessário para a criação e 
execução de aplicações Java, incluindo a máquina virtual Java (JVM), o compilador 
Java, as APIs do Java e outras ferramentas utilitárias. 
J2EE (Java 2 Enterprise Edition) inclui toda a funcionalidade existente na 
plataforma Java SE mais todas as funcionalidades necessárias para o 
desenvolvimento e execução de aplicações em um ambiente corporativo, 
adicionando de bibliotecas que fornecem funcionalidade para implementar software 
Java distribuído, tolerante a falhas e multi-camada, baseada amplamente em 
componentes modulares executando em um servidor de aplicações. 
J2ME (Java 2 Micro Edition) é uma tecnologia que possibilita o desenvolvimento de 
software para sistemas e aplicações embarcadas, ou seja, toda aquela que roda 
em um dispositivo de propósito específico, desempenhando alguma tarefa que seja 
útil para o dispositivo. É a plataforma Java para dispositivos compactos, como 
celulares, PDAs, controles remotos, e uma outra gama de dispositivos. Java ME é 
uma coleção de APIs do Java definidas através da JCP (Java Community 
Proccess). 
* 
www.alvarofpinheiro.eti.br
Java Conceitos Gerias 
* 
Os containers Java são: 
● JDBC (Java Database Connectivity), utilizado no acesso a bancos de dados; 
● Servlets, são utilizados para o desenvolvimento de aplicações Web com 
conteúdo dinâmico. Ele contém uma API que abstrai e disponibiliza os 
recursos do servidor Web de maneira simplificada para o programador. 
● JSP (Java Server Pages), uma especialização do servlet que permite que 
conteúdo dinâmico seja facilmente desenvolvido. 
● JTA (Java Transaction API), é uma API que padroniza o tratamento de 
transações dentro de uma aplicação Java. 
● EJBs (Enterprise Java Beans), utilizados no desenvolvimento de 
componentes de software. Eles permitem que o programador se concentre 
nas necessidades do negócio do cliente, enquanto questões de infra-estrutura, 
segurança, disponibilidade e escalabilidade são responsabilidade 
do servidor de aplicações. 
● JCA (Java Connector Architecture), é uma API que padroniza a ligação a 
aplicações legadas. 
● JPA (Java Persistence API), é uma API que padroniza o acesso a banco de 
dados através de mapeamento Objeto/Relacional dos Enterprise Java 
Beans. 
www.alvarofpinheiro.eti.br
Orientação a Objetos 
JAVA 
Java Orientado a Objetos 
www.alvarofpinheiro.eti.br *
Objeto 
Java Orientado a Objetos 
* 
É uma abstração de um objeto do mundo real, 
que no mundo computacional se traduz numa 
estrutura de dados (propriedades ou campos) e 
funções (comportamentos ou métodos) 
associados no qual cada comportamento 
consiste em uma operação e cada propriedade 
numa característica. 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
Encapsulamento 
* 
Permite ocultar como as coisas funcionam. 
Violar o encapsulamento em programação 
orientada por objetos é impossível. 
As variáveis de instância devem ser 
declaradas como private. Apenas métodos de 
instância podem ter acesso a variáveis de 
instância. Assim o encapsulamento permite 
isolar a interface de uma classe da sua 
implementação interna. 
www.alvarofpinheiro.eti.br
Hieráquias 
Java Orientado a Objetos 
* 
Os objetos são compostos por outros objetos. 
E os objetos podem fazer parte de outros 
objetos. E esta relação entre objetos é 
conhecida por agregação ou composição. 
www.alvarofpinheiro.eti.br
Classes 
Java Orientado a Objetos 
* 
Uma classe é uma especificação de objetos. 
Uma definição de uma classe especifica as 
operações e atributos para todas as instâncias 
de uma classe. Assim uma classe descreve o 
tipo de um objeto e define o comportamento 
(operações) e estrutura (atributos) de um grupo 
de objetos. Reduzindo-se a complexidade 
utilizando classes. 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
Classes versus Objetos 
* 
As classes são definições estáticas que nos 
permitem compreender todos os objetos de 
uma classe. Os objetos são as entidades 
dinâmicas que existem no mundo real e em 
suas simulações. 
www.alvarofpinheiro.eti.br
Herança 
Java Orientado a Objetos 
* 
Podem existir semelhanças entre classes 
distintas. Assim se deve definir as 
propriedades comuns (atributos, operações) 
entre classes numa superclasse comum. As 
subclasses utilizam herança para incluir as 
propriedades comuns entre elas. 
www.alvarofpinheiro.eti.br
Polimorfismo 
Java Orientado a Objetos 
* 
O polimorfismo é a capacidade de um único 
nome poder referir objetos de classes 
diferentes, se relacionadas por uma 
superclasse comum. O polimorfismo surge 
quando a linguagem de programação 
simultaneamente suporta herança e a 
associação dinâmica de tipos (late binding). 
O polimorfismo permite que uma operação 
possa existir em diferentes classes. Cada 
operação tem um mesmo significado mas é 
executada de forma particular. 
www.alvarofpinheiro.eti.br
Pacote 
Java Orientado a Objetos 
* 
Servem para agregar as classes comuns em 
uma estrutura única, agrupando por afinidade. 
www.alvarofpinheiro.eti.br
Modificadores 
Java Orientado a Objetos 
* 
private 
Só a classe proprietária visualiza. 
public 
Todos visualizam. 
protected 
A classe proprietária e suas subclasses. 
package 
Dentro do pacote. 
www.alvarofpinheiro.eti.br
Instanciamento 
Java Orientado a Objetos 
* 
Os objetos são criados pelo operador new. 
Exemplo: 
Classe objeto1 = new Classe(); 
Classe objeto2 = new Classe(); 
O operador ‘new’ aloca memória para o novo 
objeto, invoca um método especial da classe 
para inicialização de objetos, o construtor e 
retorna uma referência para o novo objeto. 
www.alvarofpinheiro.eti.br
null 
Java Orientado a Objetos 
* 
As referências para objetos têm o valor null até 
serem inicializadas. É possível comparar 
referências de objetos a null. E pode-se apagar 
um objeto pela atribuição do valor 
null a uma referência. 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
Atribuição de Referências 
* 
A atribuição de uma referência a outra resulta 
em duas referências para o mesmo objeto. 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
Variáveis de Instância 
* 
As variáveis de instância são declaradas na 
classe. 
public class Classe { 
public String campo1; 
public String campo2; 
} 
As variáveis públicas de instância podem ser 
acessadas através do operador ‘.’ , mas viola o 
paradigma OO. 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
Variáveis de Classe 
* 
As variáveis de classe pertencem a uma classe 
e são comuns a todas as instâncias dessa 
classe. As variáveis de classe são declaradas 
como ‘static’ na definição da classe. 
public class Classe { 
private static String campo1; // var classe 
private String campo2; // var instância 
} 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
Variáveis de Classe 
* 
A inicialização de variáveis de classe podem 
ser na declaração. A inicialização é realizada 
quando a classe é carregada. 
public class Classe { 
private static String campo1 = “ex”; 
private String campo2; 
private int campo3 = 0; 
} 
www.alvarofpinheiro.eti.br
Métodos 
Java Orientado a Objetos 
* 
Um método é equivalente a uma função ou 
subrotina no paradigma procedural. Um 
método apenas pode ser definido na definição 
de uma 
classe. 
public void mostraDetalhes() { 
System.out.println(“Exemplo”); 
} 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
Métodos de Classe 
* 
Os métodos de classe são partilhados por 
todas as instâncias. São úteis para manipular 
variáveis de classe. Um método de classe 
pode ser invocado utilizando o nome da classe 
ou uma referência para um objeto. 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
Passagem de Parâmetros 
* 
Quando um valor primitivo é passado a um 
método, é gerada uma cópia do valor: 
public void exMetodo(int arg) { } 
Quando um objeto é passado a um método, o 
argumento refere o objeto original: 
public void exMetodo(Classe objeto) {} 
www.alvarofpinheiro.eti.br
Overloading 
Java Orientado a Objetos 
* 
Métodos de uma mesma classe podem ter o 
mesmo nome, mas os métodos devem ter 
diferentes assinaturas. 
www.alvarofpinheiro.eti.br
Assinatura 
Java Orientado a Objetos 
* 
Garante a unicidade de um método na classe e 
é composto por: 
1. nome do método; 
2. quantidade de parâmetros existentes; 
3. tipo de cada parâmetro; e 
4. ordem desses parâmetros. 
O tipo de retorno de um método e os nomes 
dos parâmetros não fazem parte de sua 
assinatura. 
www.alvarofpinheiro.eti.br
Construtores 
Java Orientado a Objetos 
* 
Servem para uma inicialização adequada, 
assim a classe deve fornecer construtores. O 
construtor é invocado automaticamente quando 
o objeto é criado e deve ter o mesmo nome da 
classe, não especifica nenhum tipo de retorno 
e 
normalmente é declarado como ‘public’. O 
compilador automaticamente fornece um 
construtor por default sem argumentos. 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
Definição de Construtores 
* 
public class Classe { 
private String campo1; 
private String campo2 = “exemplo2”; 
public Classe() { 
campo1 = “exemplo1"; 
} // construtor 
public Classe(String parametro1) { 
campo1 = parametro1; 
} // construtor sobrecarregado 
} 
Classe objeto1 = new Classe(); 
www.alvarofpinheiro.eti.br
this 
Java Orientado a Objetos 
* 
Os métodos de instância recebem um 
argumento com o nome ‘this’, que indica o 
objeto corrente. 
www.alvarofpinheiro.eti.br
this() 
Java Orientado a Objetos 
* 
Um construtor pode invocar outro através de 
this(). Partilha de código entre construtores. 
public class Classe { 
private String campo; 
public Classe() { 
this(“exemplo”); 
} 
public Classe(String parametro) { 
campo = parametro; 
} 
} 
www.alvarofpinheiro.eti.br
Classes 
Java Orientado a Objetos 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
Para iniciarmos o estudo da programação Java vamos começar com 
o entendimento do conceito de classe. 
O diagrama de classes na Programação Orientada a Objetos (POO), 
os problemas são pensados e expressados como objetos, ao 
contrário da análise tradicional os quais eram em rotinas e dados, 
que aqui foram substituídos por métodos (comportamento) e 
atributos (propriedades). Assim, quando é colocado o problema de 
desenvolver um sistema acadêmico na análise orientada a objetos, 
deve-se pensar como dividir esse problema em objetos. 
* 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
Assim teríamos Alunos, Administradores, Professores, Cursos, 
Turmas, etc... E a melhor maneira de conceituar estes termos é 
considerar um objeto do mundo real e mostrar como podemos 
representá-lo em termos conceitos em POO. Assim, um objeto é um 
conceito que usamos para representar uma entidade do mundo real. 
Exemplificando, um Aluno possui nome, data de nascimento, 
identidade, etc... E além dessas características (propriedades), 
possuem ações (métodos) como freqüentar as aulas, fazer as 
avaliações, etc... Em termos de POO para podermos tratar os 
objetos temos que criar classes. Assim, uma classe representa um 
conjunto de objetos que possuem comportamentos e características 
comuns. 
* 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
Na UML em primeiro lugar denomina-se uma classe e recomenda-se 
nomeá-la capitalizando-a e deixando no singular. E em segundo 
lugar denominam-se as propriedades, informações específicas 
relacionadas a uma classe de objeto, isto é características dos 
objetos que as classes representam. 
Em terceira e última parte, métodos, que são ações que os objetos 
de uma classe podem realizar. Assim tem-se um modelo para 
instanciar quantos objetos forem necessários. Dessa forma os 
objetos instanciados possuirão todas as características e 
comportamentos definidos pela classe. Então as classes especificam 
a estrutura (propriedades) e os comportamentos (operações) dos 
objetos, que são instâncias das classes. 
* 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
Geralmente em um sistema de médio porte serão identificadas 
diversas classes que compõem o sistema. Neste contexto a UML 
surgiu como uma proposta de ser uma linguagem para modelagem 
de dados que usava diversos artefatos para representar o modelo de 
negócio; um destes artefatos é o diagrama de classes. 
* 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
Os diagramas de classes registram atributos e operações de uma 
classe e as restrições de como os objetos podem ser conectados, 
descrevendo também os tipos de objetos no sistema e os 
relacionamentos entre eles e esse podem ser associações e 
abstrações. Para poder representar a visibilidade dos atributos e 
operações, a UML usa os seguintes símbolos: + público, visível em 
qualquer classe; - privado, visível somente dentro da classe; # 
protegido, na classe e suas subclasses. 
O relacionamento entre classes retrata as relações entre os objetos. 
Exemplo: um professor ministra uma disciplina para alunos numa 
sala. A UML reconhece três tipos mais importantes de relações: 
dependência, associação e generalização ou herança. Geralmente 
as classes não estão isoladas (coesas) e se relacionam entre si 
(acoplamento). O relacionamento e a comunicação entre as classes 
se definem em 3 tipos: Associações que podem ser de Agregação ou 
Composição; Generalização ou herança; e Dependências. 
* 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
www.alvarofpinheiro.eti.b*r
Java Orientado a Objetos 
As associações são relacionamentos estruturais entre instâncias e 
especificam que objetos de uma classe estão ligados a objetos de outras 
classes, podendo ser unária, binária, etc... As associações podem existir 
entre classes ou entre objetos. Uma associação entre a classe Professor e 
a classe Disciplina (um professor ministra uma disciplina) significa que uma 
instância de Professor (um professor específico) vai ter uma associação 
com uma instância de uma Disciplina. Esta relação significa que as 
instâncias das classes são conectadas, seja fisicamente ou 
conceitualmente. 
Dependências são relacionamentos de utilização no qual uma mudança na 
especificação de um elemento pode alterar a especificação do elemento 
dependente. A dependência entre classes indica que os objetos de uma 
classe usam serviços dos objetos de outra classe. Generalização ou 
herança, que pode ser simples ou múltipla (composta), serve para 
relacionar um elemento mais geral e um mais específico, onde o elemento 
mais específico herda as propriedades e métodos do elemento mais geral. 
Como a relação de dependência, ela existe só entre as classes. Um objeto 
particular não é um caso geral de outro objeto, apenas classes podem 
receber esse conceito. www.alvarofpinheiro.eti.br 
*
Java Orientado a Objetos 
Agregação é um tipo de associação (é parte de ou todo-parte) onde o 
objeto parte é um atributo do todo, onde o objeto parte somente são criados 
se o todo ao qual estão agregados seja criado. Pedidos é composto por 
itens de pedidos. Composição é o relacionamento entre um elemento (o 
todo) e outros elementos (as partes) onde as partes só podem pertencer ao 
todo e são criadas e destruídas com ele. 
O diagrama de classes lista todos os conceitos do domínio que serão 
implementados no sistema e as relações entre os conceitos. Ele é muito 
importante, pois define a estrutura do sistema a desenvolver. O diagrama 
de classes é conseqüência do prévio levantamento de requisitos, definição 
de casos de usos e classes. Como exemplo tem os passos de elicitação de 
requisitos com os stakeholders do sistema a ser desenvolvido, usando a 
técnica de entrevista com os administradores, professores, etc... que a 
partir desses os objetos do sistema são definidos: Alunos, Professores, 
Turmas, Cursos, etc... Definição dos atores do sistema: aluno, professor, 
administrador, etc... Definição e detalhamento dos casos de uso: Matricular 
Aluno, Pagar Matrícula, etc... Definição das classes: alunos, professor, 
etc... 
* 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
Atributo representa uma propriedade que todos os objetos da classe têm, 
porém cada objeto terá valores particulares para seus atributos. A UML, o 
nome de um atributo é um texto que deve capitalizar todas as primeiras 
letras de cada palavra no nome menos a primeira palavra. Todos os 
métodos têm que respeitar exatamente a assinatura que é composta pelo 
nome, número de parâmetros, tipos de dados e ordem. Um método não 
pode acrescentar ou cortar um parâmetro. Para mandar a mensagem 
corretamente, devesse saber qual é a classe do objeto, já que cada classe 
tendo método com assinatura diferente. 
* 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
Entendido o conceito de classe, segue uma codificação básica em Java. 
* 
/** 
* Classe de domínio ClassPessoa 
* 
* @author (Álvaro Pinheiro) 
* @version (01/03/2011) 
*/ 
public class ClassPessoa { 
// variáveis de instância 
private int codigo; 
private String nome; 
/** 
* Construtor da classe ClassPessoa 
*/ 
public ClassPessoa() { 
// inicialização das variáveis de instância 
codigo = 0; 
nome = ""; 
} 
/** 
* Método para atribuir valor ao campo código 
* 
* @parampcodigo 
* @return codigo 
*/ 
public void setCodigo(int pCodigo) { 
codigo = pCodigo; 
} 
/** 
* Método para retornar valor do campo código 
* 
* @paramnulo 
* @return codigo 
*/ 
public int getCodigo() { 
return codigo; 
} 
/** 
* Método para atribuir valor ao campo nome 
* 
* @parampnome 
* @return nome 
*/ 
public void setNome(String pNome) 
nome = pNome; 
} 
/** 
* Método para retornar valor do campo nome 
* 
* @paramnulo 
* @return nome 
*/ 
public String getNome() { 
return nome; 
} 
} 
www.alvarofpinheiro.eti.br
Objetos 
Java Orientado a Objetos 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
Agora que sabemos o conceito e como codificar uma classe, vamos 
entender sobre objeto. 
Segundo os pais da UML (Rumbaugh, Jacobson e Booch) um objeto 
é uma instância de uma classe, isto é, trata-se de uma cópia da 
classe na memória em tempo de execução (runtime), sendo assim, 
um elemento específico que possui valores (estados) nos atributos 
(campos). 
A UML representa um objeto usando um retângulo que o representa, 
onde o nome da instância do objeto é seguido de dois pontos, 
seguido do nome da classe, com essa formação sublinhada. 
* 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
* 
/** 
* Classe de domínio ClassCliente 
* 
* @author (Álvaro Pinheiro) 
* @version (01/03/2011) 
*/ 
public class ClassCliente { 
/** 
* Construtor da classe ClassCliente 
*/ 
public ClassCliente() { 
} 
/** 
* Método da classe cliente que exemplifica o instân- 
* ciamento de dois objetos da classe Pessoa 
*/ 
public void exemplo() { 
ClassPessoa objCliente1 = new ClassPessoa(); 
ClassPessoa objCliente2 = new ClassPessoa(); 
objCliente1.setCodigo(1); 
objCliente1.setNome("abc"); 
objCliente2.setCodigo(2); 
objCliente2.setNome("xyz"); 
} 
} www.alvarofpinheiro.eti.br
Métodos 
Java Orientado a Objetos 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
* 
Vamos aprender agora a chamar as classes e os métodos escritos em Java a partir de um ponto principal. 
/** 
* Classe Principal: 
* 
*/ 
class Principal { 
/** 
* Método que será chamado pelo método principal 
*/ 
public void exemplo() { 
System.out.println("Método chamado!"); 
} 
/** 
* Método principal 
*/ 
public static void main(String[] args) { 
Principal principal = new Principal(); 
principal.exemplo(); 
} 
} 
Nessa classe principal temos um método principal "main" que por default recebe um array de caracteres que 
poderá ser preenchido quando o programa principal for carregado. Ao carregá-lo uma mensagem irá aparecer na 
tela "Método chamado!" pois quando um objeto da classe é instanciada o método exemplo é invocado. 
www.alvarofpinheiro.eti.br
Pacotes 
Java Orientado a Objetos 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
Um pacote em Java é a forma que se tem para permitir a 
organização de classes em módulos, isto é, colocar todas as classes 
de funcionalidades semelhantes e/ou equivalentes em um mesmo 
lugar físico, chamado de package. 
Os pacotes Java podem ser armazenados em arquivos compactados 
denominados arquivos JAR, permitindo assim que classes com 
mesmas funcionalidades possam se utilizadas de um maneira mais 
rápida e fácil, já que todas as classes estão agrupadas em um 
mesmo arquivo. 
Outra vantagem do uso de pacotes é a utilização do modificador 
package que disponibiliza para todas as propriedades e 
comportamentos das classes agrupadas a sua visibilidade. Além de 
normalmente os pacotes serem utilizados para conter Classes, 
Interfaces e Tipos Enumerados - agrupando-os pelas suas 
similidades. 
* 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
Para se usar um pacote em uma classe Java deve-se importá-lo e isso 
é feito com a seguinte declaração import javax.swing.*; Com essa 
declaração é importado para a classe corrente todas as classes que 
estão dentro do pacote javax.swing. Mas, se for desejado pode-se 
importar somente a classe que se quer usar de um pacote específico, 
como no exemplo import java.awt.event.ActionEvent; 
Para se criar um arquivo JAR se faz necessário utilizar um utilitário de 
linha de comando que se segue JAR arquivo.class meupacote.jar, esse 
comando compacta todos os arquivos .class dentro do arquivo JAR 
denominhado meuPacote.jar. 
Um característica importante na criação dos pacotes é a utilização de 
uma hierarquia baseada na separação dos nomes por ponto (.). Apesar 
de pacotes inferiores na hierarquia de nomeação são muitas vezes 
referidos como "subpacotes" dos pacotes correspondentes superior na 
hierarquia, não há nenhuma relação semântica entre pacotes. 
* 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
O Java Language Specification estabelece pacote de convenções de 
nomenclatura para evitar a possibilidade de dois pacotes publicado com 
o mesmo nome. As convenções de nomenclatura descrevem como criar 
nomes de pacote exclusivo, para que os pacotes que são amplamente 
distribuídos. Isso permite que os pacotes sejam separadamente, de 
forma fácil e automaticamente instalado e catalogadas. 
Segue o Core dos pacotes no Java SE 6: 
● java.lang - Funcionalidades básicas da língua e tipos fundamentais; 
● java.util - Utilitário; 
● java.io - Operações de entrada e saída; 
● java.math - Funções matemática; 
● java.net - Operações de rede; 
● java.security - Geração de chave de criptografia e descriptografia; 
● java.sql - Drivers JDBC para acessar bancos de dados; 
● java.awt - GUI nativa; 
● javax.swing - GUI genérica; 
● java.applet - Classes para a criação de applets; 
* 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
Observe o exemplo abaixo, temos a importação do pacote javax.swing 
que permite entro outras classes, usar a JOptionPane, que disponibiliza 
os métodos showMessageDialog(null, "texto", "título", ícone) para 
mostrar uma mensagem na tela e o showInputDialog("texto") para 
entrar com um valor. 
* 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
* 
/** 
* Classe Principal com pacote swing: 
* 
*/ 
import javax.swing.*; 
class Principal 
{ 
/** 
* Método que será chamado pelo método principal 
*/ 
public void exemplo() 
{ 
System.out.println("Método chamado!"); 
String sVar1 = JOptionPane.showInputDialog("Entre com um número:"); 
String sVar2 = JOptionPane.showInputDialog("Entre com outro número:"); 
int nVar3 = Integer.parseInt(sVar1); 
int nVar4 = Integer.parseInt(sVar2); 
int nVar5 = nVar3 + nVar4; 
JOptionPane.showMessageDialog(null, "A soma é " + nVar5, "Operação", JOptionPane.PLAIN_MESSAGE); 
} 
/** 
* Método principal 
*/ 
public static void main(String[] args) 
{ 
Principal principal = new Principal(); 
principal.exemplo(); 
} 
} www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
Relacionamentos 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
* 
O que vamos estudar agora é como em Java se codifica os 
relacionamentos, isto é as associações e heranças. Também iremos 
codificar os três tipos de classes: Concreta, Abstrata e Interface. 
Observe o diagrama de classes abaixo: 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
Temos a seguinte modelagem. A classe principal está associada a 
classe cliente, esta por sua vez está associada as classes 
departamento e função. A classe função estende a classe abstrata 
cargo. A classe cliente é uma subclasse da classe pessoa-física que 
também é pai da classe filha fornecedor. Ambas classes, cliente e 
fornecedor são concretas, assim permitindo que se instâncie objetos 
dessa classes. Já as classes pessoa-física e pessoa-jurídica são 
abstratas, assim sendo possuem métodos não implementados e por 
consequencia não permitindo que se instancie objetos diretamente 
dessas classes. Essas duas últimas classes são filhas da classe 
concreta pessoa que estende a classe abstrata configurações-básica e 
implementa (realiza) as interface configurações-especiais e 
configurações-avançadas. 
* 
www.alvarofpinheiro.eti.br
Polimorfismo 
Java Orientado a Objetos 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
É a capacidade de classes mais abstratas possuírem comportamentos 
diferentes das classes concretas, isto é, duas ou mais classes derivadas de 
uma mesma superclasse podem invocar métodos que têm a mesma 
identificação (assinatura) mas comportamentos distintos, especializados para 
uma das classes derivadas. A decisão sobre qual o método que deve ser 
selecionado, de acordo com o tipo da classe derivada, é tomada em tempo de 
execução, através do mecanismo de ligação tardia. 
Mas para ser considerado polimorfismo, é necessário que os métodos tenham 
exatamente a mesma identificação, quer dizer, o mesmo nome de método, 
sendo utilizado o mecanismo de redefinição de métodos, isto é, sobrescrita dos 
métodos. 
Override ou Sobreescrita, a redefinição ocorre quando um método cuja 
assinatura já tenha sido especificada recebe uma nova definição ou seja, uma 
nova implementação em uma classe derivada. O mecanismo de redefinição, 
juntamante com o conceito de ligação tardia, é a chave para a utilização do 
polimorfismo. É importante observar que, quando polimorfismo está sendo 
utilizado, o comportamento que será adotado por um método só será definido 
durante a execução. 
* 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
Temos a seguinte modelagem. A classe principal está associada a classe 
cliente, esta por sua vez está associada as classes departamento e função. A 
classe função estende a classe abstrata cargo. A classe cliente é uma 
subclasse da classe pessoa-física que também é pai da classe filha fornecedor. 
Ambas classes, cliente e fornecedor são concretas, assim permitindo que se 
instâncie objetos dessa classes. Já as classes pessoa-física e pessoa-jurídica 
são abstratas, assim sendo possuem métodos não implementados e por 
consequencia não permitindo que se instancie objetos diretamente dessas 
classes. 
Essas duas últimas classes são filhas da classe concreta pessoa que estende 
a classe abstrata configurações-básica e implementa (realiza) as interface 
configurações-especiais e configurações-avançadas. 
* 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
Overload ou Sobrecarga, um método aplicado a um objeto é selecionado para 
execução através da sua assinatura e da verificação a qual classe o objeto 
pertence. Dois ou mais métodos de uma mesma classe podem ter o mesmo 
nome, desde que suas listas de parâmetros sejam diferentes, constituindo 
assim uma assinatura diferente. Tal situação não gera conflito pois o 
compilador é capaz de detectar qual método deve ser escolhido a partir da 
análise dos tipos de argumentos do método. 
Early Binding ou Ligação Prematura, quando um método é invocado durante a 
compilação do programa, o mecanismo de ligação é prematura. 
Late Binding ou Ligação Tardia, quando a definição do método que será 
efetivamente invocado só ocorre durante a execução do programa, o 
mecanismo de ligação usado é o de tardia também conhecido pelos termos 
dynamic binding ou run-time binding. Em Java, todas as determinações de 
métodos a executar ocorrem através de ligação tardia exceto em dois casos: 
métodos declarados como final não podem ser redefinidos e portanto não são 
passíveis de invocação polimórfica da parte de seus descendentes e 
métodos declarados como private são implicitamente finais. 
* 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
Para melhor entender o polimorfismo, veja o diagrama abaixo e sua implementação. 
* 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
* 
public interface IPrincipal 
{ 
void verificaAcesso(); 
boolean verificaCpf(String pCpf); 
} 
public abstract class ClsSecundaria implements IPrincipal 
{ 
public abstract void verificaAcesso(); 
public boolean verificaCpf(String pCpf) 
{ 
if (true) { 
return true; 
} 
else 
{ 
return false; 
} 
} 
} 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
* 
public class ClsPessoa extends ClsSecundaria 
{ 
private String cpf; 
private String nome; 
public ClsPessoa() 
{ 
cpf = ""; 
nome = ""; 
} 
public ClsPessoa(String pCpf) // exemplo de overload (sobrecarga) 
{ 
cpf = pCpf; 
nome = ""; 
} 
public ClsPessoa(String pCpf, String pNome) // exemplo de overload (sobrecarga) 
{ 
cpf = pCpf; 
nome = pNome; 
} 
public void verificaAcesso() 
{ 
System.out.print("Acesso tipo 1"); 
} 
} 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
* 
public interface IPrincipal 
{ 
void verificaAcesso(); 
boolean verificaCpf(String pCpf); 
} 
public abstract class ClsSecundaria implements IPrincipal 
{ 
public abstract void verificaAcesso(); 
public boolean verificaCpf(String pCpf) 
{ 
if (true) { 
return true; 
} 
else 
{ 
return false; 
} 
} 
} 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
* 
public class ClsPessoaJuridica extends ClsPessoa 
{ 
public ClsPessoaJuridica() 
{ 
} 
} 
public class ClsPessoaFisica extends ClsPessoa 
{ 
public ClsPessoaFisica() 
{ 
} 
public void verificaAcesso() // exemplo de override (sobreescrita) 
{ 
System.out.print("Acesso tipo 2"); 
} 
} 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
* 
public class ClsFornecedor extends ClsPessoaJuridica 
{ 
public ClsFornecedor() 
{ 
} 
} 
public class ClsCliente extends ClsPessoaFisica 
{ 
public ClsCliente() 
{ 
} 
// exemplo de herança e encapsulamento 
} 
public class ClsTecnico extends ClsPessoaFisica 
{ 
public ClsTecnico() 
{ 
} 
public void verificaAcesso() // exemplo de override (sobreescrita) 
{ 
System.out.print("Acesso tipo 3"); 
} 
public void verificaAcesso(int p1) // exemplo de overload (sobrecarga) 
{ 
System.out.print("Acesso tipo 4"); 
} 
} www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
* 
public class ClsPrincipal 
{ 
public ClsPrincipal() 
{ 
} 
public static void main(String Args[]) 
{ 
ClsFornecedor objFornecedor = new ClsFornecedor(); 
ClsCliente objCliente = new ClsCliente(); 
ClsTecnico objTecnico = new ClsTecnico(); 
objFornecedor.verificaAcesso(); // executa System.out.print("Acesso tipo 1") 
objCliente.verificaAcesso(); // executa System.out.print("Acesso tipo 2") 
objTecnico.verificaAcesso(); // executa System.out.print("Acesso tipo 3") 
objTecnico.verificaAcesso(1); // executa System.out.print("Acesso tipo 4") 
} 
} 
www.alvarofpinheiro.eti.br
Super 
Java Orientado a Objetos 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
É um recurso para se invocar um construtor da classe pai. A palavra super disponibiliza 
o acesso a partes da classe pai a partir da classe filha, e é útil no polimorfismo da 
sobreposição de métodos. Veja o exemplo a seguir. 
* 
public class ClsPessoa 
{ 
public ClsPessoa() {} // construtor 
public void verificaAcesso() { 
System.out.print("Acesso tipo 1"); } 
public void verificaAcesso(String pUsuario, String pSenha) { 
System.out.print("Acesso tipo especial"); } 
} 
public class ClsPessoaJuridica extends ClsPessoa 
{ 
public ClsPessoaJuridica() {} // construtor 
// herda verificaAcesso do pai sem sobreescrever executando Acesso tipo 1 
} 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
* 
public class ClsPessoaFisica extends ClsPessoa 
{ 
public ClsPessoaFisica() {} // construtor 
public void verificaAcesso() { 
System.out.print("Acesso tipo 2"); // sobreescreve o tipo de acesso do pai 
(override) } 
public void verificaAcesso(String p1) { 
super.verificaAcesso(); // executa System.out.print("Acesso tipo 1") da classe pai } 
} 
public class ClsTecnico extends ClsPessoaFisica 
{ 
public ClsTecnico() {} // construtor 
public void verificaAcesso(int p1) { 
System.out.print("Acesso tipo 3"); // exemplo de sobreescrita (override) } 
public void verificaAcesso(int p1, int p2) { 
System.out.print("Acesso tipo 4"); // exemplo de sobrecarga (overload) } 
} 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
* 
public class ClsPrincipal 
{ 
public ClsPrincipal() {} // construtor 
public static void main(String Args[]) { 
ClsTecnico objTecnico = new ClsTecnico(); 
objTecnico.verificaAcesso("x"); // executa System.out.print("Acesso tipo 1") 
objTecnico.verificaAcesso(); // executa System.out.print("Acesso tipo 2") 
objTecnico.verificaAcesso(1); // executa System.out.print("Acesso tipo 3") 
objTecnico.verificaAcesso(1,2); // executa System.out.print("Acesso tipo 4") 
objTecnico.verificaAcesso("x","y"); // executa System.out.print("Acesso tipo 
especial") } 
} 
www.alvarofpinheiro.eti.br
Tratamento de Exceções 
JAVA 
Java Orientado a Objetos 
www.alvarofpinheiro.eti.br *
Exceções 
Java Orientado a Objetos 
Permitem tratar (“catch”) de forma agradável os erros 
que podem acontecer durante a execução de um 
programa; 
Permitem especificam diferentes formas de tratamento 
de exceções distintas; 
Oferecem uma forma padronizada de levantar (“throw”) 
exceções; 
Permitem representar como objetos os erros de um 
programa que podem ser recuperados (“exceptions”); e 
Permitem criar uma hierarquia extensível de classes de 
exceções para um tratamento de erros preciso. 
* www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
Tipos de Exceções 
* 
I/O (teclado/ floppy / disco / entrada de dados); 
Rede (internet, LAN); 
Casting; 
Desreferenciação de objectos; 
Matemática; 
Índice de array (colecção fora dos limites); 
Falta de memória; 
Crash na Java Virtual Machine; e 
Classes Java requeridas pelo programa corruptas. 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
Hierarquia de Exceções 
* 
java.lang.Throwable 
Error 
ThreadDeath 
OutOfMemoryError 
VirtualMachineError 
Exception 
AWTException 
IOException 
FileNotFoundException 
MalformedURLException 
RemoteException 
SocketException 
RuntimeException 
ArithmeticException 
ClassCastException 
IllegalArgumentException 
IndexOutOfBoundsException 
NullPointerException 
UnsupportedOperationException 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
checked versus unchecked 
* 
checked - Podem ter sido causadas por algo fora do controle do 
nosso programa; Devem ser tratadas pelo nosso código, senão 
o 
programa não compila. 
unchecked (runtime) - Poderiam ter sido evitadas se fossem 
devidamente analisadas e tratadas no código; Não precisam de 
ser tratadas, mas farão com que o programa crash no caso de 
ocorrerem em runtime. 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
Exceções em runtime 
* 
Podem ser geradas em qualquer parte do código pelo 
programador e não precisam de ser tratadas (handled) pelas 
chamadas que as apanham. 
public Object metodo(int param) { 
// verificar se parâmetro é válido 
if (param < 0) 
throw new IndexOutOfBoundsException(“param < 0!”); 
return dados[index]; 
} 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
Exceções checked 
* 
No cabeçalho do método devem ser especificados os tipos de 
exceções que ele pode originar (“throws”); Quem invocar um 
método que possa originar exceções deve tratá-las ou então 
passar essas exceções a quem o invocou. 
public void metodo(String param) throws IOException { 
if (condição) 
throw new IOException(“mensagem”); 
} 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
Exceções sintaxe 
* 
try { 
// bloco de comandos 
} 
catch (Exception objeto) { 
// tratamento da exceção 
} 
finally { 
// bloco de comandos opcional no final do tratamento 
} 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
Multiplas Exceções sintaxe 
* 
try { 
// bloco de comandos 
} 
catch (IndexOutOfBoundsException ioobe) { 
// tratamento de exceção 
} 
catch (IOException ioe) { 
// tratamento de exceção 
} 
catch (Exception e) { 
// tratamento de exceção 
} 
finally { 
// tratamento de finalização 
} 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
Exemplo de Aplicação com POO / MVC / JDBC 
JAVA 
www.alvarofpinheiro.eti.br *
Java Orientado a Objetos 
PACOTES (CAMADAS) 
www.alvarofpinheiro.eti.br *
Java Orientado a Objetos 
www.alvarofpinheiro.eti.*br
Java Orientado a Objetos 
PACOTE DEFAULT (PRINCIPAL) 
www.alvarofpinheiro.eti.br *
Java Orientado a Objetos 
* 
import Visual.Pessoa; 
public class Principal { 
public static void main(String[] args) { 
Visual.Pessoa pessoa = new Pessoa(); 
pessoa.setVisible(true); 
} 
} 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
PACOTE VISUAL (VIEW) 
www.alvarofpinheiro.eti.br *
Java Orientado a Objetos 
www.alvarofpinheiro.eti.b*r
Java Orientado a Objetos 
* 
package Visual; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JTextField; 
import javax.swing.SwingUtilities; 
import javax.swing.UIManager; 
import org.dyno.visual.swing.layouts.Constraints; 
import org.dyno.visual.swing.layouts.GroupLayout; 
import org.dyno.visual.swing.layouts.Leading; 
public class Pessoa extends JFrame { 
private static final long serialVersionUID = 1L; 
private JLabel jLabel0; 
private JLabel jLabel1; 
private JLabel jLabel2; 
private JTextField jTextField0; 
private JTextField jTextField1; 
private JButton jButton0; 
private JButton jButton1; 
private JButton jButton2; 
private JButton jButton3; 
... 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
* 
… 
public Pessoa() { 
initComponents(); 
} 
private void initComponents() { 
setTitle("Pessoa"); 
setLayout(new GroupLayout()); 
add(getJLabel0(), new Constraints(new Leading(12, 12, 12), new Leading(12, 12, 12))); 
add(getJLabel1(), new Constraints(new Leading(12, 12, 12), new Leading(43, 10, 10))); 
add(getJButton0(), new Constraints(new Leading(12, 12, 12), new Leading(84, 10, 10))); 
add(getJButton2(), new Constraints(new Leading(87, 12, 12), new Leading(84, 12, 12))); 
add(getJTextField0(), new Constraints(new Leading(55, 47, 12, 12), new Leading(12, 12, 12))); 
add(getJButton1(), new Constraints(new Leading(108, 12, 12), new Leading(9, 12, 12))); 
add(getJLabel2(), new Constraints(new Leading(12, 12, 12), new Leading(157, 10, 10))); 
add(getJButton3(), new Constraints(new Leading(168, 10, 10), new Leading(84, 12, 12))); 
add(getJTextField1(), new Constraints(new Leading(55, 194, 12, 12), new Leading(44, 12, 12))); 
setSize(381, 201); 
} 
… 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
* 
… 
private JButton getJButton0() { 
if (jButton0 == null) { 
jButton0 = new JButton(); 
jButton0.setText("Incluir"); 
jButton0.addMouseListener(new MouseAdapter() { 
public void mouseClicked(MouseEvent event) { 
jButton0MouseMouseClicked(event); 
} 
}); 
} 
return jButton0; 
} 
private JButton getJButton1() { 
if (jButton1 == null) { 
jButton1 = new JButton(); 
jButton1.setText("Consultar"); 
jButton1.addMouseListener(new MouseAdapter() { 
public void mouseClicked(MouseEvent event) { 
jButton1MouseMouseClicked(event); 
} 
}); 
} 
return jButton1; 
} 
… 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
* 
… 
private JButton getJButton2() { 
if (jButton2 == null) { 
jButton2 = new JButton(); 
jButton2.setText("Alterar"); 
jButton2.setEnabled(false); 
jButton2.addMouseListener(new MouseAdapter() { 
public void mouseClicked(MouseEvent event) { 
jButton2MouseMouseClicked(event); 
} 
}); 
} 
return jButton2; 
} 
private JButton getJButton3() { 
if (jButton3 == null) { 
jButton3 = new JButton(); 
jButton3.setText("Excluir"); 
jButton3.setEnabled(false); 
jButton3.addMouseListener(new MouseAdapter() { 
public void mouseClicked(MouseEvent event) { 
jButton3MouseMouseClicked(event); 
} 
}); 
} 
return jButton3; 
} 
… 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
* 
… 
private JLabel getJLabel0() { 
if (jLabel0 == null) { 
jLabel0 = new JLabel(); 
jLabel0.setText("Código"); 
} 
return jLabel0; 
} 
private JLabel getJLabel1() { 
if (jLabel1 == null) { 
jLabel1 = new JLabel(); 
jLabel1.setText("Nome"); 
} 
return jLabel1; 
} 
private JLabel getJLabel2() { 
if (jLabel2 == null) { 
jLabel2 = new JLabel(); 
jLabel2.setText("Mensagem"); 
} 
return jLabel2; 
} 
… 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
* 
… 
private JTextField getJTextField0() { 
if (jTextField0 == null) { 
jTextField0 = new JTextField(); 
} 
return jTextField0; 
} 
private JTextField getJTextField1() { 
if (jTextField1 == null) { 
jTextField1 = new JTextField(); 
} 
return jTextField1; 
} 
… 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
* 
… 
public static void main(String[] args) { 
installLnF(); 
SwingUtilities.invokeLater(new Runnable() { 
@Override 
public void run() { 
Pessoa frame = new Pessoa(); 
frame.setDefaultCloseOperation(Pessoa.EXIT_ON_CLOSE); 
frame.setTitle("Pessoa"); 
frame.getContentPane().setPreferredSize(frame.getSize()); 
frame.pack(); 
frame.setLocationRelativeTo(null); 
frame.setVisible(true); 
} 
}); 
} 
… 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
* 
… 
private void inicializarTela() { 
jTextField0.setText(""); 
jTextField1.setText(""); 
jButton2.setEnabled(false); 
jButton3.setEnabled(false); 
} 
private void jButton0MouseMouseClicked(MouseEvent event) { 
try { 
Modelo.Pessoa pessoa = new Modelo.Pessoa(); 
pessoa.setCodigo(Integer.parseInt(jTextField0.getText())); 
pessoa.setNome(jTextField1.getText()); 
Controle.Pessoa.validarInclusao(pessoa); 
jLabel2.setText("Inclusão realizada com sucesso!"); 
inicializarTela(); 
} catch (Exception excecao) { 
jLabel2.setText(excecao.getMessage()); 
} 
} 
private void jButton1MouseMouseClicked(MouseEvent event) { 
try { 
jTextField1.setText(Controle.Pessoa.validarCodigo(jTextField0.getText())); 
jButton2.setEnabled(true); 
jButton3.setEnabled(true); 
} catch (Exception excecao) { 
jLabel2.setText(excecao.getMessage()); 
} 
} 
… 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
* 
… 
private void jButton2MouseMouseClicked(MouseEvent event) { 
try { 
Modelo.Pessoa pessoa = new Modelo.Pessoa(); 
pessoa.setCodigo(Integer.parseInt(jTextField0.getText())); 
pessoa.setNome(jTextField1.getText()); 
Controle.Pessoa.validarAlteracao(pessoa); 
jLabel2.setText("Alteração efetuada com sucesso!"); 
inicializarTela(); 
} catch (Exception excecao) { 
jLabel2.setText(excecao.getMessage()); 
} 
} 
private void jButton3MouseMouseClicked(MouseEvent event) { 
try { 
Controle.Pessoa.validarExclusao(jTextField0.getText()); 
jLabel2.setText("Exclusão efetuada com sucesso!"); 
inicializarTela(); 
} catch (Exception excecao) { 
jLabel2.setText(excecao.getMessage()); 
} 
} 
} 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
PACOTE MODELO (MODEL) 
www.alvarofpinheiro.eti.br *
Java Orientado a Objetos 
www.alvarofpinheiro.eti.b*r
Java Orientado a Objetos 
* 
package Modelo; 
public class Pessoa { 
private int codigo; 
private String nome; 
public void setCodigo(int codigo) { 
this.codigo = codigo; 
} 
public int getCodigo() { 
return codigo; 
} 
public void setNome(String nome) { 
this.nome = nome; 
} 
public String getNome() { 
return nome; 
} 
} 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
PACOTE CONTROLE (CONTROL) 
www.alvarofpinheiro.eti.br *
Java Orientado a Objetos 
* 
package Controle; 
public class Pessoa { 
public static String validarCodigo(String codigo) throws Exception { 
try { 
if (codigo.isEmpty()) { 
throw new Exception("Código é de preenchimento obrigatório!"); 
} else { 
int aux = 0; 
try { 
aux = Integer.parseInt(codigo); 
} catch (Exception excecao) { 
throw new Exception("Formato inválido"); 
} 
if ((aux<1) || (aux>100)) { 
throw new Exception("Código válido entre 0 e 100!"); 
} else { 
return (Dado.Pessoa.realizarConsulta(aux)); 
} 
} 
} 
catch (Exception excecao) { 
throw (excecao); 
} 
} 
... 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
* 
... 
public static void validarInclusao(Modelo.Pessoa pessoa) throws Exception { 
try { 
if ((pessoa.getCodigo()<1) || (pessoa.getCodigo()>100)) { 
throw new Exception("Código válido entre 0 e 100!"); 
} else { 
if (pessoa.getNome().isEmpty()) { 
throw new Exception("Nome é de preenchimento 
obrigatório!"); 
} 
} 
Dado.Pessoa.realizarInclusao(pessoa); 
} 
catch (Exception excecao) { 
throw (excecao); 
} 
} 
... 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
* 
... 
public static void validarAlteracao(Modelo.Pessoa pessoa) throws Exception { 
try { 
if ((pessoa.getCodigo()<1) || (pessoa.getCodigo()>100)) { 
throw new Exception("Código válido entre 0 e 100!"); 
} else { 
if (pessoa.getNome().isEmpty()) { 
throw new Exception("Nome é de preenchimento 
obrigatório!"); 
} 
} 
Dado.Pessoa.realizarAlteracao(pessoa); 
} 
catch (Exception excecao) { 
throw (excecao); 
} 
} 
... 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
* 
... 
public static void validarExclusao(String codigo) throws Exception { 
try { 
if (codigo.isEmpty()) { 
throw new Exception("Código é de preenchimento obrigatório!"); 
} else { 
try { 
int aux = Integer.parseInt(codigo); 
if ((aux<1) || (aux>100)) { 
throw new Exception("Código válido entre 0 e 
100!"); 
} else { 
Dado.Pessoa.realizarExclusao(aux); 
} 
} catch (Exception excecao) { 
throw new Exception("Formato inválido"); 
} 
} 
} 
catch (Exception excecao) { 
throw (excecao); 
} 
} 
} 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
PACOTE DADOS (PERSISTÊNCIA) 
www.alvarofpinheiro.eti.br *
Java Orientado a Objetos 
* 
package Dado; 
import java.sql.*; 
public class Pessoa { 
public static String realizarConsulta(int codigo) throws Exception { 
String aux = ""; 
try { 
Class.forName("com.mysql.jdbc.Driver"); 
String bd = "jdbc:mysql://localhost/exemplo"; 
Connection conexao = DriverManager.getConnection(bd, "root", “******"); 
Statement comando = conexao.createStatement(); 
ResultSet retorno = comando.executeQuery("SELECT VC_PES_NOME FROM 
PESSOA WHERE NU_PES_CODIGO = " + codigo); 
boolean bExiste = true; 
while (retorno.next()) { 
aux = retorno.getString("VC_PES_NOME"); 
} 
if ((aux.isEmpty()) || (aux.equals(""))) { 
bExiste = false; 
} 
retorno.close(); 
comando.close(); 
conexao.close(); 
if (!bExiste) { 
throw new Exception("Código não cadastrado!"); 
} 
} 
catch (Exception excecao) { 
throw (excecao); 
} 
return (aux); 
} 
... 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
* 
... 
public static void realizarInclusao(Modelo.Pessoa pessoa) throws Exception { 
try { 
Class.forName("com.mysql.jdbc.Driver"); 
String bd = "jdbc:mysql://localhost/exemplo"; 
Connection conexao = DriverManager.getConnection(bd, "root", “******"); 
Statement comando = conexao.createStatement(); 
comando.executeUpdate("INSERT INTO PESSOA (NU_PES_CODIGO, 
VC_PES_NOME) VALUES ("+pessoa.getCodigo()+",'"+pessoa.getNome()+"')"); 
comando.close(); 
conexao.close(); 
} 
catch (Exception excecao) { 
throw (excecao); 
} 
} 
... 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
* 
... 
public static void realizarAlteracao(Modelo.Pessoa pessoa) throws Exception { 
try { 
Class.forName("com.mysql.jdbc.Driver"); 
String bd = "jdbc:mysql://localhost/exemplo"; 
Connection conexao = DriverManager.getConnection(bd, "root", “******"); 
Statement comando = conexao.createStatement(); 
comando.executeUpdate("UPDATE PESSOA SET VC_PES_NOME = '"+ 
pessoa.getNome() +"' WHERE NU_PES_CODIGO = "+pessoa.getCodigo()); 
comando.close(); 
conexao.close(); 
} 
catch (Exception excecao) { 
throw (excecao); 
} 
} 
... 
www.alvarofpinheiro.eti.br
Java Orientado a Objetos 
* 
... 
public static void realizarExclusao(int codigo) throws Exception { 
try { 
Class.forName("com.mysql.jdbc.Driver"); 
String bd = "jdbc:mysql://localhost/exemplo"; 
Connection conexao = DriverManager.getConnection(bd, "root", “******"); 
Statement comando = conexao.createStatement(); 
comando.executeUpdate("DELETE FROM PESSOA WHERE NU_PES_CODIGO = 
"+codigo); 
comando.close(); 
conexao.close(); 
} 
catch (Exception excecao) { 
throw (excecao); 
} 
} 
} 
www.alvarofpinheiro.eti.br
Java Aulas 
www.alvarofpinheiro.eti.br
Java Aulas 
www.alvarofpinheiro.eti.br
Java Aulas 
www.alvarofpinheiro.eti.br
Java Aulas 
www.alvarofpinheiro.eti.br
Java Aulas 
www.alvarofpinheiro.eti.br
Java Aulas 
www.alvarofpinheiro.eti.br
Java Aulas 
www.alvarofpinheiro.eti.br
Java Aulas 
www.alvarofpinheiro.eti.br
POO com Java Exercícios 
1) Considere uma classe ContaBancária e suas duas subclasses ContaCorrente e 
ContaPoupança, cada uma das três com o método AplicarJuros. A redefinição do método 
AplicarJuros nas duas subclasses, cada uma com detalhes de implementação diferentes com a 
mesma interface, caracteriza o princípio denominado na orientação a objetos como 
1. abstração. 
2. encapsulamento. 
3. herança. 
4. unificação. 
5. polimorfismo. 
2) Na orientação Objeto, quando uma rotina precisar ser modificada, basta o código do programa 
que define o objeto ser mudado que o comportamento da rotina é imediatamente atualizado. Esta 
característica é conhecida como: 
1. ocultamento de informação; 
2. polimorfismo; 
3. herança; 
4. sobrecarga; 
5. encapsulamento. 
www.alvarofpinheiro.eti.br
POO com Java Exercícios 
3) No tocante à linguagem Java, a principal utilização da variável de classe STATIC com uma única 
cópia de dados é: 
1. compartilhamento de código; 
2. economia de memória; 
3. ocultamento de informação; 
4. minimização de manutenção; 
5. controle de acesso (modificador de acesso). 
4) Analise as seguintes afi rmações relacionadas à Programação Orientada a Objetos: 
I. Em um Programa Orientado a Objetos as instâncias de uma classe armazenam tipos diferentes 
de informações e apresentam comportamentos distintos. 
II. Em uma Aplicação Orientada a Objetos podem existir múltiplas instâncias de uma mesma 
classe. 
III. Em Programação Orientada a Objetos deve existir um e somente um objeto de uma mesma 
classe. 
IV. Os serviços que podem ser solicitados a um objeto são definidos pelos métodos. 
www.alvarofpinheiro.eti.br 
Indique a opção que contenha todas as afirmações verdadeiras. 
1. II e IV 
2. II e III 
3. III e IV 
4. I e III 
5. I e II
POO com Java Exercícios 
5) Na Programação Orientada a Objetos podem-se definir as visibilidades dos métodos e atributos. 
Quanto a essa característica é correto afirmar que: 
1. o acesso aos atributos e aos métodos privados só pode ser feito a partir dos métodos membros 
da classe. 
2. os métodos protegidos podem ser acessados a partir dos métodos de qualquer classe, desde 
que instanciada na mesma aplicação. 
3. os métodos públicos e os atributos protegidos só podem ser acessados a partir dos métodos da 
própria classe ou de classes derivadas. 
4. os métodos privados e os atributos protegidos podem ser acessados a partir dos métodos de 
qualquer classe. 
5. o acesso aos atributos privados e aos métodos públicos só pode ser feito a partir dos métodos 
membros da classe. 
www.alvarofpinheiro.eti.br
POO com Java Exercícios 
6) Analise as seguintes afirmações relacionadas à Orientação a Objetos: 
I. Os atributos podem ser de instância ou de classe. 
Quando os atributos são de instância, cada objeto 
guarda a sua própria cópia de tais atributos. 
II. Os atributos compartilhados entre objetos de uma classe são chamados de atributos de objetos. 
Em Java, por exemplo, esses atributos são identifi cados com a palavra static. 
III. Existem métodos cujo código apenas acessa atributo de classe ou os parâmetros passados. 
Esses métodos são chamados de métodos de classe. 
IV. Um mesmo nome de objeto pode ser usado para 
identificar diferentes objetos em uma mesma classe 
ou diferentes objetos em classes diferentes, evitando assim, que seja necessário usar nomes 
diferentes para objetos diferentes que realizam a mesma operação. A esta característica da 
Orientação a Objetos dá-se o nome de Polimorfismo. 
www.alvarofpinheiro.eti.br 
Indique a opção que contenha todas as afirmações verdadeiras. 
1. I e II 
2. II e III 
3. III e IV 
4. II e IV 
5. I e III
Programação Orientada a Objetos com Java
Programação Orientada a Objetos com Java
Programação Orientada a Objetos com Java
Programação Orientada a Objetos com Java

Mais conteúdo relacionado

Mais procurados

Java modulo 01 - Introdução
Java modulo 01 - IntroduçãoJava modulo 01 - Introdução
Java modulo 01 - Introdução
Professor Samuel Ribeiro
 
Gof design patterns
Gof design patternsGof design patterns
Gof design patterns
Eduardo Carvalho
 
Conceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosConceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetos
Leonardo Melo Santos
 
Aula sobre matrizes - Linguagem C
Aula sobre matrizes - Linguagem CAula sobre matrizes - Linguagem C
Aula sobre matrizes - Linguagem C
profjr
 
Engenharia de Requisitos
Engenharia de RequisitosEngenharia de Requisitos
Engenharia de Requisitos
Cloves da Rocha
 
Apostila de Fundamentos Java
Apostila de Fundamentos JavaApostila de Fundamentos Java
Apostila de Fundamentos Java
Marcio Marinho
 
Linguagem C - Vetores
Linguagem C - VetoresLinguagem C - Vetores
Linguagem C - Vetores
Elaine Cecília Gatto
 
Testes de Sistema
Testes de SistemaTestes de Sistema
Testes de Sistema
Mauricio Volkweis Astiazara
 
POO - 20 - Wrapper Classes
POO - 20 - Wrapper ClassesPOO - 20 - Wrapper Classes
POO - 20 - Wrapper Classes
Ludimila Monjardim Casagrande
 
Java: Introdução à Orientação a Objetos
Java: Introdução à Orientação a ObjetosJava: Introdução à Orientação a Objetos
Java: Introdução à Orientação a Objetos
Arthur Emanuel
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POO
Daniel Brandão
 
Introduction to Java
Introduction to JavaIntroduction to Java
Introduction to Java
Ashita Agrawal
 
POO - Aula 09 - Herança
POO - Aula 09 - HerançaPOO - Aula 09 - Herança
POO - Aula 09 - Herança
Felipe J. R. Vieira
 
Técnicas de Testes Funcionais Caixa-Preta
Técnicas de Testes Funcionais Caixa-PretaTécnicas de Testes Funcionais Caixa-Preta
Técnicas de Testes Funcionais Caixa-Preta
Lucas Amaral
 
diagrama de componentes
diagrama de componentesdiagrama de componentes
diagrama de componentes
elliando dias
 
POO - Aula 10 - Polimorfismo
POO - Aula 10 - PolimorfismoPOO - Aula 10 - Polimorfismo
POO - Aula 10 - Polimorfismo
Felipe J. R. Vieira
 
02 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.502 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.5
César Augusto Pessôa
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVA
Moises Omena
 
JUNit Presentation
JUNit PresentationJUNit Presentation
JUNit Presentation
Animesh Kumar
 
Apresentação da UML
Apresentação da UMLApresentação da UML
Apresentação da UML
Eliseu Castelo
 

Mais procurados (20)

Java modulo 01 - Introdução
Java modulo 01 - IntroduçãoJava modulo 01 - Introdução
Java modulo 01 - Introdução
 
Gof design patterns
Gof design patternsGof design patterns
Gof design patterns
 
Conceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosConceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetos
 
Aula sobre matrizes - Linguagem C
Aula sobre matrizes - Linguagem CAula sobre matrizes - Linguagem C
Aula sobre matrizes - Linguagem C
 
Engenharia de Requisitos
Engenharia de RequisitosEngenharia de Requisitos
Engenharia de Requisitos
 
Apostila de Fundamentos Java
Apostila de Fundamentos JavaApostila de Fundamentos Java
Apostila de Fundamentos Java
 
Linguagem C - Vetores
Linguagem C - VetoresLinguagem C - Vetores
Linguagem C - Vetores
 
Testes de Sistema
Testes de SistemaTestes de Sistema
Testes de Sistema
 
POO - 20 - Wrapper Classes
POO - 20 - Wrapper ClassesPOO - 20 - Wrapper Classes
POO - 20 - Wrapper Classes
 
Java: Introdução à Orientação a Objetos
Java: Introdução à Orientação a ObjetosJava: Introdução à Orientação a Objetos
Java: Introdução à Orientação a Objetos
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POO
 
Introduction to Java
Introduction to JavaIntroduction to Java
Introduction to Java
 
POO - Aula 09 - Herança
POO - Aula 09 - HerançaPOO - Aula 09 - Herança
POO - Aula 09 - Herança
 
Técnicas de Testes Funcionais Caixa-Preta
Técnicas de Testes Funcionais Caixa-PretaTécnicas de Testes Funcionais Caixa-Preta
Técnicas de Testes Funcionais Caixa-Preta
 
diagrama de componentes
diagrama de componentesdiagrama de componentes
diagrama de componentes
 
POO - Aula 10 - Polimorfismo
POO - Aula 10 - PolimorfismoPOO - Aula 10 - Polimorfismo
POO - Aula 10 - Polimorfismo
 
02 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.502 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.5
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVA
 
JUNit Presentation
JUNit PresentationJUNit Presentation
JUNit Presentation
 
Apresentação da UML
Apresentação da UMLApresentação da UML
Apresentação da UML
 

Destaque

Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
Cleyton Ferrari
 
Introdução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoIntrodução a programação Orientada a Objeto
Introdução a programação Orientada a Objeto
Marconi Rodrigues
 
2672853-apostila-completa-de-Java
2672853-apostila-completa-de-Java2672853-apostila-completa-de-Java
2672853-apostila-completa-de-Java
Márcio Antônio Moraes Reyes
 
Programação Estruturada e Orientada a Objetos
Programação Estruturada e Orientada a ObjetosProgramação Estruturada e Orientada a Objetos
Programação Estruturada e Orientada a Objetos
Albert Bitencourte de Lemos
 
Programação Orientado a Objetos
Programação Orientado a ObjetosProgramação Orientado a Objetos
Programação Orientado a Objetos
Jéssica Nathany Carvalho Freitas
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos
Luis Ferreira
 
POO - Aula 07 - Construtores e Atributos de Classe
POO - Aula 07 - Construtores e Atributos de ClassePOO - Aula 07 - Construtores e Atributos de Classe
POO - Aula 07 - Construtores e Atributos de Classe
Felipe J. R. Vieira
 
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)
Daniel Brandão
 
Orientação a Objetos
Orientação a ObjetosOrientação a Objetos
Orientação a Objetos
Edy Segura
 
POO - 05 - Ambiente de Desenvolvimento
POO - 05 - Ambiente de DesenvolvimentoPOO - 05 - Ambiente de Desenvolvimento
POO - 05 - Ambiente de Desenvolvimento
Ludimila Monjardim Casagrande
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a Objetos
Moises Omena
 
POO - Aula 04 - Introdução a classes e objetos
POO - Aula 04 - Introdução a classes e objetosPOO - Aula 04 - Introdução a classes e objetos
POO - Aula 04 - Introdução a classes e objetos
Felipe J. R. Vieira
 
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosPOO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
Ludimila Monjardim Casagrande
 
POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a Objetos
Ludimila Monjardim Casagrande
 
Curso MySQL #16 - SQL com JOIN para mais de uma tabela
Curso MySQL #16 - SQL com JOIN para mais de uma tabelaCurso MySQL #16 - SQL com JOIN para mais de uma tabela
Curso MySQL #16 - SQL com JOIN para mais de uma tabela
Curso em Vídeo - Cursos Grátis com Certificado
 
Certificacoes java
Certificacoes javaCertificacoes java
Certificacoes java
Bruno Garcia
 
Herança e polimorfismo em Java
Herança e polimorfismo em Java Herança e polimorfismo em Java
Herança e polimorfismo em Java
Evandro Júnior
 
O paradigma da orientação a objetos
O paradigma da orientação a objetosO paradigma da orientação a objetos
O paradigma da orientação a objetos
Nécio de Lima Veras
 
Principais diagramas da UML
Principais diagramas da UMLPrincipais diagramas da UML
Principais diagramas da UML
Jéssica Nathany Carvalho Freitas
 
OOP java
OOP javaOOP java
OOP java
xball977
 

Destaque (20)

Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 
Introdução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoIntrodução a programação Orientada a Objeto
Introdução a programação Orientada a Objeto
 
2672853-apostila-completa-de-Java
2672853-apostila-completa-de-Java2672853-apostila-completa-de-Java
2672853-apostila-completa-de-Java
 
Programação Estruturada e Orientada a Objetos
Programação Estruturada e Orientada a ObjetosProgramação Estruturada e Orientada a Objetos
Programação Estruturada e Orientada a Objetos
 
Programação Orientado a Objetos
Programação Orientado a ObjetosProgramação Orientado a Objetos
Programação Orientado a Objetos
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos
 
POO - Aula 07 - Construtores e Atributos de Classe
POO - Aula 07 - Construtores e Atributos de ClassePOO - Aula 07 - Construtores e Atributos de Classe
POO - Aula 07 - Construtores e Atributos de Classe
 
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)
 
Orientação a Objetos
Orientação a ObjetosOrientação a Objetos
Orientação a Objetos
 
POO - 05 - Ambiente de Desenvolvimento
POO - 05 - Ambiente de DesenvolvimentoPOO - 05 - Ambiente de Desenvolvimento
POO - 05 - Ambiente de Desenvolvimento
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a Objetos
 
POO - Aula 04 - Introdução a classes e objetos
POO - Aula 04 - Introdução a classes e objetosPOO - Aula 04 - Introdução a classes e objetos
POO - Aula 04 - Introdução a classes e objetos
 
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosPOO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
 
POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a Objetos
 
Curso MySQL #16 - SQL com JOIN para mais de uma tabela
Curso MySQL #16 - SQL com JOIN para mais de uma tabelaCurso MySQL #16 - SQL com JOIN para mais de uma tabela
Curso MySQL #16 - SQL com JOIN para mais de uma tabela
 
Certificacoes java
Certificacoes javaCertificacoes java
Certificacoes java
 
Herança e polimorfismo em Java
Herança e polimorfismo em Java Herança e polimorfismo em Java
Herança e polimorfismo em Java
 
O paradigma da orientação a objetos
O paradigma da orientação a objetosO paradigma da orientação a objetos
O paradigma da orientação a objetos
 
Principais diagramas da UML
Principais diagramas da UMLPrincipais diagramas da UML
Principais diagramas da UML
 
OOP java
OOP javaOOP java
OOP java
 

Semelhante a Programação Orientada a Objetos com Java

Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01
CASSIANE SILVA
 
Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01
Daniel Alves
 
Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01
rollbackpt
 
Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01
Patricia Marques
 
Programação Desktop: Uma abordagem com Java
Programação Desktop: Uma abordagem com JavaProgramação Desktop: Uma abordagem com Java
Programação Desktop: Uma abordagem com Java
Rosicleia Frasson
 
01 introducao ao java
01   introducao ao java01   introducao ao java
01 introducao ao java
Artur Todeschini
 
Aula 01 o que é java
Aula 01  o que é javaAula 01  o que é java
Aula 01 o que é java
Sergio Luiz da Silveira
 
Aula 01 O que é java
Aula 01   O que é javaAula 01   O que é java
Aula 01 O que é java
Sergio Silva
 
Conhecendo Java
Conhecendo JavaConhecendo Java
Conhecendo Java
TI Infnet
 
Fundamentos Java - 01
Fundamentos Java - 01Fundamentos Java - 01
Fundamentos Java - 01
Daniel Gustavo Bernardo
 
Java 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral DetalhadoJava 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral Detalhado
Regis Magalhães
 
Java 01 Java Visao Geral
Java 01 Java Visao GeralJava 01 Java Visao Geral
Java 01 Java Visao Geral
Regis Magalhães
 
Aula 1a.ppt
Aula 1a.pptAula 1a.ppt
Apresentação java
Apresentação javaApresentação java
Apresentação java
munosai
 
Introdução a Tecnologia Java
Introdução a Tecnologia JavaIntrodução a Tecnologia Java
Introdução a Tecnologia Java
Thiago Gonzaga
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java Fundamentos
Wilson Lima
 
Java 01 Java Visao Geral Resumo
Java 01 Java Visao Geral ResumoJava 01 Java Visao Geral Resumo
Java 01 Java Visao Geral Resumo
Regis Magalhães
 
Curso de Java - Antonio Alves - Aula 01
Curso de Java - Antonio Alves - Aula 01Curso de Java - Antonio Alves - Aula 01
Curso de Java - Antonio Alves - Aula 01
Antonio Alves
 
001 cesep - turma java
001   cesep - turma java001   cesep - turma java
001 cesep - turma java
Junior Souza
 
Java20141215 17[1]
Java20141215 17[1]Java20141215 17[1]
Java20141215 17[1]
Diogo Rafael da Silva
 

Semelhante a Programação Orientada a Objetos com Java (20)

Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01
 
Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01
 
Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01
 
Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01
 
Programação Desktop: Uma abordagem com Java
Programação Desktop: Uma abordagem com JavaProgramação Desktop: Uma abordagem com Java
Programação Desktop: Uma abordagem com Java
 
01 introducao ao java
01   introducao ao java01   introducao ao java
01 introducao ao java
 
Aula 01 o que é java
Aula 01  o que é javaAula 01  o que é java
Aula 01 o que é java
 
Aula 01 O que é java
Aula 01   O que é javaAula 01   O que é java
Aula 01 O que é java
 
Conhecendo Java
Conhecendo JavaConhecendo Java
Conhecendo Java
 
Fundamentos Java - 01
Fundamentos Java - 01Fundamentos Java - 01
Fundamentos Java - 01
 
Java 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral DetalhadoJava 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral Detalhado
 
Java 01 Java Visao Geral
Java 01 Java Visao GeralJava 01 Java Visao Geral
Java 01 Java Visao Geral
 
Aula 1a.ppt
Aula 1a.pptAula 1a.ppt
Aula 1a.ppt
 
Apresentação java
Apresentação javaApresentação java
Apresentação java
 
Introdução a Tecnologia Java
Introdução a Tecnologia JavaIntrodução a Tecnologia Java
Introdução a Tecnologia Java
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java Fundamentos
 
Java 01 Java Visao Geral Resumo
Java 01 Java Visao Geral ResumoJava 01 Java Visao Geral Resumo
Java 01 Java Visao Geral Resumo
 
Curso de Java - Antonio Alves - Aula 01
Curso de Java - Antonio Alves - Aula 01Curso de Java - Antonio Alves - Aula 01
Curso de Java - Antonio Alves - Aula 01
 
001 cesep - turma java
001   cesep - turma java001   cesep - turma java
001 cesep - turma java
 
Java20141215 17[1]
Java20141215 17[1]Java20141215 17[1]
Java20141215 17[1]
 

Mais de Álvaro Farias Pinheiro

Data science
Data scienceData science
IA
IAIA
Autômatos
AutômatosAutômatos
Paradigma Orientado a Objetos
Paradigma Orientado a ObjetosParadigma Orientado a Objetos
Paradigma Orientado a Objetos
Álvaro Farias Pinheiro
 
Padrões de Projeto (GoF)
Padrões de Projeto (GoF)Padrões de Projeto (GoF)
Padrões de Projeto (GoF)
Álvaro Farias Pinheiro
 
Linguagem de Modelagem Unificada (UML)
Linguagem de Modelagem Unificada (UML)Linguagem de Modelagem Unificada (UML)
Linguagem de Modelagem Unificada (UML)
Álvaro Farias Pinheiro
 
Introdução a Tecnologias Web
Introdução a Tecnologias WebIntrodução a Tecnologias Web
Introdução a Tecnologias Web
Álvaro Farias Pinheiro
 
Introdução ao HTML
Introdução ao HTMLIntrodução ao HTML
Introdução ao HTML
Álvaro Farias Pinheiro
 
Introdução à Sistemas de Informação
Introdução à Sistemas de InformaçãoIntrodução à Sistemas de Informação
Introdução à Sistemas de Informação
Álvaro Farias Pinheiro
 
Análise e Modelagem com UML
Análise e Modelagem com UMLAnálise e Modelagem com UML
Análise e Modelagem com UML
Álvaro Farias Pinheiro
 
Eficiência Energética
Eficiência EnergéticaEficiência Energética
Eficiência Energética
Álvaro Farias Pinheiro
 
Fundamentos da Engenharia de Software
Fundamentos da Engenharia de SoftwareFundamentos da Engenharia de Software
Fundamentos da Engenharia de Software
Álvaro Farias Pinheiro
 
Fundamentos de Testes de Software
Fundamentos de Testes de SoftwareFundamentos de Testes de Software
Fundamentos de Testes de Software
Álvaro Farias Pinheiro
 
Medida de Esforço de Software com Análise de Ponto de Função
Medida de Esforço de Software com Análise de Ponto de FunçãoMedida de Esforço de Software com Análise de Ponto de Função
Medida de Esforço de Software com Análise de Ponto de Função
Álvaro Farias Pinheiro
 
Fundamentos de Padrões de Projeto de Software
Fundamentos de Padrões de Projeto de SoftwareFundamentos de Padrões de Projeto de Software
Fundamentos de Padrões de Projeto de Software
Álvaro Farias Pinheiro
 
Fundamentos de Banco de Dados Relacionais
Fundamentos de Banco de Dados RelacionaisFundamentos de Banco de Dados Relacionais
Fundamentos de Banco de Dados Relacionais
Álvaro Farias Pinheiro
 
Metodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de SoftwareMetodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de Software
Álvaro Farias Pinheiro
 
Redes Sociais
Redes SociaisRedes Sociais

Mais de Álvaro Farias Pinheiro (18)

Data science
Data scienceData science
Data science
 
IA
IAIA
IA
 
Autômatos
AutômatosAutômatos
Autômatos
 
Paradigma Orientado a Objetos
Paradigma Orientado a ObjetosParadigma Orientado a Objetos
Paradigma Orientado a Objetos
 
Padrões de Projeto (GoF)
Padrões de Projeto (GoF)Padrões de Projeto (GoF)
Padrões de Projeto (GoF)
 
Linguagem de Modelagem Unificada (UML)
Linguagem de Modelagem Unificada (UML)Linguagem de Modelagem Unificada (UML)
Linguagem de Modelagem Unificada (UML)
 
Introdução a Tecnologias Web
Introdução a Tecnologias WebIntrodução a Tecnologias Web
Introdução a Tecnologias Web
 
Introdução ao HTML
Introdução ao HTMLIntrodução ao HTML
Introdução ao HTML
 
Introdução à Sistemas de Informação
Introdução à Sistemas de InformaçãoIntrodução à Sistemas de Informação
Introdução à Sistemas de Informação
 
Análise e Modelagem com UML
Análise e Modelagem com UMLAnálise e Modelagem com UML
Análise e Modelagem com UML
 
Eficiência Energética
Eficiência EnergéticaEficiência Energética
Eficiência Energética
 
Fundamentos da Engenharia de Software
Fundamentos da Engenharia de SoftwareFundamentos da Engenharia de Software
Fundamentos da Engenharia de Software
 
Fundamentos de Testes de Software
Fundamentos de Testes de SoftwareFundamentos de Testes de Software
Fundamentos de Testes de Software
 
Medida de Esforço de Software com Análise de Ponto de Função
Medida de Esforço de Software com Análise de Ponto de FunçãoMedida de Esforço de Software com Análise de Ponto de Função
Medida de Esforço de Software com Análise de Ponto de Função
 
Fundamentos de Padrões de Projeto de Software
Fundamentos de Padrões de Projeto de SoftwareFundamentos de Padrões de Projeto de Software
Fundamentos de Padrões de Projeto de Software
 
Fundamentos de Banco de Dados Relacionais
Fundamentos de Banco de Dados RelacionaisFundamentos de Banco de Dados Relacionais
Fundamentos de Banco de Dados Relacionais
 
Metodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de SoftwareMetodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de Software
 
Redes Sociais
Redes SociaisRedes Sociais
Redes Sociais
 

Programação Orientada a Objetos com Java

  • 1. PROGRAMAÇÃO ORIENTADA A OBJETOS COM JAVA https://www.facebook.com/alvarofpinheiroaulas/ br.linkedin.com/in/alvarofpinheiro/ www.alvarofpinheiro.eti.br
  • 2. Apresentação JAVA Java Apresentação www.alvarofpinheiro.eti.br *
  • 3. Eclipse Java Apresentação ●Se trata de um Ambiente de Desenvolvimento Integrado ou Integrated Development Environment (IDE). É um software livre e permite suporte a algumas linguagens de programação, a exemplo, Java, PHP, C e C++. Possui portabilidade paras as plataformas Linux, Windows e Mac OS. Uma das características dessa IDE é a flexibilidade na personalização, o que faz muitos o classificarem como um Framework, justamente devido a esse poder de customização. Podendo assim ser utilizado um dos pacotes disponíveis na Web ou você mesmo montar o seu pacote. Outra característica marcante dessa IDE é que ela é portable, ou seja, não precisa de instalação, bastando extrair os arquivos na pasta e executá-lo. ●Existem várias versões , as que estão disponíveis como é mostrado abaixo: ●* 3.7 – Indigo (Cor entre azul e violeta) – lançado em 28 de Junho de 2011; ●* 3.6 – Helios (Sol para os gregos) – lançado em 23 de Junho de 2010; ●* 3.5 – Galileo (Conjunto de quatro luas de Jupiter) – lançado em 24 de Junho de 2009; ●* 3.4 – Ganymede (Lua de Jupiter) – lançado em 25 de Junho de 2008; ●* 3.3 – Europa (Lua de Jupiter) – lançado em 29 de Junho de 2007; ●* 3.2 – Callisto (Lua de Jupiter) – lançado em 30 de Junho de 2006; ●* 3.1 – sem codinome – lançado em28 de Junho de 2005; ●* 3.0 – sem codinome – lançado em 28 de Junho de 2004. * www.alvarofpinheiro.eti.br
  • 4. Eclipse Java Apresentação ●Além das versões acima existem os pacotes. Esses existem para agrupar por linguagem e plugins direcionados para um tipo de desenvolvimento. Para Java usa-se normalmente o Eclipse IDE for Java EE Developers (JEE), pois é a mais completa ou o Eclipse IDE for Java and Report Developers (Reporting), que tem os mesmos componentes da primeira mais o Birt, que é um recurso para desenvolver relatórios. Os plugins, além os do pacote, existem diversos disponíveis na Web e para instalar é normalmente só baixá-los e descompactá-los dentro da pasta eclipse. ●Para baixar as versões e pacotes segue link: ●http://www.eclipse.org/downloads/ ●Para baixar os plugins segue link: ●http://www.eclipse.org/modeling/mdt/?project=uml2 * www.alvarofpinheiro.eti.br
  • 5. JDK / JRE / JVM Java Apresentação ●JDK é um Pacote de Desenvolvimento de Aplicativos ou Java Developers Kit e servem para que desenvolvedores tenham condições de interagir com o software, disponibilizando para isso documentação, código e utilitários. Basicamente o JDK contém diversas ferramentas entre as quais estão as de compilação e execução do programa Java. JDK e SDK são as mesmas coisas. ●JRE significa Ambiente de Tempo de Execução ou Java Runtime Environment e é utilizado para executar as aplicações da plataforma Java. Basicamente ele é composto de bibliotecas ou Application Program Interface (API) e da Máquina virtual Java ou Java Virtual Machine (JVM). Ele é utilizado como um interpretador de código de bytes em código de máquina, assim o JRE é o interpretador do programa Java. JRE contém o ambiente de execução, como JVM e outras classes Java (AWT, SWING), mas não contém todas as ferramentas de desenvolvimento tais como um compilador ou um depurador. ●JVM é a Máquina Virtual Java e é usada para interpretar o programa em Java para plataforma para corrente. Ambos JDK e JRE contém a JVM . * www.alvarofpinheiro.eti.br
  • 6. JDK / JRE / JVM Java Apresentação ●O Java Developers Kit (JDK) inclui a JVM, bibliotecas de classe standard, e muita outras ferramentas que um desenvolvedor utiliza para desenvolver um programa Java ●O Java Runtime Environment (JRE) inclui a JVM, bibliotecas de classe standard, desta forma pode-se executar um programa Java, mesmo não possuindo todas as ferramentas. ●O Java Virtual Machine (JVM), é o responsável em carregar os arquivos da classe para a sua execução. * www.alvarofpinheiro.eti.br
  • 7. JAR Java Apresentação ●O Java Archive (JAR) é um arquivo compactado usado para distribuir classes compiladas, metadados associados que podem constituir um programa, imagens, XMLs, etc. Mas, normalmente é usada para distribuir uma aplicação Java que contém tudo que foi citado. ●Os arquivos JAR podem ser criados e extraídos usando o utilitário "jar" da JDK. Esse tipo de arquivo possui um manifesto localizado no caminho META-INF/ MANIFEST.MF. As entradas do arquivo manifesto determinam como o ele será usado. O que é normalmente usado como um executável, desta forma ele terá uma de suas classes especificada como a classe principal. ●O arquivo manifesto terá uma entrada do tipo: ●Main-Class:meusProgramas.MinhaClasse. ●As aplicações contidas neste tipo de arquivo são tipicamente executadas com o comando java -jar exemplo.jar * www.alvarofpinheiro.eti.br
  • 8. História Java Apresentação ●O Java foi concebido inicialmente como uma ferramenta de programação para um projeto da empresa Sun Microsystems, denominado de O Projeto Verde, pelos desenvolvedores Patrick Naughton, Mike Sheridan e James Gosling, no ano de 1991. Esse projeto tinha o objetivo criar uma nova plataforma para a computação interativa, desta forma, a linguagem de programação não era o principal objetivo desse projeto. Um ano após o início foi concluído o sistema que permitia controle remoto e possuía interface sensível ao toque interativa, sendo o sistema denominado de *7 (star seven). Com esse sistema era possível controlar uma grande variedade de dispositivos de uso doméstico, além de possuir interface com alta usabilidade e gráfica. ●A linguagem utilizada nesse sistema foi batizada de Oak o que significa carvalho em inglês, em referência a árvore que James Gosling via todos os dias de sua janela no período de desenvolvimento. Em 1995, John Gage, diretor da Sun Microsystems, e Marc Andreessen, um executivo da Netscape, anunciaram o lançamento da plataforma Java, que era composta do Java Virtual Machine (JVM) e do Application Programming Interface (API) Java. Essa plataforma foi inserida no Netscape Navigator, um dos principais browsers nessa época. * www.alvarofpinheiro.eti.br
  • 9. Biografia Java Apresentação ●Patrick Naughton, americano nascido em 1965 é um desenvolvedor de software conhecido como sendo um dos criadores originais da linguagem de programação Java, pois trabalho na Sun Microsystems no Projeto Verde a origem do Java. Em 1994, saiu da Sun e foi para Starwave de propriedade de Paul Allen para desenvolver um servidor Java. É autor do livro O Manual do Java, Osborne, 1995 e co-autor do Java: The Complete Reference, com Herbert Schildt, Osborne , 1996. Em 1998, torna-se vice-presidente executivo da Infoseek. ●James Gosling, nasceu em Calgary no Canadá em 1955 é conhecido como o pai da linguagem de programação Java. Em 1977, formou Bacharel em Ciência da Computação pela Universidade de Calgary, e em 1983 tornou-se PhD em Ciência da Computação pela Universidade Carnegie Mellon. Enquanto estudava no doutorado, Gosling programou a versão original do editor de texto Emacs para UNIX, e antes de se juntar a Sun Microsystems ele construiu uma versão de UNIX para máquinas multi-processadas, assim como diversos compiladores e sistemas de mensagens eletrônicas. Trabalhou de 1984 até 2010 na Sun Microsystems, atualmente está na Google. * www.alvarofpinheiro.eti.br
  • 10. Independência Java Apresentação ●O código é armazenado em arquivos com extensão .java; Um programa .java compilado se transforma em .class; Bytecodes são interpretados em tempo de execução. * www.alvarofpinheiro.eti.br
  • 11. Applets Java Apresentação ●Utilizado em páginas HTML; Pode incluir formulários, áudio, imagens, vídeo, etc.; Aparece nos browsers e pode se comunicar com o servidor. * www.alvarofpinheiro.eti.br
  • 12. Aplicação Java Apresentação ●Instalação no lado do cliente: JVM é executado; Não faz carga das classes na rede; ●Instalação do lado do servidor; Pode servir múltiplos clientes; Faz uso dos modelos multi-camada. * www.alvarofpinheiro.eti.br
  • 13. Java ●Código é compilado para bytecodes; Java Apresentação ●Código bytecodes é independentes de plataforma; ●Os bytecodes são interpretados por uma JVM; ●As applets são executados em um browser no cliente; ●As aplicações Java são executadas de forma autônoma. * www.alvarofpinheiro.eti.br
  • 14. Introdução JAVA Java Introdução www.alvarofpinheiro.eti.br *
  • 15. Convenções Java Introdução ●Nomes dos arquivos = palavras capitalizadas: ●Ex.: ArquivoX.java, NomeComposto.java ●Nomes das Classes = palavras capitalizadas: ●Ex.: Classe, NomeComposto ●Nomes dos Métodos = verbo + palavras capitalizadas: ●Ex.: getCampoNome(), setCampoNome() * www.alvarofpinheiro.eti.br
  • 16. Definição de Classe ●Modificador de acesso: public, private ●A palavra-chave class ●Campos das instâncias ●Construtores ●Métodos das instâncias ●Campos da classe ●Métodos da classe Java Introdução * public class ClasseExemplo { // campos das instâncias private int campoExemplo1; private String campoExemplo2; // construtores public ClassExemplo() { this.campoExemplo1 = 0; this.campoExemplo2 = ""; } public ClassExemplo(int paramExemplo1; String paramExemplo2) { this.campoExemplo1 = paramExemplo1; this.campoExemplo2 = paramExemplo2; } // métodos das instâncias private int getCampoExemplo1() { return campoExemplo1; } private void setCampoExemplo1(int campoExemplo1) { this.campoExemplo1 = campoExemplo1; } private String getCampoExemplo2() { return campoExemplo2; } private void setCampoExemplo2(String campoExemplo2) { this.campoExemplo2 = campoExemplo2; } } www.alvarofpinheiro.eti.br
  • 17. Bloco de código Java Introdução ●Em java se usa chaves “{ }” para: Agrupar todas as declarações de classe; Agrupar todas as declarações de métodos; e Agrupar outros segmentos de código relacionado entre si. * www.alvarofpinheiro.eti.br
  • 18. Instruções Java Introdução ●Os comandos terminam sempre com ponto-e-vírgula “;” ●Todos os comandos devem estar entre chaves “{}” * www.alvarofpinheiro.eti.br
  • 19. Java Introdução Variáveis / Constantes ●A declaração de variáveis basta especificar o escopo, o tipo de dado o nome da variável e se for desejado o valor que será inicializado, caso contrário usará o default do tipo. ● int v1; ● static int v2; ● static int v3 = 9; ●A declaração de constantes segue a mesma especificação com a adição da palavra final. ● final float PI = 3.14159265f; ● static final float PI = 3.14159265f; ●Obs: com o uso da palavra static temos uma especificação de escopo global, sem ela local. * www.alvarofpinheiro.eti.br
  • 20. Tipos de Dados ●boolean: lógico - boolean b = true; ●byte: inteiros entre -128 e 127 - byte b = 111; ●char: caracter - char letra = ‘A’; Java Introdução ●double: números reais de precisão dupla - double d = 123.4; ●float: números reais de precisão simples - float f = 12.3; ●int: inteiro entre -2.147.483.648 e 2.147.483.647 - int i =0; ●long: inteiro entre -9.223.372.036.854.775.808 ● e 9.223.372.036.854.775.807 ●short: inteiro entre -32.768 e 32.767 - short s = 1; ●void: método sem retorno ou vazio. * www.alvarofpinheiro.eti.br
  • 21. Java Introdução Declaração de Variáveis ●Variáveis de instância pertencem as classes. ●Variáveis locais pertencem aos métodos e devem ser inicializadas antes de serem usadas. ●class Exemplo { ● private int exVar; // variável de instância ● public void exMetodo() { ● float exVarLoc = 1.0; // variável local ● } ●} * www.alvarofpinheiro.eti.br
  • 22. Tipo Literal Java Introdução ●Se declarado como char usar aspas simples. ●Se declarado como String usar aspas duplas. ●class Exemplo { ● public void exMetodo() { ● char exVar1 = ‘A’; ● String exVar2 = “A”; ● } ●} * www.alvarofpinheiro.eti.br
  • 23. Atribuição ●São possibilidades de atribuição: ●int var1 = 1; ●int var1, var2, var3 = 2; ●var1 = var2 = var3 = 3; Java Introdução * www.alvarofpinheiro.eti.br
  • 24. Aritmética ●int a, b, c, d, e; ●a = 8 + 7; // adição ●b = 6 - 5; // subtração ●c = 4 * 3; // multiplicação Java Introdução ●d = 2 / 1; // divisão que retorna o quociente ●e = 2 % 1; // divisão que retorna o resto * www.alvarofpinheiro.eti.br
  • 25. Java Introdução Conversões implícitas ●Java converter um tipo menor para um maior automaticamente, mas não faz o contrário (downcast). ● byte -> short -> int -> long (FAZ) ● byte <- short <- int <- long (NÃO FAZ) ● * www.alvarofpinheiro.eti.br
  • 26. Java Introdução Incrementador / Decrementador ●Exemplos: ●int var1 = 3, var2 = 0; ●var2 = ++var1; // Pré: Incrementa var1 primeiro para depois atribuir para var2. ●var2 = var1++; // Pós: Atribui para var2 primeiro para depois incrementar var1. ●var2 = --var1; // Pré: Decrementa var1 primeiro para depois atribuir para var2. ●var2 = var1--; // Pós: Atribui para var2 primeiro para depois decrementar var1. * www.alvarofpinheiro.eti.br
  • 27. Relacionais ●== igual ●!= diferente ●> maior que ●>= maior ou igual ●< menor que ●<= menor ou igual ●Exemplos: ● int var1 = 1, var2 = 2; ● boolean res = true; ● res = (var1 == var2); // falso ● res = (var2 > var1); // verdadeiro Java Introdução * www.alvarofpinheiro.eti.br
  • 28. Lógicos ●&& e lógico ●|| ou lógico ●^ ou exclusivo ●! Negação ●Exemplos: ● int var1 = 1, var2 = 2, var3 = 3; ● boolean res = true; Java Introdução ● res = (var2 > var1) & (var3 == 3); // falso * www.alvarofpinheiro.eti.br
  • 29. Atribuição Composta ●int x = 0; ●x = x + 1; // x passa a ser 1 ●é o mesmo que ●x += x; // x passa a ser 2 ●outras possibilidades ●x -= 1; // x passa a ser 1 ●x *= 2; // x passa a ser 2 ●x /= 2; // x passa a ser 1 Java Introdução * www.alvarofpinheiro.eti.br
  • 30. Concatenação ●String var1 = “Álvaro”; ●String var2 = “Pinheiro”; Java Introdução ●var1 = var1 + var2; // resulta em “ÁlvaroPinheiro” ●Var1 += var2 // resulta em “ÁlvaroPinheiro” * www.alvarofpinheiro.eti.br
  • 31. Array ● public static int obterVetorInteito() { ● int[] vI = new int[3]; ● vI[0]=0; ● vI[1]=1; ● vI[2]=2; ● return (vI[2]); ● } ● public static String obterVetorString() { ● String[] vS = new String[3]; ● vS[0] = "a"; ● vS[1] = "b"; ● vS[2] = "c"; ● return (vS[2]); ● } Java Introdução * www.alvarofpinheiro.eti.br
  • 32. Array ● public static float obterMatrizFloat() { ● float[][] mF = new float[1][2]; ● mF[0][0] = 0.0f; ● mF[0][1] = 0.1f; ● return (mF[0][1]); ● } ● public static double obterMatrizDouble() { ● double[][][] mD = new double[1][2][3]; ● mD[0][0][0] = 0.0; ● mD[0][0][1] = 0.001; ● mD[0][0][2] = 0.002; ● mD[0][1][0] = 0.01; ● mD[0][1][1] = 0.011; ● mD[0][1][2] = 0.012; ● return (mD[0][1][2]); ● } Java Introdução * www.alvarofpinheiro.eti.br
  • 33. Array ● public static int obterArrayListInteiro() { ● ArrayList<Integer> al = new ArrayList<Integer>(); ● al.add(10); ● al.add(11); ● al.add(12); ● return (al.get(2)); ● } ● public static String obterArrayListString() { ● ArrayList<String> al = new ArrayList<String>(); ● al.add("a"); ● al.add("b"); ● return (al.get(1)); ● } Java Introdução * www.alvarofpinheiro.eti.br
  • 34. if Java Introdução * if ( cond ) cmd1; [else] cmd2; www.alvarofpinheiro.eti.br
  • 35. If else if else Java Introdução * if (cond1) if (cond2) cmd1; else cmd2; else cmd3; www.alvarofpinheiro.eti.br
  • 36. ( ? : ) Java Introdução * (expr1 ? expr2 : expr3) int var1; var1 = (val1 > val2) ? ret_verdadeiro : ret_falso; www.alvarofpinheiro.eti.br
  • 37. while Java Introdução * while ( cond ) cmd; www.alvarofpinheiro.eti.br
  • 38. do...while Java Introdução * do cmd; while ( cond ); www.alvarofpinheiro.eti.br
  • 39. for Java Introdução * for ( início; cond; passo ) cmd; www.alvarofpinheiro.eti.br
  • 40. break Java Introdução * ● Interrompe um ciclo ou uma instrução switch; ● Transfere o controle para a primeira instrução depois do corpo do ciclo ou instrução switch; e ● Pode simplificar o código. www.alvarofpinheiro.eti.br
  • 41. continue Java Introdução * ● Apenas pode ser usado em ciclos; ● Abandona a iteração em curso e salta para a próxima iteração do ciclo www.alvarofpinheiro.eti.br
  • 42. Java Introdução Labeled break, continue * Pode ser usado para saltar fora de ciclos encaixados ou continuar um ciclo exterior ao ciclo corrente lacoexterno: for (int i = 0; i < 10; i++) { for (int j = 0; j < 5; j++) { System.out.println(i, j); if (i + j > 7) break lacoexterno; } } www.alvarofpinheiro.eti.br
  • 43. Entrada e Saída de Dados JAVA Java Entrada/Saída www.alvarofpinheiro.eti.br *
  • 44. Saída Java Entrada/Saída * Para sair com dados no dispositivo corrente basta usar System.out.print() ou System.out.println(), onde o primeiro imprime e fica com o controle na mesma linha e o segundo imprime e o controle vai para a próxima linha. www.alvarofpinheiro.eti.br
  • 45. Saída Java Entrada/Saída * Para sair com dados no dispositivo corrente basta usar System.out.print() ou System.out.println(), onde o primeiro imprime e fica com o controle na mesma linha e o segundo imprime e o controle vai para a próxima linha. public class Principal { public static void main(String[] args) { System.out.print("Imprime e não muda de linha"); System.out.println("-Veja a saída no console! Percebeu?"); System.out.println("Imprimiu a cadeia anterior e mudou de linha"); System.out.print("-Olhe o console! Percebeu?"); } } www.alvarofpinheiro.eti.br
  • 46. Entrada Java Entrada/Saída * Para entrar com dados usar a classe Scanner. import java.util.*; public class Principal { public static void main(String[] args) { int codigo = 0; String nome = ""; Scanner scanner = new Scanner(System.in); System.out.println("Código:"); codigo = scanner.nextInt(); System.out.println("Nome:"); nome = scanner.next(); System.out.println("Código:" + codigo + " e Nome:" + nome + " informados!"); } } www.alvarofpinheiro.eti.br
  • 47. Stream Java Entrada/Saída * Trata-se de uma abstração para a entrada ou saída de dados. Os bytes trafegam do input para o output por stream. E esse pode representar múltiplas fontes de dados, como arquivos em disco, outros computadores em rede, páginas da web, dispositivos de entrada como teclado, pendrive, ... www.alvarofpinheiro.eti.br
  • 48. Stream Hierarquia Java Entrada/Saída * java.io.InputStream AudioInputStream FileInputStream ObjectInputStream java.io.OutputStream ByteArrayOutputStream FileOutputStream ObjectOutputStream www.alvarofpinheiro.eti.br
  • 49. Input Stream Java Entrada/Saída * Métodos comuns a todas as input streams: // para ler um um caracter int read() throws IOException // inicia a stream para que os seus // bytes possam ser lidos novamente void reset() throws IOException // notifica a stream de que ela vai // ser fechada void close() throws IOException www.alvarofpinheiro.eti.br
  • 50. Output Stream Java Entrada/Saída * Métodos comuns a todas as output streams: // escreve um caracter void write(int n) throws IOException // escreve os bytes que estavam // à espera para ser escritos void flush() throws IOException // notifica a stream de que de que ela // vai ser fechada void close() throws IOException www.alvarofpinheiro.eti.br
  • 51. Exemplo de Stream Java Entrada/Saída * try { InputStream ler = new FileInputStream(“arq.txt”); char caracter = (char)ler.read(); String cadeia = “exemplo”; OutputStream gravar = new FileOutputStream(“arq.txt”); for (int i = 0; i < cadeia.length(); i++) gravar.write(cadeia.charAt(i)); gravar.close(); } catch (IOException excecao) { System.out.print(excecao.getMessage()); } www.alvarofpinheiro.eti.br
  • 52. Thread Java Entrada/Saída * É uma execução sequencial de um programa. Cada programa tem pelo menos um thread. Cada thread tem a sua própria pilha, prioridade e conjunto de registos virtuais. Os threads subdividem o comportamento de um programa em subtarefas independentes. São usados virtualmente em todos os computadores: Em muitas aplicações (imprimir); Em programas como browsers Internet; Em bases de dados; No sistema operacional; e Assim os Threads são normalmente usados, mas não são percebidos pelo usuário. www.alvarofpinheiro.eti.br
  • 53. Thread Java Entrada/Saída * Se usa threads para melhor aproveitar as capacidades do computador e assim utilizar a CPU enquanto se faz entrada/saída de dados. Para maior produtividade do usuário, através de uma interface mais interativa. E pelas vantagens na simplificação da lógica algoritmica. www.alvarofpinheiro.eti.br
  • 54. Thread Java Entrada/Saída * A Classe Thread: Mantém o estado de um thread; Fornece diversos construtores; Fornece diversos métodos; São escalonados pela JVM; e Utiliza o sistema operacional. Thread.currentThread() Thread.sleep() Thread.setName() Thread.isAlive() www.alvarofpinheiro.eti.br
  • 55. Thread Java Entrada/Saída * Cada programa corre numa thread e em seguida adormecer, assim uma thread é uma técnica que permite que outras threads possam ser executadas. public static void main (args[] s) { System.out.println(“thread " + Thread.currentThread().getName()); try { Thread.sleep(5000) } catch (InterruptedException e) { } … } www.alvarofpinheiro.eti.br
  • 56. Thread Java Entrada/Saída * // criar um thread public class Dormir extends Thread { public void run () { Date inicio = new Date(); try { Thread.currentThread().sleep ((int) (1000 * Math.random())); } catch (Exception es) {} long lapso = new Date().getTime() - inicio.getTime(); System.out.println(Thread.currentThread().getName() + ": lapso de " + lapso + "milisegundos"); } } www.alvarofpinheiro.eti.br
  • 57. Thread Java Entrada/Saída * // instanciar a Dormir public static void main(String[] args) { new Dormir().start(); new Dormir().start(); System.out.println(“2 threads iniciadas:"); } // Saída 2 threads iniciadas: Thread-1: lapso de 78 milisegundos Thread-2: lapso de 428 milisegundos www.alvarofpinheiro.eti.br
  • 58. Thread Java Entrada/Saída * Ciclo de vida: www.alvarofpinheiro.eti.br
  • 59. Thread Java Entrada/Saída * Se uma thread invocar um método synchronized, nenhuma outra thread pode executar um método sincronizado no mesmo objeto até a primeira thread completar a sua tarefa. public class Moldura extends JFrame { public synchronized void Atualiza() { … } … } www.alvarofpinheiro.eti.br
  • 60. Thread Java Entrada/Saída * Cada thread tem uma prioridade que vai de 1 até 10 e o escalonamento é dependente do sistema operacional. Uma thread de alta prioridade pode interromper uma de baixa prioridade, assim threads de alta prioridade podem dominar o processador e de prioridades idênticas podem ser escalonados de forma Circular, então cuidado ao usar synchronized. www.alvarofpinheiro.eti.br
  • 61. Java MVC/JDBC Model-View-Controller (MVC) * Arquitetura para construção de aplicações OO em que se separam três dimensões, as quais são: Modelo, que mantém dados usando os algoritmos apropriados e fornece métodos de acesso; Visão, que constrói uma representação visual de parte ou todos os dados do modelo; e Controlador, que trata das regras de negócio. Quando o modelo altera os seus dados, gera eventos que fazem com que a visão atualize a sua representação, segundo as ordens do controlador. www.alvarofpinheiro.eti.br
  • 62. Java MVC/JDBC Model-View-Controller (MVC) * Podem existir várias visões e controladores para o mesmo modelo, o qual pode permanecer inalterado quando este evolui. Uma alteração no modelo provoca um evento de alteração que é difundido para todos os objetos que estão à escuta desse evento e desencadeia as alterações, assim facilita manter o sincronismo entre visões diferentes de um mesmo modelo. Atuar numa visão pode provocar alterações no modelo que são refletidas nas outras visões. www.alvarofpinheiro.eti.br
  • 63. Java MVC/JDBC Model-View-Controller (MVC) * A arquitetura de desenvolvimento em três camadas divide um aplicativo permitindo que a lógica de negócio resida no meio das três camadas (camada intermediária ou camada de negócios), como a maior parte do código que normalmente é escrito fica na MVC - camada de negócio, deixando-a no meio, torna mais prática a construção e manutenção. A arquitetura Modelo Visualização Controle (MVC) permite dividir a funcionalidade da apresentação dos dados. Assim torna mais fácil mapear os conceitos no domínio de aplicações. www.alvarofpinheiro.eti.br
  • 64. Java MVC/JDBC Model-View-Controller (MVC) * Na arquitetura MVC o modelo representa os dados da aplicação que governam o acesso e a modificação dos dados. O modelo mantém o estado persistente do negócio e fornece ao controlador a capacidade de acessar as funcionalidades da aplicação encapsuladas pelo próprio modelo. É a camada de lógica da aplicação e é o coração da aplicação. Modela os dados e o comportamento por atrás do processo de negócios e se preocupa apenas com o armazenamento, manipulação e geração de dados É um encapsulamento de dados e de comportamento independente da apresentação. www.alvarofpinheiro.eti.br
  • 65. Java MVC/JDBC Model-View-Controller (MVC) * Um componente de visualização renderiza o conteúdo de uma parte particular do modelo e encaminha para o controlador as ações do usuário e acessa também os dados do modelo via controlador definindo como esses dados devem ser aAp Creasmeandtaadodse. apresentação ou visualização, não esta preocupada em como a informação foi obtida ou onde ela foi obtida apenas exibe a informação. inclui os elementos de exibição no cliente, tipo HTML, XML, ASPX, JSP, JFC, Applets, ... É a camada com o interface com o usuário. E é usada para receber a entrada de dados e apresentar o resultado. www.alvarofpinheiro.eti.br
  • 66. Java MVC/JDBC Model-View-Controller (MVC) * Um controlador define o comportamento da aplicação, é ele que interpreta as ações do usuário e as mapeia para chamadas do modelo. Em um cliente de aplicações Web essas ações do usuário poderiam ser cliques de botões ou seleções de menus. As ações realizadas pelo modelo incluem ativar processos de negócio ou alterar o estado do modelo. Com base na ação do usuário e no resultado do processamento do modelo , o controlador seleciona uma visualização a ser exibida como parte da resposta a solicitação do usuário. Há normalmente um controlador para cada conjunto de funcionalidades relacionadas. www.alvarofpinheiro.eti.br
  • 67. Java MVC/JDBC Model-View-Controller (MVC) * Em um cliente de aplicações Web essas ações do usuário poderiam ser cliques de botões ou seleções de menus. As ações realizadas pelo modelo incluem ativar processos de negócio ou alterar o estado do modelo. Com base na ação do usuário e no resultado do processamento do modelo , o controlador seleciona uma visualização a ser exibida como parte da resposta a solicitação do usuário. Há normalmente um controlador para cada conjunto de funcionalidades relacionadas. www.alvarofpinheiro.eti.br
  • 68. Java MVC/JDBC Model-View-Controller (MVC) * Algumas vantagens do uso do modelo MVC: gerenciar múltiplos visualizadores usando o mesmo modelo e é fácil manter, testar e atualizar sistemas múltiplos; É muito simples incluir novos clientes apenas incluindo seus visualizadores e controles; Torna a aplicação escalável; É possível ter desenvolvimento em paralelo para o modelo, visualizador e controle pois são independentes. Algumas desvantagens do uso MVC: Requer uma quantidade maior de tempo para analisar e modelar o sistema; Requer pessoal especializado; Não é aconselhável para pequenas aplicações. www.alvarofpinheiro.eti.br
  • 69. Java MVC/JDBC Java DataBase Connective (JDBC) * Etapas de uso de JDBC: 1. Carregar o driver JDBC; 2. Estabelecer a ligação à base de dados; 3. Criar um objeto SQL; 4. Executar uma consulta; 5. Processar os resultados; e 6. Fechar a ligação. www.alvarofpinheiro.eti.br
  • 70. Java MVC/JDBC Java DataBase Connective (JDBC) * Para usar um driver JDBC, é necessário carregar o driver através do método Class.forName(), através do código Class.forName("jdbc.DriverXYZ") em que o jbdc.DriverXYZ é o driver JDBC que se pretende carregar. Se usarmos um driver JDBC-ODBC, o código será algo como: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); www.alvarofpinheiro.eti.br
  • 71. Java MVC/JDBC Java DataBase Connective (JDBC) * Digitar o mysql-connector-java-5.1.18-bin.jar; e para isso é necessário clicar sobre o projeto e acionar a opção do menu Build Path executando a subopção Add External Archives... Depois é só digitar o código que cria o objeto de conexão e que estabelece a mesma. www.alvarofpinheiro.eti.br
  • 72. Java MVC/JDBC Java DataBase Connective (JDBC) * O objeto JDBC Statement envia comandos SQL para a base de dados. Os objetos Statement são criados a partir de objetos Connection ativos. Exemplo: Statement cmd = con.createStatement(); Com um objeto Statement, pode-se enviar chamadas SQL diretamente à base de dados. www.alvarofpinheiro.eti.br
  • 73. Java MVC/JDBC Java DataBase Connective (JDBC) * executeQuery() - executa uma query SQL e retorna os dados numa tabela (ResultSet). A tabela resultante pode estar vazia mas nunca null. String sCmd = "SELECT campo FROM tabela" ResultSet oResultado = cmd.executeQuery(sCmd); www.alvarofpinheiro.eti.br
  • 74. Java MVC/JDBC Java DataBase Connective (JDBC) * executeUpdate() - utilizado para executar instruções Data Definition Language (DDL). O resultado é o número de linhas que foram afetadas na base de dados. www.alvarofpinheiro.eti.br
  • 75. Java MVC/JDBC Java DataBase Connective (JDBC) * getMaxRows/setMaxRows - Determina o número de linhas que um ResultSet pode conter. Por omissão, o número de linhas é ilimitado (return 0). getQueryTimeout/setQueryTimeout - Especifica o tempo que um driver deve esperar pela execução de um STATEMENT antes de lançar a exceção SQLException. www.alvarofpinheiro.eti.br
  • 76. Java MVC/JDBC Java DataBase Connective (JDBC) * A ResultSet contém os resultados da query SQL. Métodos úteis: ● close - Liberta os recursos alocados pelo JDBC; ● getMetaDataObject - Retorna um objeto; ● ResultSetMetaData - que contém informação sobre as colunas do ResultSet; ● next - Tenta mover para próxima linha do ResultSet, se bem sucedido é devolvido true; senão, false; A primeira invocação de next posiciona o cursor na primeira linha. www.alvarofpinheiro.eti.br
  • 77. Java MVC/JDBC Java DataBase Connective (JDBC) * ● findColumn - Retorna o valor inteiro correspondente à coluna especificada por nome, os números das colunas nos resultados não mapeiam necessariamente para as mesmas colunas na base de dados; ● getXxx - Retorna o valor da coluna especificada pelo nome ou índice como um tipo Xxx do Java, retorna 0 ou null. www.alvarofpinheiro.eti.br
  • 78. Java MVC/JDBC Java DataBase Connective (JDBC) * Excepções SQL - Quase todos os métodos JDBC podem originar uma SQLException em resposta a um erro de acesso a dados. Se mais do que um erro ocorrer, eles são encadeados. As excepções SQL contêm: Descrição do erro, getMessage. O SQLState (Open Group SQL specification) identificado a excepção, getSQLState. Um código de erro específico do vendedor da base de dados, getErrorCode. Uma referência para a próxima SQLException, getNextException www.alvarofpinheiro.eti.br
  • 79. Java MVC/JDBC Java DataBase Connective (JDBC) * import java.sql.*; public class Principal { public static void main(String[] args) throws Exception { String comandoSQL; try { Connection conexao = BD.obtemConexao("127.0.0.1", "exemplo", "root", “***"); comandoSQL = "CREATE TABLE EXEMPLO COD INTEGER"; BD.executaDDL(conexao, comandoSQL); comandoSQL = “INSERT INTO EXEMPLO (COD) VALUES (1) "; BD.executaDDL(conexao, comandoSQL); comandoSQL = “SELECT * FROM EXEMPLO"; BD.executaDML(conexao, comandoSQL); } catch (Exception excecao) { System.out.print(excecao.getMessage()); } } } www.alvarofpinheiro.eti.br
  • 80. Java MVC/JDBC Java DataBase Connective (JDBC) * import java.sql.*; public class BD { public static Connection Conexao( String servidorNome, String bancoNome, String bdUsuario, String bdSenha) throws Exception { Connection cnx = null; try { String driverNome = "com.mysql.jdbc.Driver"; Class.forName(driverNome); String bdCaminho = "jdbc:mysql://" + servidorNome + "/" + bancoNome; cnx = DriverManager.getConnection(bdCaminho, bdUsuario, bdSenha); return (cnx); } catch (ClassNotFoundException e) { throw new Exception("O driver expecificado não foi encontrado"); } catch (SQLException e) { throw new Exception("Não foi possível conectar ao Banco de Dados"); } } } www.alvarofpinheiro.eti.br
  • 81. Java MVC/JDBC Java DataBase Connective (JDBC) public static void executaDDL(Connection conexao, String comandoSQL) throws SQLException { * Statement comando; try { comando = conexao.createStatement(); comando.executeUpdate(comandoSQL); comando.close(); conexao.close(); } catch(SQLException excecao) { throw (excecao); } } www.alvarofpinheiro.eti.br
  • 82. Java Outros Recursos Garbage Collection ● Quando todas as referência para um objeto são eliminadas, o objeto é marcado para ser destruído. O Garbage Collection (GC) liberta a memória utilizada pelo objeto. Não existe necessidade de intervenção do programador, mas não possui qualquer controle sobre quando o objeto é realmente destruído. * www.alvarofpinheiro.eti.br
  • 83. finalize() Java Outros Recursos * Se um objeto utilizar um recurso de acesso a base de dados, esse deve ser liberado através do método finalize(). Esse é invocado antes do objeto ser destruído. public class Classe { … public void finalize() { System.out.println(“Tchau"); } } www.alvarofpinheiro.eti.br
  • 84. Collections Java Outros Recursos * Java Collection Framework (JCF) Permite interoperabilidade entre APIs diferentes; Reduz o esforço de aprendizagem de APIs; Reduz o esforço de desenho e implementaçao de APIs; e Promove reutilização de software. Interfaces • Comparator • Iterator Classes • Collections • Arrays www.alvarofpinheiro.eti.br
  • 85. Java Outros Recursos Métodos de Collections * int size(); boolean isEmpty(); boolean contains(Object); Iterator iterator(); Object[] toArray(); boolean add(Object); boolean remove(Object); void clear(); www.alvarofpinheiro.eti.br
  • 86. Set Java Outros Recursos * Herdado de Collection; Trata-se de uma coleção de objetos não ordenados; Não permite elementos duplicados; São os mesmos métodos de Collection; A semântica é diferente, pois obriga a utilizar uma interface diferente; e é implementada por AbstractSet, HashSet, TreeSet. www.alvarofpinheiro.eti.br
  • 87. List Java Outros Recursos * Herdado de Collection; Uma coleção de objetos não ordenados; Permite elementos duplicados; e Implementada por AbstractList, ArrayList, LinkedList, Vector. Os principais métodos: Object get(int); Object set(int, Object); int indexOf(Object); int lastIndexOf(Object); void add(int, Object); Object remove(int); List subList(int, int); www.alvarofpinheiro.eti.br
  • 88. List Java Outros Recursos * ArrayList - Uma implementação sem métodos legados, baseada num array de tamanho dinâmico; LinkedList - Uma implementação baseada numa lista duplamente ligada, podendo ter melhor performance do que a ArrayList se os elementos forem frequentemente inseridos/apagados no meio da lista. Útil para queues e double-ended queues (deques); e Vector - Uma implementação baseada num array de tamanho dinâmico e com métodos legados adicionais. www.alvarofpinheiro.eti.br
  • 89. Iterator Java Outros Recursos * Representa um iterador para um ciclo; Criado por Collection.iterator(); Similar à Enumeration; Permite a operação remove() no item corrente. Principais métodos: boolean hasNext(); Object next(); void remove(); www.alvarofpinheiro.eti.br
  • 90. Java Outros Recursos Java DataBase Connective (JDBC) public static void executaDML(Connection conexao, String comandoSQL) throws SQLException { * try { Statement comando = conexao.createStatement(); ResultSet retorno = comando.executeQuery(comandoSQL); int codigo; while (retorno.next()) { codigo = retorno.getInt("COD"); System.out.println("Código: " + codigo); } retorno.close(); comando.close(); conexao.close(); } catch(SQLException excecao) { throw (excecao); } } www.alvarofpinheiro.eti.br
  • 91. Java Conceitos Gerias Java é uma linguagem de programação que usa o paradigma orientado a objetos e que foi criada na década de 90 por James Gosling da Sun Microsystems, que não gera código nativo, mas sim um bytecode que é executado por uma máquina virtual. A linguagem Java possui diversas características muito úteis para o desenvolvimento Web, as quais são: Orientação a objetos baseado no Simula67; portabilidade; APIs para rede; segurança; sintaxe semelhante a linguagem C; e desalocação de memória automática. BYTECODE é um código intermediário que serve para ser interpretado pela Máquina Virtual Java (MVJ), essa característica faz com que os os programas Java sejam independentes de sistemas operacionais. Cada opcode tem o tamanho de um byte, por isso é chamado de bytecode. * www.alvarofpinheiro.eti.br
  • 92. Java Conceitos Gerias MVJ é um programa que carrega e executa códigos Java, convertendo os bytecodes em código executável do sistema operacional instalado, sendo responsável pelo gerenciamento dos aplicativos, à medida que são executados. A arquitetura de uma MVJ permite um controle sofisticado sobre o código que está sendo executado. APPLETS são códigos que rodam dentro de uma VM incorporada ao browser do usuário, executando código baixado de um servidor HTTP remoto. O código remoto roda em uma sandbox, que protege o usuário de códigos maliciosos. O autor do applet pode aplicar um certificado para assinar digitalmente o applet como "seguro", dando a ele permissão de sair do sandbox e acessar livremente a máquina onde está rodando. * www.alvarofpinheiro.eti.br
  • 93. Java Conceitos Gerias J2SE (Java 2 Standard Edition) é uma ferramenta de desenvolvimento para a plataforma Java. Ela contém todo o ambiente necessário para a criação e execução de aplicações Java, incluindo a máquina virtual Java (JVM), o compilador Java, as APIs do Java e outras ferramentas utilitárias. J2EE (Java 2 Enterprise Edition) inclui toda a funcionalidade existente na plataforma Java SE mais todas as funcionalidades necessárias para o desenvolvimento e execução de aplicações em um ambiente corporativo, adicionando de bibliotecas que fornecem funcionalidade para implementar software Java distribuído, tolerante a falhas e multi-camada, baseada amplamente em componentes modulares executando em um servidor de aplicações. J2ME (Java 2 Micro Edition) é uma tecnologia que possibilita o desenvolvimento de software para sistemas e aplicações embarcadas, ou seja, toda aquela que roda em um dispositivo de propósito específico, desempenhando alguma tarefa que seja útil para o dispositivo. É a plataforma Java para dispositivos compactos, como celulares, PDAs, controles remotos, e uma outra gama de dispositivos. Java ME é uma coleção de APIs do Java definidas através da JCP (Java Community Proccess). * www.alvarofpinheiro.eti.br
  • 94. Java Conceitos Gerias * Os containers Java são: ● JDBC (Java Database Connectivity), utilizado no acesso a bancos de dados; ● Servlets, são utilizados para o desenvolvimento de aplicações Web com conteúdo dinâmico. Ele contém uma API que abstrai e disponibiliza os recursos do servidor Web de maneira simplificada para o programador. ● JSP (Java Server Pages), uma especialização do servlet que permite que conteúdo dinâmico seja facilmente desenvolvido. ● JTA (Java Transaction API), é uma API que padroniza o tratamento de transações dentro de uma aplicação Java. ● EJBs (Enterprise Java Beans), utilizados no desenvolvimento de componentes de software. Eles permitem que o programador se concentre nas necessidades do negócio do cliente, enquanto questões de infra-estrutura, segurança, disponibilidade e escalabilidade são responsabilidade do servidor de aplicações. ● JCA (Java Connector Architecture), é uma API que padroniza a ligação a aplicações legadas. ● JPA (Java Persistence API), é uma API que padroniza o acesso a banco de dados através de mapeamento Objeto/Relacional dos Enterprise Java Beans. www.alvarofpinheiro.eti.br
  • 95. Orientação a Objetos JAVA Java Orientado a Objetos www.alvarofpinheiro.eti.br *
  • 96. Objeto Java Orientado a Objetos * É uma abstração de um objeto do mundo real, que no mundo computacional se traduz numa estrutura de dados (propriedades ou campos) e funções (comportamentos ou métodos) associados no qual cada comportamento consiste em uma operação e cada propriedade numa característica. www.alvarofpinheiro.eti.br
  • 97. Java Orientado a Objetos Encapsulamento * Permite ocultar como as coisas funcionam. Violar o encapsulamento em programação orientada por objetos é impossível. As variáveis de instância devem ser declaradas como private. Apenas métodos de instância podem ter acesso a variáveis de instância. Assim o encapsulamento permite isolar a interface de uma classe da sua implementação interna. www.alvarofpinheiro.eti.br
  • 98. Hieráquias Java Orientado a Objetos * Os objetos são compostos por outros objetos. E os objetos podem fazer parte de outros objetos. E esta relação entre objetos é conhecida por agregação ou composição. www.alvarofpinheiro.eti.br
  • 99. Classes Java Orientado a Objetos * Uma classe é uma especificação de objetos. Uma definição de uma classe especifica as operações e atributos para todas as instâncias de uma classe. Assim uma classe descreve o tipo de um objeto e define o comportamento (operações) e estrutura (atributos) de um grupo de objetos. Reduzindo-se a complexidade utilizando classes. www.alvarofpinheiro.eti.br
  • 100. Java Orientado a Objetos Classes versus Objetos * As classes são definições estáticas que nos permitem compreender todos os objetos de uma classe. Os objetos são as entidades dinâmicas que existem no mundo real e em suas simulações. www.alvarofpinheiro.eti.br
  • 101. Herança Java Orientado a Objetos * Podem existir semelhanças entre classes distintas. Assim se deve definir as propriedades comuns (atributos, operações) entre classes numa superclasse comum. As subclasses utilizam herança para incluir as propriedades comuns entre elas. www.alvarofpinheiro.eti.br
  • 102. Polimorfismo Java Orientado a Objetos * O polimorfismo é a capacidade de um único nome poder referir objetos de classes diferentes, se relacionadas por uma superclasse comum. O polimorfismo surge quando a linguagem de programação simultaneamente suporta herança e a associação dinâmica de tipos (late binding). O polimorfismo permite que uma operação possa existir em diferentes classes. Cada operação tem um mesmo significado mas é executada de forma particular. www.alvarofpinheiro.eti.br
  • 103. Pacote Java Orientado a Objetos * Servem para agregar as classes comuns em uma estrutura única, agrupando por afinidade. www.alvarofpinheiro.eti.br
  • 104. Modificadores Java Orientado a Objetos * private Só a classe proprietária visualiza. public Todos visualizam. protected A classe proprietária e suas subclasses. package Dentro do pacote. www.alvarofpinheiro.eti.br
  • 105. Instanciamento Java Orientado a Objetos * Os objetos são criados pelo operador new. Exemplo: Classe objeto1 = new Classe(); Classe objeto2 = new Classe(); O operador ‘new’ aloca memória para o novo objeto, invoca um método especial da classe para inicialização de objetos, o construtor e retorna uma referência para o novo objeto. www.alvarofpinheiro.eti.br
  • 106. null Java Orientado a Objetos * As referências para objetos têm o valor null até serem inicializadas. É possível comparar referências de objetos a null. E pode-se apagar um objeto pela atribuição do valor null a uma referência. www.alvarofpinheiro.eti.br
  • 107. Java Orientado a Objetos Atribuição de Referências * A atribuição de uma referência a outra resulta em duas referências para o mesmo objeto. www.alvarofpinheiro.eti.br
  • 108. Java Orientado a Objetos Variáveis de Instância * As variáveis de instância são declaradas na classe. public class Classe { public String campo1; public String campo2; } As variáveis públicas de instância podem ser acessadas através do operador ‘.’ , mas viola o paradigma OO. www.alvarofpinheiro.eti.br
  • 109. Java Orientado a Objetos Variáveis de Classe * As variáveis de classe pertencem a uma classe e são comuns a todas as instâncias dessa classe. As variáveis de classe são declaradas como ‘static’ na definição da classe. public class Classe { private static String campo1; // var classe private String campo2; // var instância } www.alvarofpinheiro.eti.br
  • 110. Java Orientado a Objetos Variáveis de Classe * A inicialização de variáveis de classe podem ser na declaração. A inicialização é realizada quando a classe é carregada. public class Classe { private static String campo1 = “ex”; private String campo2; private int campo3 = 0; } www.alvarofpinheiro.eti.br
  • 111. Métodos Java Orientado a Objetos * Um método é equivalente a uma função ou subrotina no paradigma procedural. Um método apenas pode ser definido na definição de uma classe. public void mostraDetalhes() { System.out.println(“Exemplo”); } www.alvarofpinheiro.eti.br
  • 112. Java Orientado a Objetos Métodos de Classe * Os métodos de classe são partilhados por todas as instâncias. São úteis para manipular variáveis de classe. Um método de classe pode ser invocado utilizando o nome da classe ou uma referência para um objeto. www.alvarofpinheiro.eti.br
  • 113. Java Orientado a Objetos Passagem de Parâmetros * Quando um valor primitivo é passado a um método, é gerada uma cópia do valor: public void exMetodo(int arg) { } Quando um objeto é passado a um método, o argumento refere o objeto original: public void exMetodo(Classe objeto) {} www.alvarofpinheiro.eti.br
  • 114. Overloading Java Orientado a Objetos * Métodos de uma mesma classe podem ter o mesmo nome, mas os métodos devem ter diferentes assinaturas. www.alvarofpinheiro.eti.br
  • 115. Assinatura Java Orientado a Objetos * Garante a unicidade de um método na classe e é composto por: 1. nome do método; 2. quantidade de parâmetros existentes; 3. tipo de cada parâmetro; e 4. ordem desses parâmetros. O tipo de retorno de um método e os nomes dos parâmetros não fazem parte de sua assinatura. www.alvarofpinheiro.eti.br
  • 116. Construtores Java Orientado a Objetos * Servem para uma inicialização adequada, assim a classe deve fornecer construtores. O construtor é invocado automaticamente quando o objeto é criado e deve ter o mesmo nome da classe, não especifica nenhum tipo de retorno e normalmente é declarado como ‘public’. O compilador automaticamente fornece um construtor por default sem argumentos. www.alvarofpinheiro.eti.br
  • 117. Java Orientado a Objetos Definição de Construtores * public class Classe { private String campo1; private String campo2 = “exemplo2”; public Classe() { campo1 = “exemplo1"; } // construtor public Classe(String parametro1) { campo1 = parametro1; } // construtor sobrecarregado } Classe objeto1 = new Classe(); www.alvarofpinheiro.eti.br
  • 118. this Java Orientado a Objetos * Os métodos de instância recebem um argumento com o nome ‘this’, que indica o objeto corrente. www.alvarofpinheiro.eti.br
  • 119. this() Java Orientado a Objetos * Um construtor pode invocar outro através de this(). Partilha de código entre construtores. public class Classe { private String campo; public Classe() { this(“exemplo”); } public Classe(String parametro) { campo = parametro; } } www.alvarofpinheiro.eti.br
  • 120. Classes Java Orientado a Objetos www.alvarofpinheiro.eti.br
  • 121. Java Orientado a Objetos Para iniciarmos o estudo da programação Java vamos começar com o entendimento do conceito de classe. O diagrama de classes na Programação Orientada a Objetos (POO), os problemas são pensados e expressados como objetos, ao contrário da análise tradicional os quais eram em rotinas e dados, que aqui foram substituídos por métodos (comportamento) e atributos (propriedades). Assim, quando é colocado o problema de desenvolver um sistema acadêmico na análise orientada a objetos, deve-se pensar como dividir esse problema em objetos. * www.alvarofpinheiro.eti.br
  • 122. Java Orientado a Objetos Assim teríamos Alunos, Administradores, Professores, Cursos, Turmas, etc... E a melhor maneira de conceituar estes termos é considerar um objeto do mundo real e mostrar como podemos representá-lo em termos conceitos em POO. Assim, um objeto é um conceito que usamos para representar uma entidade do mundo real. Exemplificando, um Aluno possui nome, data de nascimento, identidade, etc... E além dessas características (propriedades), possuem ações (métodos) como freqüentar as aulas, fazer as avaliações, etc... Em termos de POO para podermos tratar os objetos temos que criar classes. Assim, uma classe representa um conjunto de objetos que possuem comportamentos e características comuns. * www.alvarofpinheiro.eti.br
  • 123. Java Orientado a Objetos Na UML em primeiro lugar denomina-se uma classe e recomenda-se nomeá-la capitalizando-a e deixando no singular. E em segundo lugar denominam-se as propriedades, informações específicas relacionadas a uma classe de objeto, isto é características dos objetos que as classes representam. Em terceira e última parte, métodos, que são ações que os objetos de uma classe podem realizar. Assim tem-se um modelo para instanciar quantos objetos forem necessários. Dessa forma os objetos instanciados possuirão todas as características e comportamentos definidos pela classe. Então as classes especificam a estrutura (propriedades) e os comportamentos (operações) dos objetos, que são instâncias das classes. * www.alvarofpinheiro.eti.br
  • 124. Java Orientado a Objetos Geralmente em um sistema de médio porte serão identificadas diversas classes que compõem o sistema. Neste contexto a UML surgiu como uma proposta de ser uma linguagem para modelagem de dados que usava diversos artefatos para representar o modelo de negócio; um destes artefatos é o diagrama de classes. * www.alvarofpinheiro.eti.br
  • 125. Java Orientado a Objetos Os diagramas de classes registram atributos e operações de uma classe e as restrições de como os objetos podem ser conectados, descrevendo também os tipos de objetos no sistema e os relacionamentos entre eles e esse podem ser associações e abstrações. Para poder representar a visibilidade dos atributos e operações, a UML usa os seguintes símbolos: + público, visível em qualquer classe; - privado, visível somente dentro da classe; # protegido, na classe e suas subclasses. O relacionamento entre classes retrata as relações entre os objetos. Exemplo: um professor ministra uma disciplina para alunos numa sala. A UML reconhece três tipos mais importantes de relações: dependência, associação e generalização ou herança. Geralmente as classes não estão isoladas (coesas) e se relacionam entre si (acoplamento). O relacionamento e a comunicação entre as classes se definem em 3 tipos: Associações que podem ser de Agregação ou Composição; Generalização ou herança; e Dependências. * www.alvarofpinheiro.eti.br
  • 126. Java Orientado a Objetos www.alvarofpinheiro.eti.b*r
  • 127. Java Orientado a Objetos As associações são relacionamentos estruturais entre instâncias e especificam que objetos de uma classe estão ligados a objetos de outras classes, podendo ser unária, binária, etc... As associações podem existir entre classes ou entre objetos. Uma associação entre a classe Professor e a classe Disciplina (um professor ministra uma disciplina) significa que uma instância de Professor (um professor específico) vai ter uma associação com uma instância de uma Disciplina. Esta relação significa que as instâncias das classes são conectadas, seja fisicamente ou conceitualmente. Dependências são relacionamentos de utilização no qual uma mudança na especificação de um elemento pode alterar a especificação do elemento dependente. A dependência entre classes indica que os objetos de uma classe usam serviços dos objetos de outra classe. Generalização ou herança, que pode ser simples ou múltipla (composta), serve para relacionar um elemento mais geral e um mais específico, onde o elemento mais específico herda as propriedades e métodos do elemento mais geral. Como a relação de dependência, ela existe só entre as classes. Um objeto particular não é um caso geral de outro objeto, apenas classes podem receber esse conceito. www.alvarofpinheiro.eti.br *
  • 128. Java Orientado a Objetos Agregação é um tipo de associação (é parte de ou todo-parte) onde o objeto parte é um atributo do todo, onde o objeto parte somente são criados se o todo ao qual estão agregados seja criado. Pedidos é composto por itens de pedidos. Composição é o relacionamento entre um elemento (o todo) e outros elementos (as partes) onde as partes só podem pertencer ao todo e são criadas e destruídas com ele. O diagrama de classes lista todos os conceitos do domínio que serão implementados no sistema e as relações entre os conceitos. Ele é muito importante, pois define a estrutura do sistema a desenvolver. O diagrama de classes é conseqüência do prévio levantamento de requisitos, definição de casos de usos e classes. Como exemplo tem os passos de elicitação de requisitos com os stakeholders do sistema a ser desenvolvido, usando a técnica de entrevista com os administradores, professores, etc... que a partir desses os objetos do sistema são definidos: Alunos, Professores, Turmas, Cursos, etc... Definição dos atores do sistema: aluno, professor, administrador, etc... Definição e detalhamento dos casos de uso: Matricular Aluno, Pagar Matrícula, etc... Definição das classes: alunos, professor, etc... * www.alvarofpinheiro.eti.br
  • 129. Java Orientado a Objetos Atributo representa uma propriedade que todos os objetos da classe têm, porém cada objeto terá valores particulares para seus atributos. A UML, o nome de um atributo é um texto que deve capitalizar todas as primeiras letras de cada palavra no nome menos a primeira palavra. Todos os métodos têm que respeitar exatamente a assinatura que é composta pelo nome, número de parâmetros, tipos de dados e ordem. Um método não pode acrescentar ou cortar um parâmetro. Para mandar a mensagem corretamente, devesse saber qual é a classe do objeto, já que cada classe tendo método com assinatura diferente. * www.alvarofpinheiro.eti.br
  • 130. Java Orientado a Objetos Entendido o conceito de classe, segue uma codificação básica em Java. * /** * Classe de domínio ClassPessoa * * @author (Álvaro Pinheiro) * @version (01/03/2011) */ public class ClassPessoa { // variáveis de instância private int codigo; private String nome; /** * Construtor da classe ClassPessoa */ public ClassPessoa() { // inicialização das variáveis de instância codigo = 0; nome = ""; } /** * Método para atribuir valor ao campo código * * @parampcodigo * @return codigo */ public void setCodigo(int pCodigo) { codigo = pCodigo; } /** * Método para retornar valor do campo código * * @paramnulo * @return codigo */ public int getCodigo() { return codigo; } /** * Método para atribuir valor ao campo nome * * @parampnome * @return nome */ public void setNome(String pNome) nome = pNome; } /** * Método para retornar valor do campo nome * * @paramnulo * @return nome */ public String getNome() { return nome; } } www.alvarofpinheiro.eti.br
  • 131. Objetos Java Orientado a Objetos www.alvarofpinheiro.eti.br
  • 132. Java Orientado a Objetos Agora que sabemos o conceito e como codificar uma classe, vamos entender sobre objeto. Segundo os pais da UML (Rumbaugh, Jacobson e Booch) um objeto é uma instância de uma classe, isto é, trata-se de uma cópia da classe na memória em tempo de execução (runtime), sendo assim, um elemento específico que possui valores (estados) nos atributos (campos). A UML representa um objeto usando um retângulo que o representa, onde o nome da instância do objeto é seguido de dois pontos, seguido do nome da classe, com essa formação sublinhada. * www.alvarofpinheiro.eti.br
  • 133. Java Orientado a Objetos * /** * Classe de domínio ClassCliente * * @author (Álvaro Pinheiro) * @version (01/03/2011) */ public class ClassCliente { /** * Construtor da classe ClassCliente */ public ClassCliente() { } /** * Método da classe cliente que exemplifica o instân- * ciamento de dois objetos da classe Pessoa */ public void exemplo() { ClassPessoa objCliente1 = new ClassPessoa(); ClassPessoa objCliente2 = new ClassPessoa(); objCliente1.setCodigo(1); objCliente1.setNome("abc"); objCliente2.setCodigo(2); objCliente2.setNome("xyz"); } } www.alvarofpinheiro.eti.br
  • 134. Métodos Java Orientado a Objetos www.alvarofpinheiro.eti.br
  • 135. Java Orientado a Objetos * Vamos aprender agora a chamar as classes e os métodos escritos em Java a partir de um ponto principal. /** * Classe Principal: * */ class Principal { /** * Método que será chamado pelo método principal */ public void exemplo() { System.out.println("Método chamado!"); } /** * Método principal */ public static void main(String[] args) { Principal principal = new Principal(); principal.exemplo(); } } Nessa classe principal temos um método principal "main" que por default recebe um array de caracteres que poderá ser preenchido quando o programa principal for carregado. Ao carregá-lo uma mensagem irá aparecer na tela "Método chamado!" pois quando um objeto da classe é instanciada o método exemplo é invocado. www.alvarofpinheiro.eti.br
  • 136. Pacotes Java Orientado a Objetos www.alvarofpinheiro.eti.br
  • 137. Java Orientado a Objetos Um pacote em Java é a forma que se tem para permitir a organização de classes em módulos, isto é, colocar todas as classes de funcionalidades semelhantes e/ou equivalentes em um mesmo lugar físico, chamado de package. Os pacotes Java podem ser armazenados em arquivos compactados denominados arquivos JAR, permitindo assim que classes com mesmas funcionalidades possam se utilizadas de um maneira mais rápida e fácil, já que todas as classes estão agrupadas em um mesmo arquivo. Outra vantagem do uso de pacotes é a utilização do modificador package que disponibiliza para todas as propriedades e comportamentos das classes agrupadas a sua visibilidade. Além de normalmente os pacotes serem utilizados para conter Classes, Interfaces e Tipos Enumerados - agrupando-os pelas suas similidades. * www.alvarofpinheiro.eti.br
  • 138. Java Orientado a Objetos Para se usar um pacote em uma classe Java deve-se importá-lo e isso é feito com a seguinte declaração import javax.swing.*; Com essa declaração é importado para a classe corrente todas as classes que estão dentro do pacote javax.swing. Mas, se for desejado pode-se importar somente a classe que se quer usar de um pacote específico, como no exemplo import java.awt.event.ActionEvent; Para se criar um arquivo JAR se faz necessário utilizar um utilitário de linha de comando que se segue JAR arquivo.class meupacote.jar, esse comando compacta todos os arquivos .class dentro do arquivo JAR denominhado meuPacote.jar. Um característica importante na criação dos pacotes é a utilização de uma hierarquia baseada na separação dos nomes por ponto (.). Apesar de pacotes inferiores na hierarquia de nomeação são muitas vezes referidos como "subpacotes" dos pacotes correspondentes superior na hierarquia, não há nenhuma relação semântica entre pacotes. * www.alvarofpinheiro.eti.br
  • 139. Java Orientado a Objetos O Java Language Specification estabelece pacote de convenções de nomenclatura para evitar a possibilidade de dois pacotes publicado com o mesmo nome. As convenções de nomenclatura descrevem como criar nomes de pacote exclusivo, para que os pacotes que são amplamente distribuídos. Isso permite que os pacotes sejam separadamente, de forma fácil e automaticamente instalado e catalogadas. Segue o Core dos pacotes no Java SE 6: ● java.lang - Funcionalidades básicas da língua e tipos fundamentais; ● java.util - Utilitário; ● java.io - Operações de entrada e saída; ● java.math - Funções matemática; ● java.net - Operações de rede; ● java.security - Geração de chave de criptografia e descriptografia; ● java.sql - Drivers JDBC para acessar bancos de dados; ● java.awt - GUI nativa; ● javax.swing - GUI genérica; ● java.applet - Classes para a criação de applets; * www.alvarofpinheiro.eti.br
  • 140. Java Orientado a Objetos Observe o exemplo abaixo, temos a importação do pacote javax.swing que permite entro outras classes, usar a JOptionPane, que disponibiliza os métodos showMessageDialog(null, "texto", "título", ícone) para mostrar uma mensagem na tela e o showInputDialog("texto") para entrar com um valor. * www.alvarofpinheiro.eti.br
  • 141. Java Orientado a Objetos * /** * Classe Principal com pacote swing: * */ import javax.swing.*; class Principal { /** * Método que será chamado pelo método principal */ public void exemplo() { System.out.println("Método chamado!"); String sVar1 = JOptionPane.showInputDialog("Entre com um número:"); String sVar2 = JOptionPane.showInputDialog("Entre com outro número:"); int nVar3 = Integer.parseInt(sVar1); int nVar4 = Integer.parseInt(sVar2); int nVar5 = nVar3 + nVar4; JOptionPane.showMessageDialog(null, "A soma é " + nVar5, "Operação", JOptionPane.PLAIN_MESSAGE); } /** * Método principal */ public static void main(String[] args) { Principal principal = new Principal(); principal.exemplo(); } } www.alvarofpinheiro.eti.br
  • 142. Java Orientado a Objetos Relacionamentos www.alvarofpinheiro.eti.br
  • 143. Java Orientado a Objetos * O que vamos estudar agora é como em Java se codifica os relacionamentos, isto é as associações e heranças. Também iremos codificar os três tipos de classes: Concreta, Abstrata e Interface. Observe o diagrama de classes abaixo: www.alvarofpinheiro.eti.br
  • 144. Java Orientado a Objetos Temos a seguinte modelagem. A classe principal está associada a classe cliente, esta por sua vez está associada as classes departamento e função. A classe função estende a classe abstrata cargo. A classe cliente é uma subclasse da classe pessoa-física que também é pai da classe filha fornecedor. Ambas classes, cliente e fornecedor são concretas, assim permitindo que se instâncie objetos dessa classes. Já as classes pessoa-física e pessoa-jurídica são abstratas, assim sendo possuem métodos não implementados e por consequencia não permitindo que se instancie objetos diretamente dessas classes. Essas duas últimas classes são filhas da classe concreta pessoa que estende a classe abstrata configurações-básica e implementa (realiza) as interface configurações-especiais e configurações-avançadas. * www.alvarofpinheiro.eti.br
  • 145. Polimorfismo Java Orientado a Objetos www.alvarofpinheiro.eti.br
  • 146. Java Orientado a Objetos É a capacidade de classes mais abstratas possuírem comportamentos diferentes das classes concretas, isto é, duas ou mais classes derivadas de uma mesma superclasse podem invocar métodos que têm a mesma identificação (assinatura) mas comportamentos distintos, especializados para uma das classes derivadas. A decisão sobre qual o método que deve ser selecionado, de acordo com o tipo da classe derivada, é tomada em tempo de execução, através do mecanismo de ligação tardia. Mas para ser considerado polimorfismo, é necessário que os métodos tenham exatamente a mesma identificação, quer dizer, o mesmo nome de método, sendo utilizado o mecanismo de redefinição de métodos, isto é, sobrescrita dos métodos. Override ou Sobreescrita, a redefinição ocorre quando um método cuja assinatura já tenha sido especificada recebe uma nova definição ou seja, uma nova implementação em uma classe derivada. O mecanismo de redefinição, juntamante com o conceito de ligação tardia, é a chave para a utilização do polimorfismo. É importante observar que, quando polimorfismo está sendo utilizado, o comportamento que será adotado por um método só será definido durante a execução. * www.alvarofpinheiro.eti.br
  • 147. Java Orientado a Objetos Temos a seguinte modelagem. A classe principal está associada a classe cliente, esta por sua vez está associada as classes departamento e função. A classe função estende a classe abstrata cargo. A classe cliente é uma subclasse da classe pessoa-física que também é pai da classe filha fornecedor. Ambas classes, cliente e fornecedor são concretas, assim permitindo que se instâncie objetos dessa classes. Já as classes pessoa-física e pessoa-jurídica são abstratas, assim sendo possuem métodos não implementados e por consequencia não permitindo que se instancie objetos diretamente dessas classes. Essas duas últimas classes são filhas da classe concreta pessoa que estende a classe abstrata configurações-básica e implementa (realiza) as interface configurações-especiais e configurações-avançadas. * www.alvarofpinheiro.eti.br
  • 148. Java Orientado a Objetos Overload ou Sobrecarga, um método aplicado a um objeto é selecionado para execução através da sua assinatura e da verificação a qual classe o objeto pertence. Dois ou mais métodos de uma mesma classe podem ter o mesmo nome, desde que suas listas de parâmetros sejam diferentes, constituindo assim uma assinatura diferente. Tal situação não gera conflito pois o compilador é capaz de detectar qual método deve ser escolhido a partir da análise dos tipos de argumentos do método. Early Binding ou Ligação Prematura, quando um método é invocado durante a compilação do programa, o mecanismo de ligação é prematura. Late Binding ou Ligação Tardia, quando a definição do método que será efetivamente invocado só ocorre durante a execução do programa, o mecanismo de ligação usado é o de tardia também conhecido pelos termos dynamic binding ou run-time binding. Em Java, todas as determinações de métodos a executar ocorrem através de ligação tardia exceto em dois casos: métodos declarados como final não podem ser redefinidos e portanto não são passíveis de invocação polimórfica da parte de seus descendentes e métodos declarados como private são implicitamente finais. * www.alvarofpinheiro.eti.br
  • 149. Java Orientado a Objetos Para melhor entender o polimorfismo, veja o diagrama abaixo e sua implementação. * www.alvarofpinheiro.eti.br
  • 150. Java Orientado a Objetos * public interface IPrincipal { void verificaAcesso(); boolean verificaCpf(String pCpf); } public abstract class ClsSecundaria implements IPrincipal { public abstract void verificaAcesso(); public boolean verificaCpf(String pCpf) { if (true) { return true; } else { return false; } } } www.alvarofpinheiro.eti.br
  • 151. Java Orientado a Objetos * public class ClsPessoa extends ClsSecundaria { private String cpf; private String nome; public ClsPessoa() { cpf = ""; nome = ""; } public ClsPessoa(String pCpf) // exemplo de overload (sobrecarga) { cpf = pCpf; nome = ""; } public ClsPessoa(String pCpf, String pNome) // exemplo de overload (sobrecarga) { cpf = pCpf; nome = pNome; } public void verificaAcesso() { System.out.print("Acesso tipo 1"); } } www.alvarofpinheiro.eti.br
  • 152. Java Orientado a Objetos * public interface IPrincipal { void verificaAcesso(); boolean verificaCpf(String pCpf); } public abstract class ClsSecundaria implements IPrincipal { public abstract void verificaAcesso(); public boolean verificaCpf(String pCpf) { if (true) { return true; } else { return false; } } } www.alvarofpinheiro.eti.br
  • 153. Java Orientado a Objetos * public class ClsPessoaJuridica extends ClsPessoa { public ClsPessoaJuridica() { } } public class ClsPessoaFisica extends ClsPessoa { public ClsPessoaFisica() { } public void verificaAcesso() // exemplo de override (sobreescrita) { System.out.print("Acesso tipo 2"); } } www.alvarofpinheiro.eti.br
  • 154. Java Orientado a Objetos * public class ClsFornecedor extends ClsPessoaJuridica { public ClsFornecedor() { } } public class ClsCliente extends ClsPessoaFisica { public ClsCliente() { } // exemplo de herança e encapsulamento } public class ClsTecnico extends ClsPessoaFisica { public ClsTecnico() { } public void verificaAcesso() // exemplo de override (sobreescrita) { System.out.print("Acesso tipo 3"); } public void verificaAcesso(int p1) // exemplo de overload (sobrecarga) { System.out.print("Acesso tipo 4"); } } www.alvarofpinheiro.eti.br
  • 155. Java Orientado a Objetos * public class ClsPrincipal { public ClsPrincipal() { } public static void main(String Args[]) { ClsFornecedor objFornecedor = new ClsFornecedor(); ClsCliente objCliente = new ClsCliente(); ClsTecnico objTecnico = new ClsTecnico(); objFornecedor.verificaAcesso(); // executa System.out.print("Acesso tipo 1") objCliente.verificaAcesso(); // executa System.out.print("Acesso tipo 2") objTecnico.verificaAcesso(); // executa System.out.print("Acesso tipo 3") objTecnico.verificaAcesso(1); // executa System.out.print("Acesso tipo 4") } } www.alvarofpinheiro.eti.br
  • 156. Super Java Orientado a Objetos www.alvarofpinheiro.eti.br
  • 157. Java Orientado a Objetos É um recurso para se invocar um construtor da classe pai. A palavra super disponibiliza o acesso a partes da classe pai a partir da classe filha, e é útil no polimorfismo da sobreposição de métodos. Veja o exemplo a seguir. * public class ClsPessoa { public ClsPessoa() {} // construtor public void verificaAcesso() { System.out.print("Acesso tipo 1"); } public void verificaAcesso(String pUsuario, String pSenha) { System.out.print("Acesso tipo especial"); } } public class ClsPessoaJuridica extends ClsPessoa { public ClsPessoaJuridica() {} // construtor // herda verificaAcesso do pai sem sobreescrever executando Acesso tipo 1 } www.alvarofpinheiro.eti.br
  • 158. Java Orientado a Objetos * public class ClsPessoaFisica extends ClsPessoa { public ClsPessoaFisica() {} // construtor public void verificaAcesso() { System.out.print("Acesso tipo 2"); // sobreescreve o tipo de acesso do pai (override) } public void verificaAcesso(String p1) { super.verificaAcesso(); // executa System.out.print("Acesso tipo 1") da classe pai } } public class ClsTecnico extends ClsPessoaFisica { public ClsTecnico() {} // construtor public void verificaAcesso(int p1) { System.out.print("Acesso tipo 3"); // exemplo de sobreescrita (override) } public void verificaAcesso(int p1, int p2) { System.out.print("Acesso tipo 4"); // exemplo de sobrecarga (overload) } } www.alvarofpinheiro.eti.br
  • 159. Java Orientado a Objetos * public class ClsPrincipal { public ClsPrincipal() {} // construtor public static void main(String Args[]) { ClsTecnico objTecnico = new ClsTecnico(); objTecnico.verificaAcesso("x"); // executa System.out.print("Acesso tipo 1") objTecnico.verificaAcesso(); // executa System.out.print("Acesso tipo 2") objTecnico.verificaAcesso(1); // executa System.out.print("Acesso tipo 3") objTecnico.verificaAcesso(1,2); // executa System.out.print("Acesso tipo 4") objTecnico.verificaAcesso("x","y"); // executa System.out.print("Acesso tipo especial") } } www.alvarofpinheiro.eti.br
  • 160. Tratamento de Exceções JAVA Java Orientado a Objetos www.alvarofpinheiro.eti.br *
  • 161. Exceções Java Orientado a Objetos Permitem tratar (“catch”) de forma agradável os erros que podem acontecer durante a execução de um programa; Permitem especificam diferentes formas de tratamento de exceções distintas; Oferecem uma forma padronizada de levantar (“throw”) exceções; Permitem representar como objetos os erros de um programa que podem ser recuperados (“exceptions”); e Permitem criar uma hierarquia extensível de classes de exceções para um tratamento de erros preciso. * www.alvarofpinheiro.eti.br
  • 162. Java Orientado a Objetos Tipos de Exceções * I/O (teclado/ floppy / disco / entrada de dados); Rede (internet, LAN); Casting; Desreferenciação de objectos; Matemática; Índice de array (colecção fora dos limites); Falta de memória; Crash na Java Virtual Machine; e Classes Java requeridas pelo programa corruptas. www.alvarofpinheiro.eti.br
  • 163. Java Orientado a Objetos Hierarquia de Exceções * java.lang.Throwable Error ThreadDeath OutOfMemoryError VirtualMachineError Exception AWTException IOException FileNotFoundException MalformedURLException RemoteException SocketException RuntimeException ArithmeticException ClassCastException IllegalArgumentException IndexOutOfBoundsException NullPointerException UnsupportedOperationException www.alvarofpinheiro.eti.br
  • 164. Java Orientado a Objetos checked versus unchecked * checked - Podem ter sido causadas por algo fora do controle do nosso programa; Devem ser tratadas pelo nosso código, senão o programa não compila. unchecked (runtime) - Poderiam ter sido evitadas se fossem devidamente analisadas e tratadas no código; Não precisam de ser tratadas, mas farão com que o programa crash no caso de ocorrerem em runtime. www.alvarofpinheiro.eti.br
  • 165. Java Orientado a Objetos Exceções em runtime * Podem ser geradas em qualquer parte do código pelo programador e não precisam de ser tratadas (handled) pelas chamadas que as apanham. public Object metodo(int param) { // verificar se parâmetro é válido if (param < 0) throw new IndexOutOfBoundsException(“param < 0!”); return dados[index]; } www.alvarofpinheiro.eti.br
  • 166. Java Orientado a Objetos Exceções checked * No cabeçalho do método devem ser especificados os tipos de exceções que ele pode originar (“throws”); Quem invocar um método que possa originar exceções deve tratá-las ou então passar essas exceções a quem o invocou. public void metodo(String param) throws IOException { if (condição) throw new IOException(“mensagem”); } www.alvarofpinheiro.eti.br
  • 167. Java Orientado a Objetos Exceções sintaxe * try { // bloco de comandos } catch (Exception objeto) { // tratamento da exceção } finally { // bloco de comandos opcional no final do tratamento } www.alvarofpinheiro.eti.br
  • 168. Java Orientado a Objetos Multiplas Exceções sintaxe * try { // bloco de comandos } catch (IndexOutOfBoundsException ioobe) { // tratamento de exceção } catch (IOException ioe) { // tratamento de exceção } catch (Exception e) { // tratamento de exceção } finally { // tratamento de finalização } www.alvarofpinheiro.eti.br
  • 169. Java Orientado a Objetos Exemplo de Aplicação com POO / MVC / JDBC JAVA www.alvarofpinheiro.eti.br *
  • 170. Java Orientado a Objetos PACOTES (CAMADAS) www.alvarofpinheiro.eti.br *
  • 171. Java Orientado a Objetos www.alvarofpinheiro.eti.*br
  • 172. Java Orientado a Objetos PACOTE DEFAULT (PRINCIPAL) www.alvarofpinheiro.eti.br *
  • 173. Java Orientado a Objetos * import Visual.Pessoa; public class Principal { public static void main(String[] args) { Visual.Pessoa pessoa = new Pessoa(); pessoa.setVisible(true); } } www.alvarofpinheiro.eti.br
  • 174. Java Orientado a Objetos PACOTE VISUAL (VIEW) www.alvarofpinheiro.eti.br *
  • 175. Java Orientado a Objetos www.alvarofpinheiro.eti.b*r
  • 176. Java Orientado a Objetos * package Visual; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; import javax.swing.SwingUtilities; import javax.swing.UIManager; import org.dyno.visual.swing.layouts.Constraints; import org.dyno.visual.swing.layouts.GroupLayout; import org.dyno.visual.swing.layouts.Leading; public class Pessoa extends JFrame { private static final long serialVersionUID = 1L; private JLabel jLabel0; private JLabel jLabel1; private JLabel jLabel2; private JTextField jTextField0; private JTextField jTextField1; private JButton jButton0; private JButton jButton1; private JButton jButton2; private JButton jButton3; ... www.alvarofpinheiro.eti.br
  • 177. Java Orientado a Objetos * … public Pessoa() { initComponents(); } private void initComponents() { setTitle("Pessoa"); setLayout(new GroupLayout()); add(getJLabel0(), new Constraints(new Leading(12, 12, 12), new Leading(12, 12, 12))); add(getJLabel1(), new Constraints(new Leading(12, 12, 12), new Leading(43, 10, 10))); add(getJButton0(), new Constraints(new Leading(12, 12, 12), new Leading(84, 10, 10))); add(getJButton2(), new Constraints(new Leading(87, 12, 12), new Leading(84, 12, 12))); add(getJTextField0(), new Constraints(new Leading(55, 47, 12, 12), new Leading(12, 12, 12))); add(getJButton1(), new Constraints(new Leading(108, 12, 12), new Leading(9, 12, 12))); add(getJLabel2(), new Constraints(new Leading(12, 12, 12), new Leading(157, 10, 10))); add(getJButton3(), new Constraints(new Leading(168, 10, 10), new Leading(84, 12, 12))); add(getJTextField1(), new Constraints(new Leading(55, 194, 12, 12), new Leading(44, 12, 12))); setSize(381, 201); } … www.alvarofpinheiro.eti.br
  • 178. Java Orientado a Objetos * … private JButton getJButton0() { if (jButton0 == null) { jButton0 = new JButton(); jButton0.setText("Incluir"); jButton0.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent event) { jButton0MouseMouseClicked(event); } }); } return jButton0; } private JButton getJButton1() { if (jButton1 == null) { jButton1 = new JButton(); jButton1.setText("Consultar"); jButton1.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent event) { jButton1MouseMouseClicked(event); } }); } return jButton1; } … www.alvarofpinheiro.eti.br
  • 179. Java Orientado a Objetos * … private JButton getJButton2() { if (jButton2 == null) { jButton2 = new JButton(); jButton2.setText("Alterar"); jButton2.setEnabled(false); jButton2.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent event) { jButton2MouseMouseClicked(event); } }); } return jButton2; } private JButton getJButton3() { if (jButton3 == null) { jButton3 = new JButton(); jButton3.setText("Excluir"); jButton3.setEnabled(false); jButton3.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent event) { jButton3MouseMouseClicked(event); } }); } return jButton3; } … www.alvarofpinheiro.eti.br
  • 180. Java Orientado a Objetos * … private JLabel getJLabel0() { if (jLabel0 == null) { jLabel0 = new JLabel(); jLabel0.setText("Código"); } return jLabel0; } private JLabel getJLabel1() { if (jLabel1 == null) { jLabel1 = new JLabel(); jLabel1.setText("Nome"); } return jLabel1; } private JLabel getJLabel2() { if (jLabel2 == null) { jLabel2 = new JLabel(); jLabel2.setText("Mensagem"); } return jLabel2; } … www.alvarofpinheiro.eti.br
  • 181. Java Orientado a Objetos * … private JTextField getJTextField0() { if (jTextField0 == null) { jTextField0 = new JTextField(); } return jTextField0; } private JTextField getJTextField1() { if (jTextField1 == null) { jTextField1 = new JTextField(); } return jTextField1; } … www.alvarofpinheiro.eti.br
  • 182. Java Orientado a Objetos * … public static void main(String[] args) { installLnF(); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { Pessoa frame = new Pessoa(); frame.setDefaultCloseOperation(Pessoa.EXIT_ON_CLOSE); frame.setTitle("Pessoa"); frame.getContentPane().setPreferredSize(frame.getSize()); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } … www.alvarofpinheiro.eti.br
  • 183. Java Orientado a Objetos * … private void inicializarTela() { jTextField0.setText(""); jTextField1.setText(""); jButton2.setEnabled(false); jButton3.setEnabled(false); } private void jButton0MouseMouseClicked(MouseEvent event) { try { Modelo.Pessoa pessoa = new Modelo.Pessoa(); pessoa.setCodigo(Integer.parseInt(jTextField0.getText())); pessoa.setNome(jTextField1.getText()); Controle.Pessoa.validarInclusao(pessoa); jLabel2.setText("Inclusão realizada com sucesso!"); inicializarTela(); } catch (Exception excecao) { jLabel2.setText(excecao.getMessage()); } } private void jButton1MouseMouseClicked(MouseEvent event) { try { jTextField1.setText(Controle.Pessoa.validarCodigo(jTextField0.getText())); jButton2.setEnabled(true); jButton3.setEnabled(true); } catch (Exception excecao) { jLabel2.setText(excecao.getMessage()); } } … www.alvarofpinheiro.eti.br
  • 184. Java Orientado a Objetos * … private void jButton2MouseMouseClicked(MouseEvent event) { try { Modelo.Pessoa pessoa = new Modelo.Pessoa(); pessoa.setCodigo(Integer.parseInt(jTextField0.getText())); pessoa.setNome(jTextField1.getText()); Controle.Pessoa.validarAlteracao(pessoa); jLabel2.setText("Alteração efetuada com sucesso!"); inicializarTela(); } catch (Exception excecao) { jLabel2.setText(excecao.getMessage()); } } private void jButton3MouseMouseClicked(MouseEvent event) { try { Controle.Pessoa.validarExclusao(jTextField0.getText()); jLabel2.setText("Exclusão efetuada com sucesso!"); inicializarTela(); } catch (Exception excecao) { jLabel2.setText(excecao.getMessage()); } } } www.alvarofpinheiro.eti.br
  • 185. Java Orientado a Objetos PACOTE MODELO (MODEL) www.alvarofpinheiro.eti.br *
  • 186. Java Orientado a Objetos www.alvarofpinheiro.eti.b*r
  • 187. Java Orientado a Objetos * package Modelo; public class Pessoa { private int codigo; private String nome; public void setCodigo(int codigo) { this.codigo = codigo; } public int getCodigo() { return codigo; } public void setNome(String nome) { this.nome = nome; } public String getNome() { return nome; } } www.alvarofpinheiro.eti.br
  • 188. Java Orientado a Objetos PACOTE CONTROLE (CONTROL) www.alvarofpinheiro.eti.br *
  • 189. Java Orientado a Objetos * package Controle; public class Pessoa { public static String validarCodigo(String codigo) throws Exception { try { if (codigo.isEmpty()) { throw new Exception("Código é de preenchimento obrigatório!"); } else { int aux = 0; try { aux = Integer.parseInt(codigo); } catch (Exception excecao) { throw new Exception("Formato inválido"); } if ((aux<1) || (aux>100)) { throw new Exception("Código válido entre 0 e 100!"); } else { return (Dado.Pessoa.realizarConsulta(aux)); } } } catch (Exception excecao) { throw (excecao); } } ... www.alvarofpinheiro.eti.br
  • 190. Java Orientado a Objetos * ... public static void validarInclusao(Modelo.Pessoa pessoa) throws Exception { try { if ((pessoa.getCodigo()<1) || (pessoa.getCodigo()>100)) { throw new Exception("Código válido entre 0 e 100!"); } else { if (pessoa.getNome().isEmpty()) { throw new Exception("Nome é de preenchimento obrigatório!"); } } Dado.Pessoa.realizarInclusao(pessoa); } catch (Exception excecao) { throw (excecao); } } ... www.alvarofpinheiro.eti.br
  • 191. Java Orientado a Objetos * ... public static void validarAlteracao(Modelo.Pessoa pessoa) throws Exception { try { if ((pessoa.getCodigo()<1) || (pessoa.getCodigo()>100)) { throw new Exception("Código válido entre 0 e 100!"); } else { if (pessoa.getNome().isEmpty()) { throw new Exception("Nome é de preenchimento obrigatório!"); } } Dado.Pessoa.realizarAlteracao(pessoa); } catch (Exception excecao) { throw (excecao); } } ... www.alvarofpinheiro.eti.br
  • 192. Java Orientado a Objetos * ... public static void validarExclusao(String codigo) throws Exception { try { if (codigo.isEmpty()) { throw new Exception("Código é de preenchimento obrigatório!"); } else { try { int aux = Integer.parseInt(codigo); if ((aux<1) || (aux>100)) { throw new Exception("Código válido entre 0 e 100!"); } else { Dado.Pessoa.realizarExclusao(aux); } } catch (Exception excecao) { throw new Exception("Formato inválido"); } } } catch (Exception excecao) { throw (excecao); } } } www.alvarofpinheiro.eti.br
  • 193. Java Orientado a Objetos PACOTE DADOS (PERSISTÊNCIA) www.alvarofpinheiro.eti.br *
  • 194. Java Orientado a Objetos * package Dado; import java.sql.*; public class Pessoa { public static String realizarConsulta(int codigo) throws Exception { String aux = ""; try { Class.forName("com.mysql.jdbc.Driver"); String bd = "jdbc:mysql://localhost/exemplo"; Connection conexao = DriverManager.getConnection(bd, "root", “******"); Statement comando = conexao.createStatement(); ResultSet retorno = comando.executeQuery("SELECT VC_PES_NOME FROM PESSOA WHERE NU_PES_CODIGO = " + codigo); boolean bExiste = true; while (retorno.next()) { aux = retorno.getString("VC_PES_NOME"); } if ((aux.isEmpty()) || (aux.equals(""))) { bExiste = false; } retorno.close(); comando.close(); conexao.close(); if (!bExiste) { throw new Exception("Código não cadastrado!"); } } catch (Exception excecao) { throw (excecao); } return (aux); } ... www.alvarofpinheiro.eti.br
  • 195. Java Orientado a Objetos * ... public static void realizarInclusao(Modelo.Pessoa pessoa) throws Exception { try { Class.forName("com.mysql.jdbc.Driver"); String bd = "jdbc:mysql://localhost/exemplo"; Connection conexao = DriverManager.getConnection(bd, "root", “******"); Statement comando = conexao.createStatement(); comando.executeUpdate("INSERT INTO PESSOA (NU_PES_CODIGO, VC_PES_NOME) VALUES ("+pessoa.getCodigo()+",'"+pessoa.getNome()+"')"); comando.close(); conexao.close(); } catch (Exception excecao) { throw (excecao); } } ... www.alvarofpinheiro.eti.br
  • 196. Java Orientado a Objetos * ... public static void realizarAlteracao(Modelo.Pessoa pessoa) throws Exception { try { Class.forName("com.mysql.jdbc.Driver"); String bd = "jdbc:mysql://localhost/exemplo"; Connection conexao = DriverManager.getConnection(bd, "root", “******"); Statement comando = conexao.createStatement(); comando.executeUpdate("UPDATE PESSOA SET VC_PES_NOME = '"+ pessoa.getNome() +"' WHERE NU_PES_CODIGO = "+pessoa.getCodigo()); comando.close(); conexao.close(); } catch (Exception excecao) { throw (excecao); } } ... www.alvarofpinheiro.eti.br
  • 197. Java Orientado a Objetos * ... public static void realizarExclusao(int codigo) throws Exception { try { Class.forName("com.mysql.jdbc.Driver"); String bd = "jdbc:mysql://localhost/exemplo"; Connection conexao = DriverManager.getConnection(bd, "root", “******"); Statement comando = conexao.createStatement(); comando.executeUpdate("DELETE FROM PESSOA WHERE NU_PES_CODIGO = "+codigo); comando.close(); conexao.close(); } catch (Exception excecao) { throw (excecao); } } } www.alvarofpinheiro.eti.br
  • 206. POO com Java Exercícios 1) Considere uma classe ContaBancária e suas duas subclasses ContaCorrente e ContaPoupança, cada uma das três com o método AplicarJuros. A redefinição do método AplicarJuros nas duas subclasses, cada uma com detalhes de implementação diferentes com a mesma interface, caracteriza o princípio denominado na orientação a objetos como 1. abstração. 2. encapsulamento. 3. herança. 4. unificação. 5. polimorfismo. 2) Na orientação Objeto, quando uma rotina precisar ser modificada, basta o código do programa que define o objeto ser mudado que o comportamento da rotina é imediatamente atualizado. Esta característica é conhecida como: 1. ocultamento de informação; 2. polimorfismo; 3. herança; 4. sobrecarga; 5. encapsulamento. www.alvarofpinheiro.eti.br
  • 207. POO com Java Exercícios 3) No tocante à linguagem Java, a principal utilização da variável de classe STATIC com uma única cópia de dados é: 1. compartilhamento de código; 2. economia de memória; 3. ocultamento de informação; 4. minimização de manutenção; 5. controle de acesso (modificador de acesso). 4) Analise as seguintes afi rmações relacionadas à Programação Orientada a Objetos: I. Em um Programa Orientado a Objetos as instâncias de uma classe armazenam tipos diferentes de informações e apresentam comportamentos distintos. II. Em uma Aplicação Orientada a Objetos podem existir múltiplas instâncias de uma mesma classe. III. Em Programação Orientada a Objetos deve existir um e somente um objeto de uma mesma classe. IV. Os serviços que podem ser solicitados a um objeto são definidos pelos métodos. www.alvarofpinheiro.eti.br Indique a opção que contenha todas as afirmações verdadeiras. 1. II e IV 2. II e III 3. III e IV 4. I e III 5. I e II
  • 208. POO com Java Exercícios 5) Na Programação Orientada a Objetos podem-se definir as visibilidades dos métodos e atributos. Quanto a essa característica é correto afirmar que: 1. o acesso aos atributos e aos métodos privados só pode ser feito a partir dos métodos membros da classe. 2. os métodos protegidos podem ser acessados a partir dos métodos de qualquer classe, desde que instanciada na mesma aplicação. 3. os métodos públicos e os atributos protegidos só podem ser acessados a partir dos métodos da própria classe ou de classes derivadas. 4. os métodos privados e os atributos protegidos podem ser acessados a partir dos métodos de qualquer classe. 5. o acesso aos atributos privados e aos métodos públicos só pode ser feito a partir dos métodos membros da classe. www.alvarofpinheiro.eti.br
  • 209. POO com Java Exercícios 6) Analise as seguintes afirmações relacionadas à Orientação a Objetos: I. Os atributos podem ser de instância ou de classe. Quando os atributos são de instância, cada objeto guarda a sua própria cópia de tais atributos. II. Os atributos compartilhados entre objetos de uma classe são chamados de atributos de objetos. Em Java, por exemplo, esses atributos são identifi cados com a palavra static. III. Existem métodos cujo código apenas acessa atributo de classe ou os parâmetros passados. Esses métodos são chamados de métodos de classe. IV. Um mesmo nome de objeto pode ser usado para identificar diferentes objetos em uma mesma classe ou diferentes objetos em classes diferentes, evitando assim, que seja necessário usar nomes diferentes para objetos diferentes que realizam a mesma operação. A esta característica da Orientação a Objetos dá-se o nome de Polimorfismo. www.alvarofpinheiro.eti.br Indique a opção que contenha todas as afirmações verdadeiras. 1. I e II 2. II e III 3. III e IV 4. II e IV 5. I e III