Las funciones por sí mismas no son suficiente para mantener tu programa organizado. La programación orientada a objetos fue desarrollada para mantener datos relacionados (atributos) y funciones que trabajan con esos datos (métodos) juntos.
En Ruby, un objeto nuevo es definido con la palabra clave class, seguida del nombre de tu objeto (normalmente CamelCased). Se termina la definición después con un end.
La mayoría de los objetos definen un método especial, initialize, que guarda los datos iniciales con que tu objeto es creado (aquí, un radio) y ejecuta cualquier otro requerimiento inicial.
Se crea una instancia de tu objeto con el método new. Los argumentos pasados a través de new son enviados a tu método initialize.
Los datos de tu objeto son guardados usando variables de instancia que inician con un signo @
. Las variables de instancia se comportan realmente como variables normales, pero sólo son visibles desde una instancia específica de tu objeto. Si deseas que los datos sean accesibles externamente, tienes que escribir más métodos.