luokkakaaviota tarkennettu, refaktoroitu