Меняет ли использование указателей повышения вашу методологию проектирования ОО? - PullRequest
3 голосов
/ 20 февраля 2009

После того, как вы переключились с C ++ на C ++ с бустом, вы думаете, ваши навыки OOD улучшились?

Заметили ли вы шаблоны в "нормальном" коде C ++, которые вы не считаете измененными, или вы обнаруживаете, что он обеспечивает более абстрактный дизайн?

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

Изменить: резюме

Этот вопрос был довольно странным - я спрашивал, потому что столкнулся с таким большим количеством кода на C ++, который вовсе не был ОО. Я вполне уверен (учитывая это и мою работу над этим до перехода на управляемый язык), что в ОО на С ++ думать сложнее, чем на управляемом языке.

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

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

Ответы [ 5 ]

9 голосов
/ 20 февраля 2009

В проекте на C ++, который я делал около шести лет назад, мы внедрили нашу собственную схему автоматического указателя типа boost. Он работал довольно хорошо, за исключением различных ошибок в нем. (Конечно, жаль, что мы не использовали повышение ...)

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

В этом отношении есть некоторые вещи, которые вы можете стремиться сделать больше с помощью умных указателей: упростить свой код. Вместо того, чтобы каждый раз возвращать целые числа или базовые структуры, вы можете беспрепятственно передавать сложные структуры данных или классы. Вы можете создавать более сложные приложения быстрее, без особого беспокойства. Он позволяет вам использовать всю мощь C и C ++, когда вам это нужно (зачем вам использовать C или C ++, если вам это не нужно?), И иметь простоту управления памятью, что является таким удивительным повышением производительности. Если бы автоматически управляемая память была бесполезна, ее бы не было почти на всех других языках планеты!

3 голосов
/ 21 февраля 2009

Это глубоко изменило мой способ кодирования, и я распространяю слово. Благодаря использованию Boost.Graph и Boost.PropertyMap, в частности, я понял, что могу написать «истинные» алгоритмы в простом классе, не зная (пока), как получить доступ к информации, даже не зная (или не заботясь) о том, какие под действия может быть сделано во время выполнения алгоритма. Моя команда сейчас разрабатывает сложные вычислительные функции, используя графический инструмент.

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

3 голосов
/ 20 февраля 2009

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

1 голос
/ 26 февраля 2009

Как только я обнаружил boost::bindboost::function), я обнаружил, что вместо того, чтобы думать в терминах наследования и абстрактных базовых классов ("интерфейсы" в java / c # -speak), я начал видеть все как функтор.

Например, перед бустом я бы построил систему меню, в которой меню представляли собой контейнеры из IActionable* элементов, и все, что нужно было подключить к системе меню, должно было бы наследовать IActionable и предоставлять метод действия. После буста я реализую меню, содержащие boost::function<void()> объектов и просто добавляю в них все, что захочу, используя boost::bind.

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

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

0 голосов
/ 20 февраля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...