Мой дизайн практически кричит для ООП.Должен ли я изменить свой дизайн или изменить язык программирования? - PullRequest
0 голосов
/ 10 ноября 2011

Я пишу хобби-проект, в котором я пишу в файлы .wav.Я решил, что лучший способ сделать это - создать один файл C с набором подпрограмм для инициализации и манипулирования структурой с метаданными о волновом файле, которые пользователь никогда не должен манипулировать вручную, а вместо этого должен передать указатель на подпрограммы.Пример того, как будет выглядеть этот интерфейс, выглядит следующим образом:

/* wave_new_file() implicitly allocates memory for the struct */
Wavefile *outputWave = wave_new_file("out.wav", WAVE_mono);

int i;
for (i = 0; i < MAX_RANDOM_SAMPLES; i++)
    wave_write(outputWave, rand());

wave_close(outputWave);

Я понимаю, что остальная часть моей конструкции потенциально может быть упрощена в долгосрочной перспективе с использованием подхода ООП, такого как вследующий псевдо-C ++ (поскольку я на самом деле не знаком с C ++; об этом позже):

Wavefile *outputWave = new Wavefile("out.wav", WAVE_mono);

for (int i = 0; i < MAX_RANDOM_SAMPLES; i++)
    outputWave->write(rand());

outputWave->close(); /* Or delete perhaps? */

Проблема в том, что остальная часть моего проекта написана на C99;и я на самом деле не знаю C ++ (я изучил ООП из Python, но сейчас концентрируюсь на программировании на C).

Должен ли я: реорганизовать свой дизайн, чтобы не полагаться в большой степени на принципы ООП, или я должен уделить время и изучить C ++ и перенести всю свою программу на C ++?Это не большая программа, и - это просто хобби-проект (что объясняет мое переосмысление колеса путем создания моего собственного модуля для записи .wav).Или мне следует продолжить псевдообъектно-ориентированный дизайн, который я сейчас пишу?

Ответы [ 4 ]

2 голосов
/ 10 ноября 2011

Держите его C. Если вам нужен ООП, используйте указатели функций.Это довольно распространенная практика в ядре Linux.

2 голосов
/ 10 ноября 2011

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

Резюме в коде:

 if(DESIRE_SHORT_TERM_PROJECT_COMPLETION){
      stickWithC = true;
 }else if(DESIRE_KNOWLEDGE_AND_EXPERIENCE_AND_PLAN_TO_DEVELOP_LONG_TERM){
      stickWithC = false;
 }
2 голосов
/ 10 ноября 2011

Чем проще версия C ++?

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

Еще одно преимущество C ++ состоит в том, что он обеспечивает более высокую безопасность типов, даже если ваш код остается C-совместимым.

1 голос
/ 10 ноября 2011

Это зависит. Перевесят ли преимущества переписывания его неудобства переписывания? Если так, сделай это. Не зная больше о вашем проекте, это лучший ответ, который я могу дать.

С другой стороны, поскольку это хобби-проект, если вы ищете предлог для его переписывания или использования какого-то c ++, даже если это технически не лучшее использование вашего времени, тогда сделайте это, особенно , если вам интересно узнать больше о C ++. Если вы ищете повод продолжать писать на C, то сделайте это!

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