Diseñar Clases
Una clase es una plantilla para objetos que comparten la misma estructura y comportamiento. En Clean Language, declaras propiedades en la parte superior de la clase, escribes un constructor que las establece y añades métodos que operan sobre ellas. El compilador lo impone todo.
Una clase con propiedades, un constructor y múltiples métodos:
class Rectangle\n number width\n number height\n\n constructor(number w, number h)\n width = w\n height = h\n\n number area()\n return width * height\n\n number perimeter()\n return 2.0 * (width + height)\n\n string describe()\n return "Rectangle " + width.toString() + "x" + height.toString() + ", area: " + area().toString()\n\nstart:\n Rectangle r = Rectangle(5.0, 3.0)\n print(r.describe())\n print("Perimeter: " + r.perimeter().toString())Rectangle 5.0x3.0, area: 15.0\nPerimeter: 16.0Las propiedades (width, height) se declaran al principio de la clase. El constructor las asigna. Los métodos acceden a las propiedades por nombre — sin self. ni this. Los métodos pueden llamar a otros métodos directamente: describe() llama a area() para evitar duplicar la lógica.
Cada instancia es independiente — comparten la plantilla pero tienen sus propios datos:
start:\n Rectangle small = Rectangle(2.0, 3.0)\n Rectangle large = Rectangle(10.0, 8.0)\n\n print("Small: " + small.describe())\n print("Large: " + large.describe())\n\n boolean fits = small.area() < large.area()\n print("Small fits inside large: " + fits.toString())\n\n number total = small.area() + large.area()\n print("Combined area: " + total.toString())Small: Rectangle 2.0x3.0, area: 6.0\nLarge: Rectangle 10.0x8.0, area: 80.0\nSmall fits inside large: true\nCombined area: 86.0small y large son instancias independientes. Llamar a .area() en small usa 2.0x3.0; en large usa 10.0x8.0. Puedes usar los resultados de los métodos de instancia en expresiones, comparaciones y otros cálculos como cualquier otro valor.
Resumen rápido
- Las propiedades se declaran al principio del cuerpo de la clase con tipo y nombre
- constructor() asigna valores iniciales — se llama cuando creas una instancia
- Los métodos acceden a las propiedades por nombre directamente — sin palabras clave self o this
- Cada instancia es independiente — sus propiedades son separadas de todas las demás instancias