Форум программистов, компьютерный форум, киберфорум
Священные войны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/47: Рейтинг темы: голосов - 47, средняя оценка - 4.53
0 / 1 / 0
Регистрация: 24.06.2019
Сообщений: 23

PHP vs Python для WEB

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

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

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

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

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

90
56 / 20 / 2
Регистрация: 18.06.2018
Сообщений: 199
05.09.2019, 14:28
Студворк — интернет-сервис помощи студентам
Usaga, и у Вас и у меня в примере данные о структуре typedef и функции работы с ней находятся в одном файле, точно также как и у Вас описание свойств и методов якобы объекта находится вместе.

Вы - не правы в этом моменте. Пользователю придется в обоих случаях ИСКАТЬ описание: или в классе или в файле.

Прямой (по имени массива и номеру) доступ к моим "объектам" точно также "закрыт" квалификатором static. Можно и условный "конструктор" закрыть им же, оставив доступной только create...()

Это точно ваш телефон МТС, мне просто было лениво выписывать поиск подстроки в функции, там жеж коммент "точно также ..". Вы опять невнимательны.

Идея номера МТС размазана по коду .. ровно настолько же как и в Вашем примере - контроль внутри функции, сравнение с подстрокой.

В итого, имеем только отсутствие контроля компилятором квалификатора private и только.

Но! Это как раз и есть квалификация погромиста! Или ты - квалифицированный программист и ЗНАЕШЬ сам "что можно и что нельзя" или тебе "нужен помощник" в виде компилятора. Не?

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

Добавлено через 3 минуты
P.P.S. Больше того! Наши примеры после компиляции (подретушировать только) будут выглядет в коде практически ОДИНАКОВО! Какие уж там "объекты" ..

Добавлено через 6 минут
Да, и ползателю можно предоставить только то, что ему требуется в виде хидера:


C
1
2
3
4
5
6
7
8
9
10
11
#ifndef __MTSPhoneNumber
  #define __MTSPhoneNumber "module included"
 
  #ifndef MAX_MTC_PHONES
    #define MAX_MTS_PHONES 10
  #endif
 
  typedef PhoneString;
 
  PhoneString * createMtsPhone(char * number);
#endif // __MTSProneNumber
Согласитесь, что элементарных "операций чтения" в этом файле даже меньше чем у Вас

Добавлено через 10 минут
Пардон, в 8-й строке вынес лишнее..

typedef struct _phone_string_ PhoneString;

Добавлено через 26 минут
Ну вот ещё, наверное для понимания того, что инкапсуляция не есть значимая часть парадигмы ООП: https://habr.com/ru/post/444602/
0
Модератор
 Аватар для Curry
