conceitos avançados da linguagem de programação java · programação java. encapsulamento...

29
Prof. Gilberto B. Oliveira Prof. Gilberto B. Oliveira Análise de Programação Análise de Programação Conceitos Avançados da Linguagem de Conceitos Avançados da Linguagem de Programação Java Programação Java

Upload: vonhu

Post on 01-Dec-2018

243 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Conceitos Avançados da Linguagem de Programação Java · Programação Java. Encapsulamento Proteger o dado dentro de uma classe (capsula segura) Facilita o uso da classe por outros

Prof. Gilberto B. OliveiraProf. Gilberto B. Oliveira

Análise de ProgramaçãoAnálise de Programação

Conceitos Avançados da Linguagem de Conceitos Avançados da Linguagem de Programação JavaProgramação Java

Page 2: Conceitos Avançados da Linguagem de Programação Java · Programação Java. Encapsulamento Proteger o dado dentro de uma classe (capsula segura) Facilita o uso da classe por outros

EncapsulamentoEncapsulamento

Proteger o dado dentro de uma classe (capsula Proteger o dado dentro de uma classe (capsula segura)segura)Facilita o uso da classe por outros programadoresFacilita o uso da classe por outros programadoresProtege certos dados contra alterações indevidasProtege certos dados contra alterações indevidas

Modificadores mais comuns aplicados a Modificadores mais comuns aplicados a métodos e atributos:métodos e atributos:publicpublic

Qualquer classe de qualquer lugar pode acessar;Qualquer classe de qualquer lugar pode acessar;

privateprivateNinguém pode acessar, exceto a própria classe.Ninguém pode acessar, exceto a própria classe.

Page 3: Conceitos Avançados da Linguagem de Programação Java · Programação Java. Encapsulamento Proteger o dado dentro de uma classe (capsula segura) Facilita o uso da classe por outros

ModificadoresModificadores

Modificador Classe Pacote Sub Classe Livreprivate Xdefault X Xprotected X X Xpublic X X X X

Interface:Interface:Métodos e variáveis públicasMétodos e variáveis públicas

ImplementaçãoImplementaçãoManeira como a classe executa uma operaçãoManeira como a classe executa uma operação

““Boas práticas de POO permitem alterar a implementação Boas práticas de POO permitem alterar a implementação sem alterar a interface das classes.”sem alterar a interface das classes.”

Page 4: Conceitos Avançados da Linguagem de Programação Java · Programação Java. Encapsulamento Proteger o dado dentro de uma classe (capsula segura) Facilita o uso da classe por outros

Métodos get e setMétodos get e set

A implementação de métodos usados para A implementação de métodos usados para proteger atributos privados é comum em POOproteger atributos privados é comum em POO

Método get()Método get()Permite criar uma saída mais adequada ao dado Permite criar uma saída mais adequada ao dado

armazenado.armazenado.

Método set(tipo arg)Método set(tipo arg)Permite controlar de maneira mais eficaz o dado a Permite controlar de maneira mais eficaz o dado a

ser armazenado no atributo antes de atribuí-loser armazenado no atributo antes de atribuí-lo

Page 5: Conceitos Avançados da Linguagem de Programação Java · Programação Java. Encapsulamento Proteger o dado dentro de uma classe (capsula segura) Facilita o uso da classe por outros

Implementação de classe Implementação de classe não encapsulada não encapsulada

Classe Funcionário:Classe Funcionário:public class Funcionario {public class Funcionario {

public String nome;public String nome;

public double salario;public double salario;

public void identificarFuncionario(){public void identificarFuncionario(){

System.out.println("Nome: " + nome);System.out.println("Nome: " + nome);

System.out.println("Salário: " + salario);System.out.println("Salário: " + salario);

}}

}}

Page 6: Conceitos Avançados da Linguagem de Programação Java · Programação Java. Encapsulamento Proteger o dado dentro de uma classe (capsula segura) Facilita o uso da classe por outros

Quebrando as regras de Quebrando as regras de negócionegócio

Sem o encapsulamento outra classe acessa o Sem o encapsulamento outra classe acessa o salário da classe funcionário e atribui um salário da classe funcionário e atribui um salário menor do que o salário mínimo atual no salário menor do que o salário mínimo atual no Brasil:Brasil:

