> -- Иван Кузьмицкий писал(а):
> Если считать деление на интерфейс и реализацию тем, чем оно и является, то - есть. Интерфейсом пользуются внешние компоненты, реализация недоступна извне.

Я уже много на эту тему писал, так что ввязываться в дискуссию не буду. Просто повторю еще раз - в некоторых случаях (например в случаях небольших программ) действительно удобней писать сразу реализацию модуля, а затем по нему генерить спецификацию. Это один юзкейс.

Но довольно часто бывает, что первична спецификация пакета, а его реализация вторична. Так что руками пишется в первую очередь именно спецификация, а реализация может быть даже сгенерирована автоматом (набор заглушек). Эдакие specification driven development. При групповой разработке это бывает оправдано.

Я наверно примерно поровну писал на языках где спецификация и реализация разделена, и где не разделена (или спецификация генерируется по реализации), и да, действительно если писать в одиночку и небольшие программы, то в среднем удобней когда отдельной рукописной спецификации на пакет/модуль нет - банально меньше писанины. Но когда людей в проекте чуть больше, и проект сам больше, то рукописная спека (не дока, а именно спека - её понимает компилятор и на этапе компиляции проверяет соответствие реализации и спецификации) становится просто очень удобной.

Поэтому например подавляющее большинство шаблонного кода в С++ мне читать не удобно - там спеку и реализацию не разделяют (хотя это возможно сделать). Да и разрабатывать в таком стиле не удобно.

Та же беда с java/Go/python/js и так далее. КП с Обероном тут не одиноки.

А вот Модула (и 2 и 3) и Ада - реально хороши.