programação orientada a objetos com java

213
PROGRAMAÇÃO ORIENTADA A OBJETOS COM JAVA https://www.facebook.com/alvarofpinheiroaulas/ br.linkedin.com/in/alvarofpinheiro/ www.alvarofpinheiro.eti.br

Upload: alvaro-farias-pinheiro

Post on 09-Jul-2015

790 views

Category:

Technology


3 download

DESCRIPTION

Conceitos de Programação Orientada a Objetos com a Linguagem Java

TRANSCRIPT

Page 1: Programação Orientada a Objetos com Java

PROGRAMAÇÃO ORIENTADA A OBJETOS

COM JAVA

https://www.facebook.com/alvarofpinheiroaulas/br.linkedin.com/in/alvarofpinheiro/

www.alvarofpinheiro.eti.br

Page 2: Programação Orientada a Objetos com Java

JAVAApresentação

*www.alvarofpinheiro.eti.br

Java Apresentação

Page 3: Programação Orientada a Objetos com Java

Eclipse●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

Java Apresentação

Page 4: Programação Orientada a Objetos com Java

Eclipse●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

Java Apresentação

Page 5: Programação Orientada a Objetos com Java

JDK / JRE / JVM●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

Java Apresentação

Page 6: Programação Orientada a Objetos com Java

JDK / JRE / JVM●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

Java Apresentação

Page 7: Programação Orientada a Objetos com Java

JAR●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

Java Apresentação

Page 8: Programação Orientada a Objetos com Java

História●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

Java Apresentação

Page 9: Programação Orientada a Objetos com Java

Biografia●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

Java Apresentação

Page 10: Programação Orientada a Objetos com Java

Independência●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

Java Apresentação

Page 11: Programação Orientada a Objetos com Java

Applets●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

Java Apresentação

Page 12: Programação Orientada a Objetos com Java

Aplicaçã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 Apresentação

Page 13: Programação Orientada a Objetos com Java

Java●Código é compilado para bytecodes;

●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

Java Apresentação

Page 14: Programação Orientada a Objetos com Java

JAVAIntrodução

*www.alvarofpinheiro.eti.br

Java Introdução

Page 15: Programação Orientada a Objetos com Java

Convenções●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

Java Introdução

Page 16: Programação Orientada a Objetos com Java

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

*

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

Java Introdução

Page 17: Programação Orientada a Objetos com Java

Bloco de código●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

Java Introdução

Page 18: Programação Orientada a Objetos com Java

Instruções●Os comandos terminam sempre com ponto-e-vírgula “;”

●Todos os comandos devem estar entre chaves “{}”

*www.alvarofpinheiro.eti.br

Java Introdução

Page 19: Programação Orientada a Objetos com Java

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

Java Introdução

Page 20: Programação Orientada a Objetos com Java

Tipos de Dados●boolean: lógico - boolean b = true;

●byte: inteiros entre -128 e 127 - byte b = 111;

●char: caracter - char letra = ‘A’;

●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

Page 21: Programação Orientada a Objetos com Java

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

Java Introdução

Page 22: Programação Orientada a Objetos com Java

Tipo Literal●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

Java Introdução

Page 23: Programação Orientada a Objetos com Java

Atribuição●São possibilidades de atribuição:

●int var1 = 1;

●int var1, var2, var3 = 2;

●var1 = var2 = var3 = 3;

*www.alvarofpinheiro.eti.br

Java Introdução

Page 24: Programação Orientada a Objetos com Java

Aritmética●int a, b, c, d, e;

●a = 8 + 7; // adição

●b = 6 - 5; // subtração

●c = 4 * 3; // multiplicaçã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

Page 25: Programação Orientada a Objetos com Java

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

Page 26: Programação Orientada a Objetos com Java

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

Java Introdução

Page 27: Programação Orientada a Objetos com Java

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*

www.alvarofpinheiro.eti.br

