introdução à análise orientada a objetos parte 2

28
Introdução à Análise Orientada a Objetos Prof. Ariovaldo Dias de Oliveira Parte 2 1

Upload: irenescotolo

Post on 06-Jun-2015

1.337 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Introdução à análise orientada a objetos parte 2

Introdução à Análise Orientada a Objetos

Prof. Ariovaldo Dias de Oliveira

Parte 2

1

Page 2: Introdução à análise orientada a objetos parte 2

Solução da Atividade 1

class Funcionário {

String nome;

String departamento;

private double salário;

String admissão;

String rg;

boolean ativo;

Segue...

Atributos

2

Page 3: Introdução à análise orientada a objetos parte 2

Funcionário (String nome, String departamento, double salário, String admissão, String rg) {

this.nome = nome;this.departamento = departamento;this.salário = salário;this.admissão = admissão;this.rg = rg;ativo = true;

}

Construtor

Segue...

O construtor da classe é um bloco declarado com o mesmo nome da classe. Quando não se declara nenhum construtor, um construtor default é ativado. Ele não recebe nenhum argumento e o corpo dele é vazio. A partir do momento que se declara um construtor, o construtor default não é mais fornecido.

3

Page 4: Introdução à análise orientada a objetos parte 2

void bonifica(double valor) {salário = salário + valor;

}

void demite(){ativo = false;

}

double getSalário() {return salário;

}

}

Métodos

Segue...4

Page 5: Introdução à análise orientada a objetos parte 2

Programa para testar a classe Funcionário

class TestaFuncionário {

public static void main (String [ ] args) {

Funcionário f = new Funcionário ("João", "RH", 123.45, "23/03/2011", "123456-x");

System.out.println("nome..............." + f.nome);

System.out.println("departamento..." +f.departamento);

System.out.println("salário............ " + f.getSalário());

System.out.println("admissão........." +f.admissão);

System.out.println("RG.................." + f.rg);

System.out.println("ativo................" + f.ativo);

f.bonifica(100);

System.out.println("novo salário....." + f.getSalário());

f.demite();

System.out.println("ativo................" + f.ativo);

}

}

5

Page 6: Introdução à análise orientada a objetos parte 2

Funcionário

+nome: String+departamento: String -salário: double+admissão: String+rg: String+ativo: boolean

+Funcionário (nome: String, departamento: String, salário: double, admissão: String,

rg: String):+bonifica( valor: double ):+demite ( ):+getSalário ( ): double

UML da Atividade 1

6

Page 7: Introdução à análise orientada a objetos parte 2

Herança

• A herança é um relacionamento pelo qual uma classe, chamada de subclasse, herda todos comportamentos e estados possíveis de outra classe, chamada de superclasse ou classe base

7

Page 8: Introdução à análise orientada a objetos parte 2

Exemplo de Herança

import java.util.Scanner;

class Funcionário {

String nome;

private double salário;

double getSalário() {

return salário;

}

void setSalário(double salário) {

this.salário = salário;

}

}

Segue...8

Page 9: Introdução à análise orientada a objetos parte 2

class Gerente extends Funcionário {int senha;

boolean autentica(int senha) {if (this.senha == senha) {

return true;} else {

return false;}

}}

Em todo momento que criarmos um objeto do tipo Gerente, este objeto também possuirá os atributos e métodos de Funcionário

Segue...9

Page 10: Introdução à análise orientada a objetos parte 2

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

Gerente gestor = new Gerente ( );gestor.nome = "João";gestor.setSalário(8000.0);Scanner input = new Scanner(System.in); System.out.println ("Informe a senha para criar esse gerente: "); int senha = input.nextInt(); gestor.senha = senha;

System.out.println ("Informe a senha para acessar esse gerente: ");

int senhaAcesso = input.nextInt();

boolean permite = gestor.autentica(senhaAcesso);if (permite) {

System.out.println("Permitido");} else {

System.out.println("Negado");}

}}

10

Page 11: Introdução à análise orientada a objetos parte 2

Para dar aumento ao Gerente, não podemos comandar (na subclasse Gerente) a ação Salário = Salário + valor, pois esta subclasse não tem acesso ao atributo salário, que é private na superclasse Funcionário:

class Gerente extends Funcionário {int senha;

boolean autentica(int senha) {if (this.senha == senha) {

return true;} else {

return false;}

}

void daAumento (double valor) {salário = salário + valor;

}}

Vai dar erro de compilação!11

Page 12: Introdução à análise orientada a objetos parte 2

Para não dar erro, mudamos o atributo de salário (em Funcionário) de private para protected

import java.util.Scanner; class Funcionário {

String nome;protected double salário;

double getSalário() {return salário;

}

void setSalário(double salário) {this.salário = salário;

}}

12

Page 13: Introdução à análise orientada a objetos parte 2

Para discussão:

• O que aconteceria se comandássemos no programa TestaGerente um acesso direto ao atributo salário do gerente, como na codificação abaixo?

.....boolean permite = gestor.autentica(senhaAcesso);if (permite) {

System.out.println("Permitido");} else {

System.out.println("Negado");}

System.out.println(gestor.salário);

13

Page 14: Introdução à análise orientada a objetos parte 2

Funcionário

+bonifica (valor: double ):+demite ( ):+getSalário ( ): double

Gerente+nome: String+departamento: String #salário: double+admissão: String+rg: String+ativo: boolean

+senha: int

+autentica (senha: int): boolean

14

Page 15: Introdução à análise orientada a objetos parte 2

Sobrescrita (ou Reescrita) de Método

• Ocorre quando uma sobclasse define um método idêntico(*) a um método de sua superclasse

• Utilizado quando o comportamento da superclasse não corresponde ao desejado para o método da subclasse

(*) Métodos idênticos possuem o mesmo nome, tipo de retorno e lista de parâmetros

15

Page 16: Introdução à análise orientada a objetos parte 2

Exemplo de Sobrescritaclass Produto {

int cod;

String desc;

protected double preço;

void setPreço(double preço) {

this.preço = preço;

}

void aumenta (double valor){

preço = preço + valor;

}

double getPreço() {

return preço;

}

}

Segue...16

Page 17: Introdução à análise orientada a objetos parte 2

class Importado extends Produto {

int codImportação;

void setPreço(double preço) {

this.preço = preço * 1.7;

}

}

17

Page 18: Introdução à análise orientada a objetos parte 2

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

Produto prod1= new Produto ( );prod1.cod = 123;prod1.desc = "Borracha";prod1.setPreço(2.5);prod1.aumenta(0.5);System.out.println(prod1.desc + " preço = " + prod1.getPreço()); Importado prod2 = new Importado();prod2.cod = 456;prod2.desc = "Lápis";prod2.codImportação = 12345;prod2.setPreço(3);prod2.aumenta(1);System.out.println(prod2.desc + " preço = " + prod2.getPreço());

}}

Sem o Método setPreço na classe Importado, o valor exibido para o produto 2 seria 4 e não 6.1

Segue...18

Page 19: Introdução à análise orientada a objetos parte 2

Sobrecarga

• Sobrecarregar um método ou um construtor significa prover mais de uma versão desse mesmo Método (ou Construtor).

• As versões devem, necessariamente, possuir

listas de parâmetros diferentes, seja no tipo

ou no número desses parâmetros (o tipo do

valor de retorno pode ser igual).

19

Page 20: Introdução à análise orientada a objetos parte 2

Exemplo de Sobrecarga de um Construtorclass Produto {

int cod;

String desc;

Produto (String desc, int cod) {

this.cod = cod;

this.desc = desc;

}

Produto (int cod, String desc) {

this.cod = cod;

this.desc = desc;

}

Produto (int cod) {

this.cod = cod;

desc = "descrição padrão";

}

Produto (String desc) {

this.cod = 999;

this.desc = desc;

}

Produto () {

this.cod = 999;

this.desc = "descrição padrão";

}

}

Segue...20

Page 21: Introdução à análise orientada a objetos parte 2

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

Produto prod1= new Produto ("produto 1", 1111 );System.out.println(prod1.desc + " " + prod1.cod);

Produto prod2= new Produto ( 2222, "produto 2");System.out.println(prod2.desc + " " + prod2.cod);

Produto prod3= new Produto (3333 );System.out.println(prod3.desc + " " + prod3.cod);

Produto prod4= new Produto ("produto 4");System.out.println(prod4.desc + " " + prod4.cod);

Produto prod5= new Produto ( );System.out.println(prod5.desc + " " + prod5.cod);

}}

21

Page 22: Introdução à análise orientada a objetos parte 2

Exemplo de Sobrecarga de um Métodoclass Produto {

int cod;

String desc;

Produto (String desc, int cod) {

this.cod = cod;

this.desc = desc;

}

String getInfo () {

String resposta = "Produto: " + desc + ", código = " + cod;

return resposta;

}

String getInfo (int n) {

String resposta;

if (n == 1 ) {

resposta = "Product name: " + desc + ", code = " + cod;

} else {

resposta = "Product code: " + cod + ", name = " + desc;

}

return resposta;

}

}

Segue...22

Page 23: Introdução à análise orientada a objetos parte 2

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

Produto prod= new Produto ("tijolo", 1111 );String texto;

texto = prod.getInfo();System.out.println(texto);

texto = prod.getInfo(1);System.out.println(texto);

texto = prod.getInfo(2);System.out.println(texto);

}}

23

Page 24: Introdução à análise orientada a objetos parte 2

Polimorfismo

• É quando existem várias formas de um método ser ativado.

• As mais usuais são:• Polimorfismo por herança - Quando ocorre a

sobreposição de um método de uma subclasse em cima do método da superclasse.

• Polimorfismo por Sobrecarga - Quando em uma classe, um mesmo método (de mesmo nome) pode ser chamado de várias maneiras diferentes, onde a diferença está na quantidade e no tipo de parâmetros passados.

24

Page 25: Introdução à análise orientada a objetos parte 2

A. Faça a modelagem em um diagrama UML.

B. Criar, em Java, as classes Produto, Alimento e o programa Atividade2 de acordo com o especificado abaixo:

Um produto tem os seguintes atributos: código, descrição, setor e preço.

Significado de setor: 1 = alimento, 2 = higiene e 3 = roupas.

Esses atributos não podem ser acessados diretamente pelo programa

Atividade2. 

Um Alimento é um produto, com a diferença que ele tem um atributo a mais,

que é o código da vigilância sanitária.

 

Um produto pode ser criado passando-se todos os atributos, ou omitindo-se o

atributo de setor, e nesse caso assume-se setor 3 (roupas).

 

Atividade 2

25

Page 26: Introdução à análise orientada a objetos parte 2

Para criar-se um alimento, é necessário passar todos os atributos, exceto o setor, que será assumido como 1.  Os produtos tem um valor de ICMS de 15%, porém para alimentos deve-se calcular 10% para alimentos nacionais ou 20% para alimentos importados. Os alimentos nacionais são aqueles cujo código de Vigilância começa com “55”. OBS: • Não há necessidade,nesta atividade, de validar os valores dos atributos. Assumiremos que os atributos para os Construtores serão sempre válidos.

• O programa Atividade2 deve criar vários produtos para cobrir todas as possibilidades do enunciado

26

Page 27: Introdução à análise orientada a objetos parte 2

A. Faça a modelagem em um diagrama UML.

B. Criar, em Java, algumas classes relacionadas, aplicando os conceitos de encapsulamento, herança, sobrecarga e reescrita.

Atividade 3

27

Page 28: Introdução à análise orientada a objetos parte 2

Referências

• Orientação a objetos. Disponível em <http : //www.softechnetwork.com.br/java/CursoOO.pdf >. Acesso em :11 mar. 2011.

• Java e Orientação a Objetos. Disponível em <www. caelum.com.br> Acesso em 15 fev. 2009.

• RUMBAUGH, James et al. Modelagem e Projetos baseados e Objetos. Rio de Janeiro: Campus, 1997.

28