Форум программистов, компьютерный форум, киберфорум
Наши страницы
Священные войны
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
albest
0 / 1 / 0
Регистрация: 24.06.2019
Сообщений: 23
1

PHP vs Python для WEB

05.08.2019, 17:56. Просмотров 2064. Ответов 90
Метки нет (Все метки)

Здравствуйте.
В последнее время наиболее популярным становится дискуссия: PHP vs Python для WEB
Python прост, удобен. При этом позволяет разработку приложений других направлений.
Но и PHP не сдаёт позиции. По производительности PHP 7.3 опережает Django!
Хочу спросить ваше мнение. Что на сегодняшний день перспективно изучать для WEB Backend?
Какие преимущества и недостатки PHP и Python по вашему мнению?
Если говорить обо мне, то мне ближе C-подобный синтаксис. Python прост на столько, что бывает сложным.
Однако в Python привлекает возможность написания приложений с не объемным кодом.
Естественно, как вы понимаете, желательны ответы от имеющих опыт и в PHP и в Python.
Благодарю!
P.S.
В качестве фильтра-отсеивателя джунов, прошу кратко рассказать в ответе кто вы, чем занимаетесь в IT.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.08.2019, 17:56
Ответы с готовыми решениями:

PHP vs Python для карьеры
Здравствуйте. Через неделю заканчиваю школу. С лета, хочу начать усиленно изучать программирование...

PHP vs Python для работы
Здравствуйте. До сих пор я изучал программирование в основном для увлечения. Не более. Сейчас...

PHP vs Python для Backend в 2019
Здравствуйте. Давайте халиварить! PHP vs Python для Backend в 2019. Обратите внимание. Аргументы...

В php из python, работу невозможно найти новичкам python. Может перейти? Есть безпроблемный хостинг для php?
Безпроблемный хостинг - значит не будет проблем таких, как в heroku. У меня в компе сайт работает...

Форум >web-программистов > PHP > PHP для начинающих. Как такое сделать?
Форум >web-программистов > PHP > PHP для начинающих...... Как такое сделать? что бы автоматически...

90
Arhat109
46 / 10 / 0
Регистрация: 18.06.2018
Сообщений: 93
06.09.2019, 08:13 61
Цитата Сообщение от Usaga Посмотреть сообщение
Верно, плевать. Один дополнительный уровень косвенности ничего не меняет. И не всегда этот уровень есть. Так какой смысл высасывать проблему из воздуха?
То есть, Вы расписываетесь, что не разбираетесь в реализации ООП на низком уровне. Ладно, поясню:
Во-первых, не один а два "это базовый минимум", потому что у Вас есть таблица виртуальных методов класса и она одна для всех его объектов. Вызов метода из неё - это первый уровень косвенности - он всегда "косвенный". Чтобы объект мог "иметь" свои методы класса, он ОБЯЗАН содержать внутри себя дополнительный указатель на эту таблицу класса. Разименование этого указателя от this - это ВТОРОЙ уровень косвенности.
То есть имеем два обязательных уровня косвенности то есть ВТРОЕ МЕДЛЕННЕЙ, ибо 1+1+1(сам вызов) больше 1 ровно в ТРИ РАЗА.

На самом деле, часто все ещё хуже потому что this внутри метода (а мы всегда внутри какого-то метода при ООП) указывает на текущий объект и .. практически перманентно занимает 1 регистр-указатель процессора. Часто такой регистр "вообще один" у ЦП. Все это приводит к доп. расходам: загрузить указатель объекта - как третий уровень косвенности и плюсом позже ещё и вернуть this взад.

Вот и получаем "от трех до пяти раз". Все - просто.

Цитата Сообщение от Usaga Посмотреть сообщение
Верно. Пример с номером телефона не требует (и не использует таблиц виртуальных методов). Объект есть. Таблицы нет. Значит это пугало (двойная косвенность) не всегда идёт за ООП.
Нет! Если нет виртуальных методов, то НЕТ ООП - по определению ООП. Остается "Си с классами". Но, вы продолжаете выдумывать какой-то "свой ООП"..

Цитата Сообщение от Usaga Посмотреть сообщение
Нет. Я ввёл концепцию и оформил её в виде кода. Повторить такое на Си вы не смогли. Вы не видите разницы между простой структурой данных и объектом отражающим сущность из предметной области. Поэтому у вас всё Си с классами.
Я не соглашаюсь с ошибочным заявлением. Объект не объект без наследования, а только нас**но? Объект с телефоном МТС не объект? Доказать можете? Или доказательством будет цитата из семидесятых?
..
Бывает и я вам это показал. Самодостаточная сущность с собственным изолированным состоянием и поведением. Или вы будете отрицать, что это объект? На основании чего? Тут кроме цитат других людей собственных аргументов никто не приводил.
цитата из 70-х - есть определение ООП. Но .. у Вас, начинающих, свои причуды, Вы можете формировать "свои концепции", в т.ч. и своего непонимания ООП ..

