Заголовки на не-C ++ ООП языках

Некоторое время я задавался вопросом, почему языки, не связанные с C ++ (не уверены, есть ли другие, использующие заголовки), не имеют заголовочных файлов?

Что меня больше всего беспокоит, так это то, что в C ++ я могу кодировать заголовок класса и отправлять его своему партнеру, чтобы скомпилировать другой код против него, в то время как я счастлив, кодируя фактическую реализацию класса в моем собственном темпе.

Как это может быть достигнуто в языках, которые не имеют заголовков? Или, может быть, мне чего-то не хватает в моем понимании?

Как я могу заключить классный контракт с другими коллегами, чтобы оба могли писать в своем темпе? Должен ли я просто создать какой-нибудь фиктивный класс без какой-либо реализации методов, просто с фиктивным возвратом, чтобы удовлетворить эту потребность или как?

2

Решение

Заголовочные файлы унаследованы от того времени, когда компиляторы не обладали достаточными возможностями для компиляции всех ваших исходных файлов без намеков со стороны разработчика.

Современные языки (и в действительности C ++ тоже могут это делать) используют интерфейсы или базовые классы для реализации проектирования по контракту.

5

Другие решения

C и C ++ — очень старые языки, созданные в то время, когда нужен компилятор предварительная декларация идентификаторов для того, чтобы сделать компиляцию за один проход и минимальное использование памяти (который был основной рассмотрение производительности в то время). Основное назначение файлов заголовков — предоставить эти объявления, чтобы компилятор мог облегчить необходимые настройки стекового фрейма, выделения памяти, проверки типов и т. Д. И т. Д.

Более поздние языки вращаются вокруг «более чистых» языковых структур и получают информацию о том, что C / C ++ нужны заголовки для соглашения, проверки, вывода или их комбинации, за счет некоторой гибкости и производительности. Первое не всегда необходимо, последнее в значительной степени не имеет значения, учитывая производительность систем, которые мы используем сегодня …

Что касается «контракта класса» … в C / C ++, ваша библиотека может определять тысячи функций, и независимо от того, какие из них вы объявили в своем «экспортированном» заголовке, все они доступны и могут быть вызваны напрямую. То же самое относится и к более новым языкам; в принципе, документация занял место декларация (то есть, сделать доступ к этим функциям «простым»), но все они должны быть вызваны в любом случае.

Так технически вам также не нужны заголовки C ++ для «проектирования по контракту». Вы могли бы просто сказать клиенту «объявить void foo( int ) и назовите это «. Современные языки просто удалили посредника и сразу указывают на документы. 😉

1

По вопросам рекламы [email protected]