УДК 004.896
А. Н. АФАНАСЬЕВ, Н. Н. ВОЙТ
РАЗРАБОТКА КОМПОНЕНТНО-СЕРВИСНОЙ ПЛАТФОРМЫ ОБУЧЕНИЯ: ДИАГРАММЫ КЛАССОВ ПРОГРАММНОГО КОМПОНЕНТА СЦЕНАРИЯ НА ЦМЬ-ЯЗЫКЕ
Разработан программный компонент реализации сценария с помощью языка ИМЬ в диаграммах классов.
Ключевые слова: кибернетика, интеллект, САПР, системы обучения.
Введение
В продолжение к предыдущей статье («Вестник УлГТУ», №1, 2012) разработаны UML-диаграммы классов программного компонента сценария. Диаграммы классов компонента описывают объектно-ориентированную модель с помощью классов, атрибутов и функций, обеспечивают успешное написание кода на языке программирования Java.
Диаграммы классов
В компоненте сценария содержатся следующие основные классы:
ClientModule, mainWindowClass,
multiGraphsClass [1-3].
На рис. 1 представлена диаграмма класса ClientModule, обеспечивающего связь сервиса компонента сценария с сервером обучающей системы. Диаграмма содержит атрибуты (Attributes) и функции (Operations). К атрибутам относятся поля _coreApi - клиентская часть сервера, _graphsService - сервис компонента сценария, COMPONENT_NAME - название компонента. К функциям относятся следующие: getGraphsService - запрос на получения сервиса компонента сценария;
getUser - запрос на получение профиля пользователя;
getCoreApi - запрос на получение клиентской части сервера;
setCoreAPI - назначение клиентской части сервера;
getName - запрос на получение названия компонента;
getDescription - запрос на получение описания компонента;
getAuthor - запрос на получение имени автора компонента;
§е^егеюп - запрос на получение версии компонента;
getNeedServerSide - запрос на получение подтверждения на связь с сервером;
getRoleAccess - запрос на получение роли пользователя;
getModuleType - запрос на получение типа пользовательского интерфейса.
ClientModule
Attributes
package ICIientCoreAPI coreApi
package Graphs-Service graphsSeivice
package String COMPONENT NAME = "GraohsServer"
Operations
public GrsphsService qetGraphsSen/icef )
public User oetüserf ?
public ICIientCoreAPI qetCoreAoiC i
••••••••I a
• • • • it
public Object getModuleC!ass(••. , pubüc void sstCoreAPK IClientGoreAPI api) public Siring; gstNamsf •):
. i . - •• »
— —J -a —• — • • »• • • I
rz-^jr. i/«
— • : t - >«—
© Афанасьев A. H., Войт H. H., 2012
Рис. i. Диаграмма класса ClientModule компонента сценария
На рис. 2 представлена диаграмма отношений зависимости, определяющая виды зависимости классов, типы данных.
Класс ClientModule содержит интерфейс IClientModule и типы данных ModuleType, GraphsService, User, ICIientCoreA.pi, Boolean, Object, String.
На рис. 3 представлена диаграмма класса mainWindowClass, обеспечивающего функциональность графического пользовательского интерфейса.
К атрибутам относятся элементы графического пользовательского интерфейса:
A ttrfo&rais
private JToolBar jTooIBarl = new JToolBarO
public JToggleButton jToggleButtorvl AddVertex = new JToggleButtonO public JToggleButton JToggleButtonAddControlN/ertex = new JToggleButtonO private double koefWidth = 1 private double koefHeight = I
private int width = (int)(getToolkitO-getScreenSizeO.getWidthQ ~ koefWidth)
private int height = (int)C(getToolkitO. getScreenSizeO-getHeightO - 30) ~ koefHeight)
private JMenuBar MenuBarl = new JMenuBarO
private Jlvlenu menul = new JMenuQ
private JMenu menuService = new JIvlenuQ
private JMenu menu3 = new JMenuQ
private JScrollPane scrollPanel = new JScrollRaneO
public JScrollPane treeScroll
private DefaultMutableTreeNode root
private DefaultTreeModel model
package Jfvlenultem menulteml = new JMenultemO package Jlvlenultem menultemSaveXML = new JMenultemO package JMenultem menultemLoadXML = new JMenultemO package JMenultem menultem2 = new JMenultemO package JMenultem menultem3 = new JMenultemO package JMenultem menultem4 = new JMenultemO package JMenultem menultemo = new JMenultemO package JMenultem menulternS = new JMenultemO package JMenultem menultemBuildHTML = new JMenultemO package String saveFileContent
package JButton jButton20penFile = new JButtonO package JButton jButton3SaveFile = new JButtonO package JButton jButtonNewDocument = new JButtonO package Component component'1 = Box. createHorizontalStrut(8) package Component components = Box.createHorizontalStrut(8) package JButton jButtonl PlayScen = new JButtonO package JPanel StatusBar = new JPanelQ package JLabel jLabell = new J La be 10
package BorderLayout borderLayoutl = new BorderLayoutQ package JLabel statusText = new JLabelO package JComboBox scaleFeildBox = new JComboBoxQ package Component hstrutl = Box.createHorizontalStrut(S) package Component hstrut2 = Box. createHorizontalStrut<3) package JButton gridColor = new JButtonO
package Component hstrutS = Box. createHorizontalStrut(B) package JComboBox styleText = new JComboBoy() package JComboBox sizeText = new JComboBoxQ package JButton colorText = new JButtonO
package BorderLayout borderLayout2 = new BorderLayoutQ private String loadedFileName = "" private String loadedFileNamePath = "" package JMenultem menultem7 — new JMenultemO package JMenultem jMenultem'l = new JMenultemO package JMenultem about = new JMenultemO
public mainWindowClass( )
public void addReferenceVertex( String filePath. String fileName )
public void wtndOwOpened( WindowEvo-nt e )
public void windowClosing( WindowEvent e )
public void windowClosed( WindowEvent e )
public void window!conified( WindowEvent e )
public void windowDeiconified( WindowEvent e )
public void windowActivated( WindowEvent e )
public void windowDeactivated( WindowEvent e )
private void jblnitif )
private void initSizeText( )
private void initSty leText( )
private void initScaleFeildBox( )
public void jToggleButtonAddControl\/ertex_actior.Performedi ActionEvent e )
public void jToggleButtonl __actionPeiformed( ActionEvent e )
public void menultem2_actionPeiform&d( ActionEvent e )
public void menulteml_actionPeiformed( ActionEvent e >
public void menultemLoadXML_actionPerformed( ActionEvent e )
public void menultem6__actionPerformed( Act ion Event e )
public painter getjpaintei 1 ( )
private String getCurrentDii ictoi y ( )
private void showSavedDialog( String title )
private EntityGraph ConveitMultiGiaphToEntityGraph( EntityGraph egr ) private void showLoadDialog( String title )
public void menultem3__actionF'erformed( Action Event e )
public void menu!temNewDoc__actionPerfoi med( ActionEvent e ) private void clearTree( ) public void public void public void public void public void public void public void public void public void public void public void public void public void public void
menultem5_actionPeiformad( ActionEvent e ) Menul __actionPeiformed( ActionEvent e ) jButton3SaveFile_actionPerformed( ActionEvent e } jButton20penFile_actionPerformed( ActionEvent e ) jButtonNewDocument_actionPerformed( ActionEvent © ) jToggleButtonl PlayScen__actionPerformed( ActionEvent e ) scaleFeildBox_act»onPerformed( ActionEvent e ) gridColor__actionPeiformed( ActionEvent e ) jComboBox I _actionPerformed< ActionEvent e ) colorText_actionPerformedf ActionEvent e ) sizeText_actionPerformed( ActionEvent e ) menulternZ___actionPerformed( ActionEvent e } jMenultem2_actionPerformed( ActionEvent e ) jMenulterril __actionPeifoi med( ActionEvent e )
Рис. 2. Диаграмма отношений зависимости класса ClientModule
Fnc. 3. Диаграмма класса main WindowClass компонента сценария
«datatype»
тщшт
V-' v. V •• • •
<datatype» S3User
Cli@ntM$dule
'; Attributes
package IClientCoreAPI coreApi
package GraphsSeryice _oraphsService
package String COMPONENTJ4AME = "GraphsSercer"
ч-ч-^-у-
Operations
public GraphsSetvice qetGrgphsSenfice( ) public User geiUserf ) public IClientCoreAPI getCor&Apif ) public Object getModuleClass( ) public void setCGreAPI(; IClientCoreAPI api) public String getName{ ) public. String. getDescriptjonf ) public String gefAuihor( )
hiihlir ¡¿friniri rioiVotfcinnf" V
xi - iv
т
I
«interface»
f@ iciientMociuis
Attributes .....
rttl- r.' •t.m . U i.::
«datatype» GS JCIisniSoraAPI
«datatype» .Ш Boolean
«datatype» ¡^^oduIeType
jToolBarl - панель инструментов; jToggleBuitonl Add Vertex - кнопка добавления вершины сценария;
jToggieButtonAddControlVertex - кнопка добавления контрольной вершины сценария; koefWidth, koeffieighi - коэффициенты масштабирования экрана соответственно по горизонтали и вертикали;
width, height - ширина и высота экрана соответственно;
MenuBarl - панель главного меню;
menul - элемент панели главного меню (файл);
menu Service - элемент панели главного меню
(инструменты);
тепиЗ - элемент панели главного меню (помощь);
scrollPanei - панель представления графа со скроллингом;
treeScroll - панель списковой структуры вершин со скроллингом;
root - корень списочного дерева вершин; model - элемент списка вершин; menultem 1, menuitemSaveXMLs
memiltemLoadXML, menultem2, menu Item 3, menultem4, menultem5, menultem6,
menuItemBuildHTML. menultem?, jMenuIteml, about - элементы панелей главного меню (файл, инструменты и помощь); saveFileContent - содержание документа; jButton20penFile, jButton3SaveFiie, jButtonNewDocument, j Button 1 Play Seen - кнопки на панели инструментов;
component 1, component2, hstrutl, hstrut2, hstrut3 -горизонтальные разделители панелей; StatusBar, statusText - строки состояния программы;
j Label i, borderLayoutl, borderLayout2 - метки надписей;
scaieFeildBox - поле с числом масштаба; gridColor - поле выбора цвета сетки рабочего поля;
styleText - поле выбора стиля текста надписей; colorText - поле выборы цвета текста надписей; loadedFileName - название сценария; ioadedFileNamePath - название пути.
К функциям класса относятся: mainWindowClass - конструктор класса; addReferenceVertex - добавление ссылочной вершины;
windowOpened, windowCIosing, windowClosed, windowiconified, windowDeiconified, windowActivated, windowDeactivated - операции работы с окном;
jblnit - инициализация переменных объекта класса;
initSizeText - инициализация кегля текста; initStyleText - инициализация стиля текста; initScaleFeiidBox - инициализация масштаба рабочего поля;
jToggleButtonAddControIVertex_actionPeriormed - добавление контрольной вершины; jToggIeButtonl_aciionPerformed - добавление вершины;
menuItem2_actionPerformed, menultem l_actionPerformed, menuItemLoadXMLactionPerformed, menu Item 6_act i on Perform ed, m en u lté m 3 act i onPerform ed, men ultemN ewDoc_action Performed, menuItem5_actionPerformed5 MenulactionPerformed - обработки соответствующих элементов меню;
getjpainterl - получение компонента отображения элементов рабочего поля; getCurrentDirictory - получение текущего пути; showSavedDialog - вызов диалога сохранения сценария;
ConvertMultiGraphToEntityGraph - преобразование сценария;
showLoadDialog - вызов диалога загрузки сценария;
clearTree - вызов очистки списка элементов; jButton3SaveFile_actionPerformed, Button20penFile_actionPerformed, ButtonNewDocument_actionPerformed, jToggleButton 1 PlayScen_actionPerformed, scaleFei ldBox_actionPerformed, gridColor_actionPerformed, j ComboBox 1 _actionPerformed, colorTextactionPerformed, sizeText_actionPerformed, menuItem7_actionPerformed, jMenuItem2_actionPerformed, jMenuIteml_actionPerformed - вызовы обработчиков событий для соответствующих элементов панели.
На рис. 4 представлена диаграмма класса multiGraphsClass, содержащего структуру (атрибуты) и методы (функции) модели сценария.
К атрибутам относятся следующие элементы. Name - имя модели; idjnodel - номер модели; ActiveVertexIndex - номер активной модели; StartVertexIndex - номер стартовой (начальной) вершины;
Model - структура узла;
is Added VertexOn - признак включённого режима добавления вершины;
isAddedControlVertex - признак включённого режима добавления контрольной вершины; isLinkedVertexOn - признак включённого режима добавления дуги;
К функциям класса относится: multiGraphsClass - конструктор класса; getModel - получение структуры узла; setModel - назначение структуры узла; setAddedMode - включение режима добавления вершины (узла) сценария;
setAddedControlVertex - включение режима добавления контрольной вершины сценария; isAddedControlVertex - запрос на получение признака добавления контрольной вершины; setNotAddedMode - выключение режима добавления вершины;
isAddedMode - запрос на получение признака добавления вершины;
setLinkMode - включение режима добавления дуги;
setNotLinkMode — выключение режима добавления дуги;
isLinkMode - запрос на получение признака добавления дуги;
getVertexCount - получение числа вершин;
get Active Vertex - получение активной вершины;
setStartVertex - назначение стартовой вершины;
add Vertex - добавление вершины;
addEdge - добавление дуги;
paintVertexies - рисование вершин на рабочем
поле;
paintEdges - рисование дуг на рабочем поле; initGraph - инициализация переменных графа; setEdgeLocation - назначение координат дуги; jblnit - инициализация переменных класса; getClickedVertex - получение выбранной мышью вершины;
getClickedVertexld - получение номера выбранной мышью вершины;
getVertexByName - получение вершины по её имени;
getClickedEdge - получение выбранной мышью дуги;
setActiveVertex - назначение активной вершины; startElement - назначение надписи стартовой вершины;
endEIement - назначение надписи конечной вершины;
characters - форматирование строки; addTreeltem - добавление названия вершины в список вершин;
getVertexByld - получение вершины по её номеру.
Заключение
На UML-языке описаны классы разработки программного компонента реализации сценария на концептуальном уровне с целью использования настоящих диаграмм при программировании исходного кода и внесения изменений.
_gj multiGraphsCBass_
Attributes
public String Name = M"
public int id_model
package int ActiveVertexIndex = 0
package int StarfcVertexIndex = 0
private Model model = null
private boolean isAddedVertexOn = false
private boolean isAddedControlVertex = false
private boolean isLinkedVertexOn = false
Operations
public multiGraphsClass( mainWindowClass mWindow) public Model getModelf ) public void setModel( Model rn ) public void setAddedMode( )
public void setAddedControfVertex( boolean value )
public boolean isAddedControlVeriex( )
public void setNutAddedMode( )
public boolean isAddedMode( )
public void setUnkMode( )
public void setNotLinkMode( }
public boolean isLinkMode( )
public int getVertexCountf )
public jsimpleVertex getActiveVertex( )
public void seiStartVertex( int NewStartVertexIndex )
public void addVertex( jsimpleVertex vertex )
public void addEdge( int Vertexlndex )
public void paintVertexies( Graphics2D g )
public void paintEdgesi Graphics2D g )
public void initGraph( )-■•.-
public void setEdgeLocation( int iajvertex, int x, int y )
private void jblnit( )
public jsimpleVertex getClickedVertex( int x, int y ) public int getClickedVertexld( int x, inty ) public jsimpleVertex getVertexByName( String name ) public jEdge getClickedEdge( int x, int y )
public void set Act iveVertex( jsimpleVertex vertex, int aciive__num )
public void startElementi String elementName )
public void endElement( String elementName )
public void character^ char buf[0..*]t int offset, int len )
private void addTreeltem( jsimpleVertex simpleVertex. painter jpainterl. int num ) public jsimpleVertex getVertexBylaY int id ) . •
Рис. 4. Диаграмма класса muliiGraphsClass компонента сценария
БИБЛИОГРАФИЧЕСКИИ СПИСОК
1. Афанасьев, А. Н. Анализ парадигм, разработка архитектуры и компокентно-сервис-ной платформы обучения: модель предметной области в диаграмматике UML-языка / А. Н. Афанасьев, H. Н. Войт /У Вестник УлГТУ. -2011. — №4. — С. 29-40.
2. Афанасьев, к. И. Разработка компонент-но-сервисной платформы обучения: диаграммы использования и деятельности программного компонента сценария на UML-языке / А. Н. Афанасьев, H. Н. Войт // Вестник УлГТУ.
-2012.-№1.- С. 66-69.
3. Voit, N. Development of intelligent mobile
learning system of CAD // Proceedings of Internationa! Conference. Interactive Systems and Technologies: The Problem of Human-Computer Interaction. - Collection of scientific papers. -
Ulyanovsk : ULSTU, 2011. - P. 100-104. ©®@«@®©&©©©©®©@©®®®®
Афанасьев Александр Николаевич, кандидат технических наук, профессор кафедры «Вычислительная техника» УлГТУ. Войт Николай Николаевич, кандидат технических наук, доцент кафедры «Вычислительная техника» УлГТУ.