Когда ООП лучше подходит для? [закрытый]

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

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

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

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

29
задан Henrik P. Hessel 6 November 2010 в 13:43
поделиться

10 ответов

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

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

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

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

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

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

, При попытке изучить ООП, только сконцентрируйтесь на ООП, но попытайтесь использовать Объектно-ориентированный Анализ и общие принципы OO к целому спектру проблемного решения.

29
ответ дан eriegz 28 November 2019 в 01:27
поделиться

Это зависит проблемой: парадигма ООП полезна в разработке distribuited системы или платформа с большим количеством объекта, живущего во время действий пользователя (пример: веб-приложение).

, Но если у Вас есть математическая проблема, Вы предпочтете функциональный язык (LISP); для критические по отношению к производительности системы Вы будете использовать ADA или C, и т.д. и т.д.

, ООП языка полезно, потому что также это использует probabily сборщик "мусора" (автоматическое использование памяти) в выполнении программы: Вы Вы программируете в C много времени, необходимо отладить и исправить вручную проблему памяти.

0
ответ дан alepuzio 28 November 2019 в 01:27
поделиться

По-моему, это - больше вопрос о Вас как человек. Определенные люди передумывают в функциональном отношении, и другие предпочитают классы и объекты. Я сказал бы, что ООП лучше подходит, когда оно соответствует Вашей внутренней (субъективной) умственной модели мира.

1
ответ дан fluffels 28 November 2019 в 01:27
поделиться

Я нахожу, что это помогает думать о данной проблеме с точки зрения 'вещей'.

, Если проблема может считаться имеющий одну или несколько 'вещей', где каждая 'вещь' имеет много атрибутов или сведений, которые относятся к ее состоянию и многим операциям, которые могут быть выполнены на нем - тогда, ООП является, вероятно, способом пойти!

1
ответ дан Chris Roberts 28 November 2019 в 01:27
поделиться

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

кроме того, существуют времена, когда функциональный подход имел бы больше смысла, такого как этот пример, взятый от MSDN:

Рассматривают, например, пишущий программу для преобразования XML-документа в другую форму данных. В то время как, конечно, было бы возможно записать программу C#, которая проанализировала через XML-документ и применила разнообразие того, если операторы для определения, что действия взять в различных точках в документе возможно превосходящий подход должен записать преобразование как Преобразование расширяемого языка таблиц стилей (XSLT) программа. Не удивительно, XSLT имеет большую полосу функционализма в нем

1
ответ дан lomaxx 28 November 2019 в 01:27
поделиться

Я продаюсь ООП.

Каждый раз, когда можно определить понятие для проблемы, это может, вероятно, быть обернуто в объект.

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

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

4
ответ дан mbillard 28 November 2019 в 01:27
поделиться

Я думаю, что это подходит лучше всего при моделировании чего-то связного с состоянием и связанными действиями с теми состояниями. Я предполагаю, что это довольно неопределенно, но я не уверен, что здесь существует идеальный ответ.

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

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

5
ответ дан Mike Stone 28 November 2019 в 01:27
поделиться

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

проблема, которую я имею с большим количеством более новых разработчиков, состоит в том, что у них нет понятия ресурсов, которые они используют с кодом, который они создают. При контакте с большим объемом данных и доступе к базам данных "идеальная" объектная модель может быть худшей вещью, которую можно сделать для производительности и ресурсов.

Моя нижняя строка - то, если она имеет смысл, поскольку объект тогда программирует ее как объект, пока Вы рассматриваете влияние производительности/ресурса реализации Вашей объектной модели.

8
ответ дан bruceatk 28 November 2019 в 01:27
поделиться

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

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

1
ответ дан RS Conley 28 November 2019 в 01:27
поделиться

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

1
ответ дан 28 November 2019 в 01:27
поделиться