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

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

Embed Size (px)

Citation preview

Page 1: 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

Programação IAula 8

(Herança, Associação, Classes Abstratas e Membros

Estáticos)

Prof. Gilberto Irajá MüllerProf. Gilberto Irajá Müller

Última atualização 28/4/2009

Page 2: 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

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

Page 3: 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

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

Page 4: 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

Herança• Exercícios 8.3. Escreva um comentário ao lado de

cada instrução indicando qual o método que será chamado.

Page 5: 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

Herança• Exercícios 8.4. Escreva um comentário ao lado de

cada instrução indicando qual o método que será chamado.

Page 6: 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

Herança• Exercícios 8.5. Escreva os construtores para a

classe Filho.

Page 7: 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

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

Page 8: 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

Associaçãopublic 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 (----)

Page 9: 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

Classes Abstratas• 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.

Page 10: 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

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.

Page 11: 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

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

Page 12: 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

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

Page 13: 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

Classes Abstratas• Ex.:

Page 14: 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

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

Mensalista

Page 15: 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

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

Page 16: 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

Classes Abstratas• Ex.: Classe Teste

Page 17: 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

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

Page 18: 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

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 * AlturaPerímetro: Base * 2 + Altura * 2

Círculo:Área: PI * R2

Perímetro: 2 * PI * R

Page 19: 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

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.

Page 20: 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

Membros Estáticos (atributo)• Ex.:

public class AcessoCatraca {private static int acessosTotal; // atributo da classeprivate String nome;

public AcessoCatraca(String nome) {this.nome = nome; this.acessosTotal++;

}public int getAcessoTotal() { return acessosTotal; }

}

Page 21: 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

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?

Page 22: 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

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

Page 23: 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

Membros Estáticos (método)• Ex.:

public class AcessoCatraca {private static int acessosTotal; // atributo da classeprivate String nome;

public AcessoCatraca(String nome) {this.nome = nome; this.acessosTotal++;

}public static int getAcessoTotal() { return

acessosTotal; } }

Page 24: 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

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"); System.out.println(AcessoCatraca.getAcessoTotal());

}}

Qual é a saída?

Page 25: 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

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.

Page 26: 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

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”.

Page 27: 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

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.

Page 28: 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

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

Page 29: 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

Métodos• Referências bibliográficas

• http://inf.unisinos.br/~anibal