LINUX.ORG.RU

поясните веб-макаке за ООП (на примерах экмы желательно)!

 , ,


1

2

приветствую всех галерных рабов и одиноких волков, бороздящих IT море на плотах из пластиковых бутылок. Поясните, пожалуйста, июной веб-макаке на примерах из js про «наследование, инкапсуляцию и полиморфизм», а так же, и про абстракцию желательно. Ибо все эти джавы и хаскелы, примерами из которых так ловко жонглируют все эти бородатые господа в преыдущих тредах - моему умишке с горошинку не доступы, а за пределами лора я ничего такого, что бы про экму я не нашёл. С меня смищная картинка о том как индусы готовят программистов.

P.S. а вот нет, нагуглилось что то, если во всём разберусю - удалю тред


нагуглил пример для тебя: https://github.com/ryanmcdermott/clean-code-javascript

function emailActiveClients(clients) {
  clients
    .filter(isActiveClient)
    .forEach(email);
}

function isActiveClient(client) {
  const clientRecord = database.lookup(client);
  return clientRecord.isActive();
}
ты можешь прочесть этот код? если да, ты знаешь, что такое ООП.

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

ты знаешь, что такое ООП

Данная мессага должна была вселить в меня уверенности, но нет. Я типа понял из описания по линку, что важно не забивать одну функцию разными операциями, а выводить их, по возможности, в отдельные функции (это инкапсуляция?) и их уже внутри функции первого порядка вызывать. А о чём этот код, поясни пожалуйста, как он работает. Это типа массив clients, по которому мы проходимся через фильтр и по отобранному фильтром идём ичём?

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

но нет

.filter(isActiveClient) — абстракция.
.filter(isActiveClient) — инкапсуляция.
.filter(isActiveClient) — полиморфизм.
в этом примере нет только наследования, но по ссылки был код с классами.
наверное ты думаешь: «чё?»

system-root ★★★★ ()
Ответ на: комментарий от ghett

Это типа массив clients, по которому мы проходимся через фильтр

в этом то и есть смысл «всяких умных слов из ООП»
тебе вообще пофигу что такое объект clients, пока у него есть метод filter который ты даже можешь не знать как реализован и что делает (может он полицию вызывает, просто называется filter)
главное, чтобы в результате его работы появился объект поддерживающий метод forEach
как работает isActiveClient тебе тоже без разницы, сегодня она берёт данные из базы, завтра из текстового файла, что, конечно, плохой дизайн.
не переписывать же isActiveClient каждый раз, а через год нужно брать данные из live соцопросов, что тогда? опять переписывать?
для этого есть всякие паттерны. но это другая история.

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

list1.filter

а filter — это метод list1 или Array.prototype.filter()?
это и есть полиморфизм.

system-root ★★★★ ()

Зачем тебе это старьё?

Miguel ★★★★★ ()
Ответ на: комментарий от system-root

а filter — это метод list1 или Array.prototype.filter()?

Или первое или list1.constructor.prototype.filter()

anonymous ()

В жс есть только элементы ооп, реализованные через прототипы. Фанаты это любят, а я считаю узаконенным тотальным манкипатчингом.

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

когда у чего-то есть метод - это полиморфизм?

ты создал в объекте list2 метод filter?
нет? откуда он взялся?

system-root ★★★★ ()
Ответ на: комментарий от icefreeze

ну от прототипа вроде

prototype — это метод, он откуда взялся? ппц.

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

рассуждать об ооп в динамически типизированном языке это и есть ппц, да.

капча BRAVO HUITRES %)

anonymous ()
Ответ на: комментарий от system-root

Фильтруется выхлоп функции isActiveClient, его эмейл перебирается.

В самом isActiveClient методе берем клиента из БД и заносим в константу и возвращаем булево значение либо значение клиента, если я правильно понял.

И isActiveClient полиморфная

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

ТС говорит расскажите про ООП

systemroot говорит filter map reduce - это ООП

это что то не то кмк

icefreeze ()
Ответ на: комментарий от system-root

не, ну правда. ооп это визитор, декоратор и стратежи, а никакие ни эти ваши инкапсуляции, наследования и полиморфизмы. а фильтер и мап это больше фп не?

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

ооп это визитор, декоратор и стратежи, а никакие ни эти ваши инкапсуляции, наследования и полиморфизмы

лучше вообще не думать об этом долго, а то станешь анонiмусом... или... oh shi-

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

OMG, в трёх соснах (наследование, инкапсуляция, полиморфизм) заблудился.

поясните… за ООП

руска язык не разуметь твоя?

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

Я хз чего хочет ТС. Книжки бы почитал по ООП в целом.

да мне это всё вдалбливали в технаре 15 лет назад и я всё читал читал, а как в родном любимом манкискрипте это реализуется - я не пойму.

ghett ()

ООП это про что-то где ты как фанатик значения укладываешь в иерархию поддтипов? А сами объекты имеют состояние, которое не доступно использующим эти значения?

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

а как в родном любимом манкискрипте это реализуется - я не пойму.

Аааа..., да никак. Никто этим не пользуется ибо оно через такую жопу сделано, что проще забыть обо всём этом и делегировать/вынести в фукнцию нежели чем городить наследование.

Либо же делают как в ангуляре. но там написали целую гору кода чтобы этим (в итоге фабрики и DI у них) можно было пользоваться по людски. На чистом яваскрипте всё ооп сводиться к

function MyClass(a, b) {
  var self = this

  this.a = a
  this.b = b

  this.getAPlusB = function() {
    return self.a + self.b
  }
}


и никакого наследования никто в здравом уме не использует (правда, не берусь утверждать на 100% о писателях библиотек, но по-моему там точно та же история).
Ибо это имхо больше геморой чем польза.

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

Кому-то вдалбливали, а кто-то сам учится...

Deleted ()
Ответ на: комментарий от system-root

тебе вообще пофигу что такое объект clients

короче, я до конца не догнал пример кода, помоги пожалуйста. На основании объекта clinets пересобирается через filter новый объект, типа, в скобках у .filter(isClientActive) стоит имя второй функции, которая является условием отбора пары в светлое будущее? Как оно работает, где вот в структуре clients эти client и что такое .isActive()? Ну прости, старик, ты так всё рассказываешь чётенько, про фильтрацию хз чего понял. Это типа если бы печатника в печатный станок затянуло, а он и не против, может напечатать не только на бумаге но и на печатнике, потом, тип, разберёмся

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

Кому-то вдалбливали, а кто-то сам учится...

да я 2 года уже учусь, бро, и ООП всяких моментов не касался, у меня svg инлайновое и разработка состоит из «придумать анимацию» - «потратить время и нервы на то что бы она кроссбраузерно заработала (без лагов!!!)». у меня хер с винтом как раз на хитрую попу svg-анимаций. А вот с багажом знаний бяда.

ghett ()

Предлагаю почитать мурзилку вроде Буча - вечер-два времени, а пользы будет больше, чем от треда на ЛОРе.

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

вечер-два времени

720 страниц

Нео проснись! Ты обосрался!

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

Да ладно, всего-то 720 страниц, нужной выжимки и то меньше будет.

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

уже скачал, буду разбираться. только вот все эти вакансии где присылают вопросы в стиле:

«Какой у вас уровень владения ООП»

или

«Используете ли вы паттерны програмированния?»

какая то шляпа, особенно для джуна... Или я не прав?

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

ты можешь прочесть этот код?

короче, я до конца не догнал пример кода

в таком случае нет смысла его объяснять. это как рассуждать про ООП на примере финикийских текстов. «там же ничего не понятно!»
предлагаю тебе прочесть книжку, которую посоветовали, погуглить курсы\уроки — этого в сети навалом как в тексте, так и в видео. платно и бесплатно.
javascript самый продаваемый язык, каждый Васян делает по нему «уроки», информации просто немерено.

в рамках форума нет возможности обучать основам. этот метод общения для такого не предназначен.

главное, что хочу отметить — это комментарий под линком на книгу:

во время прочтения ко мне пришло понимание того, что абсолютно всё состоит из более мелких деталей, что для изучения объекта надо разобраться в его внутреннем устройстве и что программирование занимается моделированием объектов реального мира

никогда не слушай и не верь людям, которые несут такую дичь. никогда не верь, что ООП хоть как-то связано с реальным миром.

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

в таком случае нет смысла его объяснять

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

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

ну вот всё бросил о пошёл изучать поделие мелкомягких для познания азов наследования. Ладно, наверное апну скилл тогда коснусь пониманием аспектов наследования и полиморфизма в экме.

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

Там как в питоне, объявляешь класс наследником другого и дописываешь чего надо. По-моему, легко.

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

Но мы ж говорим не о том что можно скомпилять в жабоскрипт, а о самом жабоскрипте.

Если говорить о том что можно скомпилять я бы идрис выбрал, или хаскель на крайняк. И ну его их нафиг ваши классы вместе с наследованием и полиморфизмом. Компостируйте себе мозги ими сами.

ТС-у - вообще яваскрипт очень муторный. На нём пишут только настоящие эстеты этого дела. Ну или люди которые просто не умеют ничего другого. (Правда, эти две группы составляют наверное 95% яваскриптеров, причём соотношение первой и второй 1/100). Не ищи там мудрости или удобства... низкий порог вхождения - да.

Если же говорить о чём то что можно в яваскрипт скомпилировать - я бы предложил поглядеть на Elm. Там хорошая статическая типизация + интероперабельность с яваскриптом (что на практике обычно оч. важно, особенно когда приходишь из яваскрипта) http://elm-lang.org/

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

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

ghett ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.