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

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

Prof. Gilberto Irajá Müller

Apresentações semelhantes


Apresentação em tema: "Prof. Gilberto Irajá Müller"— Transcrição da apresentação:

1 Prof. Gilberto Irajá Müller
Programação I Aula 8 (Herança, Associação, Classes Abstratas e Membros Estáticos) Prof. Gilberto Irajá Müller Última atualização 28/4/2009

2 Herança ClienteEspecial, Cliente Veículo, Caminhão
Exercícios 8.1. Identifique a superclasse e a subclasse nos pares a seguir: ClienteEspecial, Cliente Veículo, Caminhão Motorista, Funcionário Quadrilátero, Quadrado

3 Herança Empregado, Cliente Monitor, UnidadeDeEntradaESaída
Exercícios 8.2. Quais dos grupos de classes abaixo apresentam relação de herança? Desenhe diagramas de classes para cada grupo, mostrando as relações de herança existentes. Empregado, Cliente Monitor, UnidadeDeEntradaESaída Leite, Produto, ProdutoPerecível Música, ObraDeArte, Pintura, Samba Automóvel, Peça, Eixo, Veículo Caminhão, Balão, Veículo, Proprietário, Avião, VeículoTerrestre, Pessoa, Ônibus, VeículoAéreo

4 Herança Exercícios 8.3. Escreva um comentário ao lado de cada instrução indicando qual o método que será chamado.

5 Herança Exercícios 8.4. Escreva um comentário ao lado de cada instrução indicando qual o método que será chamado.

6 Herança Exercícios 8.5. Escreva os construtores para a classe Filho.

7 Associação Sempre que um atributo de uma classe não é de tipo primitivo, temos uma associação desta classe com alguma outra Uma associação (binária) é um relacionamento estrutural entre duas classes, especificando que os objetos de uma classe estão conectados a objetos de outra

8 Associação Em UML temos:
public class Cliente{ private int codigo; private Data dtNascimento; public Cliente(int codigo, int dia, int mes, int ano) { this.codigo = codigo; this.dtNascimento = new Data(dia, mes, ano); } Em UML temos: O blueJ trata a associação como uma dependência (----)

9 Classes Abstratas public abstract class Empregado{
Uma classe abstrata é aquela que não pode ser instanciada. É uma classe que existe para ser herdada obrigatoriamente. Constitui-se em um "molde" a partir do qual subclasses serão construídas. Em Java, indica-se com o modificador abstract antes da palavra class. public abstract class Empregado{ private String nome; ... } Em UML temos o nome <<abstract>> que é chamado de “estereótipo”. O nome da classe está em negrito e itálico. Os métodos abstratos ficarão em itálico.

10 Classes Abstratas Ex.. Uma empresa contrata empregados através de uma das duas modalidades de pagamento: mensalistas ou horistas. O empregado mensalista recebe um salário básico mensal fixo mais as horas extras que ele faz no mês. O valor de uma hora-extra corresponde a 1/160 do salário básico mensal. O empregado horista simplesmente recebe pelas horas trabalhadas no mês, não existindo o recurso de hora extra.

11 Classes Abstratas Nenhum empregado jamais será instanciado na superclasse, uma vez que ele deve ser obrigatoriamente enquadrado numa das duas categorias: mensalista ou horista. A classe empregado, neste caso, é dita uma classe abstrata. Uma classe que realmente instancia objetos é dita uma classe concreta. É o caso das nossas classes Horista e Mensalista Uma superclasse abstrata é extremamente genérica, especificando apenas características comuns a qualquer subclasse possível. Em nosso exemplo, todo empregado tem um nome Uma classe abstrata possui, em geral, um ou mais métodos abstratos

12 Classes Abstratas Um método abstrato é um método composto apenas de assinatura e sem implementação (sem bloco de código). A implementação deverá ser feita obrigatoriamente pelas subclasses concretas. Indica-se método pelo modificador abstract antes do tipo de retorno public abstract double calculaLiquidoMes(int horas); Este método abstrato na classe Empregado obriga sua sobrescrita em subclasses concretas. Assim, cada categoria específica de empregado irá implementar de forma diferente o cálculo do valor líquido que o empregado irá receber ao final do mês

13 Classes Abstratas Ex.:

14 Classes Abstratas Ex.: Implementação da classe concreta Mensalista

15 Classes Abstratas Ex.: Implementação da classe concreta Horista

16 Classes Abstratas Ex.: Classe Teste

17 Classes Abstratas Considerações sobre classes abstratas:
Construtores não podem ser abstratos Uma classe que contém um ou mais métodos abstratos deve ser declarada como abstrata, mesmo que tenha métodos não abstratos Cada subclasse concreta de uma superclasse abstrata deve implementar os métodos abstratos da superclasse Se uma classe estende outra que tem método abstrato e não o implementa, então ela também é abstrata e deve ser declarada como tal

18 Classes Abstratas Exercício 8.6. Crie a classe abstrata Figura sem nenhum atributo e com os métodos abstratos calculaArea e calculaPerimetro, que retornam, respectivamente, a área e o perímetro da figura. A seguir, crie: a subclasse concreta Retangulo com dois atributos base e altura. a subclasse concreta Circulo com o atributo raio. Retângulo: Área: Base * Altura Perímetro: Base * 2 + Altura * 2 Círculo: Área: PI * R2 Perímetro: 2 * PI * R

19 Membros Estáticos A palavra-chave static indica que o escopo do membro (atributo ou método) é a classe e não a instância. Até o momento, estávamos instanciando uma classe obtendo uma cópia da classe. Um atributo static permite que todas as instâncias compartilhem uma única cópia da variável, isto é, um atributo static se refere à classe toda e não a cada instância da classe em particular. Por isso são chamados atributos de classe. Se um objeto da classe mudar o valor do atributo static, todos os objetos da classe terão acesso ao novo valor.

20 Membros Estáticos (atributo)
Ex.: public class AcessoCatraca { private static int acessosTotal; // atributo da classe private String nome; public AcessoCatraca(String nome) { this.nome = nome; this.acessosTotal++; } public int getAcessoTotal() { return acessosTotal; }

21 Membros Estáticos (atributo)
Ex.: public class TesteCatraca { public static void main(String[] args) { AcessoCatraca a = new AcessoCatraca("Gilberto"); System.out.println(a.getAcessoTotal()); AcessoCatraca b = new AcessoCatraca("João"); System.out.println(b.getAcessoTotal()); } Qual é a saída?

22 Membros Estáticos (método)
Todo método de nossas classes programadas até agora (exceção feita ao main) operam sobre alguma instância particular da classe (um objeto daquela classe), a qual é o seu parâmetro implícito. Um método static (ou método de classe) é aquele declarado com a palavra-chave static e não tem um parâmetro implícito, isto é — ele não opera sobre um objeto em particular

23 Membros Estáticos (método)
Ex.: public class AcessoCatraca { private static int acessosTotal; // atributo da classe private String nome; public AcessoCatraca(String nome) { this.nome = nome; this.acessosTotal++; } public static int getAcessoTotal() { return acessosTotal; }

24 Membros Estáticos (método)
Ex.: public class TesteCatraca { public static void main(String[] args) { AcessoCatraca a = new AcessoCatraca("Gilberto"); System.out.println(AcessoCatraca.getAcessoTotal()); AcessoCatraca b = new AcessoCatraca("João"); } Qual é a saída?

25 Membros Estáticos A grande vantagem do método static é ser chamado sem necessidade de instanciar um objeto Um método static não pode acessar membros não-static. Ex.: public static int getAcessoTotal() { nome = "Teste"; // Atributo nome não é estático! return acessosTotal; } O Java utiliza o recurso de static, como por exemplo a classe Math.

26 Membros Estáticos Exercício 8.7. Crie uma classe Calculadora que realiza as quatro operações básicas (somente para números inteiros). Utilize “static”.

27 Hot Topic Evite erros e notação errada para associação, dependência e generalização/especialização É UM identifica a presença de generalização/especialização. Todo objeto da classe B é um objeto também da classe A. . TEM UM ATRIBUTO DE identifica uma associação. A classe A tem um atributo do tipo B. USA serve para denotar a presença de uma dependência. A classe A usa funcionalidades da classe B.

28 Hot Topic Pode-se aplicar o modificador final a métodos e a classes:
Um método declarado final não pode ser redefinido numa subclasse Métodos static e métodos private são implicitamente final Métodos final podem melhorar o desempenho Uma classe declarada final não pode ser superclasse Toda classe final tem seus métodos implicitamente final

29 Métodos Referências bibliográficas


Carregar ppt "Prof. Gilberto Irajá Müller"

Apresentações semelhantes


Anúncios Google