Comments 9
Уточните, пожалуйста, на каком ЯП написаны ваши примеры?
По виду, это C++ с майкрософтовскими дополнениями — но даже так, есть странные моменты. Может, псевдокод.
Что-то очень сложно написано.
Все это называтся полиморфизм.
В Си интерфейсом является правильно написаный хидер (скрывающий конкретные типы за opaque указателями), а с помощью линкера в программу прицепляется конкретная реализация. Это т.н. link-time полиморфизм.
Абсолютная инкапсуляция чем-то принципиально отличается от Dependency Inversion Principle и Чистой архитектуры, о которых (в моём инфопузере) каждая собака знает? Не увидел этого в статье
Предположу, что отличие в том, что речь идёт о том, что инкапсуляция будет происходить на уровне файлов, а не на уровне линковки.
То есть условно если в классике, конечный пользователь скачает сразу файл (jar/dll/…), где будет уже динамически выбираться реализация, то здесь, я так понял, речь о том, чтобы на уровне конечного пользователя скачивать файл с реализацией в зависимости от цели.
Интересно сколько понадобится времени теперь, чтобы перестать пытаться заново изобретать основы программирования, а просто начать их систематизировать, структурировать и просто внимательно изучать?
Все-таки раздраконил я вас со своей Инкапсуляцией (как с писянной торбой с ней ношусь🤣)
Браво, уважаю. Больше того, у Вас лично отлично поставлена методология объяснится/обучения. Я обладая поверхностными знаниями в программировании (приобритенные в универе), отлично понимаю текст статьи…
Благодарю 😇
Мне показалось, что вы очень пренебрежительно относитесь к колегам
мало кто знает что в практических задачах она никогда не является целью
Так уж прям мало кто?
К сожалению, мало кто из русскоязычной аудитории сможет разделить мой восторг по поводу такой возможности, потому что это уже практически забытая технология
Динамические библиотеки - это не забытая технология. А еще, как близкая, концепция - микросервисы.
Ну и вообще, подмена реализаций - это обычная штука, логично вытекающая из механизма интерфейсов. Инъекция зависимостей - это вообще один из базовых архитектурных паттернов.
В общем, лайкнул бы статью, если бы она позиционировалась как статья для новичков, так как объясняет базовые, но полезные вещи
Интересно, именно поэтому был придуман COM? — условно у нас в файлах где-то есть dll с реализацией, а сами мы при импорте можем лишь работать с интерфейсом и как-то его создавать.
Впрочем, даже без COM можно сделать отдельную динамическую библиотеку, в которой будет реализация интерфейса, а сами мы будет иметь лишь C++-овый интерфейс с помощью хедера. И вообще, зачем в примере нужна статическая библиотека, если можно просто через extern функцию в хедере то же самое?
Но хочу сказать, идея интересная. Я так понимаю, что конечному пользователю мы просто шлём различные версии либы, а сам хедер пишем универсальный, как и саму программу — действительно интересно. Впрочем, естественно, в одном файле все архитектуры не учесть — так что не могу быть уверенным в полезности данной техники, если эта самая либа не будет использоваться у конечного пользователя прямо чтобы много где.
Откуда берется абсолютная инкапсуляция и зачем она нужна. Практика Архитектуры ПО, часть вторая