Java Introdução

Page 28: Programação Orientada a Objetos com Java

Lógicos●&& e lógico

●|| ou lógico

●^ ou exclusivo

●! Negação

●Exemplos:

● int var1 = 1, var2 = 2, var3 = 3;

● boolean res = true;

● res = (var2 > var1) & (var3 == 3); // falso

*www.alvarofpinheiro.eti.br

Java Introdução

Page 29: Programação Orientada a Objetos com Java

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

*www.alvarofpinheiro.eti.br

Java Introdução

Page 30: Programação Orientada a Objetos com Java

Concatenação●String var1 = “Álvaro”;

●String var2 = “Pinheiro”;

●var1 = var1 + var2; // resulta em “ÁlvaroPinheiro”

●Var1 += var2 // resulta em “ÁlvaroPinheiro”

*www.alvarofpinheiro.eti.br

Java Introdução

Page 31: Programação Orientada a Objetos com Java

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

● }

*www.alvarofpinheiro.eti.br

Java Introdução

Page 32: Programação Orientada a Objetos com Java

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

● }

*www.alvarofpinheiro.eti.br

Java Introdução

Page 33: Programação Orientada a Objetos com Java

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

● }*

www.alvarofpinheiro.eti.br

Java Introdução

Page 34: Programação Orientada a Objetos com Java

if

*

if ( cond )

cmd1;

[else]

cmd2;

www.alvarofpinheiro.eti.br

Java Introdução

Page 35: Programação Orientada a Objetos com Java

If else if else

*

if (cond1)

if (cond2)

cmd1;

else

cmd2;

else

cmd3;

www.alvarofpinheiro.eti.br

Java Introdução

Page 36: Programação Orientada a Objetos com Java

( ? : )

*

(expr1 ? expr2 : expr3)

int var1;

var1 = (val1 > val2) ? ret_verdadeiro : ret_falso;

www.alvarofpinheiro.eti.br

Java Introdução

Page 37: Programação Orientada a Objetos com Java

while

*

while ( cond )

cmd;

www.alvarofpinheiro.eti.br

Java Introdução

Page 38: Programação Orientada a Objetos com Java

do...while

*

do

cmd;

while ( cond );

www.alvarofpinheiro.eti.br

Java Introdução

Page 39: Programação Orientada a Objetos com Java

for

*

for ( início; cond; passo )

cmd;

www.alvarofpinheiro.eti.br

Java Introdução

Page 40: Programação Orientada a Objetos com Java

break

*

● 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

Java Introdução

Page 41: Programação Orientada a Objetos com Java

continue

*

● 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

Page 42: Programação Orientada a Objetos com Java

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

Java Introdução

Page 43: Programação Orientada a Objetos com Java

JAVAEntrada e Saída de Dados

*www.alvarofpinheiro.eti.br

Java Entrada/Saída

Page 44: Programação Orientada a Objetos com Java

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

Java Entrada/Saída

Page 45: Programação Orientada a Objetos com Java

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

Java Entrada/Saída

Page 46: Programação Orientada a Objetos com Java

Entrada

*

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

Java Entrada/Saída

Page 47: Programação Orientada a Objetos com Java

Stream

*

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

Java Entrada/Saída

Page 48: Programação Orientada a Objetos com Java

Stream Hierarquia

*

java.io.InputStream

AudioInputStream

FileInputStream

ObjectInputStream

java.io.OutputStream

ByteArrayOutputStream

FileOutputStream

ObjectOutputStream

www.alvarofpinheiro.eti.br

Java Entrada/Saída

Page 49: Programação Orientada a Objetos com Java

Input Stream

*

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

Java Entrada/Saída

Page 50: Programação Orientada a Objetos com Java

Output Stream

*

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

Java Entrada/Saída

Page 51: Programação Orientada a Objetos com Java

Exemplo de Stream

*

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

Java Entrada/Saída

Page 52: Programação Orientada a Objetos com Java

Thread

*

É 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

Java Entrada/Saída

Page 53: Programação Orientada a Objetos com Java

Thread

*

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

Java Entrada/Saída

Page 54: Programação Orientada a Objetos com Java

Thread

*

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

Java Entrada/Saída

Page 55: Programação Orientada a Objetos com Java

Thread

*

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

Java Entrada/Saída

Page 56: Programação Orientada a Objetos com Java

Thread

*

// 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

Java Entrada/Saída

Page 57: Programação Orientada a Objetos com Java

Thread

*

// 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

Java Entrada/Saída

Page 58: Programação Orientada a Objetos com Java

Thread

*

Ciclo de vida:

www.alvarofpinheiro.eti.br

Java Entrada/Saída

Page 59: Programação Orientada a Objetos com Java

Thread

*

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

Java Entrada/Saída

Page 60: Programação Orientada a Objetos com Java

Thread

*

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 Entrada/Saída

Page 61: Programação Orientada a Objetos com Java

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

Page 62: Programação Orientada a Objetos com Java

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

Page 63: Programação Orientada a Objetos com Java

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

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.

MVC -

www.alvarofpinheiro.eti.br

Java MVC/JDBC

Page 64: Programação Orientada a Objetos com Java

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

Page 65: Programação Orientada a Objetos com Java

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

apresentados.A Camada de 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

Page 66: Programação Orientada a Objetos com Java

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

Page 67: Programação Orientada a Objetos com Java

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

Page 68: Programação Orientada a Objetos com Java

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

Page 69: Programação Orientada a Objetos com Java

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

Page 70: Programação Orientada a Objetos com Java

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

Page 71: Programação Orientada a Objetos com Java

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

Page 72: Programação Orientada a Objetos com Java

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

Page 73: Programação Orientada a Objetos com Java

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

Page 74: Programação Orientada a Objetos com Java

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

Page 75: Programação Orientada a Objetos com Java

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

Page 76: Programação Orientada a Objetos com Java

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

Page 77: Programação Orientada a Objetos com Java

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

Page 78: Programação Orientada a Objetos com Java

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

Page 79: Programação Orientada a Objetos com Java

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

Page 80: Programação Orientada a Objetos com Java

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

Page 81: Programação Orientada a Objetos com Java

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 MVC/JDBC

Page 82: Programação Orientada a Objetos com Java

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

Java Outros Recursos

Page 83: Programação Orientada a Objetos com Java

finalize()

*

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

Java Outros Recursos

Page 84: Programação Orientada a Objetos com Java

Collections

*

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

Page 85: Programação Orientada a Objetos com Java

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

Java Outros Recursos

Page 86: Programação Orientada a Objetos com Java

Set

*

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

Java Outros Recursos

Page 87: Programação Orientada a Objetos com Java

List

*

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

Java Outros Recursos

Page 88: Programação Orientada a Objetos com Java

List

*

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

Java Outros Recursos

Page 89: Programação Orientada a Objetos com Java

Iterator

*

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

Page 90: Programação Orientada a Objetos com Java

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 Outros Recursos

Page 91: Programação Orientada a Objetos com Java

*

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

Page 92: Programação Orientada a Objetos com Java

*

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

Page 93: Programação Orientada a Objetos com Java

*

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

Page 94: Programação Orientada a Objetos com Java

*

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

Java Conceitos Gerias

Page 95: Programação Orientada a Objetos com Java

JAVAOrientação a Objetos

*www.alvarofpinheiro.eti.br

Java Orientado a Objetos

Page 96: Programação Orientada a Objetos com Java

Objeto

*

É 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

Page 97: Programação Orientada a Objetos com Java

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

Java Orientado a Objetos

Page 98: Programação Orientada a Objetos com Java

Hieráquias

*

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

Java Orientado a Objetos

Page 99: Programação Orientada a Objetos com Java

