Почему ООП применяется в Java и C #? [закрыто]

Во многих других языках, таких как C ++ и Javascript, OOP является необязательным. Процедурный код в порядке. Но в таких языках, как Java и C #, ООП несколько соблюдается. Все должно быть частью класса или объекта. Каковы преимущества?

6 голосов | спросил Gulshan 21 FebruaryEurope/MoscowbMon, 21 Feb 2011 19:00:11 +0300000000pmMon, 21 Feb 2011 19:00:11 +030011 2011, 19:00:11

10 ответов


12

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

Преимущество - единообразие. В C ++ существует несколько различных типов функций и данных, и это иногда вызывает некоторые проблемы и путаницу и, по крайней мере, больше учиться. С Java у вас есть функции-члены (класс или объект) и подобные данные, и все.

Это предназначено для упрощения чтения и записи Java, специализируясь на этом языке.

ответил David Thornley 21 FebruaryEurope/MoscowbMon, 21 Feb 2011 19:14:20 +0300000000pmMon, 21 Feb 2011 19:14:20 +030011 2011, 19:14:20
9

Может быть, «они думали, что это была хорошая идея в то время», то есть без свободных функций. 10-15 лет назад мир развития был взволнован «объектно-ориентированным» (так же, как и все они сейчас взволнованы «Agile»).

Тем не менее, я не уверен, должен ли каждый класс выводиться из Object, но без дженериков, где вам нужно все время отбрасывать, это помогает, и это может быть практичность того, что VM, которые они построили в то время, справитесь с этим лучше.

В MFC Microsoft также была включена концепция CObject в верхней части большой иерархии.

ответил CashCow 21 FebruaryEurope/MoscowbMon, 21 Feb 2011 20:05:12 +0300000000pmMon, 21 Feb 2011 20:05:12 +030011 2011, 20:05:12
6

По моему опыту, наиболее ужасных примеров дерьмового кода Я видел, написан на Java или C #. Я видел некоторые плохие вещи на менее строгих языках, но это ничего по сравнению с абсолютными ужасами, смотрящими в пропасть 1.000.000 строк скопированного статического кода шага с грязью C #.

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

Я не говорю, что Java /C # плохо или что-то еще, совсем наоборот. Просто эта помощь, обеспечивающая безопасность типов, позволяет повредить вещи намного больше, чем на более гибких языках, не обеспечивающих соблюдение правил.

Поэтому я не могу сказать, что эта политика «принудительного исполнения» улучшила качество кода в целом. Он улучшил количество кода, хотя это точно.

ответил Martin Wickman 21 FebruaryEurope/MoscowbMon, 21 Feb 2011 20:57:38 +0300000000pmMon, 21 Feb 2011 20:57:38 +030011 2011, 20:57:38
3

Многие думают, что ООП - лучший способ написать код. Они правильные, неправильные или открытые для обсуждения /дебаты ... неважно. Те, кто писал Java /C #, очевидно, верят в первую.

Легче вводить ООП в качестве стандарта кодирования, если сам язык его налагает. Вот почему такие языки, как Java, заставляют вас делать и другие вещи, например, один открытый класс для каждого файла.

У них есть что-то вроде точки. Трудно заставить людей делать то, что вы хотите. Дайте им слишком много свободы, и они делают это по-своему и надеются, что это пройдет через обзор. Если сами инструменты заставляют их определенным образом делать что-то, тогда вам не нужно спорить и /или получать командный консенсус (который все все время игнорируют).

С другой стороны, я никогда не соглашался ни с чем на Java. Во-первых, есть исключения для каждого правила, и Java просто не предусматривает этого.

ответил Crazy Eddie 21 FebruaryEurope/MoscowbMon, 21 Feb 2011 21:08:53 +0300000000pmMon, 21 Feb 2011 21:08:53 +030011 2011, 21:08:53
3

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

Но я должен признать, я не понимаю суть вопроса. А почему бы не? Там так много языков, поэтому Гослинг и его друзья намеревались создать тот, который основан только на классах и объектах (хорошо и несколько примитивных типов). Идея не была совершенно новаторской, но они также требовали удобочитаемости, синтаксиса C-типа и прочных абстрактных основ.

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

Java - это просто язык, ориентированный на более строгий конец спектра, более строгий, чем C ++, но не погружающийся в истинные глубины сильной типизации.

C # несколько проще объяснить, это был ответ Microsoft на популярность Java (и их неудачные попытки прокрасить собственные классы в их реализацию апплета:)).

ответил biziclop 22 FebruaryEurope/MoscowbTue, 22 Feb 2011 01:13:00 +0300000000amTue, 22 Feb 2011 01:13:00 +030011 2011, 01:13:00
2

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

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

ответил munificent 21 FebruaryEurope/MoscowbMon, 21 Feb 2011 22:13:45 +0300000000pmMon, 21 Feb 2011 22:13:45 +030011 2011, 22:13:45
2

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

ответил Philluminati 21 FebruaryEurope/MoscowbMon, 21 Feb 2011 23:35:54 +0300000000pmMon, 21 Feb 2011 23:35:54 +030011 2011, 23:35:54
2

Это дикая догадка, но одна из причин может заключаться в том, что она делает IDE-магию как IntelliSense проще /полезнее. В C ++ каждая функция стандартной библиотеки C находится в глобальном пространстве имен. Каждый класс и функция стандартной библиотеки C ++ находится в пространстве имен std. И многие программы на C ++, над которыми я работал, также помещают все в глобальное пространство имен (или используют using namespace XYZ в начале каждого файла). Поэтому, если вы нажмете Ctrl-Space где-нибудь в файле, вы получите длинный список very каждой глобальной функции. В C # все статические функции, такие как Math.Sin или Buffer.BlockCopy содержатся в пространстве имен. Итак, все, что вы получаете, когда вы нажимаете Ctrl-Space, это несколько классов, таких как Math, Buffer, ...

ответил nikie 22 FebruaryEurope/MoscowbTue, 22 Feb 2011 00:16:07 +0300000000amTue, 22 Feb 2011 00:16:07 +030011 2011, 00:16:07
1

Как заявили другие. Это не так!

Если вы хотите знать, почему это (или почти есть), посмотрите на Эйфелеву. Это стоит посмотреть; вы можете узнать Eiffel быстрее, чем C # или Java.

Наконец, вы поймете OO, Design by contract, Inheritance, C # и многое другое.

ответил ctrl-alt-delor 29 MarpmTue, 29 Mar 2011 15:52:55 +04002011-03-29T15:52:55+04:0003 2011, 15:52:55
0

Один момент, о котором не упоминалось, заключается в том, что во многих объектно-ориентированных средах, основанных на мусорной коллекции, абсолютно необходимо, чтобы система знала о местонахождении каждой ссылки на объект, а не только о каждом объекте, но каждая ссылка также - в любое время, когда может возникнуть сбор мусора; если есть какой-либо поток Th, в котором система не знает, где находится каждая ссылка на объект и сбор мусора, все другие потоки должны ждать потока Th, чтобы достичь точки, где система знает, где все ссылки на ее объекты.

Вышеупомянутое требование намного более строгое, чем все, что существует для C или C ++. В C или C ++ можно построить объединение, которое объединяет целочисленный числовой тип с указателем и при условии, что код отслеживает, содержит ли предмет целое число или указатель, не имеет значения, сможет ли среда выполнения определить тип Дело в том. Такой подход не будет работать на собранном мусором языке. Если интерпретация содержимого союза как указателя будет ссылаться на объект, который перемещается, то абсолютно необходимо, чтобы содержимое союза было обновлено для хранения нового адреса, если последнее, что хранилось там, было указателем, но это также необходимо что он останется один, если предполагается, что он удерживает целое число. Просто ничего не может сделать безопасное время выполнения, если он не может требовать, чтобы ссылки на объекты сохранялись в местах хранения типа объекта-ссылки и нигде больше.

ответил supercat 11 J000000Wednesday12 2012, 11:17:19

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132