> -- Madzi писал(а):
> Вся идея интерфейсов в том, что это контракт объекта с системой на обязательную реализацию определённых методов, и система проверяет этот контракт на этапе компиляции. В вашем случае - контракт не проверяется, а нарушается по факту (т.е. контракта нет). Т.е. это не совсем интерфейс в идеологическом смысле. Контракты вещь архиполезная, особенно для доказательного программирования.Если мы ведём речь о том, что EMPTY-методы не отсигналятся как нереализованные на этапе компиляции, то в моём случае скорее есть пустая реализация интерфейса. Хорошо это или плохо - вопрос отельный и зависит от потребностей системы и смысла самого интерфейса. Факт, однако, заключается в том, что в Яве и других языках тоже можно сделать пустую реализацию, успешно пройти компиляцию и, в результате, не соблюдать контракт. В полном смысле проверить соблюдение контракта не возможно. Единственное отличие моего примера от поведения Явы - отсутствие сообщения компилятора "не реализован метод <MethodName>".

В этом месте я прошу прощения. Я забыл, что процедуры в КП тоже можно пометить как ABSTRACT, и тогда компилятор всё-такитребуетих реализации, поимённо, как только мы объявляем унаследованную не-ABSTRACT запись. Поправил исходное сообщение.> -- Madzi писал(а):
> А можно пример для объекта, который наследуется от другого объекта и реализует три интерфейса?Типа:Конечно:## Код:
```
TYPE MyData = POINTER TO RECORD (SomeData)
   PROCEDURE AsObservable* (): Observable.Interface;
   PROCEDURE AsDrawable* (): Drawable.Interface;
   PROCEDURE AsSerializable* (): Serializable.Interface;
   ...
END;
```
