Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1

Советы по реализации проекта

30.04.2016, 00:08. Показов 658. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер.
Порою, у меня возникает такая проблема (может, не только у меня), что нужно, скажем, написать какую-либо программу, например, вычисляющую минимальный остов введенного пользователем графа, т.е. по сути требуется реализовать алгоритм Краскала нахождения минимального остовного дерева неориентированного графа (материал из курса дискретной математики).

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

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

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

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

Хотелось бы увидеть различные советы по поводу того, как бороться с этой проблемой.
Что нужно делать, или с чего вобще стоит начать, чтобы грамотно сверстать проект, если ты лишь мысленно понимаешь суть алгоритма (задачи), который нужно реализовать (решить)?
Или нужно перед стадией написания кода сидеть n-ое кол-во часов(дней) обдумывать в точности как алгоритм будет реализован на ЯП или заниматься теоритическим проектированием класса (классов) посредством составления UML-диаграмм или что там сейчас для этих целей используется?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.04.2016, 00:08
Ответы с готовыми решениями:

Советы по реализации игры Go
В надежде облегчить себе работу начал делать курсач еще в январе. Теперь, когда подошло время для показа сего творения препод сказал, что...

Класс редактирования данных. Нужны советы по реализации
Есть задача: написать класс, позволяющий редактировать данные в памяти. Указатель на данные и их начальный размер передаются в конструктор....

Советы по реализации Крестики-нолики
Доброго времени суток! Начал изучение С#, и решил забацать сабж на простой форме. С "высоты" своего опыта, получился такой код ...

7
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
30.04.2016, 10:13
Ferrari F1, Вот мне кажется, что когда ты садишься уже непосредственно писать код, то ты уже должен понимать, что он будет содержать, а не
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
что придет в голову, то и пишу
То есть я уже должен понимать, будут такие-то классы, методы, поля, они будут делать то-то и то-то.
Так вот, если проект большой, то лучше все-таки сделать хотя бы абстрактный рисунок иерархии классов или что вам там надо. А если проект мал, то можно все и в голове продумать.
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
30.04.2016, 13:45  [ТС]
Вопрос еще не снят
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
30.04.2016, 19:58
Когда садишься писать программу, то нужно в общих чертах понимать, как она будет устроена. Это называется "на самом верхнем уровне". Например, ты хочешь писать консольный конвертор изображений из разных форматов, то надо понимать, что программа примерно будет состоять из:
- разбор опций
- универсальное внутреннее представление изображения (грубо говоря, массив точек, описывающий цвета)
- процедуры чтения файла из конкретного формата в универсальное внутреннее представление
- процедуры записи из универсального внутреннего представления в конкретный формат в файл

Это тот скелет программы, который более-менее всегда будет именно таким. А потом уже по отдельности решаешь более локальные вопросы с каждым конкретным методом или классом. Я думаю, что 99% программистов с ходу не смогут себе на 100% точно придумать в голове детали реализации. Они всё равно будут меняться в процессе работы, но при этом общий скелет программы останется более-менее неизменным
1
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
30.04.2016, 20:22  [ТС]
Evg, спасибо за ответ.
Хотел бы еще мнений... например, magirus'а или DrOffset
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
30.04.2016, 20:33
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
сажусь я, значит, писать класс графа, совершенно не представляя, какие в точности в нем будут методы и поля (нет, конечно я понимаю, что будут общие методы типа ввода/вывода графа, а также поиск минимального остовного дерева, но это все так, оценка свысока...)
После создания нового проекта в студии непосредственно начинается сам процесс написания кода.
Проходит этот процесс самым что ни на есть импровизированным образом, т.е. что придет в голову, то и пишу, совершенно не имея под рукой какого-либо плана
это - годный подход.
в миру ещё называется "прототипированием".
я его ещё иногда называю: "щенки и котята".

суть проста: если вы не в теме, то как бы вы ни старались,
но без опыта, все равно с высокой степенью вероятности
получится хлам.

значит нужно поиметь опыт.
значит нужно потренироваться на кошках.

самое главное - не тратить на прототип много времени.
можно смело забить болт на любые проверки,
забить на delete,
и писать goto хоть в каждой строке.

без опыта, как бы вы ни старались,
с высокой степенью вероятности,
прототип все равно придется выбросить в мусорное ведро.
поэтому нет смысла с ним заморачиваться.

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

Цитата Сообщение от Ferrari F1 Посмотреть сообщение
но, смотря на свой код со свежей головой через пару суток, замечаю, что в некоторых местах он кривовато или неоптимально реализован (например, класс содержит лишние (если не бессмысленные) поля и(ли) методы, или в методах чего-то перемудрил). Одним словом - непродуманно спроектирован.
это - абсолютно нормальная ситуация.
просто вы получили опыт,
и теперь видите вещи с позиции лучшего понимания задачи.

здесь есть два пути:

1.
на решение задачи изначально выделяют доп.
время на неизбежный рефактор.
такое практикуют школы TDD

2.
работает? отлично.
все, забейте и не парьтесь.
в след. раз напишите лучше.
1
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
30.04.2016, 20:47  [ТС]
hoggy, ваши слова обнадеживают)
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
30.04.2016, 20:58
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Хотел бы еще мнений...
Я солидарен с hoggy.
Цитата Сообщение от hoggy Посмотреть сообщение
суть проста: если вы не в теме, то как бы вы ни старались,
но без опыта, все равно с высокой степенью вероятности
получится хлам.
Есть, например, программы, которые написаны очень хорошо. Как их авторы такого добились? Очень "просто". Они всю жизнь идут в этом направлении. Досконально знают предметную область и написали уже не один десяток версий, с каждым разом улучшая свой результат. Тут ровно так же, как в спорте.
Что касается архитекторов в больших компаниях, то это тоже люди не с потолка. Они точно так же досконально знают предметную область, поэтому могут прогнозировать изменения в проекте, чтобы заложить это в архитектуре. Они могут детально спроектировать взаимодействие абстракций внутри программы (в виде диаграмм или графиков), потому что представляют себе очень хорошо что должно получиться в результате.

Поэтому если ты вообще не опытен в каком-то вопросе, то чем скорее ты этот опыт получишь, негативный или позитивный, тем скорее ты сможешь себе представить то, каким образом нужно было делать "правильно".
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.04.2016, 20:58
Помогаю со студенческими работами здесь

Советы по реализации веб шахмат
Всем привет! Хочу создать веб версию шахмат на С#. Игра проводится между людьми. Пока на искусственный интеллект не ориентируюсь....

Советы по оптимизация реализации игры в покер
Добрый день. Сначала чуть предыстории. Сложилось так, что изучать программирование я могу только в свободное время самостоятельно. Изучаю...

Задача по GPSS. Требуются советы по реализации
Текст задания В отделе реализован "конвейер" обслуживания посетителей в виде 4 последовательных столов (перед каждым — своя очередь)....

Какие дадите советы по реализации Client-Server Tasks?
Здравствуйте, хочу переписать с нуля клиент-сервер класс. Он же клиент, он же сервер. Но есть вопросы: 1. Что лучше юзать? StreamReader и...

Очень нужны советы в реализации строкового калькулятора (как можно проще к пониманию)
День добрый! Очень нужны советы в реализации строкового калькулятора. Познания в Си абсолютно начинающие. Но есть задание на постройку...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru