Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Философия программирования > Динамическое формирование интерфейса |
Автор: Alenka_ 22.11.2007, 19:14 |
Здравствуйте! Подскажите, пожалуйста, методы формирования динамического интерфейса? Нужно, чтобы при определенных действиях пользователя интерфейс изменялся бы каким-либо образом и выводились определенные данные. Как это обычно осуществляется и какие существуют технологии? |
Автор: Се ля ви 22.11.2007, 21:58 |
Не очень понятно, что вы имеете в виду - конкретизируйте вопрос. Во-первых, какой у вас интерфейс - GUI или Web? Во-вторых, на каких языках написана ваша система? В-третьих, попытайтесь хотя бы приблизительно описать, каковы функции этого интерфейса? Дело в том, что большинство интерфейсов итак меняются в зависимости от определённых действий пользователя - нажали вы, например, кнопку выпадающего списка - список, как нетрудно догадаться, выпал, теперь вы выбираете пункт из него, чего не могли сделать до того, как нажали эту кнопку - т.е. интерфейс изменился. То же можно отнести и к закладкам и ко многому другому... |
Автор: Alenka_ 23.11.2007, 03:58 |
Интерфейс называется динамическим, потому что на момент компиляции он точно не известен. Он формируется на этапе выполнения приложения. Т.е. поля для отображения информации жестко не задаются во время программирования. Логика приложения может быть изменена в ходе его выполнения, и интерфейс должен динамически адаптироваться к изменениям. Примером могут служить системы для опросов пользователя. Есть группы вопросов, например, для мужчин и женщин, и в зависимости от пола пользователя, необходимо вывести эти вопросы. Таких групп выбора может быть множество, поэтому простым перебором if или switch это не сделать. Интересно и для web и GUI. |
Автор: SaDFromSpb 23.11.2007, 12:23 |
Да никакие специальные технологии для этого не нужны. Изучай как следует API своей GUI библиотеки и делай. ![]() Никакой принципиальной разницы не должно быть, создаешь ли ты окно и оформляешь его содержимое вначале программы, или позже... |
Автор: Alenka_ 23.11.2007, 14:34 |
API своей GUI - это конечно. ![]() Но меня больше интересует организация программы, ее части и их взаимодействие... здесь важна общая идея, как организовывать данные, и инструменты для их извлечения. |
Автор: Се ля ви 23.11.2007, 16:38 |
Alenka_, насчёт того, как такое реализовать в GUI - это нужно конкретные платформы смотреть, мне кажется. Что же касается Web-интерфейсов - есть методы DOM - Document Object Model. Они позволяют менять страницу до неузнаваемости ![]() |
Автор: Alenka_ 23.11.2007, 23:39 | ||
Так мне и нужны общие подходы! ![]() Задача в общем- это найти способы изменять интерфейс в зависимости от пользовательского ввода. А конкретно я же написала. Как можно реализовать задачу выбора определенных данных, из базы, например, причем какие конкретно это данные, будет решаться на этапе выполнения программы, так как это зависит от ввода пользователя. Т.е. есть список вопросов, есть несколько последовательностей по которым они должны задаваться. Анализируя ответ пользователя, программа принимает решение какой вопрос следующий. ЗЫ. концепция сигналов-это не про конечные автоматы? И еще. Нашла тут парадигмы проектирования- дизайнерская и моделеориентированная. MVC- это вроде последняя? Но это же парадигмыпроектирования? Как они работают на этапе выполнения?.. Вообщем, у меня легкая растерянность ![]()
то я тоже с интересом его почитаю... ![]() |
Автор: Се ля ви 24.11.2007, 00:13 |
Да, конкретность просто зашкаливает!.. ![]() Ну сделайте что-то типа wizard`а - как при установке программ, Step1 - на нём какие-то компоненты, Step2 - на нём следущие компоненты, Step-3 - и при переходе на каждый экран обрабатывайте пользовательский ввод и в зависимости от него подсовывайте или формируйте новый... |
Автор: Alenka_ 24.11.2007, 00:25 |
Это реализация. А как внутри? Как принимается решение какие именно данные на следующем этапе предоставлять? нельзя же везде написать if пользователь ввел то-то, то выводим такие-то данные, если другое- другие. Опять не конкретно? ![]() ![]() |
Автор: Се ля ви 24.11.2007, 00:43 | ||
А внутри - как раз реализация ![]() Добавлено через 3 минуты и 59 секунд
Вроде, никто не запрещает... Ну поставьте swich если много вариантов. Поймите, это интерфейс, с ним работают юзеры, которым нужно что бы он был удобным. Так что по любому вам нужно видеть, что будет генериться, поэтому вам всё равно придётся это делать руками, просто что бы видеть и контролировать. Если речь, конечно, не идёт о банальном добавлении удалении однотипных полей по чёткому алгоритму и вы просто заранее не можете сказать - сколько их будет. Добавлено через 4 минуты и 27 секунд В общем, конкретизируйте задачу. Добавлено через 8 минут и 15 секунд Да, опять неконкретно. В чём задача состоит? Какие-то ограничения должны быть полюбому. Вы сами вчитайтесь - что вы написали. Вас можно понять в таком духе, что вы вообще хотите написать "блокирующую программу" - т.е. программу, которая бы приспосабливалась под пользователя и делала всё что ему нужно - и ему не были бы нужны никакие другие программы. Вообще. Виндоус с таким количеством встроенных программ, в которые он оперативно переходит, что бы под любую задачу юзера приспосабливаться и решать. И спрашиваете - каковым должно быть ядерное архитектурное решение?.. |
Автор: HistoryEarth 24.11.2007, 11:58 |
Непонятна последовательность действий. То есть либо по первому, например, вопросу формируется полный лист (если выбор между мужчиной и женщиной, например). Тогда один if и по его результатам загружаются разные процедуры со своими элементами управления. Либо каждый предыдущий ответ формирует следующий вопрос. Тут обычное дерево, как-то его обходишь и по событиям проявляются те или иные элементы интерфейса. Ну или третий вариант - индексированные связанные списки с составным ключом. Все в базе, мужик - 1, женщина -2. Пришел мужик - отсекается все, что не 1. Дальше по годам его, или по профессии, или еще что. В конце остается только то, что соответствует выстроенному таким образом ключу. Конкретно нужно, вообще отвечать сложно. |
Автор: SaDFromSpb 24.11.2007, 13:27 | ||||
Так может у тебя основная проблема не в том, как на лету интерфейс создавать, а как организовать выборку из множества его вариантов. Типа, в зависимотси от ответа, решаем, какой именно из всех существующих вопросов (оформленных в виде GUI, например) должен быть следующим. И просто не охота делать через switch? |
Автор: Alenka_ 25.11.2007, 20:53 |
И снова здравствуйте! ![]() Прав HistoryEarth, вариант с деревом и списками рассматривается. Это собственно то, что я знаю. Я хотела узнать, может как нибудь еще можно решить задачу выбора данных, зависящих от предыдущего выбора... Ну, допустим, мы выбрали данные, как дальше их предъявлять? Какие способы? (На этапе построения интерфейса не известно какие данные будут предъявляться). |
Автор: SaDFromSpb 26.11.2007, 03:31 |
Alenka_, В таком случае, смотри в сторону экспертных систем. Есть там такой раздел, называется "продукции". |
Автор: SaDFromSpb 26.11.2007, 11:54 |
Вернее, если память не изменяет, существуют, так называемые "продукционные экспертные системы". Там, конечно, много мути лишней, но похожая задача по организации выбора следующих порций тоже решается. |
Автор: Alenka_ 26.11.2007, 22:44 |
SaDFromSpb, спасибо посмотрю! А по динамическому интерфейсу кто-нибудь подскажет? Мне бы пример... В Java, значит, можно сделать такое через события или сигналы? Используя MVC? Т.е. разделить программу на модули, один будет отвечать за подготовку данных, другой за отображение, причем, во время работы программы будет возможно изменение отображения, третий будет получать данные от пользователя. Это, как я понимаю, моделеориентированное построение интерфейса. Существует еще построение на основе онтологий. Я, правда, не до конца поняла, чем оно отличается от моделеориентированного... Еще нашла http://nit.miem.edu.ru/2005/section4/3.htm. Что-то подобное я и хотела здесь услышать... Это-то я нашла, только не поняла до конца, какие же общие методы построения динамического интерфейса существуют. Последнее, например, похоже на реализацию какого-то общего метода. Т.е. частный случай. Хотелось бы теории, что-ли... Может подскажете пример систем с динамическим интерфейсом, например, те же опросники, чтобы там, например, вопросы формировались обходя дерево, или еще как, и было несколько вариантов последовательностей вопросов? |
Автор: Cycle 21.12.2007, 23:26 | ||
Если я правильно понял вашу задачу. То я бы пошел следующим путем: Разработал бы xml-структуру Ваших тестов. (Можно использовать любой другой стандарт или формат). Тогда Вам достаточно написать хороший парсер, который бы выбирал нужные вопросы в зависимости от ситуации. Кстати один и тот же xml-файл может быть использован как для GUI так и для Web-интерфейсов. А лепить структуру тестов на С++, ИМХО, не эффективно, так как этот язык не самый лучший для данных задач, учитывая что тесты, возможно, будут усовершенствоватся ещё много-много раз.
Я бы рекомендовал все-же xml просто потому что для него написаны парсеры почти для всех языков. |
Автор: Alenka_ 27.12.2007, 00:46 |
Вопрос-то не в том ОТКУДА выбирать данные и КАК их хранить... А в том, КАКИМИ способами выбирать их оттуда... Но, спасибо за внимание к моим вопросам и проблеме. ![]() |
Автор: Cycle 13.1.2008, 10:51 |
Если идет речь о том КАКИМ способом выбирать данные из xml, то во вложенном файле есть пример реализации фотоальбома в html (точнее в hta). При закрытии программа сохраняет данные в xml, при открытии загружает оттуда. Программу следует смотреть в блокноте. Пример очень маленький. Задействована стандартная компонента ActiveX, т.е. эту технологию чтения Вы сможете использовать в любом языке, программируя под Windows. |