Вы находитесь на страницах старой версии сайта.
Переходите на новую версию Interface.Ru

FAQ по Rational Rose RealTime



Вопрос: Как можно отобразить код, содержащийся в файлах (.cpp или .h), описывающих капсулу, протокол или класс, которые выделены на диаграмме?

Ответ: RRTEI (Rose RealTime Extensibility Interface), скрипт, текст которого приводится ниже, позволяет открывать .h и .cpp файлы для капсулы, класса или протокола выбранного на RoseRT диаграмме. Для того, чтобы добиться этого необходимо:

    1. Иметь внешний редактор, запускаемый из Rose RealTime.
    2. Иметь активный компонент.
    3. Иметь сгенерированный для этого компонента код.
    4. Иметь только один выбранный класс, протокол или капсулу.
  1. Создать скрипт:
    1. Необходимо создать директорию, куда позднее будет помещен скрипт, например, C:\Program Files\Rational\Rose RealTime\MyScripts
    2. Создать виртуальный путь к этой директории с именем MY_SCRIPTS (для справок смотри статью Defining Virtual Paths в Rose RealTime Help)
    3. Поместить скрипт в данную директорию.
  2. Создать пункт меню, при помощи которого будет запускаться скрипт
    1. Откройте файл rosert.mnu с помощью любого редактора (этот файл находится в директории C:\Program Files\Rational\Rose RealTime)
    2. Добавьте в него следующий текст

      Menu Browse
      {
      Separator
      Option "Browse Code"
      {
      RoseScript $MY_SCRIPT_PATH\RoseRT_Browse_Code.ebs
      }
      }

    3. сохраните изменения

      Далее перезапустите RoseRT, откройте какую-либо модель, убедитесь, что для нее выполняются требования пункта а. Выберите в меню "Browse > Browse Code".
      Установленный вами внешний редактор откроет .cpp и .h файлы.
      Ниже приводится текст скрипта:

      Declare Function capIsAssigned (Component As RoseRT.Component,_
      CapName As String) As Boolean
      Declare Function pathReturn (theModel As RoseRT.Model) As String
      Declare Function getPath2Files ( theModel As RoseRT.Model,_
      theComponent As RoseRT.Component ) As String

      #If UNIX Then
      Const delim = "/"
      #Else
      Const delim = "\"
      #End If

      Sub Main
      Dim theModel As RoseRT.Model
      Dim theItem As RoseRT.Classifier
      Dim theDir As String
      Dim theComponent As RoseRT.Component
      Dim theEditor As String
      Dim theDocH As String
      Dim theDocCpp As String
      Dim index As Integer

      Set theModel = RoseRTApp.CurrentModel
      Set theComponent = theModel.ActiveComponent

      'Check to see there is an active component set.
      If theComponent Is Nothing Then
      MsgBox "There is no Active component!", ebOKOnly, "Error"
      Else
      Set theItem = theModel.GetSelectedCapsules.GetAt(1)
      If theItem Is Nothing Then
      Set theItem = theModel.GetSelectedProtocols.GetAt(1)
      End If

      If theItem Is Nothing Then
      Set theItem = theModel.GetSelectedClasses.GetAt(1)
      End If

      'Check to see there is something selected.
      If theItem Is Nothing Then
      MsgBox "The selected item is not a Capsule, Protocol or Class;" & _
      " or nothing is selected!", ebOKOnly, "Error"
      Else
      'Check to see that the capsule is assigned to the active component.
      If Not capIsAssigned(theComponent, theItem.Name) Then
      MsgBox "The selected item is not part of the Active component!",_
      ebOKOnly, "Error"
      Else
      theDir = getPath2Files(theModel, theComponent)
      theDocH = theDir & theItem.Name & ".h"
      theDocCpp = theDir & theItem.Name & ".cpp"

      theEditor = ReadIni$("Rational Rose RealTime", "ExternalEditor",_
      RoseApp.GetRoseIniPath)

      'Check to see there is an external editor assigned in the options
      If theEditor = "" Then
      MsgBox "No external editor selected!", ebOKOnly, "Error"
      Else
      idH = Shell(theEditor & " " & theDocH, 1)
      idCpp = Shell(theEditor & " " & theDocCpp, 1)
      End If
      End If
      End If
      End If
      End Sub
      '====================================================================
      'This function returns true if the Capsule is assigned to the current
      ' active component, otherwise it returns false.
      Function capIsAssigned (Component As RoseRT.Component, CapName As String)_
      As Boolean
      Dim index As Integer
      Dim result As Boolean
      Dim theCol As RoseRT.ClassifierCollection
      Dim theName As String

      result = false
      Set theCol = Component.AssignedClasses

      For index = 1 To theCol.Count
      theName = theCol.GetAt(index).Name
      If theName = CapName Then
      result = true
      Exit For
      End If
      Next index

      capIsAssigned = result
      End Function 'capIsAssigned'
      ====================================================================
      'This function returns the current model full path, excluding the name of the model.
      Function pathReturn (theModel As RoseRT.Model) As String
      Dim fullName As String
      Dim thePath As String
      Dim numStr As Integer
      Dim index As Integer
      Dim revIndex As Integer

      fullName = theModel.GetFileName
      numStr = Len(fullName)
      revIndex = numStr

      For index = 1 To numStr
      If Mid(fullName, revIndex-1, 1) = delim Then
      thePath = left$(fullName, revIndex-1)
      Exit For
      Else
      revIndex = revIndex - 1
      End If
      Next index

      pathReturn = thePath
      End Function 'pathReturn'
      ====================================================================
      'This function returns the full path (excluding filenames) necessary
      ' to find the files for opening.
      Function getPath2Files ( theModel As RoseRT.Model,_
      theComponent As RoseRT.Component ) As String
      Dim theDir As String
      Dim outDir As String
      Dim codeGenDir As String
      Dim length As Integer
      Dim index As Integer

      outDir = theComponent.GetPropertyValue("C++ Generation", "OutputDirectory")
      length = Len(outDir)

      For index = 1 To length
      If Mid(outDir, index, 1) = "$" Then
      If Mid(outDir, index + 1, 1) = "@" Then
      theDir = pathReturn(theModel)
      index = index + 2
      End If

      If Mid(outDir, index + 1, 4) = "name" Then
      theDir = theDir & theComponent.Name
      Exit For
      End If
      Else
      If Mid(outDir, index, 1) = "/" Then
      theDir = theDir & delim
      Else
      theDir = theDir & Mid(outDir, index, 1)
      End If
      End If
      Next index

      codeGenDir = theComponent.GetPropertyValue("C++ Generation", "CodeGenDirName")
      If codeGenDir = "" Then
      theDir = theDir & delim & "src" & delim
      Else
      theDir = theDir & delim & "src" & delim & codeGenDir & delim
      End If

      getPath2Files = theDir
      End Function 'getPath2Files'
      ====================================================================


Bопрос: Можно ли показать в броузере выделенный на диаграмме пакет?

Oтвет: Это можно сделать при помощи RRTEI скрипта. Вначале создадим пункт меню, который будет запускать данный скрипт.
(RoseRT должен быть закрыт.)

  1. Откройте из любого текстового редактора файл rosert.mnu, он находится в директории
    C:\Program Files\Rational\Rose RealTime
  2. Добавьте туда следующий текст
    Menu Browse
    {
    Separator
    option "Expand All"
    {
    RoseScript $MYSCRIPT_PATH\RoseRT_Expand_All.ebx
    }
    }
  3. Сохраните файл и запустите RoseRT
  4. Создайте виртуальный путь MYSCRIPT_PATH к директории "C:\Program Files\Rational\Rose RealTime\Scripts (для справки смотри статью "Defining Virtual Paths" в Rose RealTime Help)
  5. Откройте новый скрипт ( Tools -> New Script) и скопируйте туда следующий текст:
    1. The package to expand needs to be selected on a diagram.
    2. Only packages with other packages are expanded.
      ' This means if a package only contains classes it will not be expanded.
      Sub Main
      Dim RoseRTModel As RoseRT.Model
      Dim RoseRTPackage As RoseRT.LogicalPackage
      Dim Packages As RoseRT.LogicalPackageCollection

      Set RoseRTModel = RoseRTApp.CurrentModel
      Set RoseRTPackage = RoseRTModel.GetSelectedLogicalPackages.GetAt(1)

      If RoseRTPackage Is Nothing Then
      MsgBox "No Package Selected."
      Else
      Set Packages = RoseRTPackage.GetAllLogicalPackages
      RoseRTApp.SelectObjectsInBrowsers Packages
      RoseRTApp.SelectObjectsInBrowsers _
      RoseRTModel.GetSelectedLogicalPackages
      End If
      End Sub

  6. Сохраните скрипт с именем RoseRT_Expand_All.ebs
  7. Скомпилируйте его(Debugger -> Compile..) и сохраните под именем
    RoseRT_Expand_All.ebx

    Теперь выделите на диаграмме пакет и кликните (Browse->Expand All)
    Этот пакет будет подсвечен в броузере и открыт при условии, если в нем есть еще пакеты.


Bопрос: Каким образом можно сгенерировать код и откомпилировать модель из командной строки DOS?

Oтвет: Пример генерации кода и компиляции дан в Team Development Guide, но для Unix. Однако его можно адаптировать и под Windows.

В данном примере будет использоваться модель TrafficLights из директории %ROSERT_HOME%/Examples/Models/C++ и утилита nmake.Сгенерировать код и откомпилировать его, имея лишь модель (т.е. файл с расширением rtmdl), можно, следуя следующим шагам:

  1. Создать makefile (файл, при помощи которого и осуществляется сборка и компиляция проекта) командой
    ${CodeGenMakeCommand} ${CodeGenMakeArguments}
    -f $ROSERT_HOME/codegen/bootstrap/${CodeGenMakeType}.mk
    "RTS_HOME=${TargetServicesLibrary}"
    "MODEL=${ModelFile}" "COMPONENT=${QualifiedName}"
    RTmakefiles
    где CodeGenMakeCommand, CodeGenMakeArguments, CodeGenMakeType, и TargetServicesLibrary можно взять из соответствующих свойств компонента.QualifiedName - полное имя компонента. Т.е. если файл называется NorthAmericanIntersection_x86VisualCpp60 и находится в пакете (package) NT40T, то полное имя будет
    Component View::NT40T::NorthAmericanIntersection_x86VisualCpp60.ModelFile -это имя файла модели(те .rtmdl файла) с указанием полного пути.
  2. Необходимо перейти в появившуюся директорию, носящую имя компонента.
  3. Генерация кода и комиляция при помощи команды
    ${CodeGenMakeCommand} ${CodeGenMakeArguments}
    -f Makefile RTcompile
    Для данного примера переменные имеют следующие значения:
    ${CodeGenMakeCommand} nmake
    ${CodeGenMakeArguments} -k
    ${CodeGenMakeType} MS_nmake
    ${TargetServicesLibrary} %ROSERT_HOME%/C++/TargetRTS
    ${ModelFile} C:\Program Files\Rational\Rose RealTime\Examples\Models\C++\TrafficLights\trafficLights.rtmdl
    ${QualifiedName} Component View::NT40T::NorthAmericanIntersection_x86VisualCpp60
    и в результате мы имеем следующие команды:
    nmake -k -f "%ROSERT_HOME%/codegen/bootstrap/MS_nmake.mk"
    "RTS_HOME=%ROSERT_HOME%/C++/TargetRTS"
    "MODEL=C:\Program Files\Rational\Rose RealTime\Examples\Models\C++\TrafficLights\trafficLights.rtmdl"
    "COMPONENT=Component View::NT40T::NorthAmericanIntersection_x86VisualCpp60"
    RTmakefiles
    cd NorthAmericanIntersection_x86VisualCpp60
    nmake -k -f Makefile RTCompile

Вопрос: Возможно ли использовать внешний редактор для изменения кода в RoseRT?

Ответ: Да, любой внешний редактор может быть запущен из RoseRT.Это дает возможность пользователям работать в более удобных текстовых редакторах, таких как MSDEV или EditPlus.

Например, следующие шаги позволяют загружать редактор MSDEV из RoseRT.
(для других редакторов аналогично):

В главном меню RoseRT выберите Tools, а в появившемся меню Options появится диалоговое окно со множеством вкладок, выберите вкладку Editor, нажмите Browse и укажите путь к файлу MSDEV.EXE (обычно "C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin\MSDEV.EXE"). Теперь любое окно редактирования кода в RoseRT имеет в контекстном меню пункт Launch External Editor по нажатию, которого загружается редактор.

Также редактор можно загрузить по горячей клавише Ctrl+H.


Вопрос: Как можно сгенерировать SQL скрипт, создающий только одну таблицу или хранимую процедуру, вместо скрипта, создающего все таблицы в модели?

Ответ: DDL скрипт создается лишь для целой схемы. И существует единственный путь ограничить генерацию DDL запросов для всех объектов схемы - создать временную схему и произвести генерацию для нее. Это можно сделать следующим образом:

  1. Создать временную схему.
  2. Поместить туда только те объекты и хранимые процедуры, для которых вы хотите сгенерировать скрипт.
  3. Произвести генерацию для новой схемы.
  4. После этого следует поместить таблицы и процедуры обратно в исходную схему.

Вопрос: Может ли Rational Rose RealTime работать с Java?

Ответ: Да. Rose RealTime поддерживает кодогенерацию из UML модели на С, С++ и Java. В поддержку включается генерация Java приложений для таких виртуальных машин как KVM которая является частью Sun Microsystem's J2ME (Java 2 Micro Edition) платформы и J2SE (Java 2 Standard Edition).


Вопрос: Можно ли интегрировать уже существующий код в Rose Real Time?

Ответ: Существует два способа:

  1. Импортировать код, используя C++ Analyzer.В этом случае первоначальный код становится частью модели.
  2. 2)Поддерживать код, существующий вне Rose Real Time.В этом случае нужно указать путь к файлам, в которых хранится код и ко всем заголовочным файлам, на которые ссылается данный код. Функции и определения, найденные в этом коде, а также внешние библиотеки будут доступны в любом месте модели.

Еще одна важная особенность - возможность создания компонент внешних библиотек. Эти компоненты дают возможность создавать визуальные модели внешних библиотек и использовать их, не генерируя для них ни какого кода, так как он уже существует.


Вопрос: Как Rose RealTime может повысить эффективность разработки?

Ответ:

  1. Rose RealTime автоматически генерирует код модели. Это повышает эффективность разработки и исключает ошибки, возникающие при переходе от моделирования к реализации. Кроме того, он генерирует сложные логические компоненты, при создании которых обычно возникают ошибки. Это дает возможность разработчику сконцентрироваться на проектировании. Хотя основное поведение разрабатываемой системы определяется автоматом состояний (state machines), имеется удобный способ для детализации действий, которые описываются как события, происходящие в системе.
  2. Rose RealTime облегчает обмен информацией. Используя UML, Rose RealTime дает разработчикам возможность "разговаривать на одном языке". Архитектура системы, смоделированная в UML, становится прозрачной. Так как UML широко известен, то новые члены команды могут быстро включиться в работу.

Вопрос: Каковы системные требования к компьютеру при установке на него Rose Real Time?

Ответ: При установке под ОС семейства Windows Требования к платформе: Windows NT 4.0 (SP 4, 5, или 6a), Windows 2000

Процессор: минимум Pentium 150 MHz или быстрее
Минимум 64 MB ОЗУ; но рекомендуется 128 MB RAM
Минимум 65 MB свободного дискового пространства
Минимум 800 * 600 * 256 разрешение.


Вопрос: Что такое connexis ?

Ответ: Connexis - это инструмент Rose RealTime Professional Edition, который упрощает проектирование и реализацию много-процессорных и распределённых Rose RealTime приложений. Он включает в себя мощную систему обмена информацией, которая упрощает использование UML блоков вызывая шаблоны методов написанных для много-процессорных систем. Connexis предоставляет разработчикам создавать резервные и сохраняющие работоспособность при отказе отдельных элементов сети обмена информацией Rose RealTime приложения.


Вопрос: А на каких платформах функционирует RRT?

Ответ: Solaris 2.5, 2.6 и 2.7, Windows NT 4.0, 2000, HPUX 10.20.


Вопрос: А где можно посмотреть соответствия диаграмм во всех розах?

Ответ: Здесь: http://www.interface.ru/rational/prodinfo.htm.


Вопрос: Правда ли, что RRT автоматически генерирует даже управляющие структуры (сам код… циклы, условия… итд)?

Ответ: НЕТ, это не совсем так, Rose, при помощи специальных структурных диаграмм, описывает логику программы, но все функции описываются человеком на указанном языке программирования. Код вносится в специальные атрибуты для того или иного класса.


Вопрос: Можно ли в Rose RealTime применять обычные диаграммы?

Ответ: Да


Вопрос: Возникают ли конфликты при одновременном использовании Rational Rose RealTime и Rational Rose?

Ответ: Нет. Никаких конфликтов не обнаружено.


Вопрос: А может ли Rose интегрироваться с не real-time-продуктами?

Ответ: Да. Такая работа возможна со следующими продуктами: SoDA, Requisite Pro, Purify, Quantify, PureCoverage, Synchronizer, ClearCase, RUP


Вопрос: На каком уровне задаются (специфицируются) С и С++ описания?

Ответ: Это возможно на уровне классов (Class), протоколов (Protocols) и капсюлей (Capsule)


Вопрос: Можно ли микшировать С и С++ генерацию?

Ответ: Нет. Вы можете использовать только один подход в проектировании единовременно.


Вопрос: Каким образом можно создать модель так, чтобы Rose генерировала код на С++? Для этого добавили новые диаграммы, ассоциированные с языками программирования?

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


Вопрос: Для чего предназначен этот продукт?

Ответ: Продукт Rational Rose RealTime создавался из расчета использования в системах реального времени и встраиваемых систем. Основное достоинство именно данной редакции – возможность генерации исполняемого кода. Для этого Rose RealTime использует внешний компилятор (в случае Windows NT – Visual C++, Watcom). Это значит, что Rose научилась не только генерировать шапки классов, но и смогла перейти на качественно иной уровень – уровень полноценной кодогенерации. Используя Rational Rose RealTime вы создаете модель, описываете ее, а код (исходники и исполняемый файл) продукт делает автоматически.


Вопрос: Для решения каких проблем предназначена Rational Rose RealTime?

Ответ: Продукт Rational Rose RealTime создавался из расчета использования в системах реального времени и встраиваемых систем. Основное достоинство именно данной редакции – возможность генерации исполняемого кода. Для этого Rose RealTime использует внешний компилятор (в случае Windows NT – Visual C++). Это значит, что Rose научилась не только генерировать шапки классов, но и смогла перейти на качественно иной уровень – уровень полноценной кодогенерации. Используя Rational Rose RealTime, Вы создаете модель, описываете ее, а код (исходники и исполняемый файл) Rose RealTime делает автоматически.


Вопрос: Каким образом можно создать модель так, чтобы Rose RealTime генерировала код на С++? Для этого добавили новые диаграммы, ассоциированные с языками программирования?

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


Вопрос: Можно ли микшировать С и С++ генерацию

Ответ: Нет. Вы можете использовать только один подход в проектировании единовременно.


Вопрос: На каком уровне задаются (специфицируются) С и С++ описания?

Ответ: Это возможно на уровне классов (Class), протоколов (Protocols) и капсулей (Capsule)


Вопрос: А может ли Rose интегрироваться с не real-time-продуктами?

Ответ: Да. Такая работа возможна со следующими продуктами: SoDA, Requisite Pro, Purify, Quantify, PureCoverage, Synchronizer, ClearCase, RUP


Вопрос: Возникают ли конфликты при одновременном использовании Rational Rose RealTime и Rational Rose

Ответ: Нет. Никаких конфликтов не обнаружено.


Вопрос: Можно ли в Rose RealTime применять обычные диаграммы

Ответ: Да


За дополнительной информацией обращайтесь в компанию Interface Ltd.

Обсудить на форуме Rational

Рекомендовать страницу

INTERFACE Ltd.
Телефон/Факс: +7 (495) 925-0049
Отправить E-Mail
http://www.interface.ru
Rambler's Top100
По техническим вопросам обращайтесь к вебмастеру