В общем, всё ясно, далее выпиливаюсь самостотельно. Вы придумали собственную концепцию и пытаетесь её синонимировать с парадигмой ООП. Удачи.

Добавлено через 1 минуту
Цитата Сообщение от Usaga Посмотреть сообщение
Эта необходимость ничем кроме старой цитаты не обоснована. ООП не ООП без наследования. Потому, что так сказал кто-то десятки лет назад. Сильный же аргумент.
Ну .. для Вас это может и "кто-то", а для меня - автор концепции ООП.

Добавлено через 5 минут
P.S. Замечание "от трех до 5 раз" не совсем верно для таблично-ориентированного вычислителя, но таковых в реальности я знал только 2шт..
0
Usaga
Эксперт .NET
6125 / 4340 / 758
Регистрация: 21.01.2016
Сообщений: 16,894
Завершенные тесты: 2
06.09.2019, 08:14 62
Цитата Сообщение от Arhat109 Посмотреть сообщение
То есть, Вы расписываетесь, что не разбираетесь в реализации ООП на низком уровне. Ладно, поясню:
Во-первых, не один а два "это базовый минимум", потому что у Вас есть таблица виртуальных методов класса и она одна для всех его объектов. Вызов метода из неё - это первый уровень косвенности - он всегда "косвенный". Чтобы объект мог "иметь" свои методы класса, он ОБЯЗАН содержать внутри себя дополнительный указатель на эту таблицу класса. Разименование этого указателя от this - это ВТОРОЙ уровень косвенности.
То есть имеем два обязательных уровня косвенности то есть ВТРОЕ МЕДЛЕННЕЙ, ибо 1+1+1(сам вызов) больше 1 ровно в ТРИ РАЗА.
Нет, не расписываюсь. Что мне делать, если JIT в моём языке залезет в эту таблицу, увидит, что наследования нет и в место вызова метода через таблицу воткнёт прямой call к методу в обход этой таблицы? Это сколько уровней косвенности по вашему?

Цитата Сообщение от Arhat109 Посмотреть сообщение
Нет! Если нет виртуальных методов, то НЕТ ООП - по определению ООП. Остается "Си с классами". Но, вы продолжаете выдумывать какой-то "свой ООП"..
Объект с телефоном не объект? Вы прямо это можете сказать? "Это не объект".

Цитата Сообщение от Arhat109 Посмотреть сообщение
цитата из 70-х - есть определение ООП. Но .. у Вас, начинающих, свои причуды, Вы можете формировать "свои концепции", в т.ч. и своего непонимания ООП ..
Т.е. поросшая мхом цитата - всё, что у вас есть? Собственного мнения нема?

Цитата Сообщение от Arhat109 Посмотреть сообщение
В общем, всё ясно, далее выпиливаюсь самостотельно. Вы придумали собственную концепцию и пытаетесь её синонимировать с парадигмой ООП. Удачи.
Давно пора. Счастливо. И пересмотрите свой пример со структурой. И не показывайте его более никому, чтобы не засмеяли.
0
Arhat109
46 / 10 / 0
Регистрация: 18.06.2018
Сообщений: 93
06.09.2019, 08:31 63
Цитата Сообщение от Usaga Посмотреть сообщение
Нет, не расписываюсь. Что мне делать, если JIT в моём языке залезет в эту таблицу, увидит, что наследования нет и в место вызова метода через таблицу воткнёт прямой call к методу в обход этой таблицы? Это сколько уровней косвенности по вашему?
Расписываетесь и далее продолжаете это делать. Компиляция простых, не виртуальных методов во всех компиляторах и уже давно делается как обычный вызов Си функции с передачей ей дополнительного, скрытого параметра "указатель на объект" - this.

Компиляция виртуальных, не перекрытых методов класса часто также возможна как компиляция обычного метода. AST дерево тут в помощь. Часто класс объекта известен заранее. Если нет, то в таблицу вашего класса будет ПОДСТАВЛЕН метод из класса-родителя и количество уровней косвенности не изменяется.

Цитата Сообщение от Usaga Посмотреть сообщение
Объект с телефоном не объект? Вы прямо это можете сказать? "Это не объект".
Нет конечно, НЕ ОБЪЕКТ. Он не отвечает признакам "объекта" - он НЕ ИМЕЕТ своих методов, т.к. указатель на таблицу виртуальных методов класса ему хранить дополнительно незачем. Это обыкновенная структура Си, не более того. То, что он в вашем языке называется "объект" - недоработка авторов языка и искривление концепции ООП. Читайте определения и авторов.. т.с. "оригиналы".

Цитата Сообщение от Usaga Посмотреть сообщение
Т.е. поросшая мхом цитата - всё, что у вас есть? Собственного мнения нема?
Это цитата от автора концепции. С него все и началось. И он долго и нудно помнится доносил идею ООП "в массы". Видимо не до всех, раз у Вас был плохой преподаватель.

Понятие "объект" и вся концепция ООП произросло не на пустом месте.

Цитата Сообщение от Usaga Посмотреть сообщение
И пересмотрите свой пример со структурой. И не показывайте его более никому, чтобы не засмеяли.
Это всего лишь иллюстрация к вопросу, а не "пример кода", как Вам показалось. Мне так уже смешно, вы тут столько откровенной чуши нагородили, что скулы сводит.
0
Usaga
Эксперт .NET
6125 / 4340 / 758
Регистрация: 21.01.2016
Сообщений: 16,894
Завершенные тесты: 2
06.09.2019, 09:23 64
Цитата Сообщение от Arhat109 Посмотреть сообщение
Расписываетесь и далее продолжаете это делать. Компиляция простых, не виртуальных методов во всех компиляторах и уже давно делается как обычный вызов Си функции с передачей ей дополнительного, скрытого параметра "указатель на объект" - this.
Компиляция виртуальных, не перекрытых методов класса часто также возможна как компиляция обычного метода. AST дерево тут в помощь. Часто класс объекта известен заранее. Если нет, то в таблицу вашего класса будет ПОДСТАВЛЕН метод из класса-родителя и количество уровней косвенности не изменяется.
Ага. Значит в ООП уже не везде двойная\тройная косвенность. Ах, да. Если класс без родителя, то это не ООП. Замечательно. Выдали заявление и теперь под него подгоняете аргументацию?

Цитата Сообщение от Arhat109 Посмотреть сообщение
Нет конечно, НЕ ОБЪЕКТ. Он не отвечает признакам "объекта" - он НЕ ИМЕЕТ своих методов, т.к. указатель на таблицу виртуальных методов класса ему хранить дополнительно незачем. Это обыкновенная структура Си, не более того. То, что он в вашем языке называется "объект" - недоработка авторов языка и искривление концепции ООП. Читайте определения и авторов.. т.с. "оригиналы".
Я спрашивал про класс с телефоном. Методы туда добавьте умозрительно, к примеру сравнение с другим таким же объектом.

Цитата Сообщение от Arhat109 Посмотреть сообщение
Это цитата от автора концепции. С него все и началось. И он долго и нудно помнится доносил идею ООП "в массы". Видимо не до всех, раз у Вас был плохой преподаватель.
Я рад за автора концепции. Но концепция оперирует объектами, так? Объект с телефоном имеет место быть? Имеет. Или если он не участвует в наследовании, то он не объект? Мы сейчас не про вашу структуру, которая действительно не объект. Мы про класс с телефоном. ПРимер на C#, который.

Цитата Сообщение от Arhat109 Посмотреть сообщение
Это всего лишь иллюстрация к вопросу, а не "пример кода", как Вам показалось. Мне так уже смешно, вы тут столько откровенной чуши нагородили, что скулы сводит.
Ага. Т.е. на мой пример вы показали иллюстрацию, которая демонстрирует что попало и сами же смеётесь теперь приписывая чушь мне?

Подведём итог: вы утверждаете, что объект не объект потому, что нет наследования. За пруфами к Алану Кею и его друзьям. Показываете "иллюстрацию", которая должна была показать добавление класса в Си, но не показала. И чтобы сместить акценты приписали мне чушегонство и теперь у вас болят скулы от смеха над приписанным мне свойством.

Это так?)
0
06.09.2019, 09:23
Arhat109
46 / 10 / 0
Регистрация: 18.06.2018
Сообщений: 93
06.09.2019, 09:54 65
Usaga, Такое ощущение, что я пишу для слепого..

Нет. Ваш телефон НЕ ЯВЛЯЕТСЯ объектом в классическом понимании, сколько бы раз Вы не повторили обратное, он от этого "объектом" не становится. Даже если Вы ему и не умозрительно насуете методом (простых), то объектом он так и не станет .. ровно до тех пор, пока у Вас не появится НАСЛЕДОВАНИЕ и ВИРТУАЛЬНЫЕ (общие) методы. Ровно до тех пор, пока у вашей структуры "телефон" не появится .. указатель на таблицу виртуальных методов он ничем физически не будет отличаться от банальной структуры языка Си.

Объект становится объектом только когда он начинает ОТЛИЧАТЬСЯ от структуры и ИМЕЕТ свои, лично его методы - виртуальные. Вопросы "инкапсуляции" решались успешно и без введения понятия "объект", что Вам тут уже показали разными способами. Вопрос полиморфизма есть следствие виртуализации (наследования). Вопросы абстрагирования также решались и решаются самыми разными методами в ЯВУ.

Собственно ради этого и была построена в целом концепция ООП (Симула-67 вам в помощь, книжка Страуструпа туда же, там же есть и взаимосвязь промеж Симулой и С++ из которого вырос ваш C# .. работать с языком и не понимать его истоков .. нечто.

Виртуализация необходима в языках моделирования(! Симула, Смалталк), поскольку модели могут отличаться незначительно друг от друга, а крайне желательна высокая переиспользуемость кода .. отсюда растут ноги наследования и виртуализации - косвенного вызова функций - ровно той, которая соответствует данному варианту объекта.
Главная причина по которой не прижилась Симула-67, несмотря на всё её новаторство - крайне низкая эффективность (та самая двойная косвенность) - ибо "за все надо платить".
Но .. некоторым "плевать на цену", тем более что все равно и int можно назвать "объектом" .. методы приватны, структура неизвестна (скрыта в архитектуре процессора) .. чем не "объект"-то?
0
Usaga
Эксперт .NET
6125 / 4340 / 758
Регистрация: 21.01.2016
Сообщений: 16,894
Завершенные тесты: 2
06.09.2019, 09:55 66
Цитата Сообщение от Arhat109 Посмотреть сообщение
Нет. Ваш телефон НЕ ЯВЛЯЕТСЯ объектом в классическом понимании, сколько бы раз Вы не повторили обратное, он от этого "объектом" не становится. Даже если Вы ему и не умозрительно насуете методом (простых), то объектом он так и не станет .. ровно до тех пор, пока у Вас не появится НАСЛЕДОВАНИЕ и ВИРТУАЛЬНЫЕ (общие) методы. Ровно до тех пор, пока у вашей структуры "телефон" не появится .. указатель на таблицу виртуальных методов он ничем физически не будет отличаться от банальной структуры языка Си.
Боже мой. Какая ахинея. Объект не объект без другого объекта?)))))
0
Arhat109
46 / 10 / 0
Регистрация: 18.06.2018
Сообщений: 93
06.09.2019, 09:56 67
Цитата Сообщение от Usaga Посмотреть сообщение
Показываете "иллюстрацию", которая должна была показать добавление класса в Си, но не показала.
Да все она показала! Термин "Си с классами" - это тоже Страуструп. Его первоначальная версия С++ .. между прочим.

Добавлено через 58 секунд
Цитата Сообщение от Usaga Посмотреть сообщение
Боже мой. Какая ахинея. Объект не объект без другого объекта?)))))
Не перевирайте своего оппонента. Или покажите мне цитату из поста где про такое сказано.
0
Usaga
Эксперт .NET
6125 / 4340 / 758
Регистрация: 21.01.2016
Сообщений: 16,894
Завершенные тесты: 2
06.09.2019, 10:00 68
Arhat109, давайте поиграем в ассоциации?

Си с классами:
C#
1
2
3
class Something
{
}
Настоящий, мужицкий объект:
C#
1
2
3
4
5
6
7
class SomethingBase
{
}
 
class Something : SomethingBase
{
}
Правильно?

Добавлено через 1 минуту
Цитата Сообщение от Arhat109 Посмотреть сообщение
Не перевирайте своего оппонента. Или покажите мне цитату из поста где про такое сказано.
Ну как же:
Цитата Сообщение от Arhat109 Посмотреть сообщение
объектом он так и не станет .. ровно до тех пор, пока у Вас не появится НАСЛЕДОВАНИЕ и ВИРТУАЛЬНЫЕ (общие) методы.
Значит один в поле не воин. Вот если есть базовый или дочерний (второй) объект, то да, это уже класс. Настоящий, не фуфло.

Добавлено через 2 минуты
В вашем понимании объект не концепция, а только техническая сторона реализации? Если вам не показать содержимое памяти, где находится инстанс класса, то вы не сможете отличить объект от си с классами?
0
Arhat109
46 / 10 / 0
Регистрация: 18.06.2018
Сообщений: 93
06.09.2019, 10:08 69
Цитата Сообщение от Usaga Посмотреть сообщение
Значит один в поле не воин. Вот если есть базовый или дочерний (второй) объект, то да, это уже класс. Настоящий, не фуфло.
Не значит. Писать такое программисту, если Вы конечно таковой - мне было бы даже несколько стремно..

Вам даже в википедии прямо сказано:
"Концепция виртуальных методов, поддерживаемая этими и другими современными языками, появилась как средство обеспечить выполнение нужных методов при использовании полиморфных переменных, то есть, по сути, как попытка расширить возможности вызова методов для реализации части функциональности, обеспечиваемой механизмом обработки сообщений."

Но, Вы уже не один раз продемонстрировали свое неумение читать, не верю что дойдет и на этот раз.

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

Добавлено через 1 минуту
Оригинальный ООП - это виртуализация методов и "пришивание" их комплекта к набору данных. Вот совместное явление и назвали "объектом", дабы отличать от "структура".

Добавлено через 12 секунд
Уж совсем "для маленьких"..
0
Usaga
Эксперт .NET
6125 / 4340 / 758
Регистрация: 21.01.2016
Сообщений: 16,894
Завершенные тесты: 2
06.09.2019, 10:15 70
Цитата Сообщение от Arhat109 Посмотреть сообщение
Не значит. Писать такое программисту, если Вы конечно таковой - мне было бы даже несколько стремно..
Цитата Сообщение от Arhat109 Посмотреть сообщение
Вам даже в википедии прямо сказано:
И где тут сказано, что объект не может быть объектом, если не находится в цепочке наследования?

Цитата Сообщение от Arhat109 Посмотреть сообщение
Ваши классы с простыми методами - есть некий суррогат, который и назван Страуструпом как "Си с классами", что подчеркивает отсутствие ООП в таком подходе.
Си с плюсами - отсутствие попытки моделирования. Для чего ООП и предназначено: смоделировать предметную область в виде концепций отражающих действительность в том виде, в котором достаточно. Объект телефона показанный ранее эту концепцию полностью моделирует. При этом не требует наследования от абстрактного "номер телефона" потому, что такая иерархия тут тупо не нужна.

И ещё: если этот объект включить в состав (композиция) в другой, то он по вашей шкале объектоности резко станет нормальным объектом? Или композиция не про ООП?

Добавлено через 2 минуты

Не по теме:

Ещё не хватает сюда приплести спор о бесполезности GC для полного кайфа))

1
Arhat109
46 / 10 / 0
Регистрация: 18.06.2018
Сообщений: 93
06.09.2019, 10:30 71


Добавлено через 8 минут
Цитата Сообщение от Usaga Посмотреть сообщение
Си с плюсами - отсутствие попытки моделирования. Для чего ООП и предназначено: смоделировать предметную область в виде концепций отражающих действительность в том виде, в котором достаточно. Объект телефона показанный ранее эту концепцию полностью моделирует. При этом не требует наследования от абстрактного "номер телефона" потому, что такая иерархия тут тупо не нужна.
И ещё: если этот объект включить в состав (композиция) в другой, то он по вашей шкале объектоности резко станет нормальным объектом? Или композиция не про ООП?
Изначально, речь шла за то что ООП втрое медленней, Вы возразили, что это не всегда так .. Вам показали(!) что без виртуализации нет ООП как такового в совр. языках и вашем C# в частности.

Тем не менее, никто не запрещает использовать достижения предыдущих подходов (процедурных) в т.ч. и в языках с ООП. Но такое применения языков с ООП просто называется "Си с классами", для отличия от полноценного программирования ООП.

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

Честно говоря, мне уже надоело..

Добавлено через 3 минуты
В целом, Вам это видимо и не надо .. сейчас это не модно "знать историю вопроса", "существо дела" и т.д. Главное уметь применить нужный паттерн (композиция)

В общем, я зря потратил свое время, пытаясь объяснить Вам почему оно втрое медленеей. Примите просто как данность.
0
Curry
2991 / 2072 / 257
Регистрация: 01.06.2013
Сообщений: 4,525
Записей в блоге: 9
06.09.2019, 10:41 72
Цитата Сообщение от Usaga Посмотреть сообщение
Могут находиться рядом, а могут и не находиться.
И что плохого? Можно даже не подключать определения ненужных функций для экономии времени компиляции если они разнесены по нескольким файлам. Или часть функций генерировать какой ни будь утилитой отдельными .h+.c .
Цитата Сообщение от Usaga Посмотреть сообщение
Замена ссылки\указателя на объект суррогатным хендлером. Костыль для имитации класса.
Пример же на Си, а там нет возможности выборочного экспорта. В более других языках можно объявить доступность извне к структуре, но не к её полям (или к полям по выбору). Классы для этого не нужны.
Цитата Сообщение от Usaga Посмотреть сообщение
И по значению вы этот костыль как передавать собрались? Функцию Clone заводить?
По значению неведомо что и нельзя копировать, при таком подходе можно получить невалидные указатели на память, ресурсы и пр.
Цитата Сообщение от Usaga Посмотреть сообщение
А наследование вы как прикручивать собрались?
Вы, похоже, забыли что мы обсуждали. Вы писали Arhat109-у что наличие наследования не принципиально для ООП. Я возразил. Далее вы продемонстрировали пример с MTSPhoneNumber утверждая что так можно только в ООП. Я показал что нет, даже на Си можно. Можно, пока не потребовалось наследование. Вообще то, вместо наследования можно использовать аггрегирование, но это не ООП.
0
IamLost
56 / 56 / 3
Регистрация: 16.04.2019
Сообщений: 240
Записей в блоге: 4
06.09.2019, 10:47 73
Цитата Сообщение от Arhat109 Посмотреть сообщение
Изначально, речь шла за то что ООП втрое медленней,
Ссылочку на исследование можно?
0
Usaga
Эксперт .NET
6125 / 4340 / 758
Регистрация: 21.01.2016
Сообщений: 16,894
Завершенные тесты: 2
06.09.2019, 10:58 74
Цитата Сообщение от Arhat109 Посмотреть сообщение
Изначально, речь шла за то что ООП втрое медленней, Вы возразили, что это не всегда так .. Вам показали(!) что без виртуализации нет ООП как такового в совр. языках и вашем C# в частности.
Вы это не показали ничем. Только отсылки, что так сказал автор ООП. Ещё раз: объект не объект без базового класса или если он не входит в состав другого? Вот есть объект телефона. В ваших глазах это Си с классами. Но если его вкорячить как свойство другого класса, то сразу наступает всемирный ООП? Это так?

