Тут вот неожиданно подумалось об ООП доведённом до абсурда.
Что если в некоем императивном языке не будет возможности описывать функции, статические классы, статические методы, глобаные переменные (вне определения класса).
Сильно это усложнит жизнь?
Всё сказанное выше — личное мнение, если не указано обратное.
Здравствуйте, Фанатик, Вы писали:
Ф>Тут вот неожиданно подумалось об ООП доведённом до абсурда. Ф>Что если в некоем императивном языке не будет возможности описывать функции, статические классы, статические методы, глобаные переменные (вне определения класса). Ф>Сильно это усложнит жизнь?
Здравствуйте, Фанатик, Вы писали:
Ф>Тут вот неожиданно подумалось об ООП доведённом до абсурда. Ф>Что если в некоем императивном языке не будет возможности описывать функции, статические классы, статические методы, глобаные переменные (вне определения класса). Ф>Сильно это усложнит жизнь?
Имея вменяемый DI контейнер не сильно.
Это легко проверить. Выкидываем из немерлового парсера C# слово static и пробуем писать на C#, компилируя его немерлом.
Здравствуйте, Фанатик, Вы писали:
Ф>Тут вот неожиданно подумалось об ООП доведённом до абсурда. Ф>Что если в некоем императивном языке не будет возможности описывать функции, статические классы, статические методы, глобаные переменные (вне определения класса). Ф>Сильно это усложнит жизнь?
Точка входа по сути это статический метод. Надо будет как-то выкрутиться из этого (как минимум создать какой-нить класс и дернуть метод). Ну а потом какие проблемы? Что мешает создать один экземпляр класса глобальных переменных? И поместить в него все статические функции?
Здравствуйте, Mystic, Вы писали:
Ф>>Что если в некоем императивном языке не будет возможности описывать функции, статические классы, статические методы, глобаные переменные (вне определения класса).
M>Точка входа по сути это статический метод. Надо будет как-то выкрутиться из этого (как минимум создать какой-нить класс и дернуть метод). Ну а потом какие проблемы? Что мешает создать один экземпляр класса глобальных переменных?
Что понимается под экземпляром класса глобальных переменных?
M> И поместить в него все статические функции?
Вы часом не забыли, что статических функций (т.е. методов) в этом языке нет?
Всё сказанное выше — личное мнение, если не указано обратное.
Здравствуйте, Фанатик, Вы писали:
Ф>Что понимается под экземпляром класса глобальных переменных?
Например, вместо
static int obj_counter = 0;
пишем такое
class global_variables_t
{
public:
int obj_counter;
global_variables_t(): obj_counter(0) {}
};
Потом создаем этот класс при инициализации и юзаем в свое удовольствие
M>> И поместить в него все статические функции?
Ф>Вы часом не забыли, что статических функций (т.е. методов) в этом языке нет?
Ну они уже же будут не статические? Если их добавить в класс global_variables_t. Или заюзать примерно так:
Проще говоря, мы можем ручками реализовать static за исключением того, что контроль за единственностью статических экземпляров возложим на программиста.
Здравствуйте, Mystic, Вы писали:
M>Здравствуйте, Фанатик, Вы писали:
Ф>>Что понимается под экземпляром класса глобальных переменных?
M>Проще говоря, мы можем ручками реализовать static за исключением того, что контроль за единственностью статических экземпляров возложим на программиста.
Это не статические члены, пусть программеры их реализовывают на здоровье.
Всё сказанное выше — личное мнение, если не указано обратное.
Здравствуйте, Фанатик, Вы писали:
Ф>Тут вот неожиданно подумалось об ООП доведённом до абсурда. Ф>Что если в некоем императивном языке не будет возможности описывать функции, статические классы, статические методы, глобаные переменные (вне определения класса).
И как в этом мегаязыке будет выглядеть вызов универсальных методов, например, что мы будем писать вместо Math.Max(a, b)?
Ф>Сильно это усложнит жизнь?
Очень сильно, т.к. резко ограничит возможности переиспользования кода.
Здравствуйте, DarkGray, Вы писали:
U>>И как в этом мегаязыке будет выглядеть вызов универсальных методов, например, что мы будем писать вместо Math.Max(a, b)?
DG>Max — можно рассматривать как метод над списком: DG>Max — можно рассматривать как метод первого элемента: DG>Max — можно рассматривать как бинарный оператор:
Т.е. extension'ы мы не считаем статическими методами? Или каким способом мы будем добавлять в тип универсальные методы?
Здравствуйте, DarkGray, Вы писали:
U>>И как в этом мегаязыке будет выглядеть вызов универсальных методов, например, что мы будем писать вместо Math.Max(a, b)?
DG>Max — можно рассматривать как метод над списком: DG>Max — можно рассматривать как метод первого элемента: DG>Max — можно рассматривать как бинарный оператор:
Еще вопрос. Методом экземпляра чего можно рассматривать string.Format?
Здравствуйте, Фанатик, Вы писали:
Ф>Что если в некоем императивном языке не будет возможности описывать функции, статические классы, статические методы, глобаные переменные (вне определения класса).
А зачем? Имхо это совсем не то направление, в котором надо стремиться.
Здравствуйте, Undying, Вы писали:
U>Т.е. extension'ы мы не считаем статическими методами? Или каким способом мы будем добавлять в тип универсальные методы?
Number c = new MyNumberComparator().max(a, b);
U>Еще вопрос. Методом экземпляра чего можно рассматривать string.Format?
String s2 = new StringFormatter(pattern).format(s1, arg1, arg2, arg3);
Да не, извратиться-то всегда как-нибудь можно. Вопрос только — зачем?
Здравствуйте, Undying, Вы писали:
U>Здравствуйте, DarkGray, Вы писали:
U>>>И как в этом мегаязыке будет выглядеть вызов универсальных методов, например, что мы будем писать вместо Math.Max(a, b)?
DG>>Max — можно рассматривать как метод над списком: DG>>Max — можно рассматривать как метод первого элемента: DG>>Max — можно рассматривать как бинарный оператор:
U>Еще вопрос. Методом экземпляра чего можно рассматривать string.Format?
Дотнетовский string.Format? Если да, то:
public static string Format ( string format, Object arg0 )
//Replaces the format item in a specified String with the text equivalent of the value of a specified Object instance.
Строка специфицирована ("..in a specified String..."), т.е.
Здравствуйте, Фанатик, Вы писали:
Ф>Тут вот неожиданно подумалось об ООП доведённом до абсурда. Ф>Что если в некоем императивном языке не будет возможности описывать функции, статические классы, статические методы, глобаные переменные (вне определения класса). Ф>Сильно это усложнит жизнь?
Дык вот в Компонентном паскале нет ни статических методов, ни статических классов, ни глобальных переменных — и нормально живут...
Ибо МОДУЛИ!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Фанатик, Вы писали:
Ф>Это не статические члены, пусть программеры их реализовывают на здоровье.
А это уже вовсе не принципиально, есть ли автоматическая возможность юзать глобальный контекст, или же создать его вручную.
Опять же, от статических ф-ий ты все-равно не избавишься, коль они будут нужны. Ну будут делать типы 0-й длины для этих же целей, что поменяется по-сути?