public class TesteFuncionario {public class TesteFuncionario {

public static void main(String[] args){public static void main(String[] args){Funcionario f1 = new Funcionario();Funcionario f1 = new Funcionario();f1.salario = 450.00;f1.salario = 450.00;

}}

}}

Page 7: Conceitos Avançados da Linguagem de Programação Java · Programação Java. Encapsulamento Proteger o dado dentro de uma classe (capsula segura) Facilita o uso da classe por outros

Método GetMétodo Get

O método get gera uma saída mais inteligível para O método get gera uma saída mais inteligível para o usuário:o usuário:

..

. .

public public StringString getNome(){ getNome(){

if(this.nome.charAt(this.nome.length() - 1) == 'a'){if(this.nome.charAt(this.nome.length() - 1) == 'a'){

return "Sra. " + this.nome;return "Sra. " + this.nome;

} else {} else {

return "Sr. " + this.nome;return "Sr. " + this.nome;

}}

}}

..

..

Page 8: Conceitos Avançados da Linguagem de Programação Java · Programação Java. Encapsulamento Proteger o dado dentro de uma classe (capsula segura) Facilita o uso da classe por outros

Método Set(arg)Método Set(arg)

O método set permite um tratamento mais eficaz:O método set permite um tratamento mais eficaz:..

. .

public public voidvoid setSalario( setSalario(double salariodouble salario){){

if(salario < 510){if(salario < 510){

System.out.println(“Salário inapropriado!”);System.out.println(“Salário inapropriado!”);

} else {} else {

this.salariothis.salario == salario; salario;

}}

}}

..

..

Page 9: Conceitos Avançados da Linguagem de Programação Java · Programação Java. Encapsulamento Proteger o dado dentro de uma classe (capsula segura) Facilita o uso da classe por outros

Método ConstrutorMétodo Construtor

São invocados automaticamente ao instanciar São invocados automaticamente ao instanciar objetos;objetos;

Normalmente são usados para inicializar atributos. Normalmente são usados para inicializar atributos. Sintaxe:Sintaxe:

[modificador] class NomeClasse {[modificador] class NomeClasse {

[modificador] NomeClasse([modificador] NomeClasse([argumentos][argumentos]){){

bloco_codigo;bloco_codigo;

}}

}}

Page 10: Conceitos Avançados da Linguagem de Programação Java · Programação Java. Encapsulamento Proteger o dado dentro de uma classe (capsula segura) Facilita o uso da classe por outros

Exemplo:Exemplo:

Método construtor simples:Método construtor simples:..

..

public Funcionario() {public Funcionario() {

this.setNome("Funcionario");this.setNome("Funcionario");

this.setSalario(510.0);this.setSalario(510.0);

}}

..

O método construtor pode ser sobrecarregado O método construtor pode ser sobrecarregado permitindo a inicialização de várias formas.permitindo a inicialização de várias formas.

Page 11: Conceitos Avançados da Linguagem de Programação Java · Programação Java. Encapsulamento Proteger o dado dentro de uma classe (capsula segura) Facilita o uso da classe por outros

Exemplo2:Exemplo2:

Método construtor sobrecarregado:Método construtor sobrecarregado: public Funcionario() {public Funcionario() {

this.setNome("Funcionario");this.setNome("Funcionario");

this.setSalario(510.0);this.setSalario(510.0);

}}

public Funcionario(String nome){public Funcionario(String nome){

this.setNome(nome);this.setNome(nome);

this.setSalario(510.0);this.setSalario(510.0);

}}

public Funcionario(double salario){public Funcionario(double salario){

this.setSalario(salario);this.setSalario(salario);

this.setNome("Funcionario");this.setNome("Funcionario");

}}

Page 12: Conceitos Avançados da Linguagem de Programação Java · Programação Java. Encapsulamento Proteger o dado dentro de uma classe (capsula segura) Facilita o uso da classe por outros

Declaração de vetores Declaração de vetores de uma dimensãode uma dimensão

Sintaxe:Sintaxe:tipo [] nomeVetor;tipo [] nomeVetor;

Exemplos com tipos primitivos:Exemplos com tipos primitivos:char [] codCor;char [] codCor;

double [] preco;double [] preco;

