Открытый массив - это массив, у которого не указан размер. Это особый тип данных, который может быть использован не обязательно для выделения участка памяти (чтобы создать динамический массив), а например, для указания типа формального параметра. Частный случай открытого массива - строковой тип (ARRAY OF CHAR). Если формальный параметр процедуры имеет тип ARRAY OF CHAR, то при вызове фактический параметр может быть, например, константой "QWERTY" (которая явно не является динамическим массивом). Так что, открытый и динамический - это свойства из разных областей (как кислое отличается от тёплого

). Открытый или фиксированный массив говорит о том, заданы или нет границы для типа данных. А статический или динамический говорит о механизме хранения элементов массива - статический создается\уничтожается автоматически в начале работы модуля или процедуры, а динамический создается в любой момент по указанию программиста (и автоматически уничтожается сборщиком мусора после того, как исчезнет последний указатель на этот массив). Например
Код: "OBERON"
TYPE
Arr10 = ARRAY 10 OF INTEGER; (* тип-фиксированный массив *)
Arr = ARRAY OF INTEGER; (* тип - открытый массив*)
VAR
a:Arr10; (* Статическая переменная *)
b:POINTER TO Arr10; (* Указатель на фиксированный массив *)
c:POINTER TO Arr; (* Указатель на открытый массив *)
...
a[5]:=34;
NEW(b); (* создать динамический массив на основе фиксированного*)
b[5]:=21; (* сокращение от b^[5]:=21; *)
NEW(c,15); (* создать динамический массив на основе открытого *)
c[12]:=44; (* сокращение от c^[12]:=44; *)