APOO Aula 1.2 – Composição Prof. Bruno Moreno [email protected] Composição ● ● A composição (ou delegação) é um mecanismo de reuso da POO; Com a composição, uma instância de uma classe existente é utilizada como componente de outra classe – Na prática, uma classe é o tipo do atributo de outra classe; 2 Classe Data ● ● Atributos: – dia, mes e ano; – Qual o tipo desses atributos? Métodos: – Data(dia, mes, ano) ● – dataEhValida(dia, mes, ano) ● – Construtor da classe; Avalia se dia, mes e ano são valores que representam uma data válida; toString() ● Método sobreposto da classe Object. 3 Composição Data.java public class Data { private int dia; private int mes; private int ano; public Data(int d, int m, int a) { if(dataEhValida(d,m,a)){ dia = d; mes = m; ano = a; }else{ dia = 0; mes = 0; ano = 0; } } Este é o método construtor da classe Data. O construtor é o responsável pela inicialização de objetos do tipo Data. //… (próximo slide) 4 Composição Data.java public boolean dataEhValida(int dia, int mes, int ano) { if(ano%4==0&&mes==2&&dia>0&&dia<30) return true; else if((mes==1||mes==3||mes==5||mes==7|| mes==8||mes==10||mes==12)&&dia>0&&dia<32) return true; else if((mes==4||mes==6||mes==9||mes==11) &&dia>0&&dia<31) return true; else return false; } public String toString() { return dia + "/" + mes + “/” + ano; } Método toString da classe Object sobrescrito. } // fim da classe Data 5 Composição Aluno.java public class Aluno { Uma instância da classe String private String nomeDoAluno; Uma instância da classe Data private Data dataDeNascimento; Ambos podem ser manipulados da private int numDeMat; mesma forma que numDeMat public Aluno(String n, Data d, int m) { nomeDoAluno = n; dataDeNascimento = d; numDeMat = m; Chamada implícita do método } toString da classe Data public String toString() { String resultado = ""; resultado += “Matrícula: “ + numDeMat + “ Nome: “ + nomeDoAluno+"\n"; resultado += "Nascimento: “ + dataDeNascimento + "\n"; return resultado; } } // fim da classe Aluno 6 Composição ExecutaAluno.java public class ExecutaAluno { public static void main(String args[]) { Data nascimento = new Data((byte)18,(byte)12,(short)1984); Aluno bruno = new Aluno(“Bruno Moreno”, nascimento, 1234567); System.out.println(bruno); } } // fim da classe ExecutaAluno 7