Ну-ка. Предположим, что умеем мы работать модульно-процедурно. И хотим "графическую объекту" накатать. Чтобы к нашему модулю была визуализация. В единственном числе.

Почему бы не делать так?

## Код:
```
MODULE МояГрафика;

  ..
  VAR
  ..
 
  (* НШ - Начало данного преподавателем шаблона *)
  TYPE
      View = POINTER TO RECORD (Views.View) END;
    - никакого состояния объект не хранит. Он использует глобальное состояние модуля.
  (* КШ *)


  PROCEDURE ...
  PROCEDURE ...

  PROCEDURE (v: View) Restore (f: View.Frame; l, t, r, b: INTEGER);
    - здесь из непонятного пока - только (v: View).
  ...
  BEGIN
  - здесь понятно, как рисовать, обращаясь к процедурам f. Всё это доступно и легкообъяснимо. Особенно, если уже систематически вводим "пользование готовыми объектами"
  END Restore;

  PROCEDURE Открыть*;
    VAR v: Views.View;
  BEGIN
     NEW(v);
     Views.OpenAux(v, "Графическое окошко")
  END Открыть;

END МояГрафика.
```


Ничего ужасного, правда?

Если нужно обрабатывать сообщения, то добвлятся HandleCtrlMsg - и WITH для RECORD. Хороший повод поупражняться с записями. И расширение тоже объяснить можно довольно рано, очень доступная штука.