Перечисление подразумевает не только множество констант, но и свои границы. Таким образом, чтобы в Обероне организовать перечисление, нужно не только по одной константе на каждый элемент перечисления, но и одну или две дополнительные константы для границ. Только в этом случае добавление новых элементов в перечисление не приведёт к изменению индексации массивов. Однако, за границами в Обероне надо следить вручную, что не удобно и потенциально может привести к ошибке.

Модула-2:
## Код:
```
DEFINITION Colors; 
  TYPE
    Color=(Red,Green,Blue);
    ColorProperty=ARRAY [Color] of ...
END Colors

...

FOR c:=MIN(Colors.Color) TO MAX(Colors.Color) DO
...
    prop[c]:=...
...
END;
```


Оберон:
## Код:
```
MODULE Colors; 
  CONST
    Red*=0;
    Green*=1;
    Blue*=2;
    MaxColor*=Blue;
  TYPE
    ColorProperty=ARRAY MaxColor+1 of ...
END Colors

...

FOR c:=0 TO Colors.MaxColor DO
...
    prop[c]:=...
...
END;
```
