макетов можно руководствоваться как собственным опытом, так и использовать советы от признанных практиков [6]. Итоговые прототипы обычно формируются в едином документе функционального дизайна системы. Известно множество средств моделирования пользовательского интерфейса, но автор останавливает своё внимание на бесплатном приложении Pencil. Прототип пользовательского интерфейса для функции учёта поступающих заказов представлен на рисунке 3.
Рис. 6 - Прототип формы ввода информации о заказе системы учёта
Таким образом, в данной статье приведён обзор бесплатных средств визуального моделирования, которые могут упростить работу начинающего IT-аналитика в небольших и непродолжительных проектах. Описанные программные средства могут быть рекомендованы для изучения и практического применения в высших учебных заведениях, обучающих специалистов по направлениям, связанными с информационными технологиями.
Литература
1. http://www.ariscommunity.com/aris-express
2. http://erwin.com/products/detail/ca erwin data modeler community edition/
3. Новиков Ф.А., Иванов Д.Ю. Моделирование на UML. Теория, практика, видеокурс. - СПб.: Профессиональная литература, Наука и Техника, 2010. - 640 с.: ил. + цв. Вклейки (+ 2 DVD).
4. Коберн А. Современные методы описания функциональных требований к системам. - М.: Лори, 2011. - ISBN 0-201-70225-8, ISBN 5-85582-152-8
5. http://staruml.sourceforge.net/en/
6. Влад В. Головач. Дизайн пользовательского интерфейса2. Искусство мыть слона. - 2009. - 94 с., http://uibook2.usethics.ru/uibookII.pdf
7. http://pencil.evolus.vn
УДК 004.4'2
ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ КАРКАС ДЛЯ ПРЕДМЕТНОЙ ОБЛАСТИ ИГРОВОГО ЭЛЕКТРОННОГО ОБУЧЕНИЯ НА ОСНОВЕ РАЗВИВАЮЩИХ «ВОПРОС-ОТВЕТНЫХ» ЛИНГВИСТИЧЕСКИХ ЗАДАЧ1
Гусс Святослав Владимирович, аспирант/ассистент, Омский Государственный университет им. Ф.М. Достоевского, Россия, Омск, [email protected]
Введение
В предлагаемой статье представлено описание работы с объектно-ориентированным
1
Статья рекомендована к опубликованию в журнале "Информационные технологии"
47
каркасом поддержки занятий лингвистической направленности в игровой форме. Цель -продемонстрировать результаты использования технологий объектно-ориентированного проектирования в рамках создания и детализации объектно-ориентированного каркаса (object-oriented framework), расширяемого программного элемента повторного использования.
1. Каркас программных компонентов поддержки занятий лингвистической направленности
Каркас - «набор взаимодействующих классов, составляющих повторно-используемый дизайн для конкретного класса программ» [1]. Каркас программных компонентов поддержки занятий лингвистической направленности в игровой форме, предлагаемый вашему вниманию, в своём составе имеет набор взаимосвязанных и взаимодействующих классов предметной области игрового электронного обучения, на основе развивающих «вопросответных» лингвистических задач. Подробнее о проблеме образования с помощью лингвистических задач и их представлением в форме игры можно ознакомиться в работах [2], [3]. О деталях внутреннего устройства и функционирования каркаса можно узнать в [4], [5]. О том, зачем использовать всё это в процессе разработки приложений, описано в [6], [7]. В настоящей работе предлагается описание того, как использовать механизмы, применимые в рамках объектно-ориентированного конструирования, для создания функционирующих компонентов на основе каркаса. Классы каркаса представлены на рис. 1.
Каркас хорошо подходит для создания компонентов игровых лингвистических задач типа «вопрос-ответ». В нём содержится ряд элементов, реализующих концепции предметной области, перечисленных ниже.
Язык (LanguageOfParticipants).
Алфавит (Alphabet) - набор литер выбранного языка.
Лексемы - элементы словаря (KnowledgeHolder.Vocabulary), могут быть отфильтрованы по длине, либо начальной литере.
Роль - определённое представление поведения в процессе решения задачи. Виды ролей: соперник (CompetitorRole), игрок (PlayerRole), судья (UmpireRole). Действия, производимые такими методами класса GameManager, как StartGame() и MakeGameStep() происходят от лица игрока.
Задача-головоломка (WordPuzzle). Состоит из обязательного условия, начального условия и секрета. Обязательное условие (CompulsoryCondition) - то, без чего невозможно решение задачи. В реализации каркаса этот элемент представлен в виде строковой переменной, формат и логика обработки которой должна предусматриваться создателем задачи. Начальное условие и секрет также представлены в виде строковых переменных и соответственно предполагают создание логики их обработки и интерпретации.
Начальное условие (InitialCondition) - то с чего следует начинать процесс решения.
Ответ - действие соперника по отношению к игроку.
Вопрос - действие игрока по отношению к сопернику. Ответы и вопросы - это элементы диалога, сообщения которыми они обмениваются. В листинге 2 (приводится далее), в методах VerifyQuestionLogic и GetAnswerLogic представлены точки расширения, которые требуют определения логик проверки вопросов и выдачи соответствующего ответа.
В рамках логики проверки вопросов (VerifyQuestionLogic) необходимо выдать результат обработки вопроса (QuestionVerificationResult). Результат может быть следующим: корректный вопрос, некорректный вопрос, повторный вопрос.
В рамках логики ответа на вопрос (GetAnswerLogic) необходимо указать состояние решения задачи (GamePuzzleState). Состояния решения задачи: почти решена, решена, не решена.
Процесс решения. Состояние процесса решения: активный, неактивный. Если задача решена полностью, логика каркаса переводит процесс в неактивное состояние. Правила
48
(GameRules). Объекты класса следят за исполнением логики проверки вопросов (VerifyQuestionLogic).
Шаг. В рамках процесса решения задачи шаг представляет собой последовательность действий - задать вопрос, получить ответ. Статистика шагов (StepsStatistics). Логика каркаса фиксирует каждый шаг в рамках статистики. Статистика учитывает: состояния решения задачи, временные отметки, вопросы.
f PlayerQuestionsCatoher
Class 7
El Properties
rM Items
El Methods
Add
k )
GamePuzzleStatesCatcher
Class
7
El Properties iff* Items El Methods ^ Add
TimeCatcher
Class 7
El Properties
iff* Items
El Methods
Add
k )
Questions
StepsStatistics
Class
States
TimeStamps
WordPuzzle
Class
El Properties
iff* CompulsoryCondltlon iff* InltlalCondltlon iff* Secret
^ Puzzle ^
8
^ Statistics
Puzzl eState
GameManager
Class
-t> G a m eCo m petert
El Methods
MakeGameStep StartGame El Events
$ QuestlonProcessed
/
Umplr
UmpireRole
Class
El Methods
StartGame
Game PuzzleState (?v
Enum
NotCompleted AlmostCompleted Completed
Competitor
^ Umpire
Game Com petent
Class
El Methods
GameCompetent
к
^ Language
Language Of Participants
Enum
English
Russian
HolderOfKnowledge
Tjjj* Umpire
PI aye
flf PI aye
^ Competitor
CompetitorRole
Class
El Methods
GetAnswer
PlayerRole
Class
El Methods
MakeStep
к
Player
iff* Competitor
CharacterSet
Knowledge Holder
Class
7}jf Rule
GameRules
Class
к
Alphabet
Class
El Properties iff* Characters
к
7
&}
7
^ AnswerStrategy
El Properties
iff1 AllowRepeatQuestions El Methods
^ VerifyPlayerQuestion
El Properties iff* Vocabulary'
El Methods =-<> AddWord FmdWord
Ф G etWord sByParams,,.
4___________________________у
Ш VerlfyQu estlon Strategy
IGetAnswerStrat... Kj
Interface
El Methods
GetAnsivsr
)
IVe rrfyQuestionStratecjy
Interface
El Methods
Рис. 1 - Диаграмма классов каркаса
В листинге 1 представлен код шаблона проекта игрового компонента, позволяющий облегчить разработку компонентов с помощью каркаса. В листинге 2 представлен код, в котором этот шаблон реализуется. Цель программного кода, предложенного в листингах -выделить точки расширения повторно-используемой части каркаса.
Листинг 1. Код шаблона проекта
using System;
using GSEducation.AQLPGFramework;
namespace GSEducation.AQLPGFramework.DetalizationTemplate{
//2 step - "manager class" creation by inheritance public partial class TemplateGameManager: GameManager{ //"default constructor" creation public TemplateGameManager()
: base(LanguageOfParticipants.Russian, true){ //6 step - invoke "game initialization method" InitializeGame();}
49
//4 step - "customizable constructor" creation public TemplateGameManager(LanguageOfParticipants language, bool allowRepeat) :
base(language, allowRepeat){
//6 step - invoke "game initialization method"
InitializeGame();}
//5 step - "game initialization method" implementation private void InitializeGame(){
//14 step - invoke "make puzzle method"
MakePuzzle();}
//13 step - overridable "make puzzle method" implementation protected virtual void MakePuzzle() {
throw new NotImplementedException();}}
//7 step - "get answer strategy class" creation by interface public partial class TemplateGetAnswerStrategy : IGetAnswerStrategy{
//9 step - "customizable constructor" creation + arguments public TemplateGetAnswerStrategy(GameManager manager){ gameManager = manager;} private GameManager gameManager;
//8 step - implement "get answer interface"
public GamePuzzleState GetAnswer(string[] question, out string answer){ GamePuzzleState puzzleState = GamePuzzleState.NotCompleted; answer = "";
//step 18 - invoke "get answer logic method" puzzleState = GetAnswerLogic(question, out answer); return puzzleState;}
//step 17 - "get answer logic method" implementation
protected virtual GamePuzzleState GetAnswerLogic(string[] question, out string answer){
throw new NotImplementedException();}}
//10 step - "verify question strategy class" creation by interface public partial class TemplateVerifyQuestionStrategy :
IVerifyQuestionStrategy{
//12 step - "customizable constructor" creation + arguments public TemplateVerifyQuestionStrategy(GameManager manager){ gameManager = manager;} private GameManager gameManager;
//11 step - implement "verify question interface"
public QuestionVerificationResult VerifyQuestion(string[] question){ QuestionVerificationResult result = QuestionVerificationResult.Correct;
//20 step - invoke "verify question method" VerifyQuestionLogic(question, out result); return result;}
//19 step - "verify question logic method" implementation protected virtual void VerifyQuestionLogic(string[] question, out
result){
throw new NotImplementedException();}}
}
Листинг 2. Предоставление точек расширения
using System;
using GSEducation.AQLPGFramework;
namespace GSEducation.AQLPGFramework.DetalizationTemplate{ class CustomizedGameManager : TemplateGameManager{
public CustomizedGameManager(LanguageOfParticipants language, bool allowRepeat)
: base(language, allowRepeat){} public CustomizedGameManager()
: base(){ }
protected override void MakePuzzle(){
//15 step - "verify question strategy" initialization Rules.VerifyQuestionStrategy =
50
new CustomizableVerifyQuestionStrategy(this);
//16 step - "get answer strategy" initialization Competitor.AnswerStrategy = new
CustomizableGetAnswerStrategy(this);
//VARIABLE PART - EXTENSION POINT
//--------------------------------
//--------------------------------
}
private class CustomizableVerifyQuestionStrategy : TemplateVerifyQuestionStrategy
{
public CustomizableVerifyQuestionStrategy(GameManager manager)
: base(manager){ }
protected override void VerifyQuestionLogic(string[] question, out QuestionVerificationResult verificationResult){
verificationResult = QuestionVerificationResult.Correct; //VARIABLE PART - EXTENSION POINT
//--------------------------------
//--------------------------------
}}
private class CustomizableGetAnswerStrategy : TemplateGetAnswerStrategy{ public CustomizableGetAnswerStrategy(GameManager manager)
: base(manager){ }
protected override GamePuzzleState GetAnswerLogic(string[] question, out string answer){
GamePuzzleState puzzleState = GamePuzzleState.NotCompleted; answer = "";
//VARIABLE PART - EXTENSION POINT
//--------------------------------
//--------------------------------
return puzzleState;}}}
}
Места в листинге 2, обозначенные как «VARIABLE PART», представляют собой точки расширения, в которые разработчик может вставлять изменяемый код (активно пользуясь элементами каркаса). Листинг 1 содержит код шаблона проекта, который абсолютно не требует изменений, он не содержит точек расширений и служит своеобразным проектным решением, способствующим более комфортной работе по созданию конечного компонента на основе каркаса. В листинге 2 для каждой новой разработки следует изменять название класса «CustomizedGameManager» на более подходящее в конкретном контексте имя.
2. Лингвистическая задача «What Letter I Thought»
Описание задачи. Условие - случайным образом загадывается буква, которую необходимо отгадать игроку. Игра состоит из двух этапов. На первом этапе игрока просят последовательно называть слова, в которых предположительно содержится загаданная буква. Если при очередном вопросе игрока, выраженном в виде требуемого слова, обнаружится, что это слово содержит загаданную букву, игрок переводится на следующий этап. На этом этапе он должен задавать вопросы в виде букв. Т.е. первый этап завершается тогда, когда игрок находит слово, в котором есть загаданная буква, теперь на основе этого, игрок должен найти, что же это за буква. Когда буква будет найдена, задача считается решенной.
Логика создания задачи-головоломки (точка расширения метода MakePuzzle() в листинге 2) заключается в следующем. Необходимо выбрать случайным образом букву, которую игрок должен угадать. В данном случае можно воспользоваться такими элементами предметной области, как GameCompetent.CharacterSet.Characters и
CompetitorRole.Puzzle.Secret (Листинг 3). Случайным образом выбирается буква из алфавита текущего языка. Её значение становится секретом задачи-головоломки.
Логика стратегии проверки вопроса игрока (точка расширения метода VerifyQuestionLogic(..)) представлена в листинге 3. После того, как игрок сделал ход, задал
51
вопрос, предложив слово, происходит его проверка в соответствии с текущим этапом игры. Если состояние решения задачи на данный момент - ещё не решена, значит сейчас первый этап, если - почти решена, то второй. На первом этапе вопрос проверяется по словарю, на втором - по алфавиту. Выносится соответствующее решение о корректности или некорректности заданного вопроса.
Логика стратегии выдачи ответа (точка расширения метода GetAnswerLogic(..)) представлена в листинге 3. Суть такова - анализируется вопрос игрока. Если его вопрос, он же - требуемое слово (либо буква, если игрок на втором этапе), содержит секрет задачи, т.е. букву, которую нужно угадать, то в зависимости от того, на каком этапе находится игрок, решается, перевести его на второй этап или же поздравить с победой. На первый взгляд, кажется, что игрок на первом же этапе может назвать требуемую букву, не переходя на второй этап. Однако это невозможно, т.к. вышеописанная логика стратегии проверки вопроса игрока на первом этапе сравнивает его вопрос на принадлежность словарю. А словарь, по крайней мере, входящий в реализацию описываемого каркаса, не содержит слов длиною в одну букву.
Листинг 3. Лингвистическая задача «What Letter I Thought»
MakePuzzle() extension point:
Random randomizer = new Random();
List<string> alphabet = CharacterSet.Characters; if (alphabet != null){
int currentIndex = randomizer.Next(0, alphabet.Count - 1); if (alphabet.Count > currentIndex){
Competitor.Puzzle = new WordPuzzle();
Competitor.Puzzle.Secret = alphabet[currentIndex];}} VerifyQuestionLogic(..) extension point:
verificationResult = QuestionVerificationResult.Incorrect;
//1st stage
if (gameManager.Umpire.PuzzleState == GamePuzzleState.NotCompleted){ if (gameManager.HolderOfKnowledge.FindWord(question[0]))
verificationResult = QuestionVerificationResult.Correct;}
//2nd stage
if (gameManager.Umpire.PuzzleState == GamePuzzleState.AlmostCompleted){ if (question[0].Length == 1 &&
gameManager.CharacterSet.Characters.Contains(question[0])){ verificationResult = QuestionVerificationResult.Correct;}} GetAnswerLogic(..) extension point:
if (question[0].Contains(gameManager.Umpire.Competitor.Puzzle.Secret)){ if (gameManager.Umpire.PuzzleState == GamePuzzleState.NotCompleted) puzzleState = GamePuzzleState.AlmostCompleted; else if (gameManager.Umpire.PuzzleState == GamePuzzleState.AlmostCompleted) puzzleState = GamePuzzleState.Completed;}
else{
if (gameManager.Umpire.PuzzleState == GamePuzzleState.AlmostCompleted && question[0].Length == 1){
puzzleState = GamePuzzleState.AlmostCompleted;}
}
Выводы
В работе представлен процесс детализации объектно-ориентированного каркаса. В качестве примера приводится реализация алгоритма простой лингвистической задачи в рамках этого каркаса, для демонстрации особенностей программного кодирования. В листингах 1 и 2 даётся проектное решение, позволяющее сделать максимально комфортным процесс детализации каркаса, путём выделения точек расширения.
Реализация каркаса зарегистрирована в отраслевом фонде электронных ресурсов [8].
Литература
1 Приёмы объектно-ориентированного проектирования. Паттерны проектирования / Гамма Э. [и др.]. СПБ.: Питер, 2008. 366 с.
52
2 Гусс С.В. Элементы повторного использования для программных систем учебного назначения. Концептуальное проектирование и анализ // Математические структуры и моделирование. Омск: ООО «УниПак», 2009. Вып. 20. С. 78-92.
3 Гусс С.В. Использование компьютерных лингвистических игр в процессе обучения // Открытое образование. Москва: «CAPITALPRESS». 2010. № 1. С. 18-29.
4 Гусс С.В. Высокоуровневая модель семейства программных компонентов для поддержки занятий в игровой форме // Математические структуры и моделирование. Омск: «Омское книжное издательство». 2010. № 21. С. 44-54.
5 Гусс С.В. Модель каркаса программных компонентов поддержки занятий лингвистической направленности в игровой форме // Прикладная информатика. Москва: ООО «Маркет ДС Корпорейшн», 2010. Вып. 3 (27). С. 62-77.
6 Гусс С.В. Проблема повторного использования в разработке семейства игровых программных систем учебного назначения // Вестник Омского университета. Омск: Издательство ОмГУ им. Ф.М. Достоевского. 2010. №4. С. 147-149.
7 Гусс С.В. Пакет вспомогательных средств для построения семейства программных систем в определённой предметной области // Программная инженерия. Москва: «Новые технологии». 2011. №1. С. 25-33.
8 Свидетельство о регистрации электронного ресурса ОФЭРНиО Государственной академии наук № 15369. Каркас для создания программных компонентов поддержки занятий лингвистической направленности в игровой форме / Гусс С.В. (Российская Федерация); дата регистрации: 12.02.2010.
УДК 681.513
АВТОМАТИЗИРОВАННАЯ ИНФОРМАЦИОННАЯ СИСТЕМА «ДЕКАНАТ»
Мазорчук Мария Сергеевна, к.т.н., доцент, Национальный аэрокосмический университет им. Н.Е. Жуковского «ХАИ», Украина, Харьков, mazorchuk [email protected] Тыжненко Юлия Вячеславовна, Национальный аэрокосмический университет им. Н.Е. Жуковского «ХАИ», Украина, Харьков, [email protected]
Введение
Одним из наиболее перспективных способов эффективного управления образовательным процессом является внедрение информационно-коммуникативных технологий в процесс менеджмента на базе международных стандартов [1,2].
Развитие сферы информационных технологий дало толчок к усовершенствованию всех сфер жизнедеятельности общества. Достаточно актуальным является вопрос автоматизации учебного процесса, в частности, автоматизации процессов управления в высших учебных заведениях (вузах). Цель автоматизации управления - получить удобные средства мониторинга, анализа и отображения основных процессов приема студентов, административного управления, подготовки и выпуска специалистов университета (института, академии).
Следует отметить, что одной из основных и трудоёмких в работе вуза является деятельность деканата.
Работникам деканатов приходится выполнять огромный объем рутинной работы по учету контингента студентов, обеспечению учебного процесса, предоставлению информации в различные подразделения вуза. При этом всю информацию необходимо представлять в различных форматах. При этом необходимо осуществлять прогноз успеваемости студентов с целью эффективного контроля за процессом обучения и своевременного реагирования на возможные негативные результаты (низкие показатели абсолютной и качественной успеваемости). Таким образом, необходимость внедрения информационной системы, автоматизирующей основные функции образовательного процесса, является актуальной.
Прежде чем внедрять автоматизированную информационную систему (АИС) в деканате, как и в любом другом подразделении вуза, необходимо определить основные
53