5162 / 3510 / 536
Регистрация: 01.06.2013
Сообщений: 7,626
Записей в блоге: 9
05.09.2019, 14:32
Цитата Сообщение от Usaga Посмотреть сообщение
Сама структура никакой концепции не выражает. Никакого поведения не имеет. Просто атрибуты собранные в одну кучу для удобства.
А если смешать мух с котлетами данные с функциями то будет совсем другое дело, нежели данные отдельно, функции отдельно? В некоторых ООП языках так и разделено.
И запись obj.method1(28) ни чем не лучше method1(obj,28) если компилятор позволяет.
Цитата Сообщение от Usaga Посмотреть сообщение
Поведение отдельно от данных. Данные не закрыты. Это не объект. Только имитация.
Просто вы привыкли к плюсовой концепции ООП (в C# оттуда). Без разницы где записано поведение, внутри структуры или за её пределами. Важно как это применяется.
0
Эксперт .NET
 Аватар для Usaga
14349 / 9444 / 1359
Регистрация: 21.01.2016
Сообщений: 35,594
05.09.2019, 14:40
Цитата Сообщение от Arhat109 Посмотреть сообщение
и у Вас и у меня в примере данные о структуре typedef и функции работы с ней находятся в одном файле, точно также как и у Вас описание свойств и методов якобы объекта находится вместе.
Э, нет. В моём примере методы работы находятся в том же классе, что и данные. Этот момент организован с помощью возможностей самого языка. Это увидит компилятор. Это увидят средства типа IntelliSense. Иначе сделать и не получится при всём желании. Т.е. методы будут частью класса как вы не старайтесь сделать иначе.

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

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

Цитата Сообщение от Arhat109 Посмотреть сообщение
Прямой (по имени массива и номеру) доступ к моим "объектам" точно также "закрыт" квалификатором static. Можно и условный "конструктор" закрыть им же, оставив доступной только create...()
Нет. Вы закрыли доступ к массиву структур (которого в моём примере вообще не было, нафига он?), доступ к самому номеру внутри структуры вы не закрыли. Это значит, что инвариант соблюсти вы не сможете. Вы создали структуру с номером МТС, но пользователь его тут же может сменить на "Hello World". Т.е. пользователь легко сможет обойти ваши бизнес-правила и исказить состояние данные в структуре. А всё потому, что структура - просто набор данных. Это не полноценный объект с поведением. Она никак не может защититься.

В моём примере, входные данные проверяются на корректность (и, может быть, приводятся к нужному виду) и далее извне это уже не изменить минуя бизнес-правила (в данном случае вообще не изменить - объект просто иммутабелен).

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

Цитата Сообщение от Arhat109 Посмотреть сообщение
В итого, имеем только отсутствие контроля компилятором квалификатора private и только.
Это ОЧЕНЬ большое упущение. Ваша проверка на соответствие требованиям становится одноразовой. В любой момент после неё это соответствие может быть использовано как туалетная бумага. А само правило находится фиг знает где, а не там, где находятся и данные.

Цитата Сообщение от Arhat109 Посмотреть сообщение
Но! Это как раз и есть квалификация погромиста! Или ты - квалифицированный программист и ЗНАЕШЬ сам "что можно и что нельзя" или тебе "нужен помощник" в виде компилятора. Не?
Так можно и на ассемблере писать, не? И про выразительность кода и про однозначность намерений этого кода можно не упоминать, да?

Ещё, вы не забывайте, что не все проекты настолько крохотны, что в них один единственный разработчик задействован. Простой пример: получит на руки другой программист вашу структуру PhoneString. Как он узнает, что в ней должен быть только номер МТС и изменять его нельзя? Никак. Только по комментариям и документации. А что он узнает, если получит объект, что я показал? Да всё: по каким правилам он формируется, и что с ним можно, а что нельзя сделать. Потому, что объект в себе всё это несёт. В одном месте. Тоже самое верно и в обратном направлении: передавая ссылку на такой объект в метод стороннего разработчика вы точно знаете, что этот объект не даст себя в обиду и ничего с ним противозаконного не смогут сделать.

Разве это не очевидно?

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

Цитата Сообщение от Arhat109 Посмотреть сообщение
Больше того! Наши примеры после компиляции (подретушировать только) будут выглядет в коде практически ОДИНАКОВО!
Плевать как они в ассемблерной выдаче выглядят.

Цитата Сообщение от Arhat109 Посмотреть сообщение
Да, и ползателю можно предоставить только то, что ему требуется в виде хидера:
И дополнительная функция для чтения номера из структуры? И нулевая гарантия того, где эта функция находится и сколько их ещё?

Добавлено через 4 минуты
Цитата Сообщение от Curry Посмотреть сообщение
А если смешать мух с котлетами данные с функциями то будет совсем другое дело, нежели данные отдельно, функции отдельно? В некоторых ООП языках так и разделено.
И запись obj.method1(28) ни чем не лучше method1(obj,28) если компилятор позволяет.
Не лучше? Методы класса находятся в объявлении (и определении, если плюсы) класса. А функции могут валяться где угодно в каком угодно количестве. Пойдите и найдите где они все и сколько их. Разница уже тут начинается.

Цитата Сообщение от Curry Посмотреть сообщение
Просто вы привыкли к плюсовой концепции ООП (в C# оттуда). Без разницы где записано поведение, внутри структуры или за её пределами. Важно как это применяется.
Очень большая разница. Весь код у вас перед глазами и гарантированно не размазан. В Си вы такой гарантии не дадите. Плюс квалификаторы доступа (как следствие методов внутри класса) позволяют ввести понятие "состояния" которое этими методами будет определяться. Структурами и функциями вы такого не добьётесь. Не может быть никакого скрытого от внешнего мира состояния, иначе до него и функция не доберётся. А значит этот "объект" только на словах "объект".
0
56 / 20 / 2
Регистрация: 18.06.2018
Сообщений: 199
05.09.2019, 14:50
Цитата Сообщение от Usaga Посмотреть сообщение
Плевать как они в ассемблерной выдаче выглядят.
Ну так с этого и надо было начинать! Кстати, а что так "эмоционально"-то?
Ссылку про инкапсуляцию в Си - прочли? Там - все разжевано.

Ничего Вы не сможете добавить к инкапсулированным данным (объектам) в Си, особенно в случае, когда у Вас *.с файл прекомпилирован и Вы его видите исключительно в качестве библиотеки. Вы даже структуру своего телефона МТС подсмотреть не в состоянии, в отличии от чтения ВСЕГО вашего класса.

Инкапсуляция есть в НЕ ООП языках и была "всю жизнь" (разделение на файлы, хидеры и квалификатор static - Вам в помощь).

Добавлено через 4 минуты
Только, как ни странно, но Вы "зацепились" изначально за то, что ООП втрое медленней ..
0
Модератор
 Аватар для Curry
5162 / 3510 / 536
Регистрация: 01.06.2013
Сообщений: 7,626
Записей в блоге: 9
05.09.2019, 15:39
Цитата Сообщение от Usaga Посмотреть сообщение
Методы класса находятся в объявлении (и определении, если плюсы) класса. А функции могут валяться где угодно в каком угодно количестве.
если методы то "находятся", а если функции то "валяются"?
В некоторых, вполне ООП языках, методы отдельно от данных.
Цитата Сообщение от Usaga Посмотреть сообщение
Весь код у вас перед глазами и гарантированно не размазан.
И структура, и функции могут находится рядом ни чуть не размазано. А вот, в ООП и данные и код размазаны по предкам-потомкам. В C# ещё и partial class для размазывания.
Цитата Сообщение от Usaga Посмотреть сообщение
Плюс квалификаторы доступа (как следствие методов внутри класса) позволяют ввести понятие "состояния"
Одно к другому вообще отношение не имеет.
Цитата Сообщение от Usaga Посмотреть сообщение
Не может быть никакого скрытого от внешнего мира состояния, иначе до него и функция не доберётся.
Легко
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// это в .h файле для использования там, где не требуется лазить в потроха.
typedef struct { 
    void* dummy;
}MTSPhoneNumber;
 
// Этого в .с файле или в InsideTypes.h не передаваемом во вне.
typedef struct { 
     char* Number;
}InsideMTSPhoneNumber;
 
MTSPhoneNumber* CreateMTSPhoneNumber(char* number){
    InsideMTSPhoneNumber* this= (InsideMTSPhoneNumber*)malloc(sizeof(InsideMTSPhoneNumber));
    this->Number=strdup(number);
    return (MTSPhoneNumber*)this; 
}
 
void CloseMTSPhoneNumber(MTSPhoneNumber* This){
    InsideMTSPhoneNumber* this= (InsideMTSPhoneNumber*)This;
    free(this->Number);
    free(this);
}
1
56 / 20 / 2
Регистрация: 18.06.2018
Сообщений: 199
05.09.2019, 16:27
Curry, думаю для ТС-а, можно сделать заключение следующего плана:

На сегодняшний день был есть и остается преспективным для изучения старый, добрый Си. Кто знает Си - тот знает всё.
0
Модератор
 Аватар для Curry
5162 / 3510 / 536
Регистрация: 01.06.2013
Сообщений: 7,626
Записей в блоге: 9
05.09.2019, 16:37
Цитата Сообщение от Arhat109 Посмотреть сообщение
Кто знает Си - тот знает всё.
Я вовсе не фанат Си, он слишком примитивен. И не факт что с него нужно начинать обучение программированию.
Хотя, уж лучше с него, чем со скриптов.
0
88 / 108 / 6
Регистрация: 16.04.2019
Сообщений: 451
Записей в блоге: 4
05.09.2019, 16:59
Цитата Сообщение от Arhat109 Посмотреть сообщение
думаю для ТС-а, можно сделать заключение следующего плана:
На сегодняшний день был есть и остается преспективным для изучения старый, добрый Си. Кто знает Си - тот знает всё.
ТС выбирал язык для Web разработки. Из Python(а) или PHP, но мы ему советуем C. Неплохо.

Будет знать всё, но ничего нормального написать для Web(а) не сможет, так как придётся изучить ещё вагон новых технологий.
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
05.09.2019, 17:19
Цитата Сообщение от Arhat109 Посмотреть сообщение
Кто знает Си - тот знает всё.
Тут вы не правы. Кто знает Си - тот знает Си. А вот всё знает тот - кто знает всё.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,781
05.09.2019, 21:47
Цитата Сообщение от Usaga Посмотреть сообщение
Весь код у вас перед глазами и гарантированно не размазан.
Ой ли? Точно так же размазан: по родительским и дочерним классам, интерфейсам, миксинам.

Цитата Сообщение от Curry Посмотреть сообщение
Легко
Да собственно в заголовке можно и вообще opaque struct без полей объявить.

Цитата Сообщение от Usaga Посмотреть сообщение
Э, нет. В моём примере методы работы находятся в том же классе, что и данные.
А как бы ты в таком случае описал отношения между классами? Типа multiple dispatch.

Забавно, что пример эмуляции на Java там мало того, что заставляет руками классы прописывать в интерфейсе, так ещё и приводит к переполнению стека.
0
Эксперт .NET
 Аватар для Usaga
14349 / 9444 / 1359
Регистрация: 21.01.2016
Сообщений: 35,594
06.09.2019, 06:27
Цитата Сообщение от Arhat109 Посмотреть сообщение
Ну так с этого и надо было начинать! Кстати, а что так "эмоционально"-то?
Ссылку про инкапсуляцию в Си - прочли? Там - все разжевано.
Никаких эмоций. Мы же вроде как парадигмы рассматриваем, а не машинный код? Или уже нет?

Цитата Сообщение от Arhat109 Посмотреть сообщение
Ничего Вы не сможете добавить к инкапсулированным данным (объектам) в Си, особенно в случае, когда у Вас *.с файл прекомпилирован и Вы его видите исключительно в качестве библиотеки. Вы даже структуру своего телефона МТС подсмотреть не в состоянии, в отличии от чтения ВСЕГО вашего класса.
Вы показали пример, где легко и просто можно изменить данные в структуре. И мы говорили о невозможности изменения данных в экземпляре, а не сокрытии кода. Вы начали акценты смещать? Хотите спрятать приватные члены класса даже от чтения? Вынесите класс в другую сборку. Но акценты смещать не надо. Ваш пример со структурой не аналог тому, что показал я.

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

Цитата Сообщение от Curry Посмотреть сообщение
И структура, и функции могут находится рядом ни чуть не размазано. А вот, в ООП и данные и код размазаны по предкам-потомкам. В C# ещё и partial class для размазывания.
Могут находиться рядом, а могут и не находиться. Это уже от разработчика зависит. А что находится в классе, то находится в классе. Об этом и компилятор знает и средства автодополнения. И ни наследование ни частичные классы бардака тут не внесут такого, что вы не сможете найти всё содержимое класса.

Цитата Сообщение от Curry Посмотреть сообщение
Одно к другому вообще отношение не имеет.
Имеет. Это состояние может поддерживаться в корректном состоянии, если будет закрыто от произвольного доступа извне.

Цитата Сообщение от Curry Посмотреть сообщение
Легко
Мой любимый пример) Уже не первый раз мне его показывают) Что в нём? Замена ссылки\указателя на объект суррогатным хендлером. Костыль для имитации класса. Вы сами не видите, что это криво? И по значению вы этот костыль как передавать собрались? Функцию Clone заводить? А то, что функции один фиг могут быть раскиданы где угодно? А наследование вы как прикручивать собрались?

Цитата Сообщение от Arhat109 Посмотреть сообщение
На сегодняшний день был есть и остается преспективным для изучения старый, добрый Си. Кто знает Си - тот знает всё.
Бесполезный язык для разработки веб-приложений. Знать его можно, но производительность труда в сравнении с питоном и пыхом будет несравнимо меньше. А значит ТС будет неконкурентноспособным.

Цитата Сообщение от Катафалк Посмотреть сообщение
Тут вы не правы. Кто знает Си - тот знает Си.
Тогда нафига ТС-у советовать Си, если ему нужна веб-разработка?

Цитата Сообщение от korvin_ Посмотреть сообщение
Ой ли? Точно так же размазан: по родительским и дочерним классам, интерфейсам, миксинам.
И всё это видно в определении классов и интерфейсов. Искать полнотекстовым поиском не надо.

Цитата Сообщение от korvin_ Посмотреть сообщение
А как бы ты в таком случае описал отношения между классами?
Причём тут это?

Добавлено через 19 минут
albest, вообще, возьмите или C# или Java. Строгая типизация, JIT, языки общего назначения (знания можно будет переиспользовать). Нафига вам эти транслируемые языки с динамической типизацией? Кажутся проще для освоения?
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,781
06.09.2019, 07:22
Цитата Сообщение от Usaga Посмотреть сообщение
И всё это видно в определении классов и интерфейсов. Искать полнотекстовым поиском не надо.
А что нужно искать полнотекстовым поиском в противном случае?

