Sin ser ningún experto te respondo.
Clases: las "clases" son los "blueprints" de los objetos en cualquier lenguaje orientado a objetos. Un "objeto", como en el mundo real, es prácticamente cualquier cosa. Un objeto puede tener "atributos" y "funciones" (o métodos). Un atributo es una caracteística de un objeto, en el mundo real puede ser su color o textura, en programación también, o la fecha en que fue creado el objeto, un flag, etc. Las funciones son las cosas que "puede hacer" el objeto, avanzar, frenar, en el mundo real, calcular algo en programación.
Funciones: ya explicados antes, son rutinas de acciones que pueden recibir parámetros, trabajan con ellos y pueden o no devolver un valor.
Subrutinas: Son funciones que no reciben ni retornan valores, simplemente hacen algo. En Excel por ejemplo con una subrutina puedes aplicar un patrón de formato a varias celdas.