A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Atributos e Métodos Restrições de Acesso Encapsulamento Herança.

Apresentações semelhantes


Apresentação em tema: "Atributos e Métodos Restrições de Acesso Encapsulamento Herança."— Transcrição da apresentação:

1 Atributos e Métodos Restrições de Acesso Encapsulamento Herança

2 Atributos e Métodos Restrições de Acesso Encapsulamento

3 3 Variáveis – Classe, Instância e Método Tipos de variáveis estudadas –Variável local de método –Variável de instância diferença ?

4 4 public class Circulo { public int numcirc = 0; // atributo sem restrição de uso private double x, y, r; public Circulo ( double a, double b, double c) { x = a; y = b; r = c; numcirc++; } public double calcularArea ( ) { double calc = 3.1416 * r * r; return calc; } public static void main (String[ ] args) { Circulo umcirculo = new Circulo ( 0.0, 0.0, 2.0 ); System.out.println("Area do circulo = " + umcirculo.calcularArea ( )); System.out.println("Numero de circulos = " + umcirculo.numcirc); } Exemplo

5 5 public class Circulo { private int numcirc = 0; private double x, y, r; public Circulo ( double a, double b, double c) { x = a; y = b; r = c; numcirc++; } public double calcularArea ( ) { double calc = 3.1416 * r * r; return calc; } public static void main (String[ ] args) { Circulo umcirculo = new Circulo ( 0.0, 0.0, 2.0 ); System.out.println("Area do circulo = " + umcirculo.calcularArea ( )); } Variável de instância Variáveis de instância Variável local de método Exemplo

6 6 Variáveis de Instância: há uma cópia para cada instância da classe public class Circulo { private int numcirc = 0; private double x, y, r; Circulo (double x, double y, double r) { this.x = x; this.y = y; this.r = r; numcirc ++; } Variáveis de Instância

7 7 public class Circulo { private int numcirc = 0; private double PI = 3.1415926535897; private double x, y, r; public Circulo ( double a, double b, double c) { this.x = a; this.y = b; this.r = c; numcirc ++; } public double calcularArea ( ) { double calc = PI * r * r; return calc; } public static void main (String[ ] args) { Circulo umcirculo = new Circulo ( 0.0, 0.0, 2.0 ); System.out.println("Area do circulo = " + umcirculo.calcularArea ( )); }

8 8 Restrições de Acesso Já vimos que: –uma classe define atributos, métodos e construtores dessa classe –objetos podem ser criados durante a execução de um programa –cada objeto contém variáveis de instância definidas na classe e pode receber chamadas de métodos declarados na sua classe Alguns modificadores de acesso podem ser especificados em declarações de classes, atributos e métodos

9 9 Restrições de Acesso Java usa modificadores de controle de acesso para especificar o nível de visibilidade de um método ou uma variável para as outras classes Podem ser declarados quatro tipos de modificadores de acesso: –public –private –protected –default (ou sem modificador) Modificadores de acesso podem ser aplicados na definição de classes, nos atributos e nos métodos

10 10 Restrições de Acesso public –Pode ser acessado a partir de qualquer outra classe –É a condição de menor restrição possível protected –Pode ser acessado por métodos de classe que o contém, assim como por qualquer classe que tenha sido derivada dessa classe (sub-classes) mesmo que esteja em outro package private –É privativo da classe que o contém e seu uso não é permitido a qualquer outra classe sem modificador –Uso permitido dentro da classe que o contém, assim como dentro de qualquer classe que tenha sido derivada dessa classe, que esteja no mesmo package –Este é o modificador default, isto é, aquele que é assumido se nenhum modificador for explicitamente especificado

11 11 Visibilidade Pacotes (package): unidades de compilação distintas, usadas para divisão de programas em partes organizadas hierarquicamente, que possibilita o controle da visibilidade de nomes em programas Acesso permitido na publicsem nenhum modificador protectedprivate mesma classe SIM subclasse do mesmo pacote SIM NÃO classe do mesmo pacote SIM NÃO subclasse em outro pacote SIMNÃOSIMNÃO classe em outro pacote SIMNÃO

12 12 Encapsulamento Objetivo: “ocultar” os detalhes de implementação do mundo externo ao objeto e restringir o acesso a atributos e métodos

13 13 Vantagens do Encapsulamento Segurança no acesso ao objeto Maior consistência no estado interno, pois evita alteração incorreta dos atributos Maior facilidade de modularização A comunicação entre um objeto e o mundo externo é feita através de troca de mensagens Uma mensagem é tratada por um método adequado da classe representante do objeto

14 Operações de Abstração

15 15 Operações de Abstração – Conceitos As operações de abstração mostram como o ser humano mentaliza, organiza e modela o mundo ao seu redor Algumas operações de abstração relevantes para a Modelagem Conceitual são Classificação / Instanciação Generalização / Especialização Agregação / Decomposição Associação

16 16 Generalização Processo pelo qual os caracteres comuns a vários objetos são identificados Pode resultar na formação de um novo conceito ou idéia ou na extensão de um conceito já determinado, que passa a cobrir uma nova classe de exemplos Especialização Processo de divisão do trabalho encarado do ângulo individual Especializar é mencionar ou tratar à parte, de modo especial; particularizar, singularizar, especificar

17 17 Estudante GENERALIZAÇÃO Classes Classe Estudante de graduaçãoEstudante de pós-graduação Generalização

18 18 Especialização ESPECIALIZAÇÃO Classe Mamífero Baleia

19 19 Generalização/Especialização Classe Geral Pessoa Classes Especializadas Relação de pertinência: É UM TIPO DE Estudante Professor Funcionário Diretor

20 20 Generalização/Especialização Classe mais geral Classe mais específica Notação UML

21 21 Operações de Abstração Relevantes para a Modelagem Conceitual Generalização Operação de análise de um conjunto de classes que identifica características comuns a todas elas, tendo como objetivo a definição de uma classe mais genérica, a qual especificará estas características comuns Especialização Operação em que, a partir de uma classe, identifica-se uma ou mais sub-classes, cada uma especificando características adicionais em relação a classe mais geral

22 22 Operações de Abstração Relevantes para a Modelagem Conceitual Generalização / Especialização Se, a partir de um conjunto de classes, pode-se identificar características que são comuns a elas, então uma nova classe, mais geral, pode ser definida –a partir de duas classes abstrai-se uma classe mais genérica –as sub-classes satisfazem todas as propriedades das classes das quais elas constituem especializações –deve existir pelo menos uma propriedade que distingue duas classes especializadas

23 Herança

24 24 Herança subclasse superclasse Herança é um relacionamento do tipo generalização/especialização, onde uma classe – a subclasse – pode ser derivada de outra classe mais geral – a superclasse – absorvendo todas as suas características fundamentais e podendo adicionar outras novas características, de tal modo a torná-la mais especializada

25 25

26 26

27 27

28 28

29 29

30 30 Superclasse Implementação da Superclasse Funcionario public class Funcionario { String nome; String rg; double salario; public Funcionario (String nomef, String ident, double sal) { this.nome = nomef; this.rg = ident; this.salario = sal; } public void aumentar (double valor) { salario = salario + valor; } public double pagar ( ) { return salario; }

31 31 Superclasse Implementação da Superclasse Funcionario public class Funcionario { protected String nome; protected String rg; protected double salario; public Funcionario (String nomef, String ident, double sal) { this.nome = nomef; this.rg = ident; this.salario = sal; } public void aumentar (double valor) { salario = salario + valor; } public double pagar ( ) { return salario; } Construtor da classe Método da classe Métodos da classe Atributos

32 32 Subclasse Implementação da Subclasse Chefe public class Chefe extends Funcionario { double gastos_extra; double adicional_chefia; public Chefe (String nomef, String rg, double sal, double gastos, double adic) { super (nomef, rg, sal); this.gastos_extra = gastos; this.adicional_chefia = adic; } public double pagar ( ) { double recebe; recebe = salario + gastos_extra + adicional_chefia; return recebe; }

33 33 Subclasse Implementação da Subclasse Chefe public class Chefe extends Funcionario { double gastos_extra; double adicional_chefia; public Chefe (String nomef, String rg, double sal, double gastos, double adic) { super (nomef, rg, sal); this.gastos_extra = gastos; this.adicional_chefia = adic; } public double pagar ( ) { double recebe; recebe = salario + gastos_extra + adicional_chefia; return recebe; } Palavra reservada para designar que uma classe é sub-classe de uma outra classe; no caso, Chefe é uma sub-classe derivada de Funcionário

34 34 Subclasse Implementação da Subclasse Chefe public class Chefe extends Funcionario { double gastos_extra; double adicional_chefia; public Chefe (String nomef, String rg, double sal, double gastos, double adic) { super (nomef, rg, sal); this.gastos_extra = gastos; this.adicional_chefia = adic; } public double pagar ( ) { double recebe; recebe = salario + gastos_extra + adicional_chefia; return recebe; } Invocação do método construtor da super- classe Funcionário

35 35 Subclasse Implementação da Subclasse Chefe public class Chefe extends Funcionario { double gastos_extra; double adicional_chefia; public Chefe (String nomef, String rg, double sal, double gastos, double adic) { super (nomef, rg, sal); gastos_extra = gastos; adicional_chefia = adic; } public double pagar ( ) { double recebe; recebe = salario + gastos_extra + adicional_chefia; return recebe; } Atributos adicionais Construtor da subclasse Chefe Invocação do construtor da superclasse Funcionario Redefinição do método pagamento

36 36 Instanciação da subclasse public class Teste { public static void main (String [ ] args) { Chefe joao = new Chefe ("Joao", "324569", 1158.21, 259.90, 500); joao.aumentar (300); System.out.println ("Joao ganha: R$ " + joao.pagar( )); } Criação de um objeto da classe Chefe Execução do método aumentar, definido na superclasse Funcionário para um objeto da classe Chefe Execução do método pagar, definido na subclasse Chefe

37 37

38 38 Implementação da subclasse Chefe com super public class Chefe extends Funcionario { private double gastos_extra; private double adicional_chefia; public Chefe (String nomef, String rg, double sal, double gastos, double adic) { super (nomef, rg, sal); // Construtor da superclasse Funcionario this.gastos_extra = gastos; this.adicional_chefia = adic; } public double pagar ( ) { double recebe; recebe = super.pagar ( ); // Chamada de pagamento( ) da superclasse recebe = recebe + gastos_extra + adicional_chefia; return recebe; } Execução do método pagamento definido na superclasse

39 39 public class Ponto {... } public class Ponto3D extends Ponto {... } public class TestePonto { // classe de teste public static void main (String [ ] args) {... }

40 40 public class Ponto { private int x; private int y; public Ponto (int a, int b) { // Método Construtor this.x = a; this.y = b; } public double calcularDistancia (Ponto p) { // Método int dx = this.x - p.x; int dy = this.y - p.y; return Math.sqrt (dx*dx + dy*dy); }

41 41 public class Ponto3D extends Ponto { private int z; public Ponto3D (int a, int b, int c) { super (a, b); this.z = c; } public double calcularDistancia (Ponto3D p) { int dx = x - p.x; int dy = y - p.y; int dz = z - p.z; return Math.sqrt (dx*dx + dy*dy + dz*dz); }

42 42 public class TestePonto { public static void main (String [ ] args) { Ponto p1 = new Ponto (0, 0); Ponto p2 = new Ponto (10, 10); System.out.println (p1.calcularDistancia(p2)); Ponto3D p3 = new Ponto3D (0, 0, 0); Ponto3D p4 = new Ponto3D (10, 10, 10); System.out.println (p3.calcularDistancia(p4)); }

43 43 //Classe Empregado Comissionado public class EmpComissionado extends Object { protected String nome; protected double totalVendas; protected double taxaComissao; // construtor com 3 argumentos public EmpComissionado (String n,double vendas,double comissao){ nome = n; setTotalVendas (vendas); setTaxaComissao (comissao); }

44 44 public void setNome (String n){ nome = n; } public String getNome() { return nome; } public void setTotalVendas (double vendas){ totalVendas = (vendas < 0.0) ? 0.0 : vendas; } public double getTotalVendas () { return totalVendas; }

45 45 public void setTaxaComissao (double tx){ taxaComissao = (tx < 0.0) ? 0.0 : tx; } public double getTaxaComissao () { return taxaComissao; } public double calcularSalario(){ // Calcula o salário return taxaComissao * totalVendas; }

46 46 public void mostrarAtributos () { System.out.println("Nome do empregado: " + nome); System.out.println("Total de Vendas: " + String.format("%.2f",totalVendas)); System.out.println("Taxa de Comissão: "+ String.format("%.2f",taxaComissao)); System.out.println("Salario Total: " + String.format("%.2f",calcularSalario())); } } // fim da classe Empregado Comissionado

47 47 public class EmpFixoComissionado extends EmpComissionado { private double salarioBase; // atributo exclusivo public EmpFixoComissionado ( //constructor da classe String n, double vendas, double comissao, double salBase){ // chama construtor da superclasse super (n, vendas, comissao); // chamada a método da própria classe setSalarioBase (salBase); }

48 48 public void setSalarioBase (double salBase){ salarioBase=(salBase<0.0) ? 0.0 : salBase; } public double getSalarioBase() { return salarioBase; } public double calcularSalario(){ // Calcula o salário return salarioBase + super.calcularSalario(); }

49 49 // Mostra as informações public void mostrarAtributos () { super.mostrarAtributos(); System.out.println("Salario Base: " + String.format("%.2f", salarioBase)); } } // fim da classe Empregado Fixo Comissionado

50 50 public class Principal{ // método main public static void main ( String argv[]) { //instancia obj.da classe EmpFixoComissionado EmpFixoComissionado empregado = new EmpFixoComissionado ("Roberto Silveira", 2000.00, 0.1, 300); // obtém os dados do empregado System.out.println ("Dados do Empregado:"); System.out.printf ("%s \n", "Nome: ", empregado.getNome() ); System.out.printf ("%s %.2f\n", "Vendas: ", empregado.getVendas() );

51 51 System.out.printf ("%s %.2f\n", "Comissao: ", empregado.getTaxaComissao() ); System.out.printf ("%s %.2f\n", "Salario total: ", empregado.calcularSalario() ); System.out.printf ("%s %.2f\n", "Salario base: ", empregado.getSalarioBase() ); System.out.println ("Informacoes do empregado" + " via o método mostrarAtributos"); empregado.mostrarAtributos(); } // fim do método main } // fim da classe Principal


Carregar ppt "Atributos e Métodos Restrições de Acesso Encapsulamento Herança."

Apresentações semelhantes


Anúncios Google