Цитата Сообщение от Usaga Посмотреть сообщение
Причём тут это?
Как это при чём? У тебя объекты сферические в вакууме, друг с другом не взаимодействуют?
0
Эксперт .NET
 Аватар для Usaga
14349 / 9444 / 1359
Регистрация: 21.01.2016
Сообщений: 35,594
06.09.2019, 07:26
Цитата Сообщение от korvin_ Посмотреть сообщение
А что нужно искать полнотекстовым поиском в противном случае?
Функции, которые имитируют методы этой структуры. Люди выше пытались мне показать, что на чистых плюсах можно сделать полноценную имитацию класса. Я пытаюсь указать на то, что это полная хрень, когда есть родная поддержка таких вещей в тех же плюсах.

Цитата Сообщение от korvin_ Посмотреть сообщение
Как это при чём? У тебя объекты сферические в вакууме, друг с другом не взаимодействуют?
Где сферические в вакууме? Полноценный самостоятельный объект телефона МТС. Какая ему связь нужна и с кем? Это объект-значение.
0
56 / 20 / 2
Регистрация: 18.06.2018
Сообщений: 199
06.09.2019, 07:35
Цитата Сообщение от Usaga Посмотреть сообщение
1. Мы же вроде как парадигмы рассматриваем, а не машинный код? Или уже нет?

2. Вы показали пример, где легко и просто можно изменить данные в структуре. И мы говорили о невозможности изменения данных в экземпляре, а не сокрытии кода.

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

4. Могут находиться рядом, а могут и не находиться. Это уже от разработчика зависит. А что находится в классе, то находится в классе. Об этом и компилятор знает и средства автодополнения. И ни наследование ни частичные классы бардака тут не внесут такого, что вы не сможете найти всё содержимое класса.

5. Имеет. Это состояние может поддерживаться в корректном состоянии, если будет закрыто от произвольного доступа извне.

6. Мой любимый пример) Уже не первый раз мне его показывают) Что в нём? Замена ссылки\указателя на объект суррогатным хендлером. Костыль для имитации класса. Вы сами не видите, что это криво? И по значению вы этот костыль как передавать собрались? Функцию Clone заводить? А то, что функции один фиг могут быть раскиданы где угодно? А наследование вы как прикручивать собрались?

7.1. Бесполезный язык для разработки веб-приложений. Знать его можно, но производительность труда в сравнении с питоном и пыхом будет несравнимо меньше. А значит ТС будет неконкурентноспособным.
7.2. Тогда нафига ТС-у советовать Си, если ему нужна веб-разработка?

8.
от korvin_ Посмотреть сообщение
Ой ли? Точно так же размазан: по родительским и дочерним классам, интерфейсам, миксинам.
И всё это видно в определении классов и интерфейсов. Искать полнотекстовым поиском не надо.

albest, вообще, возьмите или C# или Java. Строгая типизация, JIT, языки общего назначения (знания можно будет переиспользовать). Нафига вам эти транслируемые языки с динамической типизацией? Кажутся проще для освоения?
1,3: Конечно, мы рассматриваем парадигму ООП и затраты на ней в конечном коде, а именно "ООП втрое медленний". Но .. Вам же плевать на "что там будет после компилятора", верно?

За что Вы в таком случае "зацепились" .. внезапно оказалось что "возможен ООП без виртуальных функций" - это ваша позиция, верно её понял?

Если да, то Вам и было отвечено что ваш "ООП без виртуализации" (наследования) - это "Си с классами", с чем Вы никак не можете согласиться.

Да, мой пример не имеет "классов", потому что их НЕТ в Си. Банально, правда? Но! Так Вам и указано "Си с КЛАССАМИ" .. это и есть Ваш пример. Они отличаются? Не более чем в терминологии, потому что далеко не всё что кем-то в каком-то языке обозвано "классом", является таковым на самом деле согласно парадигме ООП.

ООП без наследования и виртуализации - не бывает. А то что "бывает" (наследование НЕ используется), то и есть "Си с классами". Собственно, Вам это тут уже несколько человек пытаются разъяснить: не все то золото, что блестит.

P.S. Остальное - без комментария, ибо флейм, мало относящийся к вопросу.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,781
06.09.2019, 07:35
Цитата Сообщение от Usaga Посмотреть сообщение
Это состояние может поддерживаться в корректном состоянии, если будет закрыто от произвольного доступа извне.
Это не class-ООП-специфичное. В большинстве современных языках есть модули/пакеты позволяющие скрыть скрыть внутреннее состояние. Да даже в Си это возможно.

Цитата Сообщение от Usaga Посмотреть сообщение
Вы сами не видите, что это криво?
В чём же кривость?

Цитата Сообщение от Usaga Посмотреть сообщение
И по значению вы этот костыль как передавать собрались? Функцию Clone заводить?
Расскажи, как в C#, Java, Python, Ruby, SmallTalk и многих других передать объект по значению (в том смысле, который ты подразумеваешь) и какое отношение это имеет к классам объектам и ООП?

Цитата Сообщение от Usaga Посмотреть сообщение
А то, что функции один фиг могут быть раскиданы где угодно?
И что будут делать эти функции? А то что функции, использующие объекты твоего класса могут быть раскиданы где угодно, тебя не смущает?

Цитата Сообщение от Usaga Посмотреть сообщение
А наследование вы как прикручивать собрались?
А зачем наследование? Священная корова?
0
Эксперт .NET
 Аватар для Usaga
14349 / 9444 / 1359
Регистрация: 21.01.2016
Сообщений: 35,594
06.09.2019, 07:44
Цитата Сообщение от korvin_ Посмотреть сообщение
Это не class-ООП-специфичное. В большинстве современных языках есть модули/пакеты позволяющие скрыть скрыть внутреннее состояние. Да даже в Си это возможно.
Мне уже показали как это может элегантно выглядеть на Си.

Цитата Сообщение от korvin_ Посмотреть сообщение
В чём же кривость?
В введении псевдонима, замене указателя на структуру этим псевдонимом, кастом. Зачем это всё? Ради того, чтобы остаться на Си?

Цитата Сообщение от korvin_ Посмотреть сообщение
Расскажи, как в C#, Java, Python, Ruby, SmallTalk и многих других передать объект по значению (в том смысле, который ты подразумеваешь) и какое отношение это имеет к классам объектам и ООП?
В C# можно завести структуру. У неё точно так же будет закрытое состояние и поведение. Передаётся по значению. В плюсах по значению класс не передать? Отношение имеет прямое: как с этим справится имитация? И зачем она нужна, когда есть C#, Java, Python, Ruby, SmallTalk нормально данную фичу поддерживающие?

Цитата Сообщение от korvin_ Посмотреть сообщение
И что будут делать эти функции? А то что функции, использующие объекты твоего класса могут быть раскиданы где угодно, тебя не смущает?
Пускай раскиданы где угодно. Это функции, а не методы класса, которые не раскиданы где угодно. А как в примере выше отличить где имитация метода, а где просто функция?

