Я даже не буду пытаться защищать методику перевода, ориентированную на преобразование последовательностей символов. Скажу лишь, что таким образом можно получать разного качества подстрочники.
У робота, как ни странно, тоже опытом будет его личная предыстория. И взаимоотношения с другими людьми. Он может не испытвать радости сам, но может наблюдать ее у людей.
Взаимоотношения в качестве кого? В качестве окошечка для ввода текста? Если мы говорим о переводе через понимание, то обсуждаемый в переводимом тексте предмет должен присутствовать во внутреннем мире переводчика. В принципе, глухой с детства переводчик может перевести отрывок текста про то, как тихонько звучащая мелодия Лунной сонаты Бетховена накладывалась на шум дождя, шорох листьев и отдалённые раскаты грома. Залезет в словарь, найдёт перевод слов, грамматически правильно их свяжет. Но это будет не «через понимание». Даже весьма символическое различие между мужчинами и женщинами уже приводит к тому, что некоторые тексты в переводе, выполненном женщиной, выглядят криво. И наоборот.
Для перевода это и необязательно. Как, по-вашему переводятся фантастические произведения? Никто никогда не попадал в описанную в них ситуацию.
Фантастика пишется людьми для людей про людей. Зацепок более чем достаточно, особенно когда это правильная фантастика, то есть написанная по принципу «обычные люди в необычных обстоятельствах или необычные люди в обычных обстоятельствах». Заметьте, и в первом, и во втором случае это люди. Никому в голову не придёт писать о злоключениях IP-пакета в хакнутом DNS :))
Вот ИИ (который называют сильным ИИ) и будет существом, аналогичным естественному интеллекту.
Он будет мальчиком или девочкой? Ответ «существо среднего рода» не принимается, потому что ну нафиг заниматься решением психологических проблем сексуально дезориентированного робота. Лучше я сам изучу китайский.
Техническое решение можно скопировать. В мире существует робот, набирается опыта, а копии его интеллекта используются для перевода текстов.
Совершенно верно. Можно скопировать, и это удобно. Но что мы потом с копиями будем делать? Боюсь, под пресс они не захотят. Они полноценные человеческие личности со всем присущем нам комплектом приколов, включая инстинкт самосохранения и стремление к справедливости.
Вам хочется, другим нет.
Вполне допускаю, что могут быть и другие мотивы. Но если говорить не об извращениях и не о психопатологиях, то мотивация технаря — это решение задачи более эффективным, чем ранее, способом. Проще, дешевле, выше, быстрее. Железная тётя, психующая по поводу собственной железности — совсем не похоже на «проще» и «дешевле».
В первую очередь от ИИ требуется решение задач. Это примерно как считать молоток своим рабом.
Молоток мой — раб мой. Впрочем, нет, между инструментом и рабом есть существенная разница. Ещё есть существенная разница между рабом и свободным. Подозреваю, полноценный перевод может делаться только свободным. А мы хотели инструмент. Печалька.
Чтобы представить, достаточно иметь средства построения моделей окружающего мира на основе входной информации. Вот с этим пока и есть основная техническая проблема.
И ещё мировоззренческая. Никто не знает, что это за шняга такая, эта самая наша хвалёная модель мира. А некоторые подонки вообще утверждают, что ни о каких моделях внутри черепной коробки говорить вообще нельзя.
То, что мышление не сводится к вычислениям (т.е. не может быть воспроизведено машиной Тьюринга) не знаю кому как, но мне очевидно. Но я напрочь не понимаю, почему вокруг этого такой ажиотаж. К вычислениям сводится только функционирование закрытых систем. Этого требует сама концепция вычисления: данные и алгоритм на входе, потом полностью изолированный от всего процесс, потом результат на выходе. Если же по ходу пьесы извне подтаскиваются какие-то данные, багфиксы и прочая ерунда, то это уже не вычисление. Для того, чтобы это стало вычислением, границы системы нужно расширить так, чтобы туда вошли источники доп. вводных. Но если, сколько ни расширяй, закрытой системы не получается, то остаётся только махнуть рукой на это безнадёжное предприятие.
Мы, сами того не заметив, научились строить системы, несводимые к вычислениям любого рода. Вот эта хабровская страничка, например, в моём хроме — тоже система, функционирование которой в целом не сводится к вычислению. Я вот в окошечко что-то пишу, мышкой двигаю, что-то по таймеру небось запускается, с сервером общается. Открытая система. Если даже такую штуку принципиально невозможно воспроизвести машиной Тьюринга, то глупо удивляться тому, что наше открытое всей внешней реальности мышление не сводится к вычислению.
«Новый (не голый) ум короля» читал. Хорошая книжка, поучительная. Лично для меня она особенно примечательна как пример хорошо замаскированного ухода в мистику. Мистика ведь — это совсем не обязательно разглагольствование про богов, демонов и прочие тонкие сущности. Мистика — это в первую очередь склонность прятать непонятное в заведомо непознаваемое. В данном случае, уткнувшись в идеологический тупик (на самом деле ничего страшного, бывает), автор предпочёл спрятать концы в непознаваемость квантовой неопределённости и сделать вид, что всё в порядке. Плохой дядя Роджер. Бяку сделал.
Попытка свести свободу воли к неопределённости (пусть даже к квантовой) — дохлый номер. Весь мой жизненный опыт подсказывает, что чем больше человек свободен и сознателен, тем меньше в его действиях неопределённости. Болван, болтающийся на ниточках своих простейших сиюминутных рефлексов как пушинка на ветру, гораздо более непредсказуем, чем достойный чел, который и обещание сдержит, и работу сделает качественно и в срок, и ни в какую дурь не вляпается.
Да и вообще, неопределённость процесса принятия решений — совсем не та же самая неопределённость, которую мы наблюдаем при подбрасывании монетки. Эти неопределённости имеют совсем разную природу. Не уверен, что мировая философская мысль дозрела до обсуждения природы этих неопределённостей.
Задачу «получить текст на другом языке» решает. Но только вот очень большой вопрос, достаточно ли хорошо полученный текст соотносится с исходным. Слова вроде бы подставлены из набора допустимых вариантов, грамматические конструкции корректны, но что там с мыслями, чувствами, нюансами? Если предположить, что читатель перевода по получившемуся тексту сам, лишь слегка поморщившись, восстановит упущенное, то ОК. А если нет?
Почему контекстом не может быть предыдущий опыт? Что заложите в нее, то и будет контекстом.
Весь вопрос в том, что это должен быть за опыт. У нас опыт — это вся наша личная предыстория пребывания в нашем грешном мире, включая радости и огорчения, победы и поражения, взаимоотношения с другими людьми и т.п. вещи. Огромный пласт даёт опыт взаимодействия с физической реальностью, включая и ту, которая является нашими собственными телами. Какой опыт программного агента может быть полезен при переводе фразы «было мало воздуха»? Программный агент никогда не попадал в ситуацию, когда ему было мало воздуха, и поэтому ему ничего не остаётся, как по словарю подставить «little air» и побежать дальше.
Когда я говорил про паспорт, я именно то и имел в виду, что для понимания нужно быть существом, аналогичным имплицитному читателю. Только в этом случае возможно понимание, необходимое для составления качественного перевода. Детям на уроках, кстати, не дают переводить тексты, для которых они ещё не созрели. Например, юридические заморочки, квантовую физику и молекулярную биологию.
Вам не надо, другим надо. Это никак не доказывает невозможность решения.
Не, ну если по приколу и невзирая на цену, то да, конечно. Но вопрос ведь в том, чтобы получить дешёвое и практичное решение. Именно это нам надо от техники. А если решение представляет собой искусственного человека, живущего в реальном мире в реальном масштабе времени и, к тому же, ещё и социализированного, то это совсем не то, что мы ожидаем от технических решений.
Нам ведь хочется механического раба — послушного, исполнительного и эффективного. Такого раба, которого при выходе новой более продвинутой модели мы можем, глазом не моргнув, выбросить в ведро или грохнуть через Shift-Delete. Раб, обладающий собственной полноценной личностью и заявляющий о своих правах, нам на фиг не нужен.
Способ сделать правильный перевод только один — представить то, что описано, и описать это на другом языке.
А чтобы представить, нужно быть имплицитным читателем.
Ну какая разница, можем мы отличить настоящую утку от поддельной, или не можем? Сегодня не можем, а завтра наука шагнёт вперёд, и сможем.
Представьте себе такую ситуацию. Допустим, поступила партия очень качественно подделанных пятитысячных купюр. На глаз подделку выявить невозможно. Ни один из существующих детекторов не ловит. Есть желание получить зарплату пятитысячными? Не знаю кому как, но мне почему-то нет. Наверно потому, что скорее всего через неделю придумают, как отличить подделку. А пока не придумали, у меня никто их всё равно не примет. «Настоящее» / «поддельное» — внутреннее свойство, не очень зависящее от конфигурации волновых функций частиц, составляющих объект. Мятый изрядно поюзанный слегка надорванный пятитысячник по свойству «настоящесть» равен новому настоящему, а неотличимый от настоящего поддельный — нет.
Идеологический затык с утками возникает от того, что мы привычно путаем понятия «тот же» и «такой же». А это разные категории. Не надо их путать. «Такой же» — это про равенство значений характеристик, а «тот же» — про такую в целом загадочную штуку, как идентичность. В случае с утками идентичностью обладает множество «утки», и конкретный экземпляр либо принадлежит ему, либо нет. Технически мы выясняем принадлежность экземпляра по значениям характеристик (выглядит, ходит, крякает и т.п.), но это только потому, что нам так удобно и практично. Но мы, надеюсь, понимаем, что подделка даже всех известных характеристик не влияет на идентичность, а лишь затрудняет правильную идентификацию.
О переводе.
Читая уже существующие переводы
Каждый новый текст уникален. Уметь переводить то, что уже переведено — так себе заслуга. Анализ существующих переводов позволяет наполнить словарь, но если я, например, попытаюсь найти в интернетах перевод на английский текста хотя бы вот этого коммента, который вы сейчас читаете, я обломаюсь. Сколько бы мы ни накопили бигдэйты, она окажется бесполезной даже при решении такой простой задачи.
Методом проб и ошибок генерируя новые, каждый раз не забывая спрашивать у человека, получилось или нет.
Допустим, я хочу получить перевод этого текста на китайский. Есть ли смысл мне показывать разные варианты перевода?
Давайте прикинем, что нужно для того, чтобы перевод текста этого коммента на китайский получился правильным:
0. (нулевым пунктом как само собой разумеющееся) Нужен набор словарей и формализованной грамматики. С этим худо-бедно роботы справляются.
1. Нужно понимание, что это не самостоятельный текст, а коммент к комменту в ответ на коммент… и так далее. То есть нужно понимание, почему в первой половине текста говорится о каких-то утках, а во второй о каких-то переводах.
2. Сам хабровский пост тоже нужно учесть, потому что именно он задал направление.
3. Обязательно нужно учесть текущую сиюминутную ситуацию в той области техники, которую поспешили назвать искусственным интеллектом. Без этого не может быть понятна грубая провокационность моего заявления о том, что задача полноценного перевода не имеет технического решения. Очень не помешало бы при составлении перевода понимать, как на эту ситуацию завязан хабровский пост и дальнейшее его обсуждение. Для понимания текущего момента развития технологий весь накопленный комплект качественных переводов мировой литературной классики в целом бесполезен.
4. В первой части я вскользь упомянул ситуацию получения зарплаты фальшивыми деньгами. Я в такое не попадал и Вы, надеюсь, тоже, но мы оба можем себе живо представить всю глубину облома. Просто потому, что мы вовлечены в товарно-денежный обмен. А робот не вовлечён. Он никогда не получал зарплату и не ходил с ней в магазин. И ещё он никогда не держал в руках ветхие купюры (у него рук нет). Ему не может быть понятно, о чём речь. Это объекты, не принадлежащие к тому миру, в котором он живёт.
Ещё раз подчеркну, что речь идёт не о составлении качественного подстрочника, а о high-end переводе. Понятно, что результат работы начинающего переводчика или переводчика, не погрузившегося на всю глубину сути происходящего, будет хуже подстрочника, выданного супер-пупер алгоритмом.
Теряет смысл ровно до того момента, пока нам в целом всё равно, настоящая утка, или нет. А если задача сформулирована «добудь настоящую утку», сразу понятие обретает смысл, и мы начинаем решать конкретную задачу «как отличить утку от подделки». В рамках этой задачи понятия «настоящее» и «подделка» есть, и между ними существенная разница.
Относительно перевода всё дело в том, что мы имеем два подхода к решению этой задачи. Первый, традиционный, заключается в том, что человек получает текст на одном языке, понимает его, и излагает на другом языке. Второй способ — это манипулирование строками символов. Имея одну строку символов на входе, нужно получить другую на выходе. Казалось бы, фигня вопрос — нам всё равно, что там происходит внутри чёрного ящика переводчика, и нам всего лишь нужно, чтобы одна строка символов превратилась в другую. Формально — да, но тут не лишне вспомнить, что текст — это совсем не всегда просто последовательность символов. Кроме символов есть контекст. Без контекста это просто буквы. Контекст есть у живого переводчика, но его нет у машины. Машина на вход получила только текст, и контекстом у неё будут только словари, базы знаний, коэффициенты обученной нейросети и прочие общие вещи, в которых нет и не может быть ничего про то, зачем это сказано, почему так, а не иначе, что собой представляет имплицитный читатель и ещё масса вещей, которые для нас, живых человеков, являются естественной средой обитания.
Можно изготовить робота, для которого наш мир станет естественной средой обитания, но тогда придётся выдать ему паспорт (потому что он по факту стал человеком) и наделить его гражданскими правами. Оно такое нам надо? Уж лучше мы как-нибудь с подстрочниками (очень качественными, кстати) помучаемся, а в случае надобности позовём живого человека и заплатим ему денег. Кстати, роботу, для которого наш мир стал средой обитания, тоже надо будет платить зарплату. Иначе ему не на что будет содержать своих детей (упс… а как иначе?).
Робот может выглядеть как утка, крякать как утка, ходить, летать и плавать как утка, но уткой он не станет.
А вот утка по-пекински, хоть уже и не выглядит как утка, не крякает и не ходит, всё же утка. Забавно, правда?
А если серьёзно, то есть некоторые виды деятельности, которые роботы у нас никогда не отберут. Например, как это ни странно сейчас прозвучит, перевод естественных языков. Задача не имеет технического решения ни при каком уровне развития технологий. Алгоритмы генерации подстрочников, безусловно, будут совершенствоваться, и этому можно только порадоваться. Но полноценного машинного перевода не будет, увы, никогда. Задача, повторюсь, не имеет технического решения. Если хотите, могу рассказать почему.
Скажем так, «в реальной жизни» достаточно много случаев, когда глубокие иерархии работают
Или нам кажется, что работают, потому что мы к ним привыкли и приучились их считать неизбежным злом. Но при внимательном рассмотрении оказывается, что зло это совсем не неизбежное, и мы просто попали в ситуацию выученной беспомощности.
а во всех остальных случаях просто никто не заставляет
Если есть тру-ООПшная библиотека и её нужно заюзать, то мы просто вынуждены бываем рыться в куче жёстко фрагментированной логики, матерясь и понимая, что цимуса здесь процентов 10, а всё остальное — просто ООПшный шлак.
Ну вот видите, значит, не все иерархии содержат логические ошибки. Что, собственно, и требовалось доказать.
В данном случае ошибкой является привязка к таксономическим признакам, в результате чего вполне рядовая ситуация, когда (гипотетический пример) во что-нибудь «щетинковое» приходится относить существа, напрочь лишённые щетинок. По-хорошему, конечно, нужно как-то (не понятно как) всё привязывать к генам, или даже не только к ним. В общем, пусть ребята сами разбираются. Нам своего геморроя хватает.
Моё утверждение «любая иерархия более двух уровней неизбежно содержит внутри себя логическую ошибку», конечно, можно (и нужно) фальсифицировать. Авось найдётся что-то действительно стопудово иерархическое, на фоне чего ущербность привычных древовидных конструкций будет ещё нагляднее.
Формальный ответ: «is a». «А потомок Б» означает «А есть Б» (но не наоборот).
Понятно. «Что такое осень — это небо, плачущее небо под ногами».
Сразу же классический кейс: окружность и эллипс. С одной стороны окружность — это эллипс, у которого совпадают фокусы. С другой стороны эллипс — это проекция окружности. Но это я так, просто вспомнилось. Не заморачивайтесь.
Отношение «is a» — это как раз про подмножества, правда ведь? Чётное число — это целое число. Целое число — это рациональное число. Рациональное число — это действительное число. Хорошо, когда множества так ловко целиком входят подмножествами в другие, правда? Но в реальной жизни оно всё не похоже на такую красоту. В реальности картинка больше похожа на чёрт знает что с взаимоналожениями и взаимопересечениями. Местами Пикассо, местами Эшер. В таких условиях рассчитывать на аккуратные серии взаимовложенных множеств — детский наив.
вот только ничего из описанного в моем решении нет
Утиная типизация? Да, хорошая штука. Самому нравится :)
Расскажите это биологам с их иерархической систематикой.
Ну, у них в данном случае есть хорошее обоснование в виде особенностей процесса, порождающего их многообразие. Я имею в виду эволюцию, распочковывающую генетические линии. Там действительно по факту получается дерево, и биологам лишь остаётся разобраться, что считать разделяющим признаком в первую очередь — какую-нибудь форму крылышек или какое-нибудь строение щетинок. По крайней мере, на многоклеточных такой фокус удаётся. Но всё равно, насколько мне известно, древовидная типизация бактерий — непроходимый кошмар, который, не исключено, что навсегда.
Что значит «чайлд» и «пэрент» применительно к живым людям, я знаю, но что это может быть применительно к таким абстрактным сущностям, как, например, номенклатурная позиция — это я как-то совсем не врубаю. Может быть, потому что по жизни тупой ;)
Множественное наследование? В принципе, в ОО-делах тема зачётная, хотя есть фанаты её повсеместного запрещения.
родительский элемент
Это просто словосочетание из двух слов. Как только начинаешь расковыривать его смысл, клиент обычно путается в показаниях. Вы правда думаете, что круглое рожает круглое зелёное? Хотел бы я посмотреть на эти роды :))
Я же говорю, это предикат, смысл которого теряется в пучине мифов и сказок народов мира.
А если у меня иерархия без структуры хранения? Например, иерархия классов?
А здесь что, лучше? Что означает «являться потомком»? С технической точки зрения (то есть как такая конструкция отрабатывается компилятором) всё понятно, но расскажите мне, в чём смысл отношения наследования между классами. Класс-потомок является подмножеством множества, символизируемого классом-предком? Или нет? Или что-то другое? Исходя из ответа и будем разбираться, почему в данном случае иерархия тоже неизбежно содержит внутри себя логическую ошибку.
И да, в ООП эта проблема традиционно решается интерфейсами (не важно, явными или имплицитными): IShape, IMaterial, IColor.
Всё правильно. Когда базовая идея кривая, то приходится выкручиваться, городить всякие уродливые костыли типа миксинов, темплейтов и прочих ужасов скорбного существования.
Если вам нужен цвет, то сделайте атрибут Color
В этом-то и фишка, что чем страдать бессмысленными перверсиями, добавить атрибуты Color, Shape и Material, а иерархию срыть к едреням за ненадобностью.
Ну и да, добрая половина проблем любой иерархии решается возможностью иметь одну и ту же сущность больше чем в одной ветке.
Дубли?
… но еще не факт, что это логическая ошибка
Логическая ошибка становится понятной, если посмотреть структуру хранения. Допустим, эта беда у нас в реляционной базе. Стандартный способ хранения иерархий — это ссылка таблицы на саму себя. Простор для извращений там, конечно, есть, но базовое решение — именно такое: имеем ключевое поле ID и ссылку на родителя ParentID.
У элементов второго уровня семантика атрибута ParentID — цвет. У элементов третьего уровня — что? По ходу дела, сочетание форма+цвет. Сразу бросается в глаза, что:
1. Отдельный предикат «форма» у нас отсутствует. То есть если возникнет потребность дёрнуть запросом «выбрать все квадратные ништяки», то ээээ… проблема. Не удобно, но не смертельно. В принципе, можно выкрутиться.
2. Семантика предиката ParentID стала зависеть от аргумента. А вот это уже смертельно, потому что такая петля, боюсь, исчислением предикатов не предусмотрена.
По сути, у нас в лице ParentID в базе появился предикат:
САМ_АВОСЬ_ДОГАДАЕШЬСЯ_ЧТО(x, y)
Хуже всего, когда на эту плавающую логику (на самом деле это уже стало не логикой, а её отсутствием) придётся завязать какую-нибудь функциональность типа «круглое катить, квадратное кантовать». Противологичность начнёт давать метастазы по системе.
...used to refer to one of two related but distinct notions...
Бардак.
Доказательства, что ошибка обязательно содержится в любой иерархии глубже двух уровней, не воспоследовало. А жаль.
По-хорошему, конечно, нужно было бы как-нибудь опереться на какой-нибудь математический формализм и строго это дело доказать. Но только конкретно сейчас у меня нет никаких идей относительно того, что это может быть за формализм.
Факт семантической разнородности разных уровней иерархий наблюдается каждый раз. Более того, начиная со второго уровня почти всегда семантика начинает скакать от ветки к ветке. Если говорить о классификаторах, то примерно в 100% случаев гораздо лучшим решением бывает срыть к едреням дерево, замутить плоский список и обвесить его дополнительной атрибутикой (которая, собственно, и реализует разные классификационные разрезы).
Надо отдать должное, предоставление услуг по вытаскиванию несчастных из той помойки, куда они загоняют себя деревянным мышлением, бывает неплохим источником вкусного дохода. Не знаю кому как, но мне не доставляет особого морального удовлетворения наживаться на глупостях человеческих.
Инкапсуляция получается тогда, когда внешний пользователь не имеет доступа к ненужным ему данным/функциональности.
Тётя Вика здесь говорит нам следующее: Инкапсуляция (англ. encapsulation, от лат. en capsula) — в информатике упаковка данных и функций в единый компонент.
С какой целью это всё засунуто в одну капсулу — уже следующий вопрос.
То, что Вы называете инкапсуляцией, по ссылке выше называется сокрытием, и про это дело там сказано следующее: В ООП инкапсуляция тесно связана с принципом абстракции данных (не путать с абстрактными типами данных, реализации которых предоставляют возможность инкапсуляции, но имеют иную природу). Это, в частности, приводит к другому распространённому заблуждению — рассмотрению инкапсуляции неотрывно от сокрытия. В частности, в сообществе С++ принято рассматривать инкапсуляцию без сокрытия как неполноценную. Однако, некоторые языки (например, Smalltalk, Python) реализуют инкапсуляцию в полной мере, но не предусматривают возможности сокрытия в принципе.
От себя добавлю, что в JavaScript «сокрытие» делается методом добавления "_" в начало имени атрибута. При этом атрибут, конечно, остаётся видимым извне, но товарищи по команде оповещены, что если есть такая пометка, то трогать нельзя.
Хочу.
Тут немножко придётся залезть в дебри.
У нас, человеков, среди прочего есть две базовые операции: декомпозиция и обобщение. Оно же анализ и синтез. Оно же дедукция и индукция. Обе — крайне полезные штуки. Можно, не сильно покривив душой, сказать, что на них построено всё наше мышление. При декомпозиции мы выдумываем разделяющий принцип и, применяя его, делим что там нам надо поделить, на части. При обобщении мы выдумываем обобщающий критерий и применяем его. Всё просто и буднично. Как правило, эта операция нам сразу даёт мощный позитивный эффект. Набор бессвязной хрени становится чем-то таким, чем можно осмысленно манипулировать. Воодушевившись успехом, мы наивно полагаем, что повторное применение той же операции к достигнутому результату тоже будет успешным. И тут нам облом. Тот же принцип, который мы применили на первом шаге, мы применить не можем (он уже естественным образом себя исчерпал), и придумывать приходится другой принцип. Казалось бы, нет проблем, но возникает резонный вопрос: а почему второй принцип после первого? Почему не наоборот? Они ведь разные, и поэтому не могут не быть равноправны. Применение второго шага декомпозиции оказывается подвержено влиянию первого шага, но в реальности никакого такого влияния нет. Критерии независимы, но у нас они оказались зависимы, и поэтому об эту не соответствующую действительности зависимость теперь мы будем всю дорогу спотыкаться.
Ради интереса возьмите любой иерархический классификатор (хотя бы даже ОКВЭД) и насладитесь непроходимостью творящегося безобразия.
Мне как автоматизатору по роду деятельности, часто приходится до хрипоты рвать глотки с заказчиками, пытаясь отучить их от того, что я называю деревянным мышлением. Каждое (без исключения) выращенное в системе дерево — это мина замедленного действия. Когда конкретно она рванёт — лишь вопрос времени. Продавить свою позицию, к сожалению, удаётся далеко не всегда, и поэтому приходится тратить куски своей драгоценной жизни на ликвидацию последствий катастроф, неизбежность которых была ясно видна с самого начала.
я перестал понимать, что вы понимаете под «объединением»
Когда мы на ассемблере пишем
ADD AX BX
мы разве не объединяем в единое целое данные (AXи BX) и операцию ADD? Объединяем, и даже понятно, как это объединение материализуется в аппаратуре сумматора.
Данные — это ведь просто нолики и единички. +3.3V / 0V. Есть намагниченность / нет намагниченности. Смысл свой они получают в контексте алгоритма. В любом случае. Можно, конечно, это назвать инкапсуляцией, но только зачем? Инкапсуляция получается тогда, когда кроме самих данных до кучи есть ещё и адрес исполняемого кода, на который нужно передать исполнение для выполнения операции. Логика становится частью данных, и за счёт этого мы получаем дополнительную гибкость. Ту самую, которая называется «полиморфизм». Но за такую гибкость приходится расплачиваться тем, что у нас появляется понятие абстрактного метода, и, как следствие, необходимость нагородить иерархию. А любая иерархия более двух уровней неизбежно содержит внутри себя логическую ошибку. Если хотите, могу рассказать, какую. Выйти за пределы 2-х уровней и нагородить хотя бы третий — очень соблазнительно, и отсюда масса весьма гадских проблем.
А К/С и в SOA напрямую не предполагают описанный выше вариант инкапсуляции, поэтому к ОО их можно отнести только с ооооочень большой натяжкой.
Но речь, впрочем, не об этом, а том, противоестественно ли объединять данные и поведение. Как видим, не противоестественно.
Похоже на то, что Вы прикалываетесь. Ну конечно, объединять данные и поведение никоим образом не противоестественно. Чёрт возьми, они, как ни крути, сливаются в экстазе в любом вычислительном процессе, что бы этот процесс собой ни представлял. Хоть ООП, хоть что угодно другое, включая «as is» машину Тьюринга или даже машину Бэббиджа.
ООП — это всё же, насколько я понимаю, особенное объединение данных и алгоритмов. Такое объединение, когда вместе с данными болтаются ссылки на методы, манипулирующие этими данными. То есть кроме бинарных данных замка есть ещё ссылка на метод «Провернуть».
Это всего лишь три атрибута, которые стали ассоциироваться с ООП позже.
Именно в тот момент, когда данные (родимые наши нолики и единички) решили снабдить собственным поведением. То есть когда подумалось, что неплохо было бы, чтобы то ли замок научился в себе проворачивать ключи, то ли ключи научились проворачивать себя в замках.
Здравствуй, инкапсуляция поведения.
Конечно. Но вопрос в масштабе. Когда за интерфейсом, скрытым за доступным по некоему адресу кроется отказоустойчивый кластер с полноценной приложухой, то это уже не совсем то, что принято в ООП называть объектом.
Три источника и три составные части ООПизма: инкапсуляция, наследование, полиморфизм.
Правильный вопрос «а почему да». Наличие какого-то сервиса еще не означает, что у вас SOA.
Дело же совсем не в том, что какой-то сервис слепили, а в том, что существенный кусок функциональности вынесли в отдельную подсистему, снабдили удобными интерфейсами и сделали сквозной функциональностью для самых разных систем и нужд.
Взаимоотношения в качестве кого? В качестве окошечка для ввода текста? Если мы говорим о переводе через понимание, то обсуждаемый в переводимом тексте предмет должен присутствовать во внутреннем мире переводчика. В принципе, глухой с детства переводчик может перевести отрывок текста про то, как тихонько звучащая мелодия Лунной сонаты Бетховена накладывалась на шум дождя, шорох листьев и отдалённые раскаты грома. Залезет в словарь, найдёт перевод слов, грамматически правильно их свяжет. Но это будет не «через понимание». Даже весьма символическое различие между мужчинами и женщинами уже приводит к тому, что некоторые тексты в переводе, выполненном женщиной, выглядят криво. И наоборот.
Фантастика пишется людьми для людей про людей. Зацепок более чем достаточно, особенно когда это правильная фантастика, то есть написанная по принципу «обычные люди в необычных обстоятельствах или необычные люди в обычных обстоятельствах». Заметьте, и в первом, и во втором случае это люди. Никому в голову не придёт писать о злоключениях IP-пакета в хакнутом DNS :))
Он будет мальчиком или девочкой? Ответ «существо среднего рода» не принимается, потому что ну нафиг заниматься решением психологических проблем сексуально дезориентированного робота. Лучше я сам изучу китайский.
Совершенно верно. Можно скопировать, и это удобно. Но что мы потом с копиями будем делать? Боюсь, под пресс они не захотят. Они полноценные человеческие личности со всем присущем нам комплектом приколов, включая инстинкт самосохранения и стремление к справедливости.
Вполне допускаю, что могут быть и другие мотивы. Но если говорить не об извращениях и не о психопатологиях, то мотивация технаря — это решение задачи более эффективным, чем ранее, способом. Проще, дешевле, выше, быстрее. Железная тётя, психующая по поводу собственной железности — совсем не похоже на «проще» и «дешевле».
Молоток мой — раб мой. Впрочем, нет, между инструментом и рабом есть существенная разница. Ещё есть существенная разница между рабом и свободным. Подозреваю, полноценный перевод может делаться только свободным. А мы хотели инструмент. Печалька.
И ещё мировоззренческая. Никто не знает, что это за шняга такая, эта самая наша хвалёная модель мира. А некоторые подонки вообще утверждают, что ни о каких моделях внутри черепной коробки говорить вообще нельзя.
Мы, сами того не заметив, научились строить системы, несводимые к вычислениям любого рода. Вот эта хабровская страничка, например, в моём хроме — тоже система, функционирование которой в целом не сводится к вычислению. Я вот в окошечко что-то пишу, мышкой двигаю, что-то по таймеру небось запускается, с сервером общается. Открытая система. Если даже такую штуку принципиально невозможно воспроизвести машиной Тьюринга, то глупо удивляться тому, что наше открытое всей внешней реальности мышление не сводится к вычислению.
«Новый (не голый) ум короля» читал. Хорошая книжка, поучительная. Лично для меня она особенно примечательна как пример хорошо замаскированного ухода в мистику. Мистика ведь — это совсем не обязательно разглагольствование про богов, демонов и прочие тонкие сущности. Мистика — это в первую очередь склонность прятать непонятное в заведомо непознаваемое. В данном случае, уткнувшись в идеологический тупик (на самом деле ничего страшного, бывает), автор предпочёл спрятать концы в непознаваемость квантовой неопределённости и сделать вид, что всё в порядке. Плохой дядя Роджер. Бяку сделал.
Да и вообще, неопределённость процесса принятия решений — совсем не та же самая неопределённость, которую мы наблюдаем при подбрасывании монетки. Эти неопределённости имеют совсем разную природу. Не уверен, что мировая философская мысль дозрела до обсуждения природы этих неопределённостей.
Весь вопрос в том, что это должен быть за опыт. У нас опыт — это вся наша личная предыстория пребывания в нашем грешном мире, включая радости и огорчения, победы и поражения, взаимоотношения с другими людьми и т.п. вещи. Огромный пласт даёт опыт взаимодействия с физической реальностью, включая и ту, которая является нашими собственными телами. Какой опыт программного агента может быть полезен при переводе фразы «было мало воздуха»? Программный агент никогда не попадал в ситуацию, когда ему было мало воздуха, и поэтому ему ничего не остаётся, как по словарю подставить «little air» и побежать дальше.
Когда я говорил про паспорт, я именно то и имел в виду, что для понимания нужно быть существом, аналогичным имплицитному читателю. Только в этом случае возможно понимание, необходимое для составления качественного перевода. Детям на уроках, кстати, не дают переводить тексты, для которых они ещё не созрели. Например, юридические заморочки, квантовую физику и молекулярную биологию.
Не, ну если по приколу и невзирая на цену, то да, конечно. Но вопрос ведь в том, чтобы получить дешёвое и практичное решение. Именно это нам надо от техники. А если решение представляет собой искусственного человека, живущего в реальном мире в реальном масштабе времени и, к тому же, ещё и социализированного, то это совсем не то, что мы ожидаем от технических решений.
Нам ведь хочется механического раба — послушного, исполнительного и эффективного. Такого раба, которого при выходе новой более продвинутой модели мы можем, глазом не моргнув, выбросить в ведро или грохнуть через Shift-Delete. Раб, обладающий собственной полноценной личностью и заявляющий о своих правах, нам на фиг не нужен.
А чтобы представить, нужно быть имплицитным читателем.
Представьте себе такую ситуацию. Допустим, поступила партия очень качественно подделанных пятитысячных купюр. На глаз подделку выявить невозможно. Ни один из существующих детекторов не ловит. Есть желание получить зарплату пятитысячными? Не знаю кому как, но мне почему-то нет. Наверно потому, что скорее всего через неделю придумают, как отличить подделку. А пока не придумали, у меня никто их всё равно не примет. «Настоящее» / «поддельное» — внутреннее свойство, не очень зависящее от конфигурации волновых функций частиц, составляющих объект. Мятый изрядно поюзанный слегка надорванный пятитысячник по свойству «настоящесть» равен новому настоящему, а неотличимый от настоящего поддельный — нет.
Идеологический затык с утками возникает от того, что мы привычно путаем понятия «тот же» и «такой же». А это разные категории. Не надо их путать. «Такой же» — это про равенство значений характеристик, а «тот же» — про такую в целом загадочную штуку, как идентичность. В случае с утками идентичностью обладает множество «утки», и конкретный экземпляр либо принадлежит ему, либо нет. Технически мы выясняем принадлежность экземпляра по значениям характеристик (выглядит, ходит, крякает и т.п.), но это только потому, что нам так удобно и практично. Но мы, надеюсь, понимаем, что подделка даже всех известных характеристик не влияет на идентичность, а лишь затрудняет правильную идентификацию.
О переводе.
Каждый новый текст уникален. Уметь переводить то, что уже переведено — так себе заслуга. Анализ существующих переводов позволяет наполнить словарь, но если я, например, попытаюсь найти в интернетах перевод на английский текста хотя бы вот этого коммента, который вы сейчас читаете, я обломаюсь. Сколько бы мы ни накопили бигдэйты, она окажется бесполезной даже при решении такой простой задачи.
Допустим, я хочу получить перевод этого текста на китайский. Есть ли смысл мне показывать разные варианты перевода?
Давайте прикинем, что нужно для того, чтобы перевод текста этого коммента на китайский получился правильным:
0. (нулевым пунктом как само собой разумеющееся) Нужен набор словарей и формализованной грамматики. С этим худо-бедно роботы справляются.
1. Нужно понимание, что это не самостоятельный текст, а коммент к комменту в ответ на коммент… и так далее. То есть нужно понимание, почему в первой половине текста говорится о каких-то утках, а во второй о каких-то переводах.
2. Сам хабровский пост тоже нужно учесть, потому что именно он задал направление.
3. Обязательно нужно учесть текущую сиюминутную ситуацию в той области техники, которую поспешили назвать искусственным интеллектом. Без этого не может быть понятна грубая провокационность моего заявления о том, что задача полноценного перевода не имеет технического решения. Очень не помешало бы при составлении перевода понимать, как на эту ситуацию завязан хабровский пост и дальнейшее его обсуждение. Для понимания текущего момента развития технологий весь накопленный комплект качественных переводов мировой литературной классики в целом бесполезен.
4. В первой части я вскользь упомянул ситуацию получения зарплаты фальшивыми деньгами. Я в такое не попадал и Вы, надеюсь, тоже, но мы оба можем себе живо представить всю глубину облома. Просто потому, что мы вовлечены в товарно-денежный обмен. А робот не вовлечён. Он никогда не получал зарплату и не ходил с ней в магазин. И ещё он никогда не держал в руках ветхие купюры (у него рук нет). Ему не может быть понятно, о чём речь. Это объекты, не принадлежащие к тому миру, в котором он живёт.
Ещё раз подчеркну, что речь идёт не о составлении качественного подстрочника, а о high-end переводе. Понятно, что результат работы начинающего переводчика или переводчика, не погрузившегося на всю глубину сути происходящего, будет хуже подстрочника, выданного супер-пупер алгоритмом.
Относительно перевода всё дело в том, что мы имеем два подхода к решению этой задачи. Первый, традиционный, заключается в том, что человек получает текст на одном языке, понимает его, и излагает на другом языке. Второй способ — это манипулирование строками символов. Имея одну строку символов на входе, нужно получить другую на выходе. Казалось бы, фигня вопрос — нам всё равно, что там происходит внутри чёрного ящика переводчика, и нам всего лишь нужно, чтобы одна строка символов превратилась в другую. Формально — да, но тут не лишне вспомнить, что текст — это совсем не всегда просто последовательность символов. Кроме символов есть контекст. Без контекста это просто буквы. Контекст есть у живого переводчика, но его нет у машины. Машина на вход получила только текст, и контекстом у неё будут только словари, базы знаний, коэффициенты обученной нейросети и прочие общие вещи, в которых нет и не может быть ничего про то, зачем это сказано, почему так, а не иначе, что собой представляет имплицитный читатель и ещё масса вещей, которые для нас, живых человеков, являются естественной средой обитания.
Можно изготовить робота, для которого наш мир станет естественной средой обитания, но тогда придётся выдать ему паспорт (потому что он по факту стал человеком) и наделить его гражданскими правами. Оно такое нам надо? Уж лучше мы как-нибудь с подстрочниками (очень качественными, кстати) помучаемся, а в случае надобности позовём живого человека и заплатим ему денег. Кстати, роботу, для которого наш мир стал средой обитания, тоже надо будет платить зарплату. Иначе ему не на что будет содержать своих детей (упс… а как иначе?).
А вот утка по-пекински, хоть уже и не выглядит как утка, не крякает и не ходит, всё же утка. Забавно, правда?
А если серьёзно, то есть некоторые виды деятельности, которые роботы у нас никогда не отберут. Например, как это ни странно сейчас прозвучит, перевод естественных языков. Задача не имеет технического решения ни при каком уровне развития технологий. Алгоритмы генерации подстрочников, безусловно, будут совершенствоваться, и этому можно только порадоваться. Но полноценного машинного перевода не будет, увы, никогда. Задача, повторюсь, не имеет технического решения. Если хотите, могу рассказать почему.
Если есть тру-ООПшная библиотека и её нужно заюзать, то мы просто вынуждены бываем рыться в куче жёстко фрагментированной логики, матерясь и понимая, что цимуса здесь процентов 10, а всё остальное — просто ООПшный шлак.
В данном случае ошибкой является привязка к таксономическим признакам, в результате чего вполне рядовая ситуация, когда (гипотетический пример) во что-нибудь «щетинковое» приходится относить существа, напрочь лишённые щетинок. По-хорошему, конечно, нужно как-то (не понятно как) всё привязывать к генам, или даже не только к ним. В общем, пусть ребята сами разбираются. Нам своего геморроя хватает.
Моё утверждение «любая иерархия более двух уровней неизбежно содержит внутри себя логическую ошибку», конечно, можно (и нужно) фальсифицировать. Авось найдётся что-то действительно стопудово иерархическое, на фоне чего ущербность привычных древовидных конструкций будет ещё нагляднее.
Сразу же классический кейс: окружность и эллипс. С одной стороны окружность — это эллипс, у которого совпадают фокусы. С другой стороны эллипс — это проекция окружности. Но это я так, просто вспомнилось. Не заморачивайтесь.
Отношение «is a» — это как раз про подмножества, правда ведь? Чётное число — это целое число. Целое число — это рациональное число. Рациональное число — это действительное число. Хорошо, когда множества так ловко целиком входят подмножествами в другие, правда? Но в реальной жизни оно всё не похоже на такую красоту. В реальности картинка больше похожа на чёрт знает что с взаимоналожениями и взаимопересечениями. Местами Пикассо, местами Эшер. В таких условиях рассчитывать на аккуратные серии взаимовложенных множеств — детский наив.
Утиная типизация? Да, хорошая штука. Самому нравится :)
Ну, у них в данном случае есть хорошее обоснование в виде особенностей процесса, порождающего их многообразие. Я имею в виду эволюцию, распочковывающую генетические линии. Там действительно по факту получается дерево, и биологам лишь остаётся разобраться, что считать разделяющим признаком в первую очередь — какую-нибудь форму крылышек или какое-нибудь строение щетинок. По крайней мере, на многоклеточных такой фокус удаётся. Но всё равно, насколько мне известно, древовидная типизация бактерий — непроходимый кошмар, который, не исключено, что навсегда.
Это просто словосочетание из двух слов. Как только начинаешь расковыривать его смысл, клиент обычно путается в показаниях. Вы правда думаете, что круглое рожает круглое зелёное? Хотел бы я посмотреть на эти роды :))
Я же говорю, это предикат, смысл которого теряется в пучине мифов и сказок народов мира.
А здесь что, лучше? Что означает «являться потомком»? С технической точки зрения (то есть как такая конструкция отрабатывается компилятором) всё понятно, но расскажите мне, в чём смысл отношения наследования между классами. Класс-потомок является подмножеством множества, символизируемого классом-предком? Или нет? Или что-то другое? Исходя из ответа и будем разбираться, почему в данном случае иерархия тоже неизбежно содержит внутри себя логическую ошибку.
Всё правильно. Когда базовая идея кривая, то приходится выкручиваться, городить всякие уродливые костыли типа миксинов, темплейтов и прочих ужасов скорбного существования.
В этом-то и фишка, что чем страдать бессмысленными перверсиями, добавить атрибуты Color, Shape и Material, а иерархию срыть к едреням за ненадобностью.
Логическая ошибка становится понятной, если посмотреть структуру хранения. Допустим, эта беда у нас в реляционной базе. Стандартный способ хранения иерархий — это ссылка таблицы на саму себя. Простор для извращений там, конечно, есть, но базовое решение — именно такое: имеем ключевое поле ID и ссылку на родителя ParentID.
Допустим, наплодили такую иерархию:
1 Круглые
- 1.1 Зелёные круглые
-- 1.1.1 Деревянные зелёные круглые
-- 1.1.2 Железные зелёные круглые
- 1.2 Красные круглые
-- 1.2.1 Деревянные красные круглые
-- 1.2.2 Железные красные круглые
2 Квадратные
- 2.1 Зелёные квадратные
-- ...
- 2.2 Красные квадратные
-- ...
У элементов второго уровня семантика атрибута ParentID — цвет. У элементов третьего уровня — что? По ходу дела, сочетание форма+цвет. Сразу бросается в глаза, что:
1. Отдельный предикат «форма» у нас отсутствует. То есть если возникнет потребность дёрнуть запросом «выбрать все квадратные ништяки», то ээээ… проблема. Не удобно, но не смертельно. В принципе, можно выкрутиться.
2. Семантика предиката ParentID стала зависеть от аргумента. А вот это уже смертельно, потому что такая петля, боюсь, исчислением предикатов не предусмотрена.
По сути, у нас в лице ParentID в базе появился предикат:
САМ_АВОСЬ_ДОГАДАЕШЬСЯ_ЧТО(x, y)
Хуже всего, когда на эту плавающую логику (на самом деле это уже стало не логикой, а её отсутствием) придётся завязать какую-нибудь функциональность типа «круглое катить, квадратное кантовать». Противологичность начнёт давать метастазы по системе.
По-хорошему, конечно, нужно было бы как-нибудь опереться на какой-нибудь математический формализм и строго это дело доказать. Но только конкретно сейчас у меня нет никаких идей относительно того, что это может быть за формализм.
Факт семантической разнородности разных уровней иерархий наблюдается каждый раз. Более того, начиная со второго уровня почти всегда семантика начинает скакать от ветки к ветке. Если говорить о классификаторах, то примерно в 100% случаев гораздо лучшим решением бывает срыть к едреням дерево, замутить плоский список и обвесить его дополнительной атрибутикой (которая, собственно, и реализует разные классификационные разрезы).
Надо отдать должное, предоставление услуг по вытаскиванию несчастных из той помойки, куда они загоняют себя деревянным мышлением, бывает неплохим источником вкусного дохода. Не знаю кому как, но мне не доставляет особого морального удовлетворения наживаться на глупостях человеческих.
Инкапсуляция (англ. encapsulation, от лат. en capsula) — в информатике упаковка данных и функций в единый компонент.
С какой целью это всё засунуто в одну капсулу — уже следующий вопрос.
То, что Вы называете инкапсуляцией, по ссылке выше называется сокрытием, и про это дело там сказано следующее:
В ООП инкапсуляция тесно связана с принципом абстракции данных (не путать с абстрактными типами данных, реализации которых предоставляют возможность инкапсуляции, но имеют иную природу). Это, в частности, приводит к другому распространённому заблуждению — рассмотрению инкапсуляции неотрывно от сокрытия. В частности, в сообществе С++ принято рассматривать инкапсуляцию без сокрытия как неполноценную. Однако, некоторые языки (например, Smalltalk, Python) реализуют инкапсуляцию в полной мере, но не предусматривают возможности сокрытия в принципе.
От себя добавлю, что в JavaScript «сокрытие» делается методом добавления "_" в начало имени атрибута. При этом атрибут, конечно, остаётся видимым извне, но товарищи по команде оповещены, что если есть такая пометка, то трогать нельзя.
Тут немножко придётся залезть в дебри.
У нас, человеков, среди прочего есть две базовые операции: декомпозиция и обобщение. Оно же анализ и синтез. Оно же дедукция и индукция. Обе — крайне полезные штуки. Можно, не сильно покривив душой, сказать, что на них построено всё наше мышление. При декомпозиции мы выдумываем разделяющий принцип и, применяя его, делим что там нам надо поделить, на части. При обобщении мы выдумываем обобщающий критерий и применяем его. Всё просто и буднично. Как правило, эта операция нам сразу даёт мощный позитивный эффект. Набор бессвязной хрени становится чем-то таким, чем можно осмысленно манипулировать. Воодушевившись успехом, мы наивно полагаем, что повторное применение той же операции к достигнутому результату тоже будет успешным. И тут нам облом. Тот же принцип, который мы применили на первом шаге, мы применить не можем (он уже естественным образом себя исчерпал), и придумывать приходится другой принцип. Казалось бы, нет проблем, но возникает резонный вопрос: а почему второй принцип после первого? Почему не наоборот? Они ведь разные, и поэтому не могут не быть равноправны. Применение второго шага декомпозиции оказывается подвержено влиянию первого шага, но в реальности никакого такого влияния нет. Критерии независимы, но у нас они оказались зависимы, и поэтому об эту не соответствующую действительности зависимость теперь мы будем всю дорогу спотыкаться.
Ради интереса возьмите любой иерархический классификатор (хотя бы даже ОКВЭД) и насладитесь непроходимостью творящегося безобразия.
Мне как автоматизатору по роду деятельности, часто приходится до хрипоты рвать глотки с заказчиками, пытаясь отучить их от того, что я называю деревянным мышлением. Каждое (без исключения) выращенное в системе дерево — это мина замедленного действия. Когда конкретно она рванёт — лишь вопрос времени. Продавить свою позицию, к сожалению, удаётся далеко не всегда, и поэтому приходится тратить куски своей драгоценной жизни на ликвидацию последствий катастроф, неизбежность которых была ясно видна с самого начала.
ADD AX BX
мы разве не объединяем в единое целое данные (AXи BX) и операцию ADD? Объединяем, и даже понятно, как это объединение материализуется в аппаратуре сумматора.
Данные — это ведь просто нолики и единички. +3.3V / 0V. Есть намагниченность / нет намагниченности. Смысл свой они получают в контексте алгоритма. В любом случае. Можно, конечно, это назвать инкапсуляцией, но только зачем? Инкапсуляция получается тогда, когда кроме самих данных до кучи есть ещё и адрес исполняемого кода, на который нужно передать исполнение для выполнения операции. Логика становится частью данных, и за счёт этого мы получаем дополнительную гибкость. Ту самую, которая называется «полиморфизм». Но за такую гибкость приходится расплачиваться тем, что у нас появляется понятие абстрактного метода, и, как следствие, необходимость нагородить иерархию. А любая иерархия более двух уровней неизбежно содержит внутри себя логическую ошибку. Если хотите, могу рассказать, какую. Выйти за пределы 2-х уровней и нагородить хотя бы третий — очень соблазнительно, и отсюда масса весьма гадских проблем.
А К/С и в SOA напрямую не предполагают описанный выше вариант инкапсуляции, поэтому к ОО их можно отнести только с ооооочень большой натяжкой.
ООП — это всё же, насколько я понимаю, особенное объединение данных и алгоритмов. Такое объединение, когда вместе с данными болтаются ссылки на методы, манипулирующие этими данными. То есть кроме бинарных данных замка есть ещё ссылка на метод «Провернуть».
Конечно. Но вопрос в масштабе. Когда за интерфейсом, скрытым за доступным по некоему адресу кроется отказоустойчивый кластер с полноценной приложухой, то это уже не совсем то, что принято в ООП называть объектом.
Дело же совсем не в том, что какой-то сервис слепили, а в том, что существенный кусок функциональности вынесли в отдельную подсистему, снабдили удобными интерфейсами и сделали сквозной функциональностью для самых разных систем и нужд.