kiltum (kiltum) wrote,
kiltum
kiltum

Я тут подумал: а чего это так мне ООП не нравится? Хотя бы на примере C++, как наиболее правильного в этом отношении языка. Ведь многими приятными штучками из стандарта C++ я пользуюсь и весьма доволен. А вот к ООП стойкая неприязнь ...


Так как на память не жалуюсь, начал отматывать назад. Дошел до институтско-университетских времен. И тоненькой книжки Страуструпа "Язык программирования С++" 1985 года издания. До Microsoft Windows {for Workgroups} 3.1{1} и Borland C++ 3.1. До конкурирующих между собой MFC и OWL. И до тоненьких книжек Фроловых, в которых описывалось программирование и прочее.

И вот оно. Мне никогда не было интересно написать программку класса "hello, world", а потом приделать к ней кнопочку с полем ввода. Мне было интересно написать программку, которая брала бы и через некоторое число секунд ставила в случайном месте экрана цветную точку. Или нарисовала бы линейку на экране, а потом распечатала бы её (у меня почему-то тогда была большая проблема с линейками). Или ещё чего отличное от общепринятых принципов "вот меню, вот сюда надо вводить, а сюда - смотреть"

А эти долбанные OWL и MFC, которые мало что глючные и бажные были, так они еще и сковывали мне руки невесть кем придуманными ограничениями. До сих помню, как я матерился (тогда еще неумело), обнаружив, что OWL не дает получить идентификатор текущего окна. А без него ничего на тулбаре не нарисуешь. А принцип MFC генерировать эксепшн (сейчас не знаю), если что-то не получилось с окошками? Как меня задолбали эти бесконечные try-catch ...

В общем, само ощущение скованности мне было противно. И я с радостью писал страшные слова LPCSTR и hWindowInstance. Я был доволен тем, что за меня никто ничего не решает. И если я память не освободил, то сам себе и буратино. Да, в памперсах сухо, но сидя все время в них, фиг чего путного напишешь.

Но это про использование чужих классов. Почему же я свои не пишу? Ведь это типа здорово и здорово облегчает жизнь. Тут наверное, мне просто не повезло. Я, как и многие, пытался обучаться, смотря на чужой код.

Так вот. Ни в одном коде я не увидел ничего, кроме дикого оверхеда и желания выпендриться в духе "сматрите, я про инкапсуляцию знаю". А ведь инкапсуляция (сокрытие внутренней структуры данных и реализации методов объекта от остальной программы) называется одним из главных преимуществ C++. А вот в чем прикол того, что скрываются данные и методы - никто не говорит. Боятся, что вдруг я вызову какую-нибудь внутреннюю функцию, которая завязана на другие? Ну вызову, ну получу SIGSEGV в ответ и отвалюсь.

Что там еще? Наследование и перегрузка? Типа понадобилось мне своё нечто написать, я р-р-раз, написал своё и что бы не мучаться дальше, просто вызвал метод-родитель, а он уже доделал свою черную работу? Ну. Чистой воды оверхед. Точно так же я сделаю без всякого ООП.

Полиформизм и шаблоны? Типа один класс может реализовывать и 1+1 и "вася"+"маша"? А теперь задайте себе вопрос "а нахрена?" А кто будет думать, что произойдет с 1+"маша"? Что в ответ дадут? 1? "1маша"? Не, я понимаю, что строгая типизация типов пошла лесом, но мозги-то тоже мхом зарастут ...


Кто-нибудь может мне показать пример, где ООП - это полезная штука? Не кивать куда-то в сторону гугля, а ткнуть пальцем и сказать "вот тут без ООП была бы жопа". Только давайте обойдемся без явы, с-шарпа и прочих жертв. Давайте на C++.

Я готов взять и переписать 2ю часть рассказки и дальше писать с использованием "правильных методов". Честно, только докажите. На данный момент я считаю ООП шикарным шагом Страуструпа по подъему рынка. Компы стали мощнее, программеры учатся дольше, новые версии с исправлением багов можно выпускать чаще и с пользователей денег брать больше. В остальном - туфта и засираниебивание мозгов.
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 28 comments