Buscar

Cap4 - Especializacao de Classes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 25 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 25 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 9, do total de 25 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

Isaias Camilo Boratti
4. Especialização de Classes
VeiculoAutomotor
Automovel Onibus Caminhao
Carroceria Cacamba
Isaias Camilo Boratti
Exercício
Considere que em determinada empresa os funcionários recebem um salário 
base e gratificação de produtividade. Considere que sobre o salário bruto 
incide desconto para o IRF conforme a seguir:
Salário bruto Alíquota Parcela a deduzir
até R$1000,00 isento -
acima de R$1000,00 e até R$1800.00 10% R$100.00
acima de R$1800.00 25% R$370.00
Na empresa existem aqueles funcionários que exercem cargo de chefia e que 
adicionalmente recebem uma gratificação de chefia. Existem também aqueles 
funcionários que exercem função de apoio e que recebem auxilio educação. O 
auxílio educação é de R$60.00 por dependente limitado a um máximo de 5 
dependentes. Sobre o auxílio educação não incide imposto de renda. Escreva 
uma aplicação que determine e mostre os dados salariais de um grupo de 
funcionários desta empresa.
Apoio
fornecaSalarioBruto( )
fornecaDesconto( )
fornecaAuxilioEducacao( )
Pessoa
nome
idade
sexo
Funcionario
salarioBase
grat
nDependentes
fornecaDesconto( )
fornecaSalarioBruto( )
fornecaSalarioLiquido()
Demais métodos
Chefe
gratChefia
fornecaSalarioBruto( )
Demais métodos
Herança
Definida através da palavra extends.
public class Funcionario extends Pessoa
{
.................
}
Pelo mecanismo da herança, todos os atributos e todos os métodos
(não declarados como private) são herdados pela subclasse.
Métodos construtores não são herdados.
Na subclasse pode-se adicionar novos atributos e novos métodos.
SOBREPOSIÇÃO --> MESMA ASSINATURA
SOBRECARGA --> ASSINATURAS DIFERENTES
Isaias Camilo Boratti
Atributo de classe (desde que não private) é compartilhado (mesma 
locação física) pela classe e pelas classes descendentes. 
Métodos de classe (desde que não private) são herdados pela subclasse.
Se, ao declararmos uma classe, não for definida sua superclasse, Java 
assume automaticamente a superclasse como sendo Object.
Se em um método não estático de uma subclasse, quisermos a execução de 
um método da superclasse o qual foi sobreposto na subclasse, basta ativá-
lo através especificação super.
Exemplo: public class Tecnico extends Funcionario
{ public double fornecaSalarioBruto()
{ super.fornecaSalarioBruto();
...........................
}
}
A um identificador de objeto de uma superclasse pode-se atribuir uma 
instância da subclasse.
public class Funcionario extends Pessoa
{
...........................
}
Funcionario umF = new Funcionario();
Pessoa umaP = new Pessoa();
umaP = umF; // ok
..................
umaP = new Pessoa();
umF = umaP; // ERRO
.....................
umF = (Funcionario)umaP; // ok - coerção
Isaias Camilo Boratti
- Todo construtor de uma subclasse DEVE inicialmente chamar o 
construtor da superclasse.
- Isto é feito através do comando super(argumentos).
- Caso no construtor da subclasse não seja especificado nenhuma 
chamada ao construtor da superclasse, Java coloca automaticamente uma 
chamada ao construtor padrão da superclasse.
- Caso na superclasse não exista o construtor padrão, ocorrerá um erro 
de sintaxe.
- A chamada ao construtor da superclasse deve ser o primeiro 
comando do construtor da subclasse.
Isaias Camilo Boratti
- Para determinar se uma instância é ou não de uma determinada classe, pode-
se usar o operador instanceof
if (umF instanceof Chefe)
{
...............
}
Veja que toda instância de uma subclasse é também considerada uma 
instância da superclasse. Assim, se Chefe é subclasse de Funcionario e
umF instanceof Chefe --> true
então
umF instanceof Funcionario --> true
Isaias Camilo Boratti
public final class MinhaClasse
{ protected final int umAtributo;
public final int facaAlgo()
{ final int x;
x=10; // ok
x=12; // erro
.............................
}
}
- Se uma classe for declarada com o qualificador final então esta 
classe não poderá ser superclasse;
- Um atributo declarado com o qualificador final é herdado pela 
subclasse (caso não seja private), entretanto só poderá ser inicializado uma 
única vez e isto já é feito pelo construtor.
- Um método declarado com o qualificador final é herdado por uma 
subclasse (caso não seja private) entretanto não poderá ser sobreposto. Pode 
ser sobrecarregado.
Isaias Camilo Boratti
Modificadores
public --> visibilidade na classe, pacote e fora do pacote. É
herdado pela subclasse.
protected --> visibilidade na classe e pacote. É herdado pela 
subclasse.
private --> visibilidade restrita a classe. Não é herdado pela 
subclasse.
Exercício:
A receita federal classifica seus contribuintes em pessoas físicas (PF) e pessoas 
jurídicas (PJ). Considere que o imposto de renda das pessoas físicas seja calculado 
conforme a seguir:
Renda líquida anual alíquota ( %) parcela a deduzir
até R$10000,00 isento -
> R$10000,00e até R$20000,00 10 R$1000,00
acima de R$20000,00 25 R$4000,00
A renda líquida é calculada subtraindo-se os gastos com saúde (até um limite de 
R$5000,00) e dependentes (R$1500,00 por dependente, limitado a 4 dependentes).
Para pessoas jurídicas, considere que o imposto é calculado pela tabela a seguir:
Renda líquida anual alíquota ( %) parcela a deduzir
até R$100000,00 5 -
> R$100000,00e até R$200000,00 10 R$5000,00
acima de R$200000,00 25 R$45000,00
Para cálculo da renda líquida de PJ é permitido abater os gastos com pagamento de 
pessoal.
Isaias Camilo Boratti
Juridico
gastosPessoal
fornecaRendaLiquida( )
fornecaImposto( )
Demais métodos
Contribuinte
nome
rendaBruta
FornecaRendaLiquida( ) // abstrato
FornecaImposto( ) // abstrato
Demais métodos
Fisico
nd
gastosSaude
fornecaRendaLiquida( )
fornecaImposto( )
Demais métodos
Classe
abstrata
Classe Abstrata
- Tem por objetivo organizar características comuns;
- Não pode ser instanciada;
- Se uma classe tiver pelo menos um método abstrato então ela é 
abstrata e DEVE ser declarada como abstrata;
public abstract class MinhaClasse
{
............................
public abstract void facaAlgo();
............................
}
Isaias Camilo Boratti
- Se uma subclasse de uma classe abstrata NÃO SOBREPOR os métodos
abstratos herdados, então a subclasse também é abstrata e DEVE ser 
declarada como abstrata.
- Um método abstrato não apresenta corpo.
- Para uma classe abstrata é possível declarar referências desta classe, mas 
não é permitido instanciar.
Polimorfismo
Poli + morfismo = Polimorfismo --> várias formas
umAviao.voe();
umPassaro.voe();
FiguraPlana figura;
.............................
double perimetro = figura.fornecaPerimetro();
/* figura pode conter uma instância da classe Circulo ou
PoligonoRegular. Em função da classe da instância referida por
figura, será selecionada automaticamente a forma (o método) 
correta. /*
FiguraPlana
 cor
FornecaPerimetro() //abstrato
Circulo
raio
fornecaPerimetro( )
PoligonoRegular
lado
numerolados
fornecaPerimetro( )
Isaias Camilo Boratti
Polimorfismo --> mesmo tarefa --> formas diferentes em cada classe
--> métodos diferentes, mas com o mesmo nome. Cada
método implementa uma forma.
Vinculação dinâmica ou vinculação tardia : A definição de qual método deve 
ser executado, depende da classe da instância referida pelo identificador de 
objeto. Assim, esta definição é deixada para quando da execução (no caso de 
java: interpretação) do programa.
Veja que pelo Polimorfismo, pode-se fazer com que, entre as diferentes 
formas de implementação de uma tarefa, seja selecionada a forma correta, de 
acordo com a classe da instância executora.
Isaias Camilo Boratti
O conceito de interfaceJava não apresenta herança múltipla. Em vez disso, apresenta o 
conceito de interface.
Uma interface consiste em uma classe sem atributos de instância e 
com todos os seus métodos abstratos (inclusive os de classe).
Uma interface também aceita dados public static final (constantes).
public interface FiguraPlana
{ public static final VALORPI = 3.1415;
public abstract float fornecaArea();
public abstract float fornecaPerimetro();
}
public interface CompDeslocavel
{
public abstract void deslocarH( float deslocamento);
public abstract void deslocarV( float deslocamento);
}
public class Circulo extends Object implements FiguraPlana, CompDeslocavel
{ protected float x;
protected float y;
protected float raio;
public Circulo()
{ x = 0.0f; y=0.0f; raio=0.0f;
}
public Circulo ( float vx, float vy, float vr)
{ 
x = vx; y = vy; raio = vr;
if (raio < 0 )
raio = 0;
}
public float informeX()
{ return x;}
public float informeY()
{ return y; }
Isaias Camilo Boratti
public void informeRaio()
{ return raio; }
public void recebaValorX(float vx)
{ x = vx; }
public void recebaValorY ( float vy )
{ y = vy; }
public void recebaValorRaio ( float vRaio)
{ raio = vRaio;
if (raio < 0) 
raio=0; }
public float fornecaArea()
{ // implementação do método abstrato herdado de FiguraPlana
return VALORPI * Math.pow(raio,2);
}
Isaias Camilo Boratti
public float fornecaPerimetro()
{ // implementação do método da interface FiguraPlana
return 2*VALORPI*raio; }
public void deslocarH( float v)
{ // implementação de método da interface CompDeslocavel
x += v; }
public void deslocarV ( float v)
{ // implementação de outro método da interface CompDeslocavel
y = y + v;
}
}
Isaias Camilo Boratti
Em uma interface, também pode-se ter apenas declaração de constantes, 
como por exemplo:
public interface Constantes 
{
public static final float SM = 240.00d;
public static final float VHT = 5.4d;
}
Isaias Camilo Boratti
Classes Internas
Java permite a declaração de uma (ou mais) classe internamente a
outra classe.
public class X
{
private int a;
public X()
{ }
..................
..................
public class Y
{ // classe interna
// aqui o atributo a está visível
.....................
.....................
}
}
public class SomadorPositivos
{ protected int cont;
protected double soma;
public SomadorPositivos() // construtor
{ cont = 0; 
soma = 0; 
}
public int fornecaContagem()
{ return cont; }
public double fornecaSoma()
{ return soma; }
public void some ( double valor)
{
if (valor > 0)
{ cont ++; 
soma = soma + valor; }
}
public double fornecaMedia()
{
Calculador c = new Calculador();
return c.resultado();
}
// declaração de classe interna
private class Calculador
{ /* na classe interna tem-se acesso a variáveis de instância e 
métodos da classe externa */
public double resultado()
{ if ( cont > 0)
return soma/cont;
else
return -1;
}
} // fim da declaração da classe interna
}
Isaias Camilo Boratti
- Um objeto de uma classe interna tem acesso a todas as variáveis de 
instância (atributos) do objeto que o cria. Pode também executar qualquer 
método definido pela classe externa.
- Uma classe interna só é visível dentro da classe externa, mesmo
que seja declarada com o qualificador public.

Outros materiais