Стоимость разработки процедурного программирования против ООП?

Я родом из довольно сильного фона OO, преимущества OOD и OOP для меня второй, но в последнее время я оказался в магазине разработки, привязанного к процедурным привычкам программирования. Язык реализации имеет некоторые функции ООП, они не используются оптимальными способами.

Обновление: у всех, кажется, есть мнение по этой теме, как и я, но вопрос был:

Были ли хорошие сравнительные исследования, сравнивающие затраты на разработку программного обеспечения с использованием языков программирования программирования и объектно-ориентированных языков?

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

Ответ 1

После того, как я проговорил с google, я нашел здесь здесь. Используемые термины поиска ориентированы на производительность.

В следующих параграфах говорится:

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

Я думаю, вы обнаружите, что объектно-ориентированное программирование лучше в конкретных условиях, но нейтрально для всего остального. То, что продало моих боссов при конвертации моего приложения CAD/CAM в объектно-ориентированную структуру, - это то, что я точно показал точные области, в которых это поможет. Основное внимание уделялось не методологии в целом, а тому, как она поможет нам продать определенную проблему. Для нас существовала расширяемая структура для добавления большего количества фигур, отчетов и контроллеров машин и использования коллекций для удаления ограничения памяти более старого дизайна.

Ответ 2

Большинство из этих вопросов смешивается с проблемой, что индивидуальная производительность программиста изменяется на порядок или больше; если у вас есть программист OO, который является одним из gruop при производительности x, и "процедурный" программист, который является программистом 10x, процедурный программист может выиграть, даже если OO быстрее в некотором смысле.

Кроме того, проблема в том, что производительность кодирования обычно составляет всего 10-20 процентов от общего объема усилий в реалистичном проекте, поэтому более высокая производительность не оказывает большого влияния; даже тот гипотетический 10x программист или бесконечно быстрый программист не может сократить общее усилие более чем на 10-20 процентов.

Вы можете взглянуть на бумагу Фреда Брукса "Нет серебряной пули" .

Ответ 3

OO или процедурное предложение по-разному развиваться, и оба могут быть дорогостоящими, если они плохо управляются.

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

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

Итак, я думаю, стоимость OO будет ниже в долгосрочной перспективе по сравнению с процедурной.

Ответ 4

Я думаю, что S.Lott ссылался на феномен "неповторимого эксперимента", т.е. вы не можете написать приложение X процедурно, а затем перемотать время и записать его OO, чтобы узнать, в чем разница.

вы можете написать одно и то же приложение два раза двумя способами, но

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

поэтому на самом деле нет прямой основы для сравнения

эмпирические исследования также бесполезны по тем же причинам - разные приложения, разные команды и т.д.

сдвиги парадигмы сложны, и небольшой процент программистов никогда не сможет сделать переход

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

если нет, ну, возможно, настало время отполировать резюме...; -)

Ответ 5

Хорошая идея. Сравнение "голова к голове". Записывайте приложение X в процедурный стиль и в стиле OO и измеряйте что-то. Стоимость разработки. Возврат инвестиций.

Что значит написать одно и то же приложение в двух стилях? Это будет другое приложение, не так ли? Процессуальные люди откажутся от того, что люди OO обманывали, когда использовали наследование или обмен сообщениями или инкапсуляцию.

Не может быть такого сравнения. Нет никаких оснований для сравнения двух "версий" приложения. Ему нравится спрашивать, являются ли яблоки или апельсины более рентабельными при плодах.

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

  • Время создавать что-то, что работает.

  • Частота ошибок и проблем.

Если ваш подход будет лучше, вы добьетесь успеха, и люди захотят узнать, почему.

Когда вы объясните, что OO ведет к вашему успеху... ну... вы выиграли этот аргумент.

Ответ 6

Ключом является время. Сколько времени компания вынуждена менять дизайн, чтобы добавить новые функции или исправить существующие. Любое исследование, которое вы делаете, должно сосредоточиться на этой области.

В середине 90-х, созданной с использованием VB3, моя компания разработала ориентированную на события процедуру проектирования для программного обеспечения CAM. Для адаптации программного обеспечения к новым машинам потребовалось много времени. Долгое время проверять влияние исправлений ошибок и новых функций.

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

Ключ должен объяснить, почему ООП приносит пользу проекту. Используйте такие вещи, как Refactoring от Fowler и Design Patterns, чтобы показать, как новый дизайн снизит время, чтобы что-то делать. Также укажите, как вы попадаете из пункта A в пункт B. Рефакторинг поможет показать, как вы можете выполнять промежуточные этапы, которые могут быть отправлены.

Ответ 7

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

Но когда проект начинает расти, все наоборот, потому что проектирование ООП лучше всего подходит для управления сложностью кода.

Итак, в небольшом проекте, возможно, процедурный дизайн МОЖЕТ быть дешевле, потому что он быстрее, и у вас нет недостатков. Но в большом проекте вы получите очень быстро, используя только простую парадигму, такую ​​как процедурное программирование

Ответ 8

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

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

Не поймите меня неправильно, OO и процедурные программы выглядят и отличаются, но это вопрос темно-серого и светло-серого, а не черного и белого.

Ответ 9

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

Мне кажется интересным, поскольку моя компания начинает изучать инициативу ROWE. На нашей первой сессии было очевидно, что в настоящее время мы не набираем достаточное количество показателей для результатов.

Итак, вам нужно сосредоточиться на 1) Поддерживается ли текущее состояние текущих процессов, препятствующих будущему развитию? 2) Как различные методы будут влиять на # 1?