Об интерфейсах

Об интерфейсах

579

Первым делом, неувязка касается продуктовых softostroiteli, хотя в проекте.
В теории, естественно. Для разрабов приложений это значит, к примеру, что при обновлении компонентов старенькых интерфейсов будет продолжать действовать. Начнем с недавней истории. Разработка com (и остальные , но сущность та же) дозволила разрабам компонента обычный метод отделить интерфейсы от реализации. Но на практике, это смотрелось еще лучше, чем «ад динамических библиотек», которая постоянно вариант «текущий».
Каковой механизм? Это чрезвычайно комфортно.
Заявляет программеру интерфейс компонента
К примеру, в програмку FilesCoolPrinting1_0cool.exe. Скомпилированная программа устанавливается на устройство юзера, где в регистр, назначенный идентификатор uuid присваивается исполняемый модуль. [идентификатор uuid(a03d1421-b1ec-11d0-8c3a-00c04fc31d2f)]
интерфейс ICoolPrinting
{
пустота печати(константной строчкой имяфайла);
}

Потом программер реализует этот интерфейс.
Прикладное программное обеспечение, используя этот интерфейс, тот же «реестр» неповторимый идентификатор запрашиваемого интерфейса и вызвать подходящую функцию.
ICoolPrinting печать = GetInterface(…);
печать.Напечатать(«с:файл myfile.Формат PDF»);

Что произойдет, раз Разраб компонента конфигурации функциональности?
В простом варианте расширяет интерфейс. Это значит, что застройщик добровольно обязуется ощутить это красивое сочетание слов):

чтоб сделать новейший интерфейс ICoolPrinting2 с новейший uuid, может быть, унаследованного от бывшего;
воплотить его, не ломая старенькую реализацию.
[идентификатор uuid(d26d1421-g1ec-12d0-8c3a-12c84ef31d2f)]
интерфейс ICoolPrinting2 : ICoolPrinting
{
SetupPrinter Тип bool();
}

На данный момент даже установлена заместо старенькой, новенькая версия продолжает работать по-прежнему. То есть вообщем ничего. Прикладной программер, использующий функцию ничего переделывать не нужно. Круто, да?
Но он опять добровольно должен обеспечить возможность сразу установить новейшую версию параллельно старенькой, где-то в программные файлыCoolPrinting2_0. В наиболее сложном варианте, Разраб выпускает новейшую версию, которая не поддерживает старенькый интерфейс.
И в этом случае прикладной программер также не придется переделывать.
Но, это лишь происходит в мире, где программеры имеют хоть какое-то представление что они создают. Такое тоже бывает. И их клерки знают свое дело, работают.
Почаще, все напротив.
Новенькая версия устанавливается заместо старенького. Поменять uuid является нужным, по другому будет нереально отличить новейший интерфейс к старенькому. В самый гуманный вариант, программер не делает новейший интерфейс и просто старенькые правила, изменяя, в то же время, его идентификатор uuid.
Програмку, которая употребляет компонент сходу перестает работать. Поэтому что ссылка все еще употребляется uuid ведет к пустоте. Но чтоб обойти эту делему просто поэтому, что интерфейс может:

для запроса по имени, а не по uuid;
внедрение динамических вызовов функций (на стадии выполнения).
Потом при попытке применять функции вашей прикладной програмке происходит сбой. OleVariant печать = GetInterface(«ICoolPrinting»);
печать.Напечатать(«с:файл myfile.Формат PDF»);

Таковая «умная» техника будет работать столько, сколько программер компонента не удалять старенькые способы и интерфейсы.
Поэтому что раз Разраб не сумел обеспечить Сопоставимость с интерфейсами, для обеспечения бесперебойной работы разных версий компонента, мозг его в особенности не хватает. Ситуация утежеляется тем, что в установке 2-ух версий компонента на одном и том же устройстве почаще всего нереально.
И «стратегия». Шайба идет к прикладной программер. И чему удивляться? Доброжелатели с форума шепот: «адаптер для шаблона». Основное назначение шаблонов так именуемого дизайн — создание костыли и подпорки.
Естественно, я не собираюсь приносить их сюда. И вот обычное и точное нанесение 2-ух линий — получить ссылку на компонент и способ вызова, преобразуется в беспорядок сотки строк из «шаблонного» кода и несколько классов, в зависимости от числа версий компонента.
2-ух различных версий на одном компе не может быть установлено. Компонент pdfcreator в, развивающихся с версии 0.x к текущей 2.х, была сформирована таковым образом. Пожалуйста. Во-первых, редактировать старенькые интерфейсы с подменой uuid и потом создание новейшей, несопоставимой со старенькой, но уже удаленного. Примеры?
Раз халатность разрабов может восполнить пословица «дареному жеребцу в зубы не глядят»? Но что это меняет? Есть и остальные примеры чисто коммерческих составляющие не совместимы меж версиями. Можно утверждать, что pdfcreator в это бесплатный инструмент с открытым начальным кодом.
Правило «изготовлено не тут» (изобретено не тут) есть весомая причина. Мораль. habrahabr.ru Как минимум, иметь под рукою начальный код будет излишним.