Exemplos com tipos objetos:Exemplos com tipos objetos:Camisa [] minhaCamisa;Camisa [] minhaCamisa;

Date [] agenda;Date [] agenda;

Page 13: Conceitos Avançados da Linguagem de Programação Java · Programação Java. Encapsulamento Proteger o dado dentro de uma classe (capsula segura) Facilita o uso da classe por outros

Instancia de vetores de Instancia de vetores de uma dimensão:uma dimensão:

Sintaxe:Sintaxe:nomeVetor = new tipo [comprimento];nomeVetor = new tipo [comprimento];

Exemplos com tipos primitivos:Exemplos com tipos primitivos:codCor = new char[5];codCor = new char[5];

preco = new double[3];preco = new double[3];

Exemplos com tipos objetos:Exemplos com tipos objetos:minhaCamisa = new Camisa[2];minhaCamisa = new Camisa[2];

agenda = new Date[7];agenda = new Date[7];

Page 14: Conceitos Avançados da Linguagem de Programação Java · Programação Java. Encapsulamento Proteger o dado dentro de uma classe (capsula segura) Facilita o uso da classe por outros

Inicializando vetores Inicializando vetores de uma dimensãode uma dimensão

Sintaxe:Sintaxe:nomeVetor[indice] = valor;nomeVetor[indice] = valor;

Exemplo com tipos primitivosExemplo com tipos primitivoscodCor[0] = 'P';codCor[0] = 'P';

codCor[1] = 'V';codCor[1] = 'V';

..

..

..

codCor[4] = 'A';codCor[4] = 'A';

Page 15: Conceitos Avançados da Linguagem de Programação Java · Programação Java. Encapsulamento Proteger o dado dentro de uma classe (capsula segura) Facilita o uso da classe por outros

Inicializando vetores Inicializando vetores de uma dimensãode uma dimensão

Exemplo com tipos objeto:Exemplo com tipos objeto:minhaCamisa[0] = new Camisa();minhaCamisa[0] = new Camisa();

..

..

minhaCamisa[1] = new Camisa(“T-Shirt”);minhaCamisa[1] = new Camisa(“T-Shirt”);

Outro exemplo:Outro exemplo:agenda[0] = new Date();agenda[0] = new Date();

agenda[1] = new Date(2010, 05, 18);agenda[1] = new Date(2010, 05, 18);

..

..

agenda[6] = new Date(“2010/11/21”);agenda[6] = new Date(“2010/11/21”);

Page 16: Conceitos Avançados da Linguagem de Programação Java · Programação Java. Encapsulamento Proteger o dado dentro de uma classe (capsula segura) Facilita o uso da classe por outros

Declarar, instanciar e Declarar, instanciar e inicializarinicializar

Sintaxe:Sintaxe:tipo [] nomeVetor = {item0, ..., itemN};tipo [] nomeVetor = {item0, ..., itemN};

Exemplo com tipos primitivos:Exemplo com tipos primitivos:double [] preco = {12.5, 13.5, 13.0};double [] preco = {12.5, 13.5, 13.0};

char [] codCor = {'A', 'P', 'V', 'B', 'R'};char [] codCor = {'A', 'P', 'V', 'B', 'R'};

Exemplo com tipos objetos:Exemplo com tipos objetos:Camisa [] minhaCamisa = {new Camisa(), new Camisa [] minhaCamisa = {new Camisa(), new Camisa(“T-Shirt”), new Camisa(“Polo”, 'M')};Camisa(“T-Shirt”), new Camisa(“Polo”, 'M')};

Date [] agenda = {new Date(“2010/07/10”), new Date [] agenda = {new Date(“2010/07/10”), new Date(2010, 03, 21), new Date()};Date(2010, 03, 21), new Date()};

Page 17: Conceitos Avançados da Linguagem de Programação Java · Programação Java. Encapsulamento Proteger o dado dentro de uma classe (capsula segura) Facilita o uso da classe por outros

Acessando valores Acessando valores contidos em vetorescontidos em vetores

Inserindo um valor em uma posição do vetor:Inserindo um valor em uma posição do vetor:codCor[3] = 'W';codCor[3] = 'W';

agenda[0] = new Date(“2010/07/30”);agenda[0] = new Date(“2010/07/30”);

preco[2] = 24.5;preco[2] = 24.5;

minhaCamisa = new Camisa(“Social”, 'G');minhaCamisa = new Camisa(“Social”, 'G');

Retirando valores de uma posição do vetor:Retirando valores de uma posição do vetor:Date d = agenda[0];Date d = agenda[0];

char c = codCor[3];char c = codCor[3];

double p = preco[1];double p = preco[1];

Camisa c1 = minhaCamisa[2];Camisa c1 = minhaCamisa[2];

Page 18: Conceitos Avançados da Linguagem de Programação Java · Programação Java. Encapsulamento Proteger o dado dentro de uma classe (capsula segura) Facilita o uso da classe por outros

Comportamento da Comportamento da Memória (primitivos)Memória (primitivos)

AleatóriaHeap

char [] codCor = {'P', 'B', 'V'};char tamanho = 'M';

PilhaStack

0@B25X32

M

P

B

V

Page 19: Conceitos Avançados da Linguagem de Programação Java · Programação Java. Encapsulamento Proteger o dado dentro de uma classe (capsula segura) Facilita o uso da classe por outros

Comportamento da Comportamento da MemóriaMemória

AleatóriaHeap

Camisa [] suaCamisa = {new Camisa(“Social”), new Camisa('P'), new Camisa(“Polo”, 'M')};

Camisa minhaCamisa = new Camisa();

T-Shirt

B

M

Polo

B

G

PilhaStack

0@B25X32

0@X56622

T-Shirt

P

M

Social

B

M

0@B12345

0@D23456

0@F34567

Page 20: Conceitos Avançados da Linguagem de Programação Java · Programação Java. Encapsulamento Proteger o dado dentro de uma classe (capsula segura) Facilita o uso da classe por outros

Atribuição de valores Atribuição de valores através de laçoatravés de laço

Exemplo:Exemplo:int [] meuVetor;int [] meuVetor;

meuVetor = new int[100];meuVetor = new int[100];

for(int i = 0; i < meuVetor.for(int i = 0; i < meuVetor.lengthlength; i++){; i++){

meuVetor[i] = i;meuVetor[i] = i;

}}

Page 21: Conceitos Avançados da Linguagem de Programação Java · Programação Java. Encapsulamento Proteger o dado dentro de uma classe (capsula segura) Facilita o uso da classe por outros

Laço for melhoradoLaço for melhorado

ExemploExemplopublic class ExemploFor {public class ExemploFor {

public static void main(String[] args) {public static void main(String[] args) {int [] int [] numnum = {1, 3, 5, 7, 9, 11, 13, 15, = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};17, 19};

int soma = 0;int soma = 0;for(int item : for(int item : numnum) {) {

soma += item;soma += item;}}System.out.println(“Soma: ” + soma);System.out.println(“Soma: ” + soma);

}}

}}

Page 22: Conceitos Avançados da Linguagem de Programação Java · Programação Java. Encapsulamento Proteger o dado dentro de uma classe (capsula segura) Facilita o uso da classe por outros

VarargsVarargs

Criação de métodos que recebem uma quantidade Criação de métodos que recebem uma quantidade de argumentos variada.de argumentos variada.public class MensagemVar public class MensagemVar {{

public static void minhaMensagem(public static void minhaMensagem(String... nomeString... nome)){{

for(String lista : nome) for(String lista : nome) {{

System.out.println(lista);System.out.println(lista);

}}

}}

public static void main(String [] args) public static void main(String [] args) {{

minhaMensagem(args);minhaMensagem(args);

}}

}}

Page 23: Conceitos Avançados da Linguagem de Programação Java · Programação Java. Encapsulamento Proteger o dado dentro de uma classe (capsula segura) Facilita o uso da classe por outros

Vetores Vetores multidimensionaismultidimensionais

Sintaxe de criação:Sintaxe de criação:tipo [] [] nomeVetor;tipo [] [] nomeVetor;

Exemplo:Exemplo:int [] [] notaBim;int [] [] notaBim;

Sintaxe de instância:Sintaxe de instância:nomeVetor = new int [numVetores] [comp];nomeVetor = new int [numVetores] [comp];

ExemploExemplonotaBim = int[5][4];notaBim = int[5][4];