Classes

*

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

Page 100: Programação Orientada a Objetos com Java

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

Java Orientado a Objetos

Page 101: Programação Orientada a Objetos com Java

Herança

*

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

Java Orientado a Objetos

Page 102: Programação Orientada a Objetos com Java

Polimorfismo

*

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

Java Orientado a Objetos

Page 103: Programação Orientada a Objetos com Java

Pacote

*

Servem para agregar as classes comuns em

uma estrutura única, agrupando por afinidade.

www.alvarofpinheiro.eti.br

Java Orientado a Objetos

Page 104: Programação Orientada a Objetos com Java

Modificadores

*

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

Java Orientado a Objetos

Page 105: Programação Orientada a Objetos com Java

Instanciamento

*

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

Java Orientado a Objetos

Page 106: Programação Orientada a Objetos com Java

null

*

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

Page 107: Programação Orientada a Objetos com Java

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

Page 108: Programação Orientada a Objetos com Java

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

Page 109: Programação Orientada a Objetos com Java

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

Page 110: Programação Orientada a Objetos com Java

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

Java Orientado a Objetos

Page 111: Programação Orientada a Objetos com Java

Métodos

*

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

Page 112: Programação Orientada a Objetos com Java

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

Page 113: Programação Orientada a Objetos com Java

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

Java Orientado a Objetos

Page 114: Programação Orientada a Objetos com Java

Overloading

*

Métodos de uma mesma classe podem ter o

mesmo nome, mas os métodos devem ter

diferentes assinaturas.

www.alvarofpinheiro.eti.br

Java Orientado a Objetos

Page 115: Programação Orientada a Objetos com Java

Assinatura

*

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

Java Orientado a Objetos

Page 116: Programação Orientada a Objetos com Java

Construtores

*

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

Page 117: Programação Orientada a Objetos com Java

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

Java Orientado a Objetos

Page 118: Programação Orientada a Objetos com Java

this

*

Os métodos de instância recebem um

argumento com o nome ‘this’, que indica o

objeto corrente.

www.alvarofpinheiro.eti.br

Java Orientado a Objetos

Page 119: Programação Orientada a Objetos com Java

this()

*

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

Java Orientado a Objetos

Page 120: Programação Orientada a Objetos com Java

Classes

www.alvarofpinheiro.eti.br

Java Orientado a Objetos

Page 121: Programação Orientada a Objetos com Java

*

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

Page 122: Programação Orientada a Objetos com Java

*

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

Page 123: Programação Orientada a Objetos com Java

*

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

Page 124: Programação Orientada a Objetos com Java

*

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

Page 125: Programação Orientada a Objetos com Java

*

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

Page 126: Programação Orientada a Objetos com Java

*www.alvarofpinheiro.eti.br

Java Orientado a Objetos

Page 127: Programação Orientada a Objetos com Java

*

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

Page 128: Programação Orientada a Objetos com Java

*

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

Page 129: Programação Orientada a Objetos com Java

*

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

Page 130: Programação Orientada a Objetos com Java

*

/*** Classe de domínio ClassPessoa* * @author (Álvaro Pinheiro) * @version (01/03/2011)*/public class ClassPessoa {

// variáveis de instânciaprivate int codigo;private String nome;/*** Construtor da classe ClassPessoa*/

public ClassPessoa() {// inicialização das variáveis de instânciacodigo = 0;nome = "";

}/*** Método para atribuir valor ao campo código* * @param pcodigo* @return codigo*/

public void setCodigo(int pCodigo) {codigo = pCodigo;

}

/*** Método para retornar valor do campo código* * @param nulo* @return codigo*/

public int getCodigo() {return codigo;

}/*** Método para atribuir valor ao campo nome* * @param pnome* @return nome*/public void setNome(String pNome)

nome = pNome;}/*** Método para retornar valor do campo nome* * @param nulo* @return nome*/

public String getNome() {return nome;

}}

Entendido o conceito de classe, segue uma codificação básica em Java.

www.alvarofpinheiro.eti.br

Java Orientado a Objetos

Page 131: Programação Orientada a Objetos com Java

Objetos

www.alvarofpinheiro.eti.br

Java Orientado a Objetos

Page 132: Programação Orientada a Objetos com Java

*

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

Page 133: Programação Orientada a Objetos com Java

*

/**

* 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

Java Orientado a Objetos

Page 134: Programação Orientada a Objetos com Java

Métodos

www.alvarofpinheiro.eti.br

Java Orientado a Objetos

Page 135: Programação Orientada a Objetos com Java

*

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

Java Orientado a Objetos

Page 136: Programação Orientada a Objetos com Java

Pacotes

www.alvarofpinheiro.eti.br

Java Orientado a Objetos

Page 137: Programação Orientada a Objetos com Java

*

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

Page 138: Programação Orientada a Objetos com Java

*

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

Page 139: Programação Orientada a Objetos com Java

*

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

Page 140: Programação Orientada a Objetos com Java

*

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

Page 141: Programação Orientada a Objetos com Java

*

/**

* 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

Page 142: Programação Orientada a Objetos com Java

Relacionamentos

www.alvarofpinheiro.eti.br

Java Orientado a Objetos

Page 143: Programação Orientada a Objetos com Java

*

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

Page 144: Programação Orientada a Objetos com Java

*

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

Page 145: Programação Orientada a Objetos com Java

Polimorfismo

www.alvarofpinheiro.eti.br

Java Orientado a Objetos

Page 146: Programação Orientada a Objetos com Java

*

É 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

Page 147: Programação Orientada a Objetos com Java

*

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

Page 148: Programação Orientada a Objetos com Java

*

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

Page 149: Programação Orientada a Objetos com Java

*

Para melhor entender o polimorfismo, veja o diagrama abaixo e sua implementação.

www.alvarofpinheiro.eti.br

Java Orientado a Objetos

Page 150: Programação Orientada a Objetos com Java

*

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

Page 151: Programação Orientada a Objetos com Java

*

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

Page 152: Programação Orientada a Objetos com Java

*

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

Page 153: Programação Orientada a Objetos com Java

*

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

Page 154: Programação Orientada a Objetos com Java

*

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

Page 155: Programação Orientada a Objetos com Java

*

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

Java Orientado a Objetos

Page 156: Programação Orientada a Objetos com Java

Super

www.alvarofpinheiro.eti.br

Java Orientado a Objetos

Page 157: Programação Orientada a Objetos com Java

*

É 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

Page 158: Programação Orientada a Objetos com Java

*

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

Page 159: Programação Orientada a Objetos com Java

*

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

Java Orientado a Objetos

Page 160: Programação Orientada a Objetos com Java

JAVA

Tratamento de Exceções

*www.alvarofpinheiro.eti.br

Java Orientado a Objetos

Page 161: Programação Orientada a Objetos com Java

Exceções

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

Page 162: Programação Orientada a Objetos com Java

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

Page 163: Programação Orientada a Objetos com Java

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

Page 164: Programação Orientada a Objetos com Java

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

Page 165: Programação Orientada a Objetos com Java

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

Page 166: Programação Orientada a Objetos com Java

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

Page 167: Programação Orientada a Objetos com Java

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

Page 168: Programação Orientada a Objetos com Java

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

Page 169: Programação Orientada a Objetos com Java

JAVAExemplo de Aplicação com POO / MVC / JDBC

*www.alvarofpinheiro.eti.br

Java Orientado a Objetos

Page 170: Programação Orientada a Objetos com Java

PACOTES (CAMADAS)

*www.alvarofpinheiro.eti.br

Java Orientado a Objetos

Page 171: Programação Orientada a Objetos com Java

*www.alvarofpinheiro.eti.br

Java Orientado a Objetos

Page 172: Programação Orientada a Objetos com Java

PACOTE DEFAULT (PRINCIPAL)

*www.alvarofpinheiro.eti.br

Java Orientado a Objetos

Page 173: Programação Orientada a Objetos com Java

*

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

Page 174: Programação Orientada a Objetos com Java

PACOTE VISUAL (VIEW)

*www.alvarofpinheiro.eti.br

Java Orientado a Objetos

Page 175: Programação Orientada a Objetos com Java

*www.alvarofpinheiro.eti.br

Java Orientado a Objetos

Page 176: Programação Orientada a Objetos com Java

*

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

Page 177: Programação Orientada a Objetos com Java

*

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

Page 178: Programação Orientada a Objetos com Java

*

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

Page 179: Programação Orientada a Objetos com Java

*

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

Page 180: Programação Orientada a Objetos com Java

*

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

Page 181: Programação Orientada a Objetos com Java

*

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

Page 182: Programação Orientada a Objetos com Java

*

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

Page 183: Programação Orientada a Objetos com Java

*

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

Page 184: Programação Orientada a Objetos com Java

*

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

Page 185: Programação Orientada a Objetos com Java

PACOTE MODELO (MODEL)

*www.alvarofpinheiro.eti.br

Java Orientado a Objetos

Page 186: Programação Orientada a Objetos com Java

*www.alvarofpinheiro.eti.br

Java Orientado a Objetos

Page 187: Programação Orientada a Objetos com Java

*

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

Page 188: Programação Orientada a Objetos com Java

PACOTE CONTROLE (CONTROL)

*www.alvarofpinheiro.eti.br

Java Orientado a Objetos

Page 189: Programação Orientada a Objetos com Java

*

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

Page 190: Programação Orientada a Objetos com Java

*

...

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

Page 191: Programação Orientada a Objetos com Java

*

...

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

Page 192: Programação Orientada a Objetos com Java

*

...

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

Page 193: Programação Orientada a Objetos com Java

PACOTE DADOS (PERSISTÊNCIA)

*www.alvarofpinheiro.eti.br

Java Orientado a Objetos

Page 194: Programação Orientada a Objetos com Java

*

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

Page 195: Programação Orientada a Objetos com Java

*

...

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

Page 196: Programação Orientada a Objetos com Java

*

...

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

Page 197: Programação Orientada a Objetos com Java

*

...

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 Orientado a Objetos

Page 198: Programação Orientada a Objetos com Java

www.alvarofpinheiro.eti.br

Java Aulas

Page 199: Programação Orientada a Objetos com Java

www.alvarofpinheiro.eti.br

Java Aulas

Page 200: Programação Orientada a Objetos com Java

www.alvarofpinheiro.eti.br

Java Aulas

Page 201: Programação Orientada a Objetos com Java

www.alvarofpinheiro.eti.br

Java Aulas

Page 202: Programação Orientada a Objetos com Java

www.alvarofpinheiro.eti.br

Java Aulas

Page 203: Programação Orientada a Objetos com Java

www.alvarofpinheiro.eti.br

Java Aulas

Page 204: Programação Orientada a Objetos com Java

www.alvarofpinheiro.eti.br

Java Aulas

Page 205: Programação Orientada a Objetos com Java

www.alvarofpinheiro.eti.br

Java Aulas

Page 206: Programação Orientada a Objetos com Java

www.alvarofpinheiro.eti.br

POO com Java Exercícios1) 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.

Page 207: Programação Orientada a Objetos com Java

www.alvarofpinheiro.eti.br

POO com Java Exercícios3) 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.

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

Page 208: Programação Orientada a Objetos com Java

www.alvarofpinheiro.eti.br

POO com Java Exercícios5) 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.

Page 209: Programação Orientada a Objetos com Java

www.alvarofpinheiro.eti.br

POO com Java Exercícios6) 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.

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

Page 210: Programação Orientada a Objetos com Java

www.alvarofpinheiro.eti.br

POO com Java Exercícios7) Analise as seguintes afirmações relacionadas à Orientação a Objetos:

I. As exceções que podem ser lançadas por um método são definidas na criação da classe

abstrata que contém o método. As exceções normalmente provocam o encerramento indesejado

do programa.

II. Quando uma classe é definida, nem sempre é possível definir todos os seus métodos. Para

resolver esta situação pode-se definir métodos abstratos, que podem ser instanciados a qualquer

momento após a criação da classe.

III. Da mesma forma que é necessário especificar o código a ser executado na criação de um

objeto, pode ser necessário especificar um código para ser executado na destruição de um objeto.

Isso é feito com a utilização de um método chamado destrutor ou finalizador. Nesses métodos é

comum, por exemplo, inserir código para fechar arquivos ou encerrar conexões.

IV. Em uma classe podem existir métodos que não devem ser redef nidos em classes derivadas.

Esses métodos são chamados métodos finais e uma tentativa de redefini-los resulta em um erro de

compilação.

Indique a opção que contenha todas as afirmações verdadeiras.

1. I e II

2. II e III

3. I e III

4. III e IV

5. II e IV

Page 211: Programação Orientada a Objetos com Java

www.alvarofpinheiro.eti.br

POO com Java Exercícios8) Na Programação Orientada a Objetos,

1. a definição dos objetos deve ser obrigatoriamente definida no corpo do construtor.

2. o código construtor é responsável por criar e inicializa os atributos dos objetos.

3. o construtor é uma função que tem um nome qualquer e, quando instanciada, faz referência aos

atributos da classe a ser definida.

4. o código construtor é responsável por criar os método da classe.

5. quando se instancia uma classe diversas vezes, o código construtor é responsável por

armazenar e compartilhar os atributos das instâncias e os de classe utilizados ao longo de todo o

processo.

9) Uma pizzaria fez uma ampliação de suas instalações e o gerente aproveitou para melhorar o

sistema informatizado, que era limitado e não atendia a todas as funções necessárias. O gerente,

então, contratou uma empresa para ampliar o software. No desenvolvimento do novo sistema, a

empresa aproveitou partes do sistema antigo e estendeu os componentes de maneira a usar

código validado, acrescentando as novas funções solicitadas.

Que conceito de orientação a objetos está descrito na situação hipotética acima?

1. sobrecarga

2. herança

3. sobreposição

4. abstração

5. mensagem

Page 212: Programação Orientada a Objetos com Java

www.alvarofpinheiro.eti.br

POO com Java Exercícios10) Com relação a conceitos de orientação a objetos, julgue os seguintes itens.

I As variáveis ou métodos declarados com modificador de acesso private só são acessíveis a

métodos da classe em que são declarados.

II Uma classe deve possuir uma única declaração de método construtor.

III Uma instância de uma classe abstrata herda atributos e métodos de sua superclasse direta.

IV O polimorfismo permite substituir a lógica condicional múltipla (lógica switch ou faça caso).

Estão certos apenas os itens

1. I e II

2. I e III

3. I e IV

4. II e III

5. II e IV.

Page 213: Programação Orientada a Objetos com Java

www.alvarofpinheiro.eti.br

POO com Java Exercícios11) A orientação a objetos é uma forma abstrata de pensar um problema utilizando-se conceitos do

mundo real e não, apenas, conceitos computacionais. Nessa perspectiva, a adoção do paradigma

orientado a objetos implica necessariamente que

1. os usuários utilizem as aplicações de forma mais simples.

2. os sistemas sejam encapsulados por outros sistemas.

3. os programadores de aplicações sejam mais especializados.

4. os objetos sejam implementados de maneira eficiente e simples.

5. a computação seja acionada por troca de mensagens entre objetos.