LINUX.ORG.RU
ФорумTalks

Почему боятся ООП?

 


0

6

Заметил, что некоторые разрабы стесняются (триггерятся/истерят/брезгуют/отстраняются/впадают_в_кому от) ООП. Почему? Вот, один говорит «у нас тут не наследование, а …», так и хочется добавить «розовые пони». Т.е. если ты можешь реализовывать интерфейсы, у тебя уже нет отношения is-a? Может быть, какие-то древние ЯП не поддерживали чисто виртуальные интерфейсы, и нужен был непременно базовый класс, но как минимум уже C++ сломал эту традицию.

★★★★★

Потому что современное ООП это говно для идиотов.

И ООП-программисты до уровня CLOS или даже Smalltalk до сих пор так и не дошли.

lovesan ★★
()
Ответ на: комментарий от seiken

В этом был мой поинт

Просто твоё ООП - говно. Сурьёзное ООП сейчас - это не ООП 20 годков назад, когжда можно было залезть на коня, назваться дядюшкой и штамповать брошуры с пометкой «чистый код».

Сейчас ООП поднимает пласт сдувает пыль и клеит новые названия, с других подходов, ЯП и т.д. И чтобы это было нормальное ООП, надо много знать.

Вот тебе пример:

public IGenericRepository<TEntity> Repository<TEntity>() where TEntity : BaseEntity
    {
        var type = typeof(TEntity).Name;

        return (IGenericRepository<TEntity>)_repositories.GetOrAdd(type, t => 
        {
            var repositoryType = typeof(GenericRepository<>).MakeGenericType(typeof(TEntity));

            return Activator.CreateInstance(repositoryType, context)
                ?? throw new InvalidOperationException($"Could not create repository instance for {t}");
        });
    }
Eulenspiegel
()
Ответ на: комментарий от foror

Чего на шарпе тогда сидишь

Не сишарпом единым славен дотнет. Вот, скажем, F# там есть — про ООП он, конечно, в курсе, но акцент там не на ООП делается.

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 1)
Ответ на: комментарий от seiken

что некорректно в этой фразе, если без маркетоидной шелухи.

всё.

Eulenspiegel
()
Ответ на: комментарий от Eulenspiegel

доступен инструментарий Dotnet, что, эээ, даёт невероятные плюсы

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

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 1)
Ответ на: комментарий от Eulenspiegel

Но это в любом случае не то, что сделали в Go и Rust, и авторы данных фич вряд ли говорят, что это не ООП.

seiken ★★★★★
() автор топика
Ответ на: комментарий от Nervous

Он не новый. Но его отличает готовая экосистема, что у других в той или иной мере не так. Здесь разве что CL может похвастаться. Но опять же, кто будет учить абстракции?

Яркий пример - это масса докладов на говно по фронту «с придыханием» RxJS или монорепа… Нет, чтобы версионировать (мозга то нет), давайте забьём на основы и сделаем свалку. Так удобнее (кому?). Мы же используем во всех наших недопроектах набор инструменов, стилей etc?

Eulenspiegel
()
Ответ на: комментарий от s-warus

наследование - экзотическая фигня нигде практически не нужная

Передаю привет из геймдева, тут на наследовании половина игры строится

Satou ★★★★
()
Ответ на: комментарий от Satou

Особо ржачно наблюдать, когда на ржавом пытаются делать игры ) Там даже целый фреймворк изобрели, чтобы хоть какой-то ООП иметь в рантайме.

foror ★★★★★
()

Почему боятся ООП?

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

Stanson ★★★★★
()
Ответ на: комментарий от Stanson

Куда не надо сувать ООП? Полный идиотизм не сувать везде ООП, потому что мы банально живём в мире объектов/сущностей со своими свойствами и функциями. То, что ЯП 90-х реализовали кривой ООП это отдельная сторона вопроса. Но у них тогда опыта не было. Реализовывать ЯП без ООП в 21 веке верх идиотизма.

foror ★★★★★
()
Последнее исправление: foror (всего исправлений: 5)
Ответ на: комментарий от seiken

ОПП - это набор абстракций и правил. Сложных. То, что в FP мире делается с пол-пинка тут выглядит непонятной НЁХ. Но решает сурьёзные проблемы: берём «что-то» и работаем с ним, и нам плевать, как и куда и зачем. И повторю, ЭТО НЕ ПРОСТО!

Никто не говорит, что FP спасёт отца, как предсказывали Гуру, так и происходит, просто медленно и с понтами. «Мы вам покушать принесли! Смотрите, как эта конструкция ускоряет, улучшает и т.д.»!

Зоцени, мой недалёкий ТС такую байду: https://javascript.info/currying-partials и вот это - https://medium.com/javascript-scene/reduce-composing-software-fe22f0c39a1d

Для Ъ:

// pipe 
const pipe = (...fns) => x => fns.reduce((v, f) => f(v), x);

// carrying

