Форум программистов, компьютерный форум CyberForum.ru

Советы - C++

Восстановить пароль Регистрация
 
norge_goth
62 / 62 / 7
Регистрация: 27.01.2009
Сообщений: 279
26.08.2010, 21:18     Советы #1
Добрый день, сделал с горем пополам калькулятор, но необходимы советы о написании программ на примере того же калькулятора, так как было довольно заморочливо его делать и программа похожа на if-then лестницу с отслеживанием кучи зависимости

1. как правильно проектировать программу(с помощью какого-то псевдокода или еще чего)?
2. как правильно подходить к решения вариантов хода событий(сначала описывать поведение программы по правильному пути, а потом предусматривать все возможные варианты или стараться походу все варианты учитывать)
3. как задавать ф-ции чтобы они были максимально независимыми?
4. как писать программу чтобы не запутаться в своем же коде и можно было легко их модифицировать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.08.2010, 21:18     Советы
Посмотрите здесь:

C++ Сетевое программирование. Ваше советы
C++ Рекурсия-Советы или Трюки
C++ Советы
C++ Нужны советы по задачам
Советы начинающему C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
26.08.2010, 21:33     Советы #2
norge_goth,
1. Можно писать псевдокод. Можно писать сначала, читать переписывать заново. Естественно код должен быть разбит на функции, если оно того стоит. Или на классы, если объектно-ориентированный подход.
2. Я придерживаюсь стараться походу. Но не всегда это получается
3. Что это значит? Независимыми от чего?
4. ыы. а вот это проблема. в коде запутаться можно легко. Однако с опытом приходит понимание того как писать правильно
norge_goth
62 / 62 / 7
Регистрация: 27.01.2009
Сообщений: 279
26.08.2010, 21:39  [ТС]     Советы #3
Цитата Сообщение от Lavroff Посмотреть сообщение
norge_goth,
1. Можно писать псевдокод. Можно писать сначала, читать переписывать заново. Естественно код должен быть разбит на функции, если оно того стоит. Или на классы, если объектно-ориентированный подход.
2. Я придерживаюсь стараться походу. Но не всегда это получается
3. Что это значит? Независимыми от чего?
4. ыы. а вот это проблема. в коде запутаться можно легко. Однако с опытом приходит понимание того как писать правильно
3. Чтобы одни ф-ции минимально влияли на исход других, если не понятно могу привести код
У меня калькулятор(тоесть его часть) написан на Qt проблема в том что там получается один класс и беспрерывная обработка нажатий клавиш с вызовом соответствующих ф-цый
iama
 Аватар для iama
1249 / 974 / 48
Регистрация: 30.07.2010
Сообщений: 5,297
26.08.2010, 21:52     Советы #4
1. лично мне удобно рисовать схему взаимодействия классов (ну или методов), так легче отследить как лучше спроектировать каждый отдельный метод, диапазон значений параметров, что помогает при борьбе с уязвимостями и защите "от дурака".
2. см. п. 1
3. каждай фунцкия сама должна проверять корректность вводимых значений, хороший тон - возвращать переменную, которая говорит об успешности выполнения функции. тогда удобно и дебажить - поставить проверку типа:
C++
1
if (DeleteTags(tagged_str) == -1) assert("Tags delete not successful");
4. комментируйте код. это дает вам самому лучшее понимание работы своего кода, и плюс когда через долгий промежуток времени вам понадобится использовать написаный ранее код, вам будет легче его интегрировать, если он комментирован.

на правах рекламы - С. Макконнелл - "Совершенный код" - очень помогло в свое время
Mencey
 Аватар для Mencey
145 / 92 / 7
Регистрация: 22.07.2010
Сообщений: 424
26.08.2010, 23:00     Советы #5
1. В Философия C++ в первой главе написано как проектировать ООП программы. Извиняюсь текст выложить немогу т.к. авторские права нарушу.

Не по теме:

Почти в любой теме знания из Философии мне помогаят отвечать на вопросы в темах думаю не зря читаю эту книгу

CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
26.08.2010, 23:19     Советы #6
Цитата Сообщение от iama Посмотреть сообщение
хороший тон - возвращать переменную, которая говорит об успешности выполнения функции.
Для языков поддерживающих исключения - это плохой тон, за исключением случаев, когда использовать исключения невозможно.
Цитата Сообщение от iama Посмотреть сообщение
C++
1
if (DeleteTags(tagged_str) == -1) assert("Tags delete not successful");
Код некорректен. assert используется для проверки утверждений, а не сигнализации об ошибках. Кроме того утверждения исключаются в релизных конфигурациях.
Поправленный вариант (будем считать, что DeleteTags использует код возврата для уведомления о успешности выполнения):
C++
1
2
3
4
5
6
int result = DeleteTags(tagged_str);
 
if (result == -1) {
  assert(result != -1);
  throw std::runtime_error("Tags delete not successful");
}
#pragma
Временно недоступен
 Аватар для #pragma
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
26.08.2010, 23:56     Советы #7
Цитата Сообщение от norge_goth Посмотреть сообщение
Добрый день, сделал с горем пополам калькулятор, но необходимы советы о написании программ на примере того же калькулятора, так как было довольно заморочливо его делать и программа похожа на if-then лестницу с отслеживанием кучи зависимости

1. как правильно проектировать программу(с помощью какого-то псевдокода или еще чего)?
2. как правильно подходить к решения вариантов хода событий(сначала описывать поведение программы по правильному пути, а потом предусматривать все возможные варианты или стараться походу все варианты учитывать)
3. как задавать ф-ции чтобы они были максимально независимыми?
4. как писать программу чтобы не запутаться в своем же коде и можно было легко их модифицировать?
Если не лень,посмотри тему про интерпретатор Пишем свой интерпретатор языка BASIC . Там как раз на примере калькулятора проходится путь написания программы. И хотя конечный результат не достигнут,и код весьма не совершенен,но советы, данные Evg по конкретной теме,весьма ценные,в частности,есть и про проектирование. Можешь посмотреть ревизии кода,каким был в начале и как изменился.
Как я понял,одно из важнейших правил-разделяй и властвуй. То есть из низкоуровневого кода нужно стараться при росте программы делать более высокоуровневые построения, и делать это так,чтобы семантика кода обогащалась. То есть чтобы каждая строчка кода была предельно ясной по мере возможности.
Ещё очень важно сокрытие данных и модульность.То есть чтобы все части программы были как можно более независимыми и непосредственные данные из одного модуля не использовались в коде другого. Например,в моей программе мне это сделать,я считаю,не удалось, так как по настоящему независимым является только парсер (я уже использовал его в другой программе).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.08.2010, 03:46     Советы
Еще ссылки по теме:

Советы по освоению материала C++
Ошибка+нужны советы C++
C++ Советы начинающему программисту

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
27.08.2010, 03:46     Советы #8
C++
1
if (DeleteTags(tagged_str) == -1) assert("Tags delete not successful");
C
1
2
    retval = DeleteTags(tagged_str);
    assert(retval != -1 && "can't delete tags");
Yandex
Объявления
27.08.2010, 03:46     Советы
Ответ Создать тему
Опции темы

Текущее время: 22:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru