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

Post on 06-Jun-2015

1.337 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Introdução à Análise Orientada a Objetos

Prof. Ariovaldo Dias de Oliveira

Parte 2

1

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

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

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

}

void demite(){ativo = false;

}

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

}

}

Métodos

Segue...4

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

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

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

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

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

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

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

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

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

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

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

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

class Importado extends Produto {

int codImportação;

void setPreço(double preço) {

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

}

}

17

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

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

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

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

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

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

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

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

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

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

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

top related