```function curry(f) { // curry(f) does the currying transform
  return function(a) {
    return function(b) {
      return f(a, b);
    };
  };
}

// usage
function sum(a, b) {
  return a + b;
}

let curriedSum = curry(sum);

alert( curriedSum(1)(2) ); // 3

Кто, кто блина на JS раньше слышал про Хаскела Карри? А теперь это вопросы на синьёра-помидора! Смешно? Грустно!
И это чёткий показатель, что мир меняется в строну объединения FP и старого OOP!

Eulenspiegel
()
Ответ на: комментарий от foror

Куда не надо сувать ООП?

Туда, где оно совершенно неуместно.

мы банально живём в мире объектов/сущностей со своими свойствами и функциями.

Ну и живите в этом своём мире, фигли, кто вам не даёт-то? Просто не надо своими проблемами тыкать в морду нормальным людям.

Stanson ★★★★★
()
Последнее исправление: Stanson (всего исправлений: 1)
Ответ на: комментарий от foror

Так никто и не против, ты, видимо, забыл, как тут и не только тут пенились? «Функциональщина на проде? Фуууу!» И «ООП - это наследование (множественное)», ага-ага!

Eulenspiegel
()
Ответ на: комментарий от foror

[мультиметоды] … это типичный ООП

Фейспалм. И где же там объекты, инкапсулирующие изменяемое состояние и обменивающиеся сообщениями? Мультиметоды позволяют определять полиморфные функции над любыми значениями (наборами значений) — им не обязательно даже обладать идентичностью.

вижу наследование (иерархию)

Это и называется — слышал звон, да не знаю, где он. Значения можно организовать в (ad-hoc) иерархии, это иногда удобно — но это совершенно не обязательно для того, чтобы мультиметоды работали.

и полиморфизм

Вот так неожиданность, правда? %) Это именно он — в чистом виде, без всяких левых наслоений.

Nervous ★★★★★
()
Ответ на: комментарий от Stanson

Туда, где оно совершенно неуместно.

Для особо одаренных, где оно неуместно?

foror ★★★★★
()
Ответ на: комментарий от Nervous

И где же там объекты, инкапсулирующие изменяемое состояние и обменивающиеся сообщениями?

Кто вам не даёт создать иммутабельные объекты?

Мультиметоды позволяют определять полиморфные функции над любыми значениями (наборами значений)

Ну, под капотом это и есть ООП. Вы просто увидели Джаву/Кресты и пытаетесь мыслить, что это и есть ООП. Но это просто одна из реализаций.

Значения можно организовать в (ad-hoc) иерархии, это иногда удобно — но это совершенно не обязательно для того, чтобы мультиметоды работали

Так и в ООП вас не заставляют всё наследовать и классы могут существовать без иерархии с полиморфизмом через общий интерфейс.

foror ★★★★★
()
Последнее исправление: foror (всего исправлений: 3)
Ответ на: комментарий от Nervous

Что там в ржавом творится, не знаю и знать не хочу %)

Зря, о «Ржавом» реальные пацаны заряжают тему, что на данный момент - высшая форма жизни.

Опять же реальные пацаны заряжают, что «Ржавый» не для старпёров, которые не хотят учить новое. Ну и страшноват, да.

Eulenspiegel
()
Ответ на: комментарий от Eulenspiegel

И это чёткий показатель, что мир меняется в строну объединения FP и старого OOP!

Нет, мой тролляшный друг, это просто кто-то прочитал о ФП и решил подрочить на используемом им языке.

seiken ★★★★★
() автор топика
Ответ на: комментарий от seiken

Не, никто тут не троллит. Spread оператор внесли на руках в JS?

А теперь представь, что Redux и NgRx полноценно применяют его в работе с данными, и ушли от классов? Почему?

А потом расскажешь о «прочитал про ФП»…

Eulenspiegel
()
Ответ на: комментарий от Eulenspiegel

pipe же применяется на async выхлоп, чтобы не промисом единым…

Eulenspiegel
()
Ответ на: комментарий от foror

под капотом это и есть ООП

Нет там никакого ООП, только обычные значения и функции, которые ими оперируют. Кстати, функции — это тоже значения.

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 1)
Ответ на: комментарий от foror

обрезанный ООП

Ой-вей.

Кстати, сам мультиметод таки да можно рассматривать как объект с изменяемым состоянием, принимающий сообщения %)

Он сООПился за наши грехи, чтобы нам не приходилось, так сказатб.

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 2)
Ответ на: комментарий от Nervous

И где же там объекты, инкапсулирующие изменяемое состояние и обменивающиеся сообщениями?

В Clojure кривые мультиметоды, слабенькие. Не CLOS, конечно.

Но обмен сообщениями - как раз устаревшая концепция, с кучей нерешенных проблем, потому что главное это всегда на самом деле взаимодействие объектов. Которое и инкапсулируют обобщенные функции.

inb4 в жабе и подобном говне и обмена сообщениями то нет. Это уже уровень выше - это Smalltalk, или Erlang там.

lovesan ★★
()
Последнее исправление: lovesan (всего исправлений: 1)

MIT не родило SICP для ООП (или родило?)

без академичности все эти SOLID творчество дворца пионеров. какие нибудь Django с DRF не позволяют художникам творить (больше похоже на труд 1Сника), а попытка создать что-то вроде своего DRF превращается в реверс-инжениринг исходников.

anon1984
()
Последнее исправление: anon1984 (всего исправлений: 1)
Ответ на: комментарий от lovesan

В Clojure кривые мультиметоды, слабенькие. Не CLOS, конечно.

Мультиметоды как раз нормальные — максимально простые, общие и гибкие (диспетчеризация по произвольной функции от всех аргументов), без лишнего овна, как в CLOS — что там наворотили, это же смотреть страшно, не то, что пользоваться.

То, что делает из обобщённых функций CL хтоническую хрень, в Clojure вынесено отдельно — в протоколы и нативный жабий ООП. Для тех, кто хочет немного побыстрее и согласен на урезанную функциональность (и не боится ковыряться в овне, конечно — если речь про жабий ООП).

Design is taking things apart (tm).

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 3)
Ответ на: комментарий от anon1984

Родило.

Все эти творчества были на бумаге в девяностых, сейчас это чистая практика. Тот же DI ужо везде с пометкой «какие мы молодцы и как мы придумали». И да, молодцы и придумали. При этом ещё и происходит в рантайме, что добавляет ишшо один слой абстракций.

Eulenspiegel
()
Ответ на: комментарий от Eulenspiegel

и тут ты такой с ссылкой на академический курс вроде SICP. 3..2..1..слив. надеюсь понятно чем академический курс отличается от книги для домохозяек или разработчика CRUD-систем. пока академического курса нет, все это ооп не более чем творение гениев вроде троллтехов или психов с GTK, а не инженерия.

например, есть книга по SCALA которая вполне академична, а вот что сишника - не понять, не исходники же MFC Qt

anon1984
()
Последнее исправление: anon1984 (всего исправлений: 4)
Ответ на: комментарий от Eulenspiegel

мир меняется в строну объединения FP и старого OOP

Скорее оба подхода затыкают дыры в своей логике адаптируя подходы от конкурента.

Obezyan
()
Ответ на: комментарий от Nervous

В CLOS все как раз сделано нормально, хикки просто банально неосилил реализацию CLOS. Как и многие другие вещи из CL.

lovesan ★★
()
Ответ на: комментарий от Eulenspiegel

Зря, о «Ржавом» реальные пацаны заряжают тему, что на данный момент - высшая форма жизни.

И вы говорите что в 65 можете каждый день…

Obezyan
()
Ответ на: комментарий от Nervous

Зоцени атвет гопоты: (типо минимум)

*«Design Patterns: Elements of Reusable Object-Oriented Software» by Gamma, Helm, Johnson, and Vlissides (often called the «Gang of Four» book) *«Patterns of Enterprise Application Architecture» by Martin Fowler *«Clean Architecture: A Craftsman’s Guide to Software Structure and Design» by Robert C. Martin

*«Domain Modeling Made Functional» by Scott Wlaschin (book) *«F# for Fun and Profit» (website and YouTube channel by Scott Wlaschin)

Eulenspiegel
()
Ответ на: комментарий от lovesan

В CLOS все как раз сделано нормально

Кому и кобыла невеста.

хикки просто банально неосилил реализацию CLOS

У него не было цели реализовать CLOS — у него была цель сделать то, чем можно пользоваться, не вырывая себе все волосы на жопе. Пользоваться на практике, для создания реальных систем и зарабатывания реальных денег, а не только для академических статей и самолюбования.

И у него получилось.

Nervous ★★★★★
()
Ответ на: комментарий от Obezyan

Ну, их мнение для меня имеет вес. А своего на Rust у меня пока не сложилось. А раньше тоже говорил «могу» :)

Eulenspiegel
()
Ответ на: комментарий от Obezyan

Скорее оба подхода затыкают дыры в своей логике адаптируя подходы от конкурента.

Всё так.

Eulenspiegel
()
Ответ на: комментарий от anon1984

Да ты, парниша, туповат. Открой Angular или Fullstack Nextjs. Потом приходи и пиши «надеюсь понятно чем академический курс отличается от книги для домохозяек или разработчика CRUD-систем»

Eulenspiegel
()
Ответ на: комментарий от Eulenspiegel

Ну про паттерны GoF я бы пропустил, пожалуй (здоровым людям костыли ни к чему), а остальное вполне уважаемое чтиво.

Собственно, поэтому гопота его тебе и выдала %)

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 1)
Ответ на: комментарий от Eulenspiegel

Открой Angular или Fullstack Nextjs

совет уровня пользователя фреймворка

ты туп

/0

anon1984
()
Ответ на: комментарий от Eulenspiegel

«с придыханием» … монорепа

А чё монорепа, монорепа тащит. Очень удобно — если знать, как пользоваться.

Nervous ★★★★★
()
Ответ на: комментарий от Eulenspiegel

когда ты принесешь академический курс, позволяющий написать проект уровня Angular (lol, он ООП?), можешь выйти из зобана. или вы советуте мне забросить науку и устроиться писать на php?)

anon1984
()
Последнее исправление: anon1984 (всего исправлений: 1)
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)