Ну, есть несколько альтернатив. Код не-ООП в C ++ может быть:
- процедурный код в стиле C или
- C ++ - стиль общего программирования
Единственными преимуществами первого являются простота и обратная совместимость. Если вы пишете небольшое тривиальное приложение, то возиться с классами - это просто пустая трата времени. Если вы пытаетесь написать «Hello World», просто позвоните printf
уже. Не беспокойтесь об этом в классе. И если вы работаете с существующей базой кода C, она, вероятно, не является объектно-ориентированной, и попытка заставить ее использовать другую парадигму, чем она уже использует, - просто рецепт боли.
Для последнего ситуация иная, поскольку этот подход часто превосходит над "традиционным ООП".
Общее программирование дает вам большую производительность (помимо прочего, потому что вы часто избегаете накладных расходов на vtables, и потому что с меньшим количеством косвенных ссылок компилятор лучше встраивается), лучшую безопасность типов (потому что точный тип известен, а не скрывая его за интерфейсом), а также часто более чистый и лаконичный код (итераторы и алгоритмы STL позволяют многое из этого, не используя ни одного экземпляра полиморфизма времени выполнения или виртуальных функций.
ООП - немного больше, чем старое модное слово. Методология, которую все неправильно поняли (версия, поддерживаемая C ++ и Java, имеет мало общего с первоначальным значением ООП, как в SmallTalk), а затем притворилась святым Граалем. Конечно, есть некоторые аспекты, которые полезны, но зачастую это не лучший подход для разработки приложения.
Скорее, выражайте общую логику другими средствами, например, общим программированием, и , когда вам нужен класс для инкапсуляции какой-то простой концепции, во что бы то ни стало, разработайте ее в соответствии с принципами ООП.
ООП - всего лишь инструмент среди многих. Цель не в том, чтобы написать код ООП, а в том, чтобы написать хороший код. Иногда это можно сделать, используя принципы ООП, но часто вы можете получить лучший код, используя общие принципы программирования или функциональное программирование.