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

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

Atributos e Métodos Estáticos

Apresentações semelhantes


Apresentação em tema: "Atributos e Métodos Estáticos"— Transcrição da apresentação:

1 Atributos e Métodos Estáticos
Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas

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

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 Variáveis de Classe ou Atributos Estáticos Declaradas com o modificador static São únicas para toda a classe, independente do número de instâncias, ou seja, independente do número de objetos diferença?

4 Atributos Estáticos Um atributo usado com o modificador static tem o seu valor compartilhado por todos os objetos da classe, ou seja, só haverá uma cópia dele para todos os objetos da classe Também chamados de variáveis de classe Por exemplo: static double valordolar;

5 Exemplo public class Circulo { private static 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 area ( ) { double calc = * 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.area ( )); System.out.println("Numero de circulos = " + Circulo.numcirc);

6 Variáveis de instância Variável local de método
Exemplo Variável de classe public class Circulo { private static 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 area ( ) { double calc = * 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.area ( )); System.out.println("Numero de circulos = " + Circulo.numcirc); Variáveis de instância Variável local de método

7 Variáveis de Classe x Variáveis de Instância
Variáveis de Classe: existe apenas uma única cópia da variável, associada à classe Variáveis de Instância: há uma cópia para cada instância da classe public class Circulo { private static 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 ++; }

8 Variáveis de Classe Devemos acessá-la através da classe: Constantes
System.out.println (“Número de circulos = ” +Circulo.numcirc); Constantes public class Circulo { private static final double PI = ; ... } O modificador final significa que, uma vez iniciado este atributo, ele não pode mais sofrer alteração (~constante)

9 public class Circulo { private static int numcirc = 0; private static final double PI = ; 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 * this.r * this.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 = " + Circulo.numcirc);

10 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, além do static, já mencionado

11 Podem ser declarados quatro tipos de modificadores de acesso:
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

12 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

13 sem nenhum modificador
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 public sem nenhum modificador protected private mesma classe SIM subclasse do mesmo pacote NÃO classe do mesmo pacote subclasse em outro pacote classe em outro pacote

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

15 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

16 Operações de Abstração

17 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

18 Generalização Especializaçã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

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

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

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

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

23 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

24 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

25 Herança e Polimorfismo
Classes Abstratas

26 Herança 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

27 Herança Uma subclasse herda de sua(s) superclasse(s) os atributos e os métodos definidos nessa(s) superclasse(s) No entanto, uma subclasse pode redefinir métodos existentes nas superclasses assim como acrescentar novos atributos e novos métodos

28 Exemplo de Herança Superclasse Subclasse Funcionario nome rg salario
aumentar (valor) pagar() Chefe gastos_extra adicional_chefia Subclasse pagar()

29 Exemplo de Herança Atributos de um objeto da classe Funcionário: nome
rg salario Funcionario nome rg salario aumenta (valor) pagar() Atributos de um objeto da classe Chefe: nome rg salario gastos_extra adicional_chefia Chefe gastos_extra adicional_chefia pagar()

30 Exemplo de Herança Métodos que os objetos da classe Funcionário podem executar: aumentar (valor) pagar() Funcionario #nome #rg #salario +aumentar (valor) +pagar Chefe Métodos que os objetos da classe Chefe podem executar: aumentar (valor) pagar() -gastos_extra -adicional_chefia +pagar

31 Exemplo de Herança Métodos que os objetos da classe Funcionário podem executar: aumentar (valor) pagar() Funcionario #nome #rg #salario +aumenta (valor) +pagar qual pagamento? Chefe Métodos que os objetos da classe Chefe podem executar: aumenta (valor) pagar() -gastos_extra -adicional_chefia +pagar

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

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

34 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;

35 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; Palavra reservada para designar que uma classe é sub-classe de uma outra classe; no caso, Chefe é uma sub-classe derivada de Funcionário

36 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

37 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

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

39 Operador de referência super
A palavra reservada super permite o uso de nomes definidos na superclasse direta, que foram redefinidos na subclasse Este operador deve ser usado com bastante cuidado, principalmente na presença de modificadores de acesso Exemplo:

40 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 gastos_extra = gastos; 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

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

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

43 public class Ponto3D extends Ponto {
private int z; public Ponto3D (int a, int b, int c) { super (a, b); z = c; } public double distancia (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);

44 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.distancia(p2)); Ponto3D p3 = new Ponto3D (0, 0, 0); Ponto3D p4 = new Ponto3D (10, 10, 10); System.out.println (p3.distancia(p4)); }

45 Classes Abstratas Quando definimos uma classe supomos que objetos desta classe serão criados e instanciados Entretanto, há casos em que é útil definir classes para as quais nunca serão instanciados objetos Estas classes são utilizadas como superclasses e são chamadas de superclasses abstratas Nenhum objeto de superclasses abstratas pode ser instanciado

46 Classes Abstratas O único propósito de uma classe abstrata é fornecer uma determinada superclasse da qual outras classes possam herdar a interface e/ou a implementação As classes da qual objetos podem ser instanciados chamam-se classes concretas Exemplo: classe Animal é uma classe geral, não há objetos desta classe, e sim subclasses que são especializadas, tais como Cavalo ou Cobra, que podem possuir objetos instanciados

47 Outros Exemplos

48 Método Abstrato não possui implementação
abstract Forma double x double y public void mover ( ) public abstract void mostrar ( ) Implementação definida nas sub-classes Ponto Retangulo double c double d public Ponto (a, b) public void mostrar ( ) public Retangulo (a,b,c,d) public void mostrar ( )

49 //Classe Forma public abstract class Forma { ... } //Classe Ponto public class Ponto extends Forma { //Classe Retangulo public class Retangulo extends Forma { //Classe Principal public class Principal { public static void main (String [ ] args) {

50 //Classe Forma public abstract class Forma { private double x; private double y; public void move (double dx, double dy) { x+=dx; y+=dy; } public abstract void mostra ( ); // método abstrato

51 //Classe Ponto public class Ponto extends Forma { public Ponto (double ax, double ay) { // construtor x=ax; y=ay; } // método mover não precisa ser redefinido public void mostrar ( ) { System.out.println("("+this.x+","+this.y+")");

52 //Classe Principal public class Principal { public static void main (String args [ ]) { Ponto umponto = new Ponto (13,14); umponto.mostra ( ); umponto.move (2,2); }

53 Polimorfismo Numa dada hierarquia de classes, diferentes subclasses podem ser derivadas de uma superclasse comum Neste caso, cada uma das subclasses pode substituir ou estender as propriedades de sua superclasse Polimorfismo é a característica de herança que assegura que as instâncias de uma dada subclasse tenham comportamentos corretos, mesmo que diferentes do comportamento definido na sua superclasse

54 Polimorfismo Quando em uma subclasse se redefine um método de sua superclasse (método default), deve ser usado o mesmo nome do método utilizado na superclasse Se o comportamento do método default da superclasse é adequado para uma ou mais subclasses, então ele não deve ser redefinido O método definido na subclasse pode implementar um comportamento integralmente diferente ou pode estender aquele definido na superclasse, com características adicionais

55 Exemplo de Polimorfismo
Animal Exemplo de Polimorfismo Mamíferos tipoAlimentacao() Carnivoros tipoAlimentacao() Roedores Primatas tipoAlimentacao() Cachorros Gatos tipoAlimentacao()

56 Exemplo de Polimorfismo
Funcionario nome RG salario aumentar (valor) pagar() Gerente Presidente gastos_extra adicional_chefia participacao_lucros pagar() pagar()


Carregar ppt "Atributos e Métodos Estáticos"

Apresentações semelhantes


Anúncios Google