Мне порекомендовали книгу под названием:
Ускоренное практическое программирование на C++ на примерах Эндрю Кениг и Барбара Э. Му Эддисон-Уэсли, 2000 ISBN 0-201-70353-X
Основа этой книги состоит в том, что объектно-ориентированное программирование очень расточительно с точки зрения памяти и что большую часть исходного кода не следует писать таким образом, а следует использовать все встроенные вызовы функций и процедурное программирование.
Я имею в виду, что я знаю, что у большинства книг по программированию примерно такой же срок годности, как у молока, но если вы пишете клиент-серверное приложение (база данных, сервер и все такое) (не драйвер устройства или видеоигру), действительно ли стоит тратить силы на то, чтобы иметь не обслуживаемый код только для увеличения скорости?
Или стоит просто запустить приложение на действительно старой машине клиента? Или чтобы иметь возможность запускать больше серверов на одном компьютере?





Вау нет.
Современные компиляторы C++ превосходны. Большое использование памяти является скорее признаком плохой конструкции или большого набора данных в памяти. Накладные расходы, необходимые для классов C++, минимальны и действительно не являются проблемой в наши дни.
Объектно-ориентированное программирование - это способ написания компонентов таким образом, чтобы они могли логически группировать действия, связанные с одной концепцией (т. Е. Все действия для «машины» или все действия для «кошки»). Это не значит, что его нельзя неправильно использовать для написания объектов спагетти, но, как говорится, вы можете писать COBOL на любом языке.
В качестве еще одного примера: в наши дни вполне возможно и принято писать для встроенных программных платформ с C++ и объектами. Незначительное снижение скорости и увеличение использования памяти (если таковое имеется) в тысячу раз окупается за счет повышения ремонтопригодности и удобства использования кода.
Подумайте о стоимости часа времени разработчика.
Подумайте о стоимости часа процессорного времени.
При этом потеря производительности при объектно-ориентированном кодировании абсолютно незначительна. Особенно учитывая, что когда ваша программа выполняет вычисления, она вычисляет что-нибудь - и это, вероятно, гораздо больше зависит от природы используемого алгоритма, чем от того, используется ли ООП.
Я не читал эту книгу, но мне трудно поверить, что они написали книгу, «основу которой ... является то, что объектно-ориентированное программирование очень расточительно с точки зрения памяти» (полное раскрытие: Энди и Барбара - мои друзья).
Энди никогда бы не сказал, что ООП тратит впустую память. Он БЫЛ сказал, что конкретный алгоритм или метод является расточительным, и в некоторых случаях мог бы рекомендовать менее объектно-ориентированный подход, но он был бы первым, кто утверждал, что, как правило, объектно-ориентированные проекты не более или менее расточительны, чем любой другой стиль программирование.
Аргумент, что объектно-ориентированный дизайн расточителен, в значительной степени исходит из того факта, что EXE-файлы C++ программ "hello world" имеют тенденцию быть больше, чем EXE-файлы программ C "hello world". В основном это связано с тем, что iostreams больше printf (но тогда iostreams делает больше).
Я не согласен с тем, почему. Причина, по которой люди думают, что ООП расточительна, - это память, которую приложение использует во время работы. Это не обязательно проблема ООП, это проблема дизайна, не учитывающего потребляемые ресурсы.
> Причина, по которой люди думают, что ООП расточительна, - это память, которую приложение использует во время работы. Большинство начинающих программистов, которых я встречал, не удосужились измерить фактическое использование памяти, прежде чем объявить C++ расточительным. Они также не удосуживаются удалить исполняемый файл, прежде чем посмотреть на его размер.
Ой! Вау, Джеймс! Вы знаете людей, написавших эту книгу! Маленький мир человека! Я собирался отложить это до того факта, что книга была написана очень давно, и что это могло быть правдой в то время, когда она писалась. Я знаю, что с 2000 года многое изменилось. Хм, интересно, что ты так говоришь.
Пожалуйста, не думайте, что я ругаю их книгу! Я не; Я просто хотел проверить совет, который мне дали на работе, и посмотреть, что сообщество в целом скажет по этому поводу (в основном потому, что книга была написана в 2000 году).
C++ и ООП сами по себе не являются неэффективными, но я видел, как многие программы на C++ выполняют операцию менее эффективно, чем эквивалентная программа на C. Самая большая проблема часто возникает из-за большого количества небольших выделений памяти, возникающих из-за новыйing отдельных объектов, а не маллокing целой группы из них одновременно. Точно так же полиморфизм и виртуальные функции прекрасны, но они несут накладные расходы, о которых не знают некоторые программисты на C++. Кусочное построение объектов также может быть намного медленнее, чем один грязный большой мемсет из вышеупомянутого массива структур маллокed.
Я предполагаю, что для большинства приложений на современных компьютерах это не проблема. Учитывая, что C++ также включает весь C в качестве подмножества, ничто не мешает вам смешивать и сопоставлять парадигмы в зависимости от ситуации. Новые обработчики кучи также намного лучше, чем ранние попытки MS, и помогают bg.
Один из главных виновников этого состоит в том, что люди думают, что должны все обновлять, а это не так. В C++ объекты могут жить в стеке.
Правильный. Мне нравится видеть сравнения производительности Java и C++, когда в используемом ими коде C++ все динамически распределяется.
The basis of this book is that Object Oriented Programming is highly wasteful memory-wise, and that most source-code should not be written this way, rather that you should use all inline function calls and procedural programming.
Я бы сказал, что это несколько сокращающее изложение книга.
Короче говоря, чтобы ответить на вопрос о названии, я бы продолжал рекомендовать как книгу, так и включенные в нее концепции.
Я подозреваю, что совет больше похож на то, что кто-то не должен создавать класс только для реализации алгоритма, что, я бы сказал, остается хорошим советом.
В некоторых ответах совершенно отсутствует суть. ООП в C++ имеет много возможностей быть намного быстрее, чем их аналоги на C. Я приведу пример из статьи Скотта Мейерса «Эффективный C++», который заключается в том, что быстрая сортировка работает медленнее, чем сортировка в C++, потому что компилятор может легко встроить вызов функции в C++, тогда как в C он не может этого сделать из-за того, что быстрая сортировка передал указатель на функцию.
Кроме того, ничто в C++ не делает его медленным, в отличие от других языков, любая медлительность - это чисто реализация библиотеки или разработка алгоритма.
Этот пример касается шаблонов, а не ООП.
Нет, это не так. sort принимает объект функции, потому что это быстро, потому что компилятор может встроить функцию-член сравнения объекта функции, тогда как quicksort принимает указатель на функцию.
Какой странный вопрос. Я пару раз прочитал Accelerated C++, и вы на 100% ошиблись в своем первом утверждении. Вся книга предназначена для того, чтобы показать вам, как программировать на современном C++, включая ООП, шаблоны и процедуры. Нигде не говорится, что «объектно-ориентированное программирование очень расточительно с точки зрения памяти».