Сохраняются ли концепции ускоренного практического программирования на C++ на примерах сегодня?

Мне порекомендовали книгу под названием:

Ускоренное практическое программирование на C++ на примерах Эндрю Кениг и Барбара Э. Му Эддисон-Уэсли, 2000 ISBN 0-201-70353-X

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

Я имею в виду, что я знаю, что у большинства книг по программированию примерно такой же срок годности, как у молока, но если вы пишете клиент-серверное приложение (база данных, сервер и все такое) (не драйвер устройства или видеоигру), действительно ли стоит тратить силы на то, чтобы иметь не обслуживаемый код только для увеличения скорости?

Или стоит просто запустить приложение на действительно старой машине клиента? Или чтобы иметь возможность запускать больше серверов на одном компьютере?

Какой странный вопрос. Я пару раз прочитал Accelerated C++, и вы на 100% ошиблись в своем первом утверждении. Вся книга предназначена для того, чтобы показать вам, как программировать на современном C++, включая ООП, шаблоны и процедуры. Нигде не говорится, что «объектно-ориентированное программирование очень расточительно с точки зрения памяти».

PowerApp101 28.05.2009 20:30
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
3 407
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Вау нет.

Современные компиляторы C++ превосходны. Большое использование памяти является скорее признаком плохой конструкции или большого набора данных в памяти. Накладные расходы, необходимые для классов C++, минимальны и действительно не являются проблемой в наши дни.

Объектно-ориентированное программирование - это способ написания компонентов таким образом, чтобы они могли логически группировать действия, связанные с одной концепцией (т. Е. Все действия для «машины» или все действия для «кошки»). Это не значит, что его нельзя неправильно использовать для написания объектов спагетти, но, как говорится, вы можете писать COBOL на любом языке.

В качестве еще одного примера: в наши дни вполне возможно и принято писать для встроенных программных платформ с C++ и объектами. Незначительное снижение скорости и увеличение использования памяти (если таковое имеется) в тысячу раз окупается за счет повышения ремонтопригодности и удобства использования кода.

Подумайте о стоимости часа времени разработчика.

Подумайте о стоимости часа процессорного времени.

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

Ответ принят как подходящий

Я не читал эту книгу, но мне трудно поверить, что они написали книгу, «основу которой ... является то, что объектно-ориентированное программирование очень расточительно с точки зрения памяти» (полное раскрытие: Энди и Барбара - мои друзья).

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

Аргумент, что объектно-ориентированный дизайн расточителен, в значительной степени исходит из того факта, что EXE-файлы C++ программ "hello world" имеют тенденцию быть больше, чем EXE-файлы программ C "hello world". В основном это связано с тем, что iostreams больше printf (но тогда iostreams делает больше).

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

bruceatk 17.10.2008 20:32

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

Max Lybbert 17.10.2008 22:36

Ой! Вау, Джеймс! Вы знаете людей, написавших эту книгу! Маленький мир человека! Я собирался отложить это до того факта, что книга была написана очень давно, и что это могло быть правдой в то время, когда она писалась. Я знаю, что с 2000 года многое изменилось. Хм, интересно, что ты так говоришь.

leeand00 18.10.2008 00:32

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

leeand00 18.10.2008 00:38

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

Я предполагаю, что для большинства приложений на современных компьютерах это не проблема. Учитывая, что C++ также включает весь C в качестве подмножества, ничто не мешает вам смешивать и сопоставлять парадигмы в зависимости от ситуации. Новые обработчики кучи также намного лучше, чем ранние попытки MS, и помогают bg.

Один из главных виновников этого состоит в том, что люди думают, что должны все обновлять, а это не так. В C++ объекты могут жить в стеке.

Max Lybbert 17.10.2008 22:34

Правильный. Мне нравится видеть сравнения производительности Java и C++, когда в используемом ими коде C++ все динамически распределяется.

Raindog 24.10.2008 23:29

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++ не делает его медленным, в отличие от других языков, любая медлительность - это чисто реализация библиотеки или разработка алгоритма.

Этот пример касается шаблонов, а не ООП.

KJAWolf 17.10.2008 23:41

Нет, это не так. sort принимает объект функции, потому что это быстро, потому что компилятор может встроить функцию-член сравнения объекта функции, тогда как quicksort принимает указатель на функцию.

Raindog 24.10.2008 23:29

Другие вопросы по теме