Цитата Сообщение от Arhat109 Посмотреть сообщение
Тем не менее, никто не запрещает использовать достижения предыдущих подходов (процедурных) в т.ч. и в языках с ООП. Но такое применения языков с ООП просто называется "Си с классами", для отличия от полноценного программирования ООП.
Вот опять. Объект уже неполноценный, если нет базового. А если базовый в него ничего не привносит как на примере выше? Всё равно ООП? Или не ООП? Базовый класс есть, методов от него нет. Как быть?

Цитата Сообщение от Arhat109 Посмотреть сообщение
Вы никак это не можете усвоить .. видимо Вам как-то обидно, что это просто так зовется и такой подход не обсуждается в темах про ООП по этой причине. Свое неумение читать, понимать прочитанное, незнание "цены вопроса", не знание истоков того чем Вы пользуетесь повседневно, как понимаю, показывает что Вы просто рядовой пользователь ПО, пусть и "специализированного", а не программист.
К такому выводу также подводят ваши реплики по тексту про "юзабилити редакторов", как аргументация вопроса .. Вы просто не делаете разницы между обрамляющим ПО и языком - то есть "пользователь ПО".
Да хоть кем меня назовите и хоть как засомневайтесь в моей компетенции. Аргументы-то где? Вы своих аргументов и не привели. И примеров никаких. Вот, Алан Кей сказал и всё...

Почему объект не может быть объектом сам по себе, если он уже концепцию реализует? Вы вообще слово такое знаете? Судя по тому, что вы структуру FILE, которая просто мешок атрибутов, не можете отличить от полноценного объекта, который моделирует сущность, то у меня складывается ощущение, что не можете.

Примеров привести не можете, аргументировать не можете. Кто из нас тут пользователь?))

Добавлено через 7 минут
Цитата Сообщение от Arhat109 Посмотреть сообщение
В общем, я зря потратил свое время, пытаясь объяснить Вам почему оно втрое медленеей. Примите просто как данность.
Да, зря. Никакой аргументации вменяемой не было. Да, есть таблица виртуальных методов. Но не всегда. А значит не всегда медленее и не всегда втройне. Просто слова за данность я не принимаю.

Цитата Сообщение от Curry Посмотреть сообщение
И что плохого? Можно даже не подключать определения ненужных функций для экономии времени компиляции если они разнесены по нескольким файлам. Или часть функций генерировать какой ни будь утилитой отдельными .h+.c .
Плохого в том, что надо будет искать такие "методы", ведь они могу находиться где угодно. Т.е. такой подход чисто на договорённостях держится, а не на контроле со стороны компилятора. Хотя прямо ужасом я бы это тоже не назвал.

Цитата Сообщение от Curry Посмотреть сообщение
Пример же на Си, а там нет возможности выборочного экспорта. В более других языках можно объявить доступность извне к структуре, но не к её полям (или к полям по выбору). Классы для этого не нужны.
Ну вот о чём и речь. Полноценно класс сэмулировать будет геморрно и громоздко.

Цитата Сообщение от Curry Посмотреть сообщение
По значению неведомо что и нельзя копировать, при таком подходе можно получить невалидные указатели на память, ресурсы и пр.
Ну вот видите. Тоже ограничение, хоть и не такое уж страшное. Но есть же.

Цитата Сообщение от Curry Посмотреть сообщение
Вы, похоже, забыли что мы обсуждали. Вы писали Arhat109-у что наличие наследования не принципиально для ООП. Я возразил. Далее вы продемонстрировали пример с MTSPhoneNumber утверждая что так можно только в ООП. Я показал что нет, даже на Си можно. Можно, пока не потребовалось наследование. Вообще то, вместо наследования можно использовать аггрегирование, но это не ООП.
Не совсем верно. Я пример с телефоном показал, чтобы привести пример ситуации, когда может быть полноценный объект без наследования и композиции. Объект ведь - отражение модели, которая в голове крутится и описывает систему с которой работаете. А Arhat109 этого понять никак не может. Он видит только техническую сторону. Мол нужна таблица и всё тут. А зачем и почему - уже всё, обосновать не может. Надо к Алану Кею обращаться. Такое себе.

ООП же про абстрактные концепции. И простой класс без наследования, но несущий в себе определённый смысл, такую концепцию выражает. А вот структура FILE нет, ибо введена больше для удобства передачи по указатели. Разновидность DTO, не более. Мимо эти вещи сравнивать.
0
Curry
2991 / 2072 / 257
Регистрация: 01.06.2013
Сообщений: 4,525
Записей в блоге: 9
06.09.2019, 11:29 75
Цитата Сообщение от Usaga Посмотреть сообщение
И простой класс без наследования, но несущий в себе определённый смысл, такую концепцию выражает. А вот структура FILE нет
И структура FILE в той же степени. То что описание функций реализующих абстрактный слой работы с файлом в любой системе не находится до закрывающей фигурной скобки класса не принципиально.
2
NeoMatrix
Модератор
Эксперт NIX
5661 / 1441 / 94
Регистрация: 24.05.2011
Сообщений: 11,188
Записей в блоге: 3
06.09.2019, 11:50 76
Джентльмены, в качестве тестового задания я вам опишу задачку и вы мне её порешайте. У кого код получится элегантнее и ближе всего к сути - тому плюшка.
Судить будете вы же сами.

Итак, задача
В целях биллинга некоторой услуги требуется производить привязку номера телефона клиента и отсылать на него несколько разных текстов.
У %сервиса% имеется несколько собственных номеров - по одному для каждого опсоса.
Для Мегафона 921-123-45-67
для МТС 911-234-56-78
для Теле2 951-345-67-89
для RosTelecom 991-456-78-90
Все вышеназванные номера принадлежат оператору %сервиса%
Задача у оператора сервиса сводится к тому, чтобы, опираясь на номер клиента, определить с которого из своих номеров отправлять клиенту смски в рамках предоставления услуги.

Итак: при вводе номера клиента ваша программа должна выдавать номер, с которого будет посылаться ответ клиенту. Номера клиентов складывать (при любом к данному номеру обращении) в один из файлов (типа база данных - переусложнять с запросами к реальной SQL мы тут не будем):
Клиенты Мегафон
Клиенты МТС
Клиенты Теле2
Клиенты RTcom

Если номер был зарегистрирован в "базе", то при обращении выводить ответ "клиент %номер% уже был зарегистрирован".
0
Usaga
Эксперт .NET
6125 / 4340 / 758
Регистрация: 21.01.2016
Сообщений: 16,894
Завершенные тесты: 2
06.09.2019, 14:37 77
Цитата Сообщение от Curry Посмотреть сообщение
И структура FILE в той же степени. То что описание функций реализующих абстрактный слой работы с файлом в любой системе не находится до закрывающей фигурной скобки класса не принципиально.
Нет. Речь о том, что эта структура - сборка атрибутов. Без попытки смоделировать какую-то сущность. Существует не только механическая писанина, но и идея, которую писанина выражает. Когда формируется класс без этой идеи (как структура FILE), то это есть Си с классами. Атрибуты собираются в кучу не потому, что это нечто единое, а потому, что там удобнее их разом передавать или хранить. Именно этим и является FILE.

Современный ООП не только про механическую\техническую реализацию, но и про идею. Я очень сомневаюсь, что когда Алан придумывал ООП такое понятие как предметная область или объект-значение ещё не было придумано или было известно очень узкому кругу лиц.

Все споры тут свелись к тому, что идея пятидесятилетней давности не учитывает современные реалии. И типа всё, что не укладывается в рамки древнючего понятия, есть фу и Си с классами.
0
Curry
2991 / 2072 / 257
Регистрация: 01.06.2013
Сообщений: 4,525
Записей в блоге: 9
06.09.2019, 14:45 78
Цитата Сообщение от NeoMatrix Посмотреть сообщение
Итак, задача
Суровый оффтоп
Правильная постановка задачи - 90% дела.
Нынче народ может переходить от одного оператора к другому, так что хранить привязку номера телефона к оператору не совсем верно. Правильнее, запрашивать каждый раз
HTML5
1
http://www.megafon.ru/api/mfn/info?msisdn=79513456789
И, даже если хочется хранить такие списки, то и программисту быстрее сделать через базу, и программа быстрее выполняться будет если списки велики чем тектовые файлы дописывать и читать.
По этому, в ТЗ бы надо включить на какую СУБД вы согласны.
К тому же, вы не указали целевую ОС. А то вам сделают на HTA или PowerShell, а вам, как пингвиноману это не понравится.
Так же, согласились бы вы скачивать исполняемый файл (даже при наличии прилагаемых исходников), или нет?
Или программу в виде .jar, то есть на java/Kotlin/Scala ? Или вам только скрипт подавай?
Опять же стали бы ради этого php/nodejs ставить? Всё это просто, но заказчика об этом заранее спрашивают.
Я, уж, пардон, в ближайшие дни никак не могу. По хорошему мне сюда даже бы и появляться не стоило, такой аврал.


Добавлено через 2 минуты
Цитата Сообщение от Usaga Посмотреть сообщение
Речь о том, что эта структура - сборка атрибутов. Без попытки смоделировать какую-то сущность.
Это вы зациклились на том что функции обязательно должны быть описаны внутри структуры. А если вне её, но с ней работают, то это что то принципиально другое.
0
NeoMatrix
Модератор
Эксперт NIX
5661 / 1441 / 94
Регистрация: 24.05.2011
Сообщений: 11,188
Записей в блоге: 3
06.09.2019, 14:52 79
Цитата Сообщение от Curry Посмотреть сообщение
Нынче народ может переходить от одного оператора к другому, так что хранить привязку номера телефона к оператору не совсем верно
Давайте, пока мы этого касаться не будем. У нас простенькая задачка для примера, а не реальное бизнес-приложение. Ведь так?
Цитата Сообщение от Curry Посмотреть сообщение
К тому же, вы не указали целевую ОС
Это тоже из той же оперы - я не смею навязывать своё мировоззрение в данном случае просто потому, что мне не требуется практическая часть результата. Это задача для "пошевелить мозгами" конкурсантам.
Цитата Сообщение от Curry Посмотреть сообщение
По этому, в ТЗ бы надо включить на какую СУБД вы согласны
Если хотите, пусть будет MySQL, но, имхо, в файлы - проще.
0
korvin_
2747 / 2019 / 364
Регистрация: 28.04.2012
Сообщений: 6,891
06.09.2019, 22:45 80
Цитата Сообщение от NeoMatrix Посмотреть сообщение
Давайте, пока мы этого касаться не будем. У нас простенькая задачка для примера, а не реальное бизнес-приложение. Ведь так?
И как ты тогда предлагаешь определять принадлежность номера к тому или иному оператору?

Добавлено через 3 минуты
И вообще задача сводится к простейшему cond / if-then-else-if-...-else-end

В общем задачка крайне примитивная.

Добавлено через 1 минуту
Цитата Сообщение от Usaga Посмотреть сообщение
Современный ООП не только про механическую\техническую реализацию, но и про идею. Я очень сомневаюсь, что когда Алан придумывал ООП такое понятие как предметная область или объект-значение ещё не было придумано или было известно очень узкому кругу лиц.
И C++, Java, C#, PHP, Python никакого отношения к этой идее не имеют. Ты пишешь на SmallTalk? Или Erlang?

Добавлено через 1 минуту
Цитата Сообщение от Usaga Посмотреть сообщение
такое понятие как объект-значение
Нет такого понятия и сейчас.

Добавлено через 16 минут
Цитата Сообщение от Usaga Посмотреть сообщение
Вы это не показали ничем. Только отсылки, что так сказал автор ООП. Ещё раз: объект не объект без базового класса или если он не входит в состав другого?
«Вирутализация», или точнее позднее связывание, не имеет никакого отношения к наследованию. При чём тут какие-то базовые классы? И да, вызовы виртуальных методов медленней, чем невиртуальных. Уж в три раза или нет — зависит от языка.

Цитата Сообщение от Usaga Посмотреть сообщение
Да, есть таблица виртуальных методов. Но не всегда.
Для объектов — всегда. late binding everywhere. Невиртуальные методы — это не late binding, а просто overload, никакого отношения к ООП не имеющий.

Цитата Сообщение от Usaga Посмотреть сообщение
Плохого в том, что надо будет искать такие "методы", ведь они могу находиться где угодно. Т.е. такой подход чисто на договорённостях держится, а не на контроле со стороны компилятора.
И каким же образом javac, например, мешает программистам писать такие «классы»:

Java
1
2
3
4
5
6
7
8
package structs;
 
class MyCoolKindOfObject {
 
    public int id;
    public String name;
    public double[] whateverStats;
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
package elsewhere;
 
import structs.MyCoolKindOfObject;
 
class Util {
 
    public static int idOf(MyCoolKindOfObject obj) {
        return obj.id;
    }
 
    ...
}
? Давай, расскажи мне ещё про контроль компилятора.

Добавлено через 1 минуту
Цитата Сообщение от Usaga Посмотреть сообщение
Полноценно класс сэмулировать будет геморрно и громоздко.
Как показывает практика, зачастую классы, написанные на этих ваших Java/C#/C++/whatever тоже фактически являются просто эмуляциями классов.

Добавлено через 6 минут
Цитата Сообщение от Usaga Посмотреть сообщение
В C# можно завести структуру.
Струткутра — не класс. Я тебя просил передать объект класса по значению.

Цитата Сообщение от Usaga Посмотреть сообщение
Отношение имеет прямое
Серьёзно? Покажи ка определение ООП, в котором сказано, что объекты должно быть возможно передавать по значению и вообще определна передача объектов по значению.

Цитата Сообщение от Usaga Посмотреть сообщение
И зачем она нужна, когда есть C#, Java, Python, Ruby, SmallTalk нормально данную фичу поддерживающие?
Какую фичу? «Передачу по значению»? Покажи эту «передачу по значению» в Java.

Цитата Сообщение от Usaga Посмотреть сообщение
Если имитация не позволяет, то и возможность нафиг не нужна?
Если электромобиль не позволяет пыхнуть газовыми выхлопами прохожим в лицо, то и электромобили не нужны?
В чём твой вопрос?
0
06.09.2019, 22:45
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.09.2019, 22:45

Какие бесплатные ресурсы можете посоветовать для изучения Python в плане Web?
Доброго времени суток, формчане. Какие бесплатные ресурсы можете посоветовать для изучения Python в...

Php, python или ruby для веб парсинга
Добрый день! Есть задача написать парсер сайта. Функционал парсера самый обычный, собирать...

PHP vs Python+Django для разработки социальной сети
Здравствуйте. Долго думал, в какой раздел поместить эту тему. Решил всё же сюда. Кто меня знает,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.