Os Pilares da OO em Java Alexandre Parra E-mail: [email protected] Site: www.udesc.br Roteiro Como expressar o Encapsulamento em Java Sintaxe para expressar herança em Java Sintaxe para expressar Polimorfismo em Java Encapsulamento (ocultação) Implementação não interessa a quem usa os objetos. Papel dos usuários de classes Não precisa saber como a classe foi implementada. Usa apenas a interface da classe. Papel do desenvolvedor de classes Definir novos tipos de dados. Expor a interface (métodos) da classe e ocultar suas implementações. Sintaxe de Herança Simples e Múltipla A herança possibilita o compartilhamento de atributos e métodos de uma ou mais classes em uma subclasse. A classe X que herda as variáveis e métodos de instância da classe Y é denominada subclasse. A sintaxe de definição de Herança Simples em Java: class NomeDaSubClasse extends NomeDaSuperClasse { ... } Modelagem de Herança Simples em Java Pessoa - nome - idade - endereco - setNome(nome) - getNome() - setEndereco(end) - getEndereco() - setIdade(idade) - getIdade() Professor Aluno - salario - curriculo - matricula - curso - setSalario(valor) - getSalario() - setCurriculo(curriculo) - getCurriculo() - printCurriculo() - setMatricula(mat) - getMatricula() - setCurso(curso) - getCurso() - addDisciplina(disc) - removeDisciplina(disc) - printDisciplinas() Exemplo de Herança Simples em Java declara herança da superclasse “Pessoa” // Classe Pessoa derivada da classe Pessoa public class Aluno extends Pessoa { // Definição dos atributos da classe Pessoa private String matricula; private Vector<String> disciplinasCurscadas; // construtor para a classe Pessoa public Aluno(String nome, String end, int idade, String mat, Vector<String> disciplinas) { super(nome,end,idade); // chama o construtor da superclasse setMatricula(mat); setDisciplinas(disciplinas); } // configura a matrícula do Aluno public void setMatricula(String mat) { matricula = mat; } ... Modelagem “Herança Múltipla” em Java <<interface>> Relogio <<interface>> Radio - setEmissora(emissora,tipoEmi) - getEmissora() - getTipoEmissora() - setVolumeRadio(vol) - getVolumeRadio() - setHorario(horario) - getHorario() - setHorarioAlarme(horario) - getHorarioAlarme(horario) - ligarAlarme() - desligarAlarme() - setVolumeRelogio(vol) - getVolumeRelogio() RadioRelogio - horario - despertar - horarioAlarme - emissora - tipoEmissora - volumeRadio - volumeRelogio Exemplo de Herança Múltipla em Java public interface Relogio { public void setHorario(Date horario); public Date getHorario(); public void setHorarioAlarme(Date horario); public Date getHorarioAlarme(); public void ligarAlarme(); public void desligarAlarme(); public void setVolumeRelogio(int volume); public int getVolumeReologio(); } public interface Radio { public void setEmissora(float emissora, String tipo); public float getEmissora(); public String getTipoEmissora(); public void setVolumeRadio(int volume); public int getVolumeRadio(); } public class RadioRelogio implements Radio, Relogio { private Date horario; private Date horarioAlarme; private boolean despertar; private float emissora; private String tipoEmissora; private int volume; public RadioRelogio(Date horario) { this.horario = horario; } public void setHorario(Date horario) { this.horario = horario; } public void setHorarioAlarme(Date horario) { horarioAlarme = horario; } ... Modelagem de Polimorfismo em Java FigurasGeometricas - base - altura - coordX - coordY - setBase(base) - getBase() - setAltura(altura) - getAltura() - setCoordenadaX(x) - getICoordenadaX() - setCoordenadaY(y) - getICoordenadaY() - calculaArea() Triangulo - calculaArea() Quadrado - calculaArea() Retangulo - calculaArea() Exemplo de Polimorfismo em Java Classe abstrata public abstract class FigurasGeometricas { private float base; private float altura; private float coordX; private float coordY; public class Triangulo extends FigurasGeometricas { public Triangulo(float base, float altura, float coordX, float coordY) { super(); // chamada do construtor padrão da superclasse setBase(base); setAltura(altura); setCoordenadaX(coordX); setCoordenadaY(coordY); } public abstract float calculaPerimetro(); public abstract float calculaArea(); public void setBase(float base) { this.base = base; } public float getBase() { return base; } public void setAltura(float altura) { this.altura = altura; } ... } public float calculaArea() { return (getBase() * getAltura()) / 2; } } Métodos abstratos Trabalho e Exercícios Elaborar um resumo em dupla de no mínimo 4 páginas e máximo de 5, destacando entre outros assuntos como representar Classes, Objetos, Encapsulamento, Herança (Simples e Múltipla), Polimorfismo e os principais relacionamentos entre classes em UML. Fazer os exercícios propostos no arquivo “exercicios_sintaxe_ling_java.doc” que se encontra em http://www.joinville.udesc.br/portal/professores/parra/ no link “Materiais” da disciplina LPG-II.