Page 24: Conceitos Avançados da Linguagem de Programação Java · Programação Java. Encapsulamento Proteger o dado dentro de uma classe (capsula segura) Facilita o uso da classe por outros

Exemplo de vetor Exemplo de vetor multidimensionalmultidimensional

1.° Bim 2.° Bim 3.° Bim 4.° BimJoãoJoséMariaJoanaJoaquina

Page 25: Conceitos Avançados da Linguagem de Programação Java · Programação Java. Encapsulamento Proteger o dado dentro de uma classe (capsula segura) Facilita o uso da classe por outros

AtribuiçãoAtribuição

Exemplo de atribuição de valores às posições Exemplo de atribuição de valores às posições dos vetores:dos vetores:notaBim[0] [0] = 5;notaBim[0] [0] = 5;

notaBim[0] [1] = 7;notaBim[0] [1] = 7;

notaBim[0] [2] = 9;notaBim[0] [2] = 9;

notaBim[1] [3] = 5;notaBim[1] [3] = 5;

notaBim[2] [2] = 10;notaBim[2] [2] = 10;

notaBim[3] [0] = 7;notaBim[3] [0] = 7;

Page 26: Conceitos Avançados da Linguagem de Programação Java · Programação Java. Encapsulamento Proteger o dado dentro de uma classe (capsula segura) Facilita o uso da classe por outros

Atribuição em vetor Atribuição em vetor multidimensionalmultidimensional

1.° Bim 2.° Bim 3.° Bim 4.° BimJoão 5 7 9José 5Maria 10Joana 7Joaquina

Page 27: Conceitos Avançados da Linguagem de Programação Java · Programação Java. Encapsulamento Proteger o dado dentro de uma classe (capsula segura) Facilita o uso da classe por outros

Herança (inheritance)Herança (inheritance)

Sintaxe para a criação de subClasses:Sintaxe para a criação de subClasses:[modificado] class NomeSubClasse extends [modificado] class NomeSubClasse extends NomeSuperClasseNomeSuperClasse

Permite criar classes mais especializadas a partir de Permite criar classes mais especializadas a partir de classes generalistas.classes generalistas.

Classes generalistas são superClasses e classes Classes generalistas são superClasses e classes especializadas subClassesespecializadas subClasses

Classes generalistas carregam atributos e métodos Classes generalistas carregam atributos e métodos que são herdados pela(s) subClasse(s)que são herdados pela(s) subClasse(s)Quanto mais abstratas forem as classes de um sistema, Quanto mais abstratas forem as classes de um sistema,

mais abrangente ele será, portanto, melhor construído.mais abrangente ele será, portanto, melhor construído.

Page 28: Conceitos Avançados da Linguagem de Programação Java · Programação Java. Encapsulamento Proteger o dado dentro de uma classe (capsula segura) Facilita o uso da classe por outros

Pacotes da API JavaPacotes da API Java

API Application Programming InterfaceAPI Application Programming InterfaceAbstract Windowing Toolkit: Usada para construir Abstract Windowing Toolkit: Usada para construir

e gerenciar uma GUI (Graphic User Interface):e gerenciar uma GUI (Graphic User Interface):java.awt.*;java.awt.*;

Comportamentos específicos de AppletComportamentos específicos de Appletjava.applet.*;java.applet.*;

Permite executar operações relacionadas a redePermite executar operações relacionadas a redejava.net.*;java.net.*;

Pacote com classes utilitárias, permite gerar Pacote com classes utilitárias, permite gerar números randômicos, data e hora, etc.números randômicos, data e hora, etc.java.util.*;java.util.*;

Page 29: Conceitos Avançados da Linguagem de Programação Java · Programação Java. Encapsulamento Proteger o dado dentro de uma classe (capsula segura) Facilita o uso da classe por outros

Importando pacotes:Importando pacotes:

Usando uma declaração Usando uma declaração importimport

import java.awt.*;import java.awt.*;

public class MeuBotao extends Button {public class MeuBotao extends Button {

//Implementação da classe//Implementação da classe

}}

Usando o nome qualificador da classe completoUsando o nome qualificador da classe completopublic class MeuBotao extends java.awt.Button {public class MeuBotao extends java.awt.Button {

//implementação da classe//implementação da classe

}}