Translate

неділя, 7 квітня 2013 р.

Алгоритм функції як набір аспектів у Blueprint документах


У Blueprint документах алгоритм роботи функції записуєтся за допомогою псевдокоду в середині тегу algorithm. Алгорим функції може розглядатись як сукупність складових частин - аспектів. Набір аспектів алгоритму описуєтся в тезі aspects. Якщо описуєтся набір аспектів, то алгоритм функції може складатись з псевдокоду цих аспектів у будь-якій послідовності. Є три типи аспектів : precedent, reaction, aspect. Для прикладу взята функція isFileReadyForOpening яка перевіряє файл на можливість відкриття і повертає true якщо файл можна відкрити. В ній використані аспекти типу precedent, які мають передумови свого виконання, псевдокод цих аспектів має виконуватись якщо передумови є істинними.
Запис функції за допомогою технології Bleuprint :

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href=".blueprint/model.xslt"?>
<!DOCTYPE model SYSTEM ".blueprint/model.dtd">
<model>
    <functions>
        <function id="isFileReadyForOpening" name="isFileReadyForOpening" visibility="private">
            <description>Returns true if file is ready for opening. Otherwise show message dialog and return false</description>
            <parameters>
                <parameter name="file" type="File" />
            </parameters>

            <returns type="boolean" />
            <aspects>
                <precedent>   
                    <preconditions>
                        <condition assertion="file is not exist">file exists() = false</condition>
                    </preconditions>
                    <algorithm>
                        <doing>show message : 'File is not exist. \n Please verify the corrent file name was given'</doing>
                        <return value="false" />
                    </algorithm>
                </precedent>
                <precedent>
                    <preconditions>
                        <condition assertion="parameter is not a file">file isFile() = false</condition>
                    </preconditions>
                    <algorithm>
                        <doing>show message : file.getAbsolutePath() + " is not a file"</doing>
                        <return value="false" />
                    </algorithm>
                </precedent>
                <precedent>
                    <preconditions>
                        <condition assertion="file can not read">file canRead() = false</condition>
                    </preconditions>
                    <algorithm>
                        <doing>show message : 'File is protected from reading'</doing>
                        <return value="false" />
                    </algorithm>
                </precedent>
            </aspects>
            <algorithm>
                <if condition="file.exists() = false">
                    <then>
                               <doing>show message : 'File is not exist. \n Please verify the corrent file name was given'</doing>
                               <return value="false" />                                   
                    </then>
                </if>
                <if condition="file.isFile() = false">
                    <then>
                             <doing>show message : file.getAbsolutePath() + " is not a file"</doing>
                             <return value="false" />
                    </then>
                </if>
                <if condition="file.canRead() = false">
                         <then>
                            <doing>show message : 'File is protected from reading'</doing>
                            <return value="false" />
                    </then>
                </if>
                <return value="true" />
            </algorithm>
        </function>
    </functions>
</model>
Вигляд документу в переглядачі :