May 5th, 2014

Про объектно-ориентированное программирование

justy_tylor: В ООП что-то работает. Но большая часть - муляжи из говна и соломы (типа design patterns).

Я -- специалист не большой, но мне тоже так кажется...

ДОПОЛНЕНИЕ 1. Вот что говорит А.Степанов, создатель STL:
Да. STL не является объектно-ориентированным. Я думаю, объектно-ориентированность является почти такой же раздутой фальшивкой (hoax), как и теории искусственного интеллекта. Мне еще не попадался интересный кусок кода, который пришел бы от этих объектно-ориентированных людей.

... Я нахожу объектно-ориентированное программирование технически неосновательным. Оно пытается разложить мир на части в терминах интерфейсов, которые изменяются в пределах одного типа. Чтобы иметь дело с реальными проблемами, вам нужны многосортные алгебры -- семейства интерфейсов, которые простираются на многие типы.

Я нахожу объектно-ориентированное программирование философски нездоровым. Оно утверждает, что всё является объектом. Даже если это так, это не очень интересно: сказать, что всё является объектом -- значит, не сказать вообще ничего.

Я нахожу объектно-ориентированное программирование неправильным методологически. Оно начинается с классов. Это как если бы математик начал с аксиом. Вы не начинаете с аксиом -- вы начинаете с доказательств. Только когда вы нашли кучу соотносящихся доказательств, вы предлагаете аксиомы. Вы заканчиваете аксиомами.

То же справедливо и в программировании: вы должны начать с интересных алгоритмов. Только когда вы хорошо их понимаете, вы можете предложить интерфейс, который позволит им работать.
ДОПОЛНЕНИЕ 2. Спасибо alj868 за ссылку 1:
I think part of the reason people in big companies like object-oriented programming is because it yields a lot of what looks like work. Something that might naturally be represented as, say, a list of integers, can now be represented as a class with all kinds of scaffolding and hustle and bustle.
и ссылку 2:
Object-oriented programming generates a lot of what looks like work. Back in the days of fanfold, there was a type of programmer who would only put five or ten lines of code on a page, preceded by twenty lines of elaborately formatted comments. Object-oriented programming is like crack for these people: it lets you incorporate all this scaffolding right into your source code. Something that a Lisp hacker might handle by pushing a symbol onto a list becomes a whole file of classes and methods. So it is a good tool if you want to convince yourself, or someone else, that you are doing a lot of work.

Когда закон вступает в прямое противоречие с моралью

А случается это гораздо чаще, чем нам -- хорошим русским людям -- хотелось бы.

В данном случае я имею в виду политическую ситуацию на Украине. С циничной политической точки зрения, России сейчас не выгодно вмешиваться в украинский бедлам, а выгодно соблюдать международное право, поскольку, чем больше нацисты убьют русских, тем больше политических дивидендов приобретет Россия. Собственно говоря, чтобы иметь основания для вторжения, Россия должна ссылаться на большое количество убитых, предпочтительно зверски, как в Одессе, русских людей.

Это фундаментально неправильно. Концепцию права надо принципиальным образом переработать -- не в международном порядке, что невозможно, а для внутреннего употребления. Именно современная либеральная концепция права позволяет демагогам ставить на одну доску Гитлера и Сталина, войну США во Вьетнаме с войной СССР в Афганистане, и т.п. Проблема современного права -- полное исключение из оборота моральной перспективы.