programação i aula 8 (herança, associação, classes abstratas e membros estáticos) prof....
TRANSCRIPT
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
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
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çã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 (----)
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 * AlturaPerí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 classeprivate 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 classeprivate 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