Кстати, интересный момент. The bridge pattern is a design pattern used in software engineering which is meant to «decouple an abstraction from its implementation so that the two can vary independently». The bridge uses encapsulation, aggregation, and can use inheritance to separate responsibilities into different classes.
Что в переводе означает Bridge, Мост — шаблон проектирования, используемый в проектировании программного обеспечения чтобы «разделять абстракцию и реализацию так, чтобы они могли изменяться независимо». Шаблон bridge (от англ. — мост) использует инкапсуляцию, агрегирование и может использовать наследование для того, чтобы разделить ответственность между классами.
Может быть, вы не туда посмотрели с вашим определением?
Я не согласен с некоторыми положениями из вашего предыдущего комментария.
Остановимся на них поподробнее.
«Если мы классически подойдем, то что такое абстракция? Это некая спецификация класса, т.е. в С++ — это .h файлы.» Это неверно. Файлы и прочая ерунда не имеют к абстракции никакого отношения. Просто в силу того, что в .h файлах есть секция private.
Вообще, в ООП я предпочитаю заменять понятие «абстракция» понятием «публичный контракт», поскольку он выражает примерно то же самое, но гораздо более понятен. Так вот, публичным контрактом класса называется множество определенных значений функций класса, определенных на множестве аргументов. Или, говоря простым языком, «публичный контракт» — это тот самый «черный ящик», который говорит нам, как ведет себя объект, но скрывает, почему он себя ведет именно так.
А теперь, магия. Классы могут использовать друг друга, и в результате для выполнения своего публичного контракта, класс может использовать другие объекты, поведение которых определено их публичным контрактом.
Кажется, что такая декомпозиция избыточна. Однако, бывают случаи, когда она необходима — например в том случае, когда одни и те же идеологические элементы реализуются с помощью разной логики. Классический пример — окна в Windows и Linux. Под собой они имеют принципиально разное API, которое, однако, может легко сводиться к некому intermediate контракту. В этом случае общая абстракция «окно» разделяется на отдельные реализации «windows-окно» и «linux-окно», для которых может иметься возможность выделения общего интерфейса на основе уже тех данных, которые мы получили при декомпозиции — в этом случае мы получаем классический pimpl.
Сама по себе декомпозиция такого уровня при отсутствии сходных абстракций с разными реализациями, конечно, бессмысленна.
Я, честно говоря, не понял, каким образом отделение абстракции от реализации вступает в противоречие с тем, что реализация должна соответствовать абстракции.
Век живи — век учись. Сто лет уже виндой пользуюсь, а про адресную книгу только вчера узнал.
Да, я пользуюсь аутлуком еще с 98-го офиса, но никогда не пользовался виндовой адресной книгой. И сейас у меня аутлук сихнронизируется по контактам с гуглом, а виндовая адресная книга почему-то пустая.
Просто лично мне кажется, что это как-бы слегка несравнимые вещи — адресная книга, которая появилась в Windows 7 (и которой, судя по всему, мало кто пользуется) и адресная книга в личном мобильном телефоне, без которой использование мобильника сегодня очень сильно затруднено.
Программно это реализовать принципиально невозможно, так как задача сводится к определению намерений, а она алгоритмически неразрешима.
Радикальное решение — запрет програмного доступа к адресной книге. Чуть менее радикально — работа с ней в защищенном поле через GUI ОС, не выдавая данные наружу. Еще менее радикально — предоставление специальных средств для простого создания локальных частичных разрешений, вроде как «выбор файла» в браузере, фактически создающий для удаленного сервера разрешение на чтение одного явно выбранного пользователем файла.
У меня в папке «контакты» одна запись по имени «bober_maniac», в которой нет ни одного поля. Это при том, что у меня стоит декстопный Аутлук, в котором есть база контактов.
А как с виндовой базой контактов работать? Она как-нибудь интегрируется с приложениями? Зачем она вообще нужна? Для чего ее используют?
Я правда не знаю, я конечно видел, что в висте (или семерке, не помню уже) появилась папочка «контакты», но никогда не знал, для чего она.
Вы русский язык понимаете?
Вы придумали какую-то хрень вместо «моста» и теперь героически ее побеждаете.
Без цели действительно разделять их бессмысленно.
Вы знакомы с понятием «публичный контракт»? Что туда входит?
The bridge pattern is a design pattern used in software engineering which is meant to «decouple an abstraction from its implementation so that the two can vary independently». The bridge uses encapsulation, aggregation, and can use inheritance to separate responsibilities into different classes.
Что в переводе означает
Bridge, Мост — шаблон проектирования, используемый в проектировании программного обеспечения чтобы «разделять абстракцию и реализацию так, чтобы они могли изменяться независимо». Шаблон bridge (от англ. — мост) использует инкапсуляцию, агрегирование и может использовать наследование для того, чтобы разделить ответственность между классами.
Может быть, вы не туда посмотрели с вашим определением?
Может быть, вам необходимо что-то еще, чтобы понять, что именно делает класс, а простого содержимого файла недостаточно?
Вот содержимое моего .h файла.
class Pillow
{
public:
Pillow();
~Pillow();
int Pie(int vine, double meat, const char* cucumber);
}
Какую абстракцию он описывает?
Это выбивается куда-то на задворки моего подсознания вместе с Гендальфом с мечом в левой руке.
Остановимся на них поподробнее.
«Если мы классически подойдем, то что такое абстракция? Это некая спецификация класса, т.е. в С++ — это .h файлы.» Это неверно. Файлы и прочая ерунда не имеют к абстракции никакого отношения. Просто в силу того, что в .h файлах есть секция private.
Вообще, в ООП я предпочитаю заменять понятие «абстракция» понятием «публичный контракт», поскольку он выражает примерно то же самое, но гораздо более понятен. Так вот, публичным контрактом класса называется множество определенных значений функций класса, определенных на множестве аргументов. Или, говоря простым языком, «публичный контракт» — это тот самый «черный ящик», который говорит нам, как ведет себя объект, но скрывает, почему он себя ведет именно так.
А теперь, магия. Классы могут использовать друг друга, и в результате для выполнения своего публичного контракта, класс может использовать другие объекты, поведение которых определено их публичным контрактом.
Кажется, что такая декомпозиция избыточна. Однако, бывают случаи, когда она необходима — например в том случае, когда одни и те же идеологические элементы реализуются с помощью разной логики. Классический пример — окна в Windows и Linux. Под собой они имеют принципиально разное API, которое, однако, может легко сводиться к некому intermediate контракту. В этом случае общая абстракция «окно» разделяется на отдельные реализации «windows-окно» и «linux-окно», для которых может иметься возможность выделения общего интерфейса на основе уже тех данных, которые мы получили при декомпозиции — в этом случае мы получаем классический pimpl.
Сама по себе декомпозиция такого уровня при отсутствии сходных абстракций с разными реализациями, конечно, бессмысленна.
Да, я пользуюсь аутлуком еще с 98-го офиса, но никогда не пользовался виндовой адресной книгой. И сейас у меня аутлук сихнронизируется по контактам с гуглом, а виндовая адресная книга почему-то пустая.
Просто лично мне кажется, что это как-бы слегка несравнимые вещи — адресная книга, которая появилась в Windows 7 (и которой, судя по всему, мало кто пользуется) и адресная книга в личном мобильном телефоне, без которой использование мобильника сегодня очень сильно затруднено.
Можно целый рассказ написать из одних существительных.
Радикальное решение — запрет програмного доступа к адресной книге. Чуть менее радикально — работа с ней в защищенном поле через GUI ОС, не выдавая данные наружу. Еще менее радикально — предоставление специальных средств для простого создания локальных частичных разрешений, вроде как «выбор файла» в браузере, фактически создающий для удаленного сервера разрешение на чтение одного явно выбранного пользователем файла.
А как с виндовой базой контактов работать? Она как-нибудь интегрируется с приложениями? Зачем она вообще нужна? Для чего ее используют?
Я правда не знаю, я конечно видел, что в висте (или семерке, не помню уже) появилась папочка «контакты», но никогда не знал, для чего она.
Пока не читал сайт, задам, если можно, вам несколько вопросов, может вы в курсе.
1. Умеет ли он в автоматическом режиме конвертировать DOC/DOCX в PDF?
2. Как построена работа с аннотациями и цифровыми подписями?