Почему C# и Java требуют, чтобы все было в классе?

Казалось, что этот вопрос нужно было задать прежде, но поиск, найденный ничто.

Я всегда задавался вопросом какой смысл того, чтобы заставить нас поместить каждый бит кода в классе или интерфейсе. Я, кажется, помню, что были некоторые преимущества для требования a main() функционируйте как C, но ничто для классов. Языки как Python, в некотором смысле, еще более объектно-ориентированы, чем Java, так как у них нет примитивов, но можно поместить код везде, где Вы хотите.

Это своего рода "неверное истолкование" ООП? В конце концов, можно написать процессуальный код как Вы, был бы в C и помещал его в классе, но это не будет объектно-ориентировано.

25
задан Javier 26 April 2010 в 22:23
поделиться

3 ответа

Я думаю, что цель требования, чтобы все было заключено в классы, состоит в том, чтобы минимизировать количество концепций , с которыми вам нужно иметь дело в языке. В C # или Java вам нужно только понимать объектную модель (хотя и довольно сложную). Однако у вас есть только классы с членами и экземпляры классов (объектов).

Я думаю, что это очень важная цель, которой большинство языков так или иначе пытаются следовать. Если бы в C # был какой-то глобальный код (например, чтобы разрешить интерактивную оценку и спецификацию кода запуска без метода Main ), вам нужно было бы изучить еще одну концепцию (код верхнего уровня). Выбор, сделанный C # / Java, конечно, лишь один из способов добиться простоты.

Конечно, это вопрос, правильный ли это выбор. Например:

  • В функциональных языках программы структурированы с использованием типов (объявления типов) и выражений . Тело программы - это просто вычисляемое выражение, которое намного проще, чем класс с методом Main , а также позволяет создавать интерактивные сценарии (как в Python).

  • В Erlang (и подобных языках) программа структурирована как одновременно выполняющиеся процессы с одним основным процессом, который запускает другие процессы. Это совершенно другой подход, но он имеет смысл для некоторых типов приложений.

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

В качестве примечания, я думаю, что использование метода Main является несколько спорным выбором (вероятно, унаследованным от языков C / C ++). Я бы предположил, что более понятным объектно-ориентированным решением было бы запустить программу, создав экземпляр некоторого класса Main .

15
ответ дан 28 November 2019 в 21:39
поделиться

C # не был разработан для "программирования в малом". Скорее, он был разработан для компонентно-ориентированного программирования . То есть для сценариев программирования, когда группы людей разрабатывают взаимозависимые программные компоненты, которые со временем будут выпускаться в нескольких версиях.

Акцент на программировании в большом и вдали от программирования в малом означает, что иногда вокруг небольших программ проводится много церемоний. Используя это, class that, main бла-бла-бла, все, чтобы написать «привет, мир».

Свойство «однострочная программа - это одна строка» было бы неплохо иметь в C #. Мы рассматриваем возможность использования кода вне классов в небольших программах как возможную функцию в гипотетической будущей версии C #; Если у вас есть конструктивные мнения за или против такой функции, не стесняйтесь присылать их мне через контактную ссылку в моем блоге.

11
ответ дан 28 November 2019 в 21:39
поделиться

Я думаю, что идея Java заключалась в том, чтобы класс верхнего уровня представлял единую единицу кода, которая была бы скомпилирована в отдельный файл .class . Идея заключалась в том, чтобы эти дискретные, автономные блоки кода затем можно было легко разделить и объединить во многие проекты (так же, как плотник может комбинировать основные части, такие как гайки, болты, куски дерева и т. Д., Чтобы сделать множество предметов. ). Класс рассматривался как наименьшая, самая базовая элементарная единица, и поэтому все должно быть частью класса, чтобы облегчить сборку более крупных программ из этих частей.

Можно возразить, что обещание объектно-ориентированного программирования легко компонуемого кода не очень хорошо сработало, но когда разрабатывалась Java, целью ООП было создание небольших модулей (классов), которые можно было бы легко объединить в составлять уникальные программы.

Я полагаю, что C # преследовал те же цели.

5
ответ дан 28 November 2019 в 21:39
поделиться