@lutokris

Можно ли любое GUI положение сперва реализовать в консольном варианте, а потом уже привязывать к нему GUI?

Всем добра. Раньше часто не понимал, почему при изучении программирования почти все делают через консольный ввод, вывод - scanf, printf, std::cin, std::cout. Наверное потому что программирование я начал учить на Борланд С++, в 2010 году. Я помню как мне тогда очень нравилось, сидишь такой, накидал по окошку туда сюда таймеры объекты, написал ко всем ним обработчики и радуйся. И когда препод говорил что нужно изучить STL, я открывал по ним статейки и закрывал их с мыслями что за архаизм. Ведь мне как-то было проще принцип - накидал на ГУЙ иконок и сиди пиши обработчики. Помню даже многопоточность вроде можно было реализовать через накидывание на GUI объекта многопоточности. С тех пор много времени прошло, программистом так и не стал, завис где-то посередине между всем, хоть и периодически пытался вернуться к этой теме. И снова я начал, как обычно изучать все с самого начала. И впервые внезапно мне пришла мысль - что раньше я все неправильно делал, когда пытался написать какие-то свои приложения. Почему то у меня все начиналось с рисования GUI, окошек, кнопочек, списков. Я чертил их на листках бумаги, визуально пытался представить себе что должно происходить на каждом окошке. А потом пытался все это перенести в код - и терпел крах, когда пытался сделать что-то посложнее, чем пара кнопок, список и окошко. Все по схеме - долго думал, прицелился, но запутался в своих мыслях и прострелил себе ногу. И вот в этот раз, наконец то я подумал - а что если любое приложение даже на этапе рисования на бумажках, начинать не с рисования ГУЙев и кнопочек, а именно с консольного ввода вывода информации? А потом привязывать к интерфейсам ввода-вывода ГУЙ и продумывать окошечки-кнопочки. А ведь об этом мне надо было задумываться еще будучи в универе - когда я написал всего два полезных для себя приложения, и оба были консольные. Первое приложение помогало делать отчеты лабораторные по физике, а второе приложение позволяло иметь бесплатный интернет в общаге - аутентификация которого происходила только по МАК-адресу и нужно было только определить кто в какое время пользуется интернетом, а потом использовать офлайн маки и периодически их менять. Админы так и не спалили за пару лет обучения, пока меня не выперли с универа)
P.S.
живу в местности с плохим интернетом, не знаю почему, но часто сайт думает что я робот, но когда жму проверки капчу, выводит "Капча недоступна, нет соединения с сервером", хоть и интернет появился. Предварительно скопировал весь написанный текст, нажал "Обновить страничку" - весь мой написанный текст исчез) не знаю что это значит, но наверное что-то значит.
  • Вопрос задан
  • 220 просмотров
Решения вопроса 2
romesses
@romesses
Backend инженер
Можно ли любое GUI положение сперва реализовать в консольном варианте, а потом уже привязывать к нему GUI?
Едва ли. Для простых еще можно, а для сложных, как Excel?
Начинать нужно с проектирования:
- расписать какие есть сценарии работы
- начать собирать макеты интерфейса
- определить что требуется на входе и на выходе каждого действия
- декомпозировать на мелкие задачи
- спроектировать интерфейсы вызовов API
- разделить их на логические модули - DLL и их аналоги
- написать заглушку для каждого вызова
- написать некоторые тесты
- реализовать интерфейсы поэтапно
- пробовать на тестовом стенде: можно консольное, а можно и графическое приложение.
- и из кубиков собирать приложение.
Ну как-то так.
Ответ написан
Комментировать
@12rbah
учить на Борланд С++

нужно изучить STL, я открывал по ним статейки и закрывал их с мыслями что за архаизм

Большинство мнений, которое я видел/читал/слышал как раз о том, что борланд/билдер архаизм. И вообще не понял почему stl архаизм.
Если приложение более менее большое, то нужно логику писать отдельно от GUI.
Можно ли любое GUI положение сперва реализовать в консольном варианте, а потом уже привязывать к нему GUI?
Если вы правильно пишите логику, то что для консоли, что для gui вам нужно будет только сделать интерфейс, если сам gui простой, то занимает это немного времени. Некоторые вообще пишут графику поверх консольных приложений.
Все по схеме - долго думал, прицелился, но запутался в своих мыслях и прострелил себе ногу. И вот в этот раз, наконец то я подумал - а что если любое приложение даже на этапе рисования на бумажках, начинать не с рисования ГУЙев и кнопочек, а именно с консольного ввода вывода информации? А потом привязывать к интерфейсам ввода-вывода ГУЙ и продумывать окошечки-кнопочки. А ведь об этом мне надо было задумываться еще будучи в универе - когда я написал всего два полезных для себя приложения, и оба были консольные.
В общем писать сразу в GUI даже приложение на 1000 строк мне кажется сомнительным. Как по мне проще в консоли функционал весь написать/проверить (с тестовыми данными), а потом просто привязать к кнопке эту функцию.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
GavriKos
@GavriKos
Можно. ПОловина юниксовых тулей так работает.
Полотнище текста не читал
Ответ написан
Комментировать
saboteur_kiev
@saboteur_kiev
software engineer
В последнее время популярно разделение на фронт и бэк, во первых по той причине что в веб-мире, их очень легко разделить, и даже создавать на разных языках, во-вторых к бэк приложению можно прикручивать много разных GUI, легко масштабировать и так далее.

консоль и гуй - это просто интерфейсы для работы с чем-то - с пользователем или с другим ПО.
консоль - максимально простой и универсальный интерфейс, который можно потом быстро прикрутить куда угодно. А GUI - в основном только для пользователя (он и расшифровывается как Graphic USER interface)

У вас видимо проблема, что вы за кнопочками видимо не понимали смысл как именно код аттачится к кнопочкам, как триггерится вызов процедур.
Любое приложение рисовать как консольное не нужно. Если планируется GUI приложение, то и архитектуру нужно строить как для GUI приложения. Если консольное - то и архитектуру нужно думать как для консоли, там тоже есть свои нюансы.
Ответ написан
Комментировать
Не нужно прикручивать CUI к GUI - это разные типы проектов, нужно разделить вывод от логики и бд. В c++ логика выносится в dll.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы