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
pares a seguir:
•
•
•
•
ClienteEspecial, Cliente
Veículo, Caminhão
Motorista, Funcionário
Quadrilátero, Quadrado
a superclasse e a subclasse nos
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
Herança
• Exercícios 8.3. Escreva
um comentário ao lado de cada
instrução indicando qual o método que será chamado.
Herança
• Exercícios 8.4. Escreva
um comentário ao lado de cada
instrução indicando qual o método que será chamado.
Herança
• Exercícios 8.5. Escreva
os construtores para a classe Filho.
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
Associação
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);
}
}
O blueJ trata a associação
como uma dependência
(----)
Em UML
temos:
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.
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.
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
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
Classes Abstratas
• Ex.:
Classes Abstratas
• Ex.: Implementação da classe concreta Mensalista
Classes Abstratas
• Ex.: Implementação da classe concreta Horista
Classes Abstratas
• Ex.: Classe Teste
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
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
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.
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; }
}
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?
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
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; }
}
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?
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.
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”.
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.
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
Métodos
• Referências bibliográficas
• http://inf.unisinos.br/~anibal
Download

Nota de Aula