Цитата Сообщение от korvin_ Посмотреть сообщение
А зачем наследование? Священная корова?
Если имитация не позволяет, то и возможность нафиг не нужна?
0
56 / 20 / 2
Регистрация: 18.06.2018
Сообщений: 199
06.09.2019, 07:44
Цитата Сообщение от Usaga Посмотреть сообщение
Функции, которые имитируют методы этой структуры. Люди выше пытались мне показать, что на чистых плюсах можно сделать полноценную имитацию класса. Я пытаюсь указать на то, что это полная хрень, когда есть родная поддержка таких вещей в тех же плюсах.
Не порите чушь, ей больно.

В показанной Вам иллюстрации, во-первых Си, а не "плюсы", во-вторых, точно такой же самостоятельный код и объект-значение, и ничего никаким поиском искать не требуется. А вот, как только Вы к своему телефону добавите "дружественный класс" скажем ТелефонТЕЛЕ2, то вот тут-то как раз и приходится шариться поиском по всему проекту..

Вам, в качестве примера уже предлагась структура "Файл" из стандартной билиотеки Си. Есть хотя бы один программист Си, который бы искал или был бы способен ковыряться во внутренней структуре файлового заголовка, без исходников этой билиотеки? Много из них "ищут методы работы с файлом" полнотекстовым поиском?
Вот зачем гнать откровенную пургу? Ну нее знаете Вы Си, не понимаете парадигму ООП, ну бывает. Её вообще мало кто понимает правильно.
0
Эксперт .NET
 Аватар для Usaga
14349 / 9444 / 1359
Регистрация: 21.01.2016
Сообщений: 35,594
06.09.2019, 07:50
Цитата Сообщение от Arhat109 Посмотреть сообщение
1,3: Конечно, мы рассматриваем парадигму ООП и затраты на ней в конечном коде, а именно "ООП втрое медленний". Но .. Вам же плевать на "что там будет после компилятора", верно?
Верно, плевать. Один дополнительный уровень косвенности ничего не меняет. И не всегда этот уровень есть. Так какой смысл высасывать проблему из воздуха?

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

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

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

Цитата Сообщение от Arhat109 Посмотреть сообщение
ООП без наследования и виртуализации - не бывает. А то что "бывает" (наследование НЕ используется), то и есть "Си с классами". Собственно, Вам это тут уже несколько человек пытаются разъяснить: не все то золото, что блестит.
Бывает и я вам это показал. Самодостаточная сущность с собственным изолированным состоянием и поведением. Или вы будете отрицать, что это объект? На основании чего? Тут кроме цитат других людей собственных аргументов никто не приводил.
0
56 / 20 / 2
Регистрация: 18.06.2018
Сообщений: 199
06.09.2019, 07:51
korvin_, простое наследование на Си решается и делается "на раз". Сложнее с виртуальным. Тут рекомендую смотреть на реализации первых компиляторов с С++. Они как раз силами препроцессора "переводили" код на С и потом он нормально компилировался обычным С-компилятором.

Писать на С как на С++ вполне можно. Гемморно - другой вопрос.

Тут вопрос похоже чисто терминологический, "товарищ не понисмает", что ООП включает в себя наследование как НЕОБХОДИМОЕ условие, а вовсе не как "необязательное".
0
Эксперт .NET
 Аватар для Usaga
14349 / 9444 / 1359
Регистрация: 21.01.2016
Сообщений: 35,594
06.09.2019, 07:55
Цитата Сообщение от Arhat109 Посмотреть сообщение
Не порите чушь, ей больно.
В показанной Вам иллюстрации, во-первых Си, а не "плюсы", во-вторых, точно такой же самостоятельный код и объект-значение, и ничего никаким поиском искать не требуется. А вот, как только Вы к своему телефону добавите "дружественный класс" скажем ТелефонТЕЛЕ2, то вот тут-то как раз и приходится шариться поиском по всему проекту..
Я знаю, что это Си, а не плюсы. Я вижу различие. Каким образом второй класс заставит меня шариться и в поисков чего?

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

Добавлено через 1 минуту
Цитата Сообщение от Arhat109 Посмотреть сообщение
Тут вопрос похоже чисто терминологический, "товарищ не понисмает", что ООП включает в себя наследование как НЕОБХОДИМОЕ условие, а вовсе не как "необязательное".
Эта необходимость ничем кроме старой цитаты не обоснована. ООП не ООП без наследования. Потому, что так сказал кто-то десятки лет назад. Сильный же аргумент.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.09.2019, 07:55
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru