Introdução à análise orientada a objetos parte 2
-
Upload
irenescotolo -
Category
Technology
-
view
1.337 -
download
0
Transcript of Introdução à análise orientada a objetos parte 2
![Page 1: Introdução à análise orientada a objetos parte 2](https://reader034.fdocumentos.tips/reader034/viewer/2022042607/5572c916d8b42abb378b4cbd/html5/thumbnails/1.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022042607/5572c916d8b42abb378b4cbd/html5/thumbnails/2.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022042607/5572c916d8b42abb378b4cbd/html5/thumbnails/3.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022042607/5572c916d8b42abb378b4cbd/html5/thumbnails/4.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022042607/5572c916d8b42abb378b4cbd/html5/thumbnails/5.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022042607/5572c916d8b42abb378b4cbd/html5/thumbnails/6.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022042607/5572c916d8b42abb378b4cbd/html5/thumbnails/7.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022042607/5572c916d8b42abb378b4cbd/html5/thumbnails/8.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022042607/5572c916d8b42abb378b4cbd/html5/thumbnails/9.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022042607/5572c916d8b42abb378b4cbd/html5/thumbnails/10.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022042607/5572c916d8b42abb378b4cbd/html5/thumbnails/11.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022042607/5572c916d8b42abb378b4cbd/html5/thumbnails/12.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022042607/5572c916d8b42abb378b4cbd/html5/thumbnails/13.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022042607/5572c916d8b42abb378b4cbd/html5/thumbnails/14.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022042607/5572c916d8b42abb378b4cbd/html5/thumbnails/15.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022042607/5572c916d8b42abb378b4cbd/html5/thumbnails/16.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022042607/5572c916d8b42abb378b4cbd/html5/thumbnails/17.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022042607/5572c916d8b42abb378b4cbd/html5/thumbnails/18.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022042607/5572c916d8b42abb378b4cbd/html5/thumbnails/19.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022042607/5572c916d8b42abb378b4cbd/html5/thumbnails/20.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022042607/5572c916d8b42abb378b4cbd/html5/thumbnails/21.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022042607/5572c916d8b42abb378b4cbd/html5/thumbnails/22.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022042607/5572c916d8b42abb378b4cbd/html5/thumbnails/23.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022042607/5572c916d8b42abb378b4cbd/html5/thumbnails/24.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022042607/5572c916d8b42abb378b4cbd/html5/thumbnails/25.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022042607/5572c916d8b42abb378b4cbd/html5/thumbnails/26.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022042607/5572c916d8b42abb378b4cbd/html5/thumbnails/27.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022042607/5572c916d8b42abb378b4cbd/html5/thumbnails/28.jpg)
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