Translate

субота, 6 квітня 2013 р.

Відношення розширення між варіантами використання в Blueprint документах


Відношення розширення (extend) використовуєтся для введення нової поведінки в існуючий варіант використання. Базовий варіант використання надає набір точок розширення в які може бути додана нова поведінка. Для введення точки розширення використовуєтся тег extension-point з атрибутом name, який може бути використаний як в розповіді взаємодії користувача з системою так і в псевдокоді. Розширяючий прецедент складаєтся з набору сегментів вставки які описуются тегом segment і можуть містити властиві прецеденту теги. Відношення розширення використовуєтся коли базовий прецедент є конкретним і може бути реалізований програмно. Коли базовий прецедент є абстрактним необхідно використовувати відношення наслідування з конкретизацією абстрактних термінів.
Приклад включає базовий прецедент Set property (для прикладу зроблений конкретним), що має точки розширення loadingOfProperty, settingOfProperty, savingOfProperty і розширяючий Persist Backup. На діаграмі варіантів використання вони відображаются так :
Запис варіантів використання в Blueprint документі :
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href=".blueprint/model.xslt"?>
<!DOCTYPE model SYSTEM ".blueprint/model.dtd">
<model name="Advanced current file option operations">
    <description>The advanced options for current file</description>

    <diagrams><diagram name="use case diagram" file="use_case_advanced_current_files_options.uxf" image="use_case_advanced_current_files_options.jpg" /></diagrams>
    <use-case name="Set property">
        <description>Set the program's property. Persist property in the properties file</description>
        <actors><primary-actors><actor name="user" /></primary-actors></actors>
        <preconditions>Program is not launched</preconditions>
        <narrative>
            <doing>The user launches the program</doing>
            <extension-point name="loadingOfProperty" />
            <doing>The program loads property from file</doing>
            <if condition="property exists">
                <then>
                    <doing>The system sets property from file</doing>
                </then>
                <else>
                    <doing>The system sets the default value of property</doing>
                </else>
            </if>
            <doing>The user selected Options->Advanced menu item</doing>
            <doing>The system shows "Advaned" dialog box</doing>
            <interaction dialog="Advanced">
                <choice event="The user presses 'Ok' button">
                    <doing>The system sets the selected value of property</doing>
                    <extension-point name="settingOfProperty"/>
                    <doing>The system closes dialog box</doing>
                </choice>
                <choice event="The user presses 'Default' button">
                    <doing>The system selects the default value for property</doing>
                </choice>
                <choice event="The user presses 'Cancel' button">
                    <doing>The system closes dialog box</doing>
                </choice>
            </interaction>
            <doing>The user selects File->Exit menu item</doing>
            <extension-point name="savingOfProperty" />
            <doing>The system saves property in the properties file</doing>
            <doing>The system closes the program</doing>
        </narrative>
        <postconditions>Program is closed</postconditions>
        <thread description="'Advanced' menu item listener">
              <doing>listen "Advanced" menu item</doing>
              <perform action="'Advanced' menu item action">
                <doing>get value of option for dialog control</doing>
                  <interaction dialog="Advanced">
                      <choice event="'Ok' button is pressed">
                          <extension-point name="settingOfProperty"/>
                          <doing>save setting</doing>
                          <doing>close dialog</doing>
                          <return />
                      </choice>
                      <choice event="'Default' button is pressed">
                          <doing>select default value</doing>
                      </choice>
                      <choice event="'Cancel' button is pressed">
                          <doing>close dialog</doing>
                          <return />
                      </choice>
                  </interaction>
              </perform>
          </thread>
          <thread description="Properties loader">
              <doing>load properties</doing>
              <extension-point name="loadingOfProperty"/>
              <if condition="property exists">
                  <then>
                      <doing>set setting to property</doing>
                  </then>
                  <else>
                      <doing>set setting to default value</doing>
                  </else>
              </if>
          </thread>
          <thread description="Properties saver">
              <extension-point name="savingOfProperty"/>
              <doing>set property to setting</doing>
              <doing>save properties</doing>
          </thread>   
    </use-case>
    <use-case name="Persist backups" extends="Set property">
        <description>Turn on or off the persisting of current documents. Save this setting</description>
        <segment extension-point="loadingOfProperty">
            <thread>
                <doing>set enabling of backup managers in multitext component to the value of property</doing>
                <doing>establish current file property</doing>
            </thread>
        </segment>
        <segment extension-point="settingOfProperty">
            <thread>
                <doing>set enabling of backup managers in multitext component to value of property</doing>
            </thread>
        </segment>
        <segment extension-point="savingOfProperty">
            <thread>
                <doing>get BackupManager.isEnabled</doing>
                <doing>set property to returned value</doing>
                <doing>turn off backup manager</doing>
            </thread>
        </segment>
    </use-case>
</model>
Вигляд документу в переглядачі :