Кафкианский подход в объектно-ориентированном программировании, это когда вы создаёте класс, а потом вдруг выясняется, что он неявно наследует от другого класса – причём какого именно – неизвестно. Автозаполнение в редакторе показывает вам методы со странными названиями и сигнатурами, безо всякой документации к ним – это методы родительского класса. Переопределить их вы зачастую не можете, а при запуске программы объект вашего класса начинает эти методы вызывать в самопроизвольном порядке, и вы никак не можете добиться того, чтобы ваша программа вела себя так, как вы того хотите.
Вы пишите стройный, красивый код, вы испытываете эстетическое удовольствие на этапе проектирования программы, но оно то и дело омрачается, когда вы вспоминаете, что ваш класс унаследовал и какие-то совершенно неведомые и непонятные вам свойства и вы никак не можете знать, как это может отразиться на работе вашей программы. Эта мысль не даёт вам покоя.
Вы запускаете компилятор, и он отвергает ваш код. Вылезают какие-то странные ошибки приведения типов. Вы до этого решили никак не взаимодействовать со всем тем, что касается этого мерзкого непонятного суперкласса. Вы решили просто писать код так, как будто нет никакого суперкласса – просто считать, что ваш класс ничего ни от кого не наследует. Но вот теперь вдруг вылезают эти странные ошибки типизации и вам приходится корректировать свой код, вовлекая в него новые типы данных – из того родительского класса.
Если этого не делать, то код просто не компилируется – вам приходится наугад вставлять то тут, то там операции приведения типов. При этом вас нервирует то, что вы довольно смутно представляете, что вы вообще делаете и какую логику это несёт. Вы вынуждены это делать, чтобы программа вообще заработала, но вы теперь совсем не знаете как именно она будет работать.
Ночью вам снится ваш код и вас мучают кошмары. В них вы видите своего отца, он что-то говорит вам о том, что как бы вы того ни хотели, но вы не в силах избавиться от влияния родителей на вас. Отец говорит вам, что все мы перенимаем у родителей те или иные привычки и взгляды на мир, и не в нашей власти по своему желанию от них отказываться. Вы даже начинаете с ним соглашаться, отец хлопает вас по плечу и улыбается, но потом вы просыпаетесь и понимаете, что это был страшный сон.
В разбитом состоянии вы садитесь за работу. Вам даже не хочется открывать редактор. Вы открываете его, но смотреть на код – выше ваших сил. Вы решаете просто запустить пограмму в режиме отладки и посмотреть что она делает. Наугад расставив несколько брекпоинтов, вы жмёте кнопку «Debug», но первый брекпоинт программа проскакивает. Так не должно было быть – он был поставлен почти в самом начале, где не было ещё никаких ветвлений.
Выполнение программы останавливается только на четвёртом брекпоинте. Вы смотрите стек вызова функций и видите, что ещё в самом начале управление было передано одному из самых запутанных методов родительского класса и именно он затем вызывал все остальные методы. У вас возникает чувство, что вы не способны контролировать в своём коде вообще ничего. Что бы вы ни написали, программа всё равно будет постоянно зависать, выдавать странные результаты и вести себя совершенно непредсказуемо.
Но это ещё полбеды. Во всём происходящем вырисовывается какая-то странная, нечеловеческая логика. Ваша программа как будто подталкивает вас к чему-то. Вы не можете от неё отделаться, поскольку начальник постоянно требует скорее сдать проект.
Вы начинаете бороться со своей собственной программой. Вы пытаетесь спасти хоть немного здравого смысла, хоть в каких-то частях кода сохранить порядок и стройную аристотелевскую логику – логику ясных причин и следствий.
Вы пишете громоздкие и запутанные куски кода, единственное назначение которых – как-то скомпенсировать действие «Отца». Так вы теперь называете тот родительский класс, ввергнувший вас в эту неприятную историю. Но Отец не думает сдаваться – его методы мутируют, меняют сигнатуры и логику работы. Ещё вчера вы оттестировали один из методов Отца, подав ему на вход большое количество случайных значений и получив ответы, которые проанализировали и нашли в работе метода понятную вам логику.
Вы написали специальный фрагмент кода, с большой, на три сотни строк switch-конструкцией, где обработали почти все возможные варианты ответа метода. На это у вас ушёл целый день. Но теперь вам надо выбросить этот кусок, потому что метод стал вести себя совершенно по-другому.
Вы чувствуете, что начинаете сходить с ума. Вы выходите на улицу, чтобы пройтись и подумать о чём-от отвлечённом, как вдруг встречаете человека, который говорит вам, чтобы вы ни в коем случае не бросали начатый проект, что если вы бросите его, вы погибнете. Но это ещё не самое страшное, что может с вами случиться – намекает вам этот человек. Что?? Что, чёрт возьми, может с вами случиться??!! – в гневе набрасываетесь вы на незнакомца. Кто вы вообще такой?? – кричите вы.
Человек испуганно озирается, умоляет вас замолчать и за рукав тащит вас в сторону, шёпотом обещая всё объяснить. Вы идёте за ним, он приводит вас к себе домой. Там он проводит вас на грязную кухню, из-за закрытой двери комнаты раздаётся детский плач и недовольный женский голос. Человек всё так же шёпотом начинает вам что-то говорить, вы ничего не можете понять – половины слов попросту не слышно. Вы просите его говорить громче и яснее и тут внезапно открывается дверь комнаты и на пороге появляется женщина в ночной сорочке со спутанными голосами. Она начинает на вас кричать и говорит, чтобы вы убирались. Приведший вас человек пытается её успокоить и вместе тем яростно шепчет вам, чтобы вы остались. Потом он заталкивает женщину обратно в комнату, придвигает к двери холодильник. Достаёт из под раковины ноутбук, открывает его и показывает вам ваш код и сразу начинает что-то бурно объяснять, переключая вкладки редактора, листая вверх и вниз и даже внося какие-то правки.
Вы смотрите на редактор и не можете ничего понять. Как у этого человека оказался ваш код?? Кто он? Шпион? Хакер? Или работает на спецслужбы?
— Кто вы? Откуда у вас мой проект? – спрашиваете вы.
— Как кто? – удивляется человек. Я руководитель нашего проекта. Главный проектировщик.
— Но вы не мой начальник! – негодуте вы
— Да, я не ваш непосредственный начальник. Но я начальник вашего начальника – спокойно говорит человек. Вы меня пока ещё не видели, но обстоятельства вынуждают нас познакомиться поближе, видите ли – ситуация несколько усложнилась… И теперь нам с вами придётся поработать вместе.
Тут вы внезапно слышите скрежет – это двигается по полу холодильник, отодвигаемый открываемой с силой дверью. Спустя пару секунд из широкой открытой щели в кухню протискивается женщина и хватает вас за шиворот.
— Убирайся! – кричит она и тащит вас к двери.
— Постой! Не трогай его, мы должны работать над кодом! Ты не понимаешь, насколько это важно! – умоляет начальник вашего начальника
Но женщина непреклонна – она вышвыривает вас на лестницу и захлопывает за вами дверь. Вы поражаетесь силе этой женщины и не знаете теперь – стоит ли вам попробовать вернуться? Тут дверь слегка приоткрывается и вы видите ребёнка, который подаёт вам какие-то странные знаки. Кажется он хочет, чтобы вы забрались на чердак и там встретились с начальником вашего начальника. Вы послушно поднимаетесь на последний этаж и карабкаетесь по холодной и грязной металлической лестнице. Чердак закрыт на замок. Вам вдруг становится душно – настолько противна и нелепа вся эта ситуация. Вы решаете плюнуть на всё и вернуться домой, после чего немедленно уволиться. С чувством облегчения от этого принятого решения, вы спускаетесь по лестнице, но слышите какой-то шум и крики в квартире начальника вашего начальника. Вы стоите на два пролёта выше его площадки и видите как какие-то странные люди волокут из дверей начальника и кричат «Где он??». Начальник невольно посмотрел вверх и вы встретились с ним взглядом. В ту же секунду на вас уставились и те самые люди…