Не теряем ли мы из-за синтактической поддержки ООП (C++) гибкость программирования и качество кода, ведь подход ООП можно реализовать и просто на C. Не загоняем ли мы себя в угол? Прошу высказаться по этому поводу
ne teryaem :) ne hochesh' pol'zovat' shablony/virt funkcii/... --- ne pol'zuesh', logichno ? imho esli na C++ napisat' kod v duhe C, to pravil'nym kompilyatorom budet sgeneren "odinakoviy" kod...
imho poleznaya knizhka "design and evolution of C++", Stroustrup
Изволь выражаться внятнее, а то вовсе не ясно, что ты в виду иметь.
В общем, что Цэ, что ЦэПэПэ, давно пора отправить на помойку. ЦэПэПэ ничего особо ценного в сравнении с Цэ не предоставляет (механизьм темплейтов прекрасно реализуется на препроцессоре, а ООП - параша, которую давить без жалости), но, в то же время, особого оверхеда его новые фичи не создают. Просто очередной убогий императивный недоязычок, который надо забыть, как страшный сон.
Грамотоное использование ООП позволяет приблизить программирование к предметной области, что само по себе очень ценно. Для ООП хорошо развита методология проектриования, есть богатый выбор CASE-средств. Качество сильно зависит от поргаммиста и дизайнера. Классы легче тестировать, хорошо написанную ООП программу легче читать, но более богатые возможности языка оставляют больше простора для ошибок. Реализация ООП-подхода на Си дает БОЛЬШУЮ головную боль. Без крайней нужды так лучше не делать. Оверхед от использования классов, конечно, есть, поэтому при embedded порграммировании, где скорость и размер кода всегда очень критичны, я обычно использую просто Си.
Резюме: Си++ - не самый лучший из языков программирования, но поддержка классов в языке дает много преимуществ, и ими не стоит пренебрегать.
Antichrist не знает, о чем говорит. Можно согласиться, что C/C++ не лучшие языки.
Но про ООП сам себе противоречит.
Но сам же приводил кусок кода с объектами.
Во первых, попрошу не путать OOP и OOD. Это разные уровни. ООП требует применения OOD до самого низкого уровня - до реализации то бишь, однако как раз на низком уровне большинство встречающихся в реальной жизни сущностей объектной декомпозиции не поддаётся.
Ну а тестировать гораздо проще МОДУЛИ, чем классы. Правильно реализованная система модулей куда как гибче, и при этом строже (то бишь надёжнее), чем все существующие реализации классов.
Использование объектов (умеренное) - это вовсе не то же, что чистый ООП. Ну а реализация ООП в C++ для такого вот, умеренного, применения вовсе не канает - ибо нет модулей, приходится заместо таковых классы юзать.
Можно использовать OOD в не-ОО языках. А можно зуб удалить через задний проход... но через рот это гораздо проще. Зачем вникать в документ о 17 страницах с правилами преобразования классов в модули, если можно взять язык с поддержкой классов на уровне синтаксиса? Модули не заменят классов, как и классы модули. Это разные вещи, их нельзя сравнивать. Лучше использовать и то и другое одновременно.
Идиёт. Какое отношение ООД имеет к классам? На том уровне, когда классы начинаются, OOD уже не место. Иди, кури своего Буча дальше, не мешай умным людям науку двигать.