Agregação é quando um objeto contém outro. Delegação envolve o uso. Quando um objeto delega, ou seja, repassa tarefas para que outro use.
Perceba que um objeto pode ter outro, mas não utiliza-lo. Quer saber um exemplo?
Pense numa classe que presenta uma lista de outros objetos. Nessa classe, você tem métodos para adicionar um objeto, remove-lo, obter o tamanho da lista, etc. No que a classe lista usa os objetos que estão dentro? Que funções ela pede para eles realizar por ela?
Nenhuma. Esse é um exemplo onde há composição, mas não há delegação.
O mesmo deverá valer para classes como Turma e Aluno.
Já delegação acontece com classes como Carro e Motor. Ao pedir para o carro dar a partida, o carro enviará um comando para que o motor comece a girar. O motor realizará o movimento, e isso refletirá no carro.
Por fim, é possível que um objeto delegue atividades para outro, mas usando uma composição simples, sem um vínculo tão forte. Como por exemplo, um método que receba um objeto por parâmetro e realize uma operação sobre ele. Note que a agregação não ocorreu, mas a delegação sim:
public class Aluno {
//A impressora não é parte do aluno.
//Ele só precisa de uma impressora na hora de imprimir!
public void ImprimirNome(Impressora impressora) {
impressora.imprimir(aluno.nome);
}
}