ООП — «Дерьхх»! уупс. Или почему НЕ НАДО начинать учить программированию с ООП.
Неожиданно появившись в универе на неделе, внезапно для себя я начал возражать и пытаться остановить своего друга (Олега Большакова), когда тот стал первокурсникам рассказывать про ООП (во-первых рано, а во-вторых есть еще причины)… но то были эмоции с причиной (как у меня часто и бывает)
Затем я решил собрать воедино и структурировать мысли по этому поводу.
Почему ООП дерь.. я считаю негодной организацией программы, а в чем вижу преимущества этого подхода.
Серьёзный, как жизнь земная, пост — милости прошу под кат.
Многие знают, что сам я болел и ООП и FP и FPR и чем только не болел, тем чувствительнее холиварнее для меня эта тема.
На экзамены про ООП студни цитируют ИНП как мантру (Инкапсуляция Наследование Полиморфизм) не задумываясь ни о чем… неужели я и такой был? — хорошо, что не помню.
Хорошая статья нашлась!
Только я начал писть эту статью, и сразу подумал «неужели никто не думает также и не написал еще такую статью?? » — И ТОЧНО ТАК — НАПИСАЛ!
вот оно, это чудо. http://oxij.livejournal.com/117201.html — самая суть, за самые яйхх. Молодца!
Я сделал из этого презентуху, в которой в сжатой форме излагаю мысль автора
По комментариям к ней понятно, что есть похожий материал PDF про Хаскель и его крутоту (спорно), там похожая суть и тоже обсиххтся ООП, и видно, что автор этой статьи все же придерживается более FP взглядов… а это не хорошо влияет на объективность его точки зрения по ООП.
Потом я еще поискал… и НАШЕЛ. тоже блеск.!
http://rainman-rocks.livejournal.com/67138.html — читайте. Вот бы мне это в 2001 бы году понимать.
Я сделал из этой статьи презентуху — может так кому-то так легче листать.
«Крутые языки» (оно же но со стороны Динамических языков)
Жили Были стековые виртуальные машины…
Тут надо думать совершенно по другому (парадигма же иная). я приведу слова «спеца 109«, которые приправлю своим коментом зелёного цвета.
————
— инкапсуляция. это очень просто, до смешного. это просто ограничение visibility/accessibility. вот эти все private, protected, etc. тупо, просто, и невероятно полезно, поскольку резко уменьшает размерность пространства состояний в любой точке программы, when used right. ДЛЯ АНАЛИЗА МАШИННОГО И ЧЕЛОВЕЧЕСКОГО. — ФАКТ.
— наследование имплементации. это не потому, что «мне лень дважды писать этот код в разных классах». это ДЛЯ того, чтобы не «писать один и тот же код в разных классах». должно быть очевидно, почему copy-paste — это плохо, вне зависимости от того, функционально мы пишем, или объектно. — НО ТАК ПРИХОДИТСЯ ДЕЛАТЬ, Т.К. У ВЫЗОВА В ООП ЕСТЬ КОНТЕКСТ. ФП МОЖНО ПРОСТО ПЕРЕВЫЗВАТЬ ПО ИМЕНИ И ВСЁ.
— полиморфизм. тут, надо признать, не так всё хорошо, как с первыми двумя свойствами. способов менять, или варьировать, поведение много, и только один из них считается true ООП. дженерики, коллбэки и лямбды часто позволяют больше, чем традиционное ООП. — С ТОЧКИ ЗРЕНИЯ ДИНАМИЧЕСКИХ ООП ЯЗЫКОВ (PYHTHON) ПОЛИМОРФИЗМ ОЧЕНЬ СОМНИТЕЛЬНО ВЫГЛЯДИТ.
————
В целом, важно, очень осторожно и аккуратно подходить к вопросу ООП, объясняя студенту этот материал.
здесь нет особого таинства, просто надо объяснить, что это такой «паттерн».
Студент уже должен знать кучу паттернов и разговаривать на их языке, и должен понимать, что в разных случая паттерн может стать антипаттерном. У него должен быть включен мозг.
Проблема еще и в том, что паттерны в универах не объясняют должным образом т.к. студенты народ горячий а у препода есть авторитет, которые он не хочет терять.
Представьте:
Препод даёт задачу и решает ее с помощью паттерна, и в аудитории всегда найдётся хотябы один «умный» студент, который решит задачу без паттерна и более эффективно и сразу же раструбит об этом. «А раз паттерны — это НЕ серебряные пули, то какой смысл тратить на это время ?» — спросят многие другие студенты.
А смысл в том, чтобы научиться равновесию, научиться мыслить, научиться в одном слове выражать свою идею собратьям по цеху, разговаривать на одном языке.
И вот когда мозг включён уже можно рассказывать о чем угодно, и о ООП тоже.
раньше я негодовал: «почемы нас учат на Pascal, процедурном языке?». Но сейчас я понимаю, это не плохой выбор.
За простоту и гибкость в самом начале расплата приходит много позже.
В Pascal, как процедурном языке со статической типизацией и компиляцией есть полиморфизм сигнатур, есть функциональные типы, есть динамическая память и стек, есть компилятор, есть линковка всякая, и вовсе не обязателен ООП. он даёт прочувствовать проблемы и заставляет думать не только о алгоритме, но и организации данных.
Научиться надо сначала на таком языке, чтобы почувствовать практику. постичь паттерны, обсудить их со всех сторон, плюсы и слабые стороны. а потом углубляться в правила проектирования в рамках каких-то частных паттернов.