Close

27.12.2015

ООП — «Дерьхх»! уупс. Или почему НЕ НАДО начинать учить программированию с ООП.

Неожиданно появившись в универе на неделе, внезапно для себя я начал возражать и пытаться остановить своего друга (Олега Большакова), когда тот стал первокурсникам рассказывать про ООП (во-первых рано, а во-вторых есть еще причины)… но то были эмоции с причиной (как у меня часто и бывает)

Затем я решил собрать воедино и структурировать мысли по этому поводу.

Почему ООП дерь..  я считаю негодной организацией программы, а в чем  вижу преимущества этого подхода.
Серьёзный, как жизнь земная, пост — милости прошу под кат.

Многие знают, что сам я  болел и ООП и 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, как процедурном языке со статической типизацией и компиляцией есть полиморфизм сигнатур, есть функциональные типы, есть динамическая память и стек, есть компилятор, есть линковка всякая, и вовсе не обязателен ООП. он даёт прочувствовать проблемы и заставляет думать не только о алгоритме, но и организации данных.
Научиться надо сначала на таком языке, чтобы почувствовать практику. постичь паттерны, обсудить их со всех сторон, плюсы и слабые стороны. а потом углубляться в правила проектирования в рамках каких-то частных паттернов.

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *