@Neinerion321342

Неполцноенное ООП в javascript и значение этого?

Многие говорят, что ООП в JavaScript неполноценное.
Я пока в изучении не нашёл кардинальных отличий.
Везде наследуются и так далее.

В чем техническая разница и почему в джаваскрипте ООП изначально нету, и что это вообще значит.
Если знаете статью киньте, я нормальной на инглише даже не нашел)
  • Вопрос задан
  • 417 просмотров
Пригласить эксперта
Ответы на вопрос 2
mayton2019
@mayton2019
Bigdata Engineer
Тут нужно копнуть в историю и почитать для чего JavaScript созадавался. Какие цели и задачи перед ним ставились. Почитайте это интересно. И в части Lisp в браузерах - тоже.

Что такое вообще ООП применительно к теории и к конкретному языку? На сегодняшний день не существует канонической реализации ООП. Грубо говоря ни один язык не может претендовать на трушное ООП. Хотя другие ООП (класса строго типизированных) просто вводят больше ограничений на компилляцию
и рантайм запрещая на ходу менять тип объекта или внедрять в него новые методы и перегружать существующие.

JavaScript является таким себе податливым пластилином который разрешает очень многое делать
с объектами и именно это является объектом критики. Прототипирование вместо наследования и прочее.
JavaScript насколько я знаю расширяет спецификацию и все таки вводит понятие класса. Ключевое
слово есть. Это хорошо. Это его приближает к ООП и дает возможность больше проводить параллели с back-end например.

Есть языковые надстройки (транспилляторы) типа type-script которые вводят некий повышенный уровень
строгости по отношению к типам. Но Runtime насколько я понимаю по прежнему остается либеральным.

Вообще тема чистоты ООП - это достаточно трольная тема особенно на собеседованиях. Теоретики до сих
пор не могут посчитать сколько же свойств нужно для описания ООП. Там вроде как 3 свойства было или 4.
До сих пор нед единого трактования термина инкапсуляция.

Поэтому всех религоизных фанатиков ООП надо слать к чорту. А на собеседовании отвечать очень обтекаемо
и с отсылкой на всяких Кентов Беков и Фаулеров и Дядек Бобов. Пускай они там друг с другом договоряться
о терминологии а потом уж мы подтянемся.
Ответ написан
Комментировать
Ну во-первых, как заметил mayton2019 , не существует "полноценного ООП", т.к. в индустрии нет единой математической модели этого подхода. В отличие, например, от реляционной модели, для которой есть общепринятые термины о определения.

В вопросах ООП каждый язык д..ит делает как хочет. Понятное дело, что есть какие-то похожие принципы, но перед тем как их сравнивать, нужно тщательно разбираться и перепроверять.

В C++ и C# есть классовое ООП, соединённое с номинативной стратегией типизации. В JS и Lua есть прототипное ООП, которое в TypeScript приправляется структурной типизацией. В Rust по сути нет наследования, но есть полиморфизм. В Ruby есть концепция метаклассов, которая не особо известна в других языках. Все делают по-своему, говорить, что в каком-то языке "истинное" ООП - глупо, потому что об этом нет договорённости.

Исторически есть две крупные "школы" ООП - школа языка SIMULA и школа языка Smalltalk, вот можете почитать об этом. К этим школам добавляется ещё прототипный подход, который впервые появился в языке Self, джаваскрипт тут Америку миру не открыл. История языков программирования вообще очень длинная и интересная штука, большинство идей в современных промышленных языках были изобретены значительно ранее в других языках, экспериментальных или академических.

JS как язык отвратителен не потому, что в нём "ненастоящее" ООП, а совсем по другим причинам.
с вашей идееологией интересно(с которой я согласен), как вы относитесь к тсу?

Вы спросили не у меня, но позволю себе ответить - TypeScript это лучшее, что было с JS, потому что он делает программирование на JS возможным. Обратите внимание - с точки зрения ООП тайпскрипт ничего нового не вносит, так что на мой взгляд дело вообще не в ООП. А например в том, что в JS никак бл..ь не доедут записи. Как можно в 2023 году программировать на языке без таких элементарных вещей? За что нам такое наказание?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы