Esta entrada de un blog parece ser bastante concisa.
Voy a tratar de explicarlo con palabras mucho mas simples (Estoy asumiendo que tienes conocimiento básico de Programación Orientada a Objetos).
Agregación es cuando una clase posee a otra.
Ejemplo:
Supon que tienes la clase llamada Punto y otra clase llamada Circulo. La definición de la clase punto es solamente x, y ademas de unos cuantos metodos. Si ya tienes esa clase Punto lo mas logico sería usar esta clase en la clase Circulo de tal manera que Circulo tiene un objeto de la clase Punto y un radio.
En este ejemplo la clase Circulo posee a la clase Punto. O mas bien agrega a la clase punto.
Pero la clase punto la puedes usar para definir otras figuras geométricas, por ejemplo un rectángulo, un triangulo, un polígono, etc...
La composición es cuando una clase pertenece a otra sin embargo esa clase no tiene sentido si esta sola.
Ejemplo:
Imagina que tienes agregada la clase Celular (o Movil) en la clase Persona. Entonces las personas tienen celulares. Pero fuera de esta definición no tiene sentido que una clase Perro tenga la clase Celular, o que la clase Perico tenga un Celular (a pesar de que seria bastante cómico). La clase Celular solamente es usado por la clase Persona. Entonces se dice que la clase esta en composición.
Ahora solo te falta codificar alguno de los ejemplos mencionados en el blog o aquí.