Вверх ↑
Этот топик читают: Гость
Ответов: 1088
Рейтинг: 112
#1: 2009-04-14 15:26:04 ЛС | профиль | цитата
Стандарт построения схем HiAsm. Ревизия 5


Стандарт оформления кода обычно принимается и используется некоторой группой разработчиков программного обеспечения с целью единообразного оформления совместно используемого кода. Такой стандарт сильно зависит от используемого языка программирования. Например, стандарт оформления кода для языка Си будет серьёзно отличаться от стандарта для языка BASIC, рассмотрим стандарт оформления схем в HiAsm. Данный стандарт поможет вам сделать ваши схемы более понятными для себя и для других пользователей.

1. Размещайте компоненты и соединительные линии так, чтобы они были видны на всей своей длине, не заходили под компоненты, минимально пересекались.
[подсказка] При пересечениях можно использовать изменение цвета связей или разрывы.

Add(Button,15355274,70,287)
{
Left=180
Top=140
link(onClick,12607589:doEvent1,[])
}
Add(Hub,12607589,126,287)
{
OutCount=4
link(onEvent1,12247538:doValue,[(158,293)(158,300)])
link(onEvent2,5143648:doValue,[(172,300)(172,314)])
link(onEvent3,791462:doValue,[])
link(onEvent4,330222:doValue,[(147,314)(147,293)])
}
Add(Memory,330222,154,287)
{
}
Add(Memory,12247538,175,294)
{
}
Add(Memory,791462,189,301)
{
}
Add(Memory,5143648,203,308)
{
}
Add(Button,7571719,70,77)
{
Left=180
Top=140
link(onClick,1039708:doEvent1,[])
}
Add(Hub,1039708,126,77)
{
OutCount=4
link(onEvent1,736362:doValue,[])
link(onEvent2,5260965:doValue,[])
link(onEvent3,4994190:doValue,[])
link(onEvent4,13799406:doValue,[])
}
Add(Memory,736362,287,77)
{
}
Add(Memory,5260965,245,84)
{
}
Add(Memory,4994190,203,91)
{
}
Add(Memory,13799406,161,98)
{
}
Add(Button,14235123,70,168)
{
Left=180
Top=140
link(onClick,2315711:doEvent1,[])
}
Add(Hub,2315711,126,168)
{
OutCount=4
link(onEvent1,6499647:doValue,[])
link(onEvent2,15240531:doValue,[])
link(onEvent3,7770779:doValue,[])
link(onEvent4,2225530:doValue,[])
}
Add(Memory,6499647,154,168)
{
}
Add(Memory,15240531,196,175)
{
}
Add(Memory,7770779,238,182)
{
}
Add(Memory,2225530,280,189)
{
}
Add(InfoTip,15801878,63,259)
{
Info=#13:Не правильно.|
Font=[MS Sans Serif,8,0,255,1]
Width=267
Height=88
}
Add(InfoTip,7806071,63,56)
{
Info=#10:Правильно.|
Font=[MS Sans Serif,8,0,32768,1]
Width=267
Height=81
}
Add(InfoTip,9397504,63,154)
{
Info=#29:Правильно для данного случая.|
Font=[MS Sans Serif,8,0,32896,1]
Width=267
Height=88
}
Add(InfoTip,16672880,63,364)
{
Info=#13:Не правильно.|
Font=[MS Sans Serif,8,0,255,1]
Width=267
Height=109
}
Add(StrList,3305058,154,399)
{
Point(onGetIndex)
Point(onGetString)
}
Add(Button,6354273,70,399)
{
Left=180
Top=140
link(onClick,8697520:doEvent1,[])
}
Add(Hub,8697520,126,399)
{
OutCount=4
link(onEvent1,3305058:doAdd,[])
link(onEvent2,14541304:doValue,[])
link(onEvent3,6132348:doValue,[])
link(onEvent4,2707492:doValue,[])
}
Add(Memory,14541304,203,406)
{
}
Add(Memory,6132348,252,413)
{
}
Add(Memory,2707492,294,420)
{
}


2. Старайтесь не соединять элементы, находящиеся на большом расстоянии. Если это неизбежно используйте "разрыв"*.
Также можно задействовать глобальные переменные(минимально достаточное количество).
[заметка] Не желательно использовать более 5 разрывов в одном контейнере.
[подсказка] Не забывайте давать имена глобальным переменным и разрывам в соотвествии с их ролью в схеме.
3. В большихзапутаных схемах объединяйте группы элементов в блоки (с помощью мультиэлементов) в зависимости от функций данной группы.
[подсказка] Удобно использование "вывески" вокруг мультиэлемента с указанием нго функций.

Add(MultiElement,8433487,392,245)
{
}
BEGIN_SDK
Add(EditMulti,12952407,21,21)
{
}
END_SDK
Add(MultiElement,6198815,392,322)
{
@Hint=#11:Я-контейнер|
}
BEGIN_SDK
Add(EditMulti,14179849,21,21)
{
}
END_SDK
Add(MultiElement,3900317,392,406)
{
}
BEGIN_SDK
Add(EditMulti,2131665,21,21)
{
}
END_SDK
Add(InfoTip,9019020,511,245)
{
Info=#12:Правильно ;)|
Font=[MS Sans Serif,8,0,32768,1]
Width=99
Height=18
}
Add(InfoTip,4294199,511,322)
{
Info=#28:(см комментарий на мультике)|31:Правильно, но менее визуально :(|
Font=[MS Sans Serif,8,0,32896,1]
Transparent=1
Width=176
Height=39
}
Add(InfoTip,6863599,511,406)
{
Info=#15:Не правильно :(|
Font=[MS Sans Serif,8,0,255,1]
Transparent=1
Width=92
Height=18
}
Add(InfoTip,7272802,364,224)
{
Info=#13:Я - контейнер|
Width=92
Height=60
}

4. Не следует злоупотреблять мультиэлементами, много мультиэлементов затрудняют понимание и снижают вплоть до нуля наглядность схемы из-за частых переходов между ними.
5. Не разбрасывайте связаные элементы на большие расстояния.
Варианты построения элементов:
  • Линейно - одинаковый отступ сверху и между элементами.
  • Ступеньки - одинаковый отступ, но подъём или спуск каждого элемента.
  • Реверс - отступ не важен, от элемента идет связь к элементу левее от него. Возможны сочитания и исключения.
    
    Add(Button,14140950,469,98)
    {
    Left=100
    Top=5
    Caption=""
    link(onClick,220922:doEvent3,[(737,104)(737,237)])
    }
    Add(Button,13221010,469,140)
    {
    Left=35
    Top=5
    Caption=""
    Point(doEnabled)
    link(onClick,7351926:doWork2,[])
    }
    Add(HubEx,7351926,560,133)
    {
    Angle=3
    link(onEvent,220922:doEvent2,[(564,129)(768,129)(768,230)])
    }
    Add(Hub,3928711,728,217)
    {
    link(onEvent1,7351926:doWork3,[(754,223)(754,176)(564,176)])
    link(onEvent2,564027:doEvent1,[(833,230)(833,531)])
    }
    Add(Hub,774450,553,301)
    {
    link(onEvent1,3928711:doEvent1,[(747,307)(747,244)(716,244)(716,223)])
    link(onEvent2,475750:doEvent1,[(579,314)(579,268)(471,268)(471,202)])
    }
    Add(Hub,11257150,679,336)
    {
    InCount=2
    link(onEvent1,774450:doEvent1,[(705,342)(705,324)(541,324)(541,307)])
    link(onEvent2,220922:doEvent1,[(823,349)(823,223)])
    }
    Add(Hub,220922,1057,217)
    {
    InCount=3
    }
    Add(Hub,564027,924,525)
    {
    InCount=2
    }
    Add(Hub,475750,476,196)
    {
    link(onEvent1,11257150:doEvent2,[(588,202)(588,349)])
    link(onEvent2,11257150:doEvent1,[(588,209)(588,342)])
    }
    Add(Button,7370672,217,119)
    {
    Left=100
    Top=5
    Caption=""
    link(onClick,11937981:doEvent3,[])
    }
    Add(Button,13502820,105,112)
    {
    Left=35
    Top=5
    Caption=""
    Point(doEnabled)
    link(onClick,955966:doWork2,[])
    }
    Add(HubEx,955966,196,105)
    {
    link(onEvent,11937981:doEvent2,[])
    }
    Add(Hub,797734,161,161)
    {
    link(onEvent1,955966:doWork3,[(200,167)])
    link(onEvent2,3053646:doEvent1,[])
    }
    Add(Hub,15652319,112,182)
    {
    link(onEvent1,797734:doEvent1,[(147,188)(147,167)])
    link(onEvent2,8421655:doEvent1,[])
    }
    Add(Hub,11576193,294,196)
    {
    InCount=2
    PColor(onEvent1,4227327)
    link(onEvent1,15652319:doEvent1,[(320,202)(320,230)(100,230)(100,188)])
    link(onEvent2,11937981:doEvent1,[(350,209)(350,100)(287,100)(287,111)])
    }
    Add(Hub,11937981,294,105)
    {
    InCount=3
    }
    Add(Hub,3053646,217,168)
    {
    InCount=2
    }
    Add(Hub,8421655,161,189)
    {
    PColor(onEvent1,12615680)
    link(onEvent1,11576193:doEvent2,[(230,195)(230,209)])
    link(onEvent2,11576193:doEvent1,[])
    }
    Add(InfoTip,6863599,455,56)
    {
    Info=#15:Не правильно :(|
    Font=[MS Sans Serif,8,0,255,1]
    Width=638
    Height=501
    }
    Add(InfoTip,9019020,70,56)
    {
    Info=#12:Правильно ;)|
    Font=[MS Sans Serif,8,0,32768,1]
    Width=372
    Height=193
    }
    Add(InfoTip,14042859,91,182)
    {
    Info=#9:Ступеньки|
    HAlign=2
    Width=246
    Height=53
    }
    Add(InfoTip,1239726,147,252)
    {
    Info=#52:Как видите расстояние между элементами не одинаковое|28:но хуже от этого не стало ;)|
    Transparent=1
    Width=183
    Height=46
    }
    Add(InfoTip,13738106,280,77)
    {
    Info=#6:Реверс|
    Width=78
    Height=165
    }
    Add(Hub,3836654,161,329)
    {
    OutCount=4
    link(onEvent1,981460:doValue,[])
    link(onEvent2,16316804:doValue,[])
    link(onEvent3,15528442:doValue,[])
    link(onEvent4,10796635:doValue,[])
    }
    Add(Memory,981460,189,329)
    {
    }
    Add(Memory,16316804,231,336)
    {
    }
    Add(Memory,15528442,273,343)
    {
    }
    Add(Memory,10796635,315,350)
    {
    }
    Add(InfoTip,7456423,140,322)
    {
    Info=#9:Ступеньки|
    Width=225
    Height=67
    }
    Add(Hub,16561172,161,434)
    {
    link(onEvent1,12230720:doCase,[])
    link(onEvent2,1268296:doWork2,[])
    }
    Add(Case,12230720,259,434)
    {
    PColor(onTrue,33023)
    link(onTrue,1268296:doWork1,[(306,447)(306,422)(193,422)])
    }
    Add(DoData,14579918,203,441)
    {
    }
    Add(HubEx,1268296,189,434)
    {
    PColor(onEvent,33023)
    link(onEvent,14579918:doData,[])
    }
    Add(InfoTip,3724080,147,399)
    {
    Info=#6:Реверс|
    Width=204
    Height=88
    }

    6. Не используйте верхниенижние точки элементов если нужные значения можно принять из потока.
    
    Add(InfoTip,16155595,546,329)
    {
    Info=#13:Не правильно.|
    Font=[MS Sans Serif,8,0,255,1]
    Width=267
    Height=102
    }
    Add(InfoTip,15725346,546,224)
    {
    Info=#10:Правильно.|
    Font=[MS Sans Serif,8,0,32768,1]
    Width=267
    Height=88
    }
    Add(Math,5148416,616,357)
    {
    link(onResult,16211227:doOperation,[])
    }
    Add(Math,16211227,679,357)
    {
    link(Op1,5148416:Result,[(685,345)(660,345)(660,400)(622,400)])
    link(Op2,2761863:Result,[(692,345)(730,345)(730,410)(573,410)])
    }
    Add(Math,2761863,567,357)
    {
    link(onResult,5148416:doOperation,[])
    }
    Add(Math,4152852,609,252)
    {
    link(onResult,4846620:doOperation,[])
    }
    Add(Math,4846620,672,252)
    {
    link(Op2,12337556:Result,[(685,240)(720,240)(720,300)(566,300)])
    }
    Add(Math,12337556,560,252)
    {
    link(onResult,4152852:doOperation,[])
    }

    7. Используйте "вывески" для выделения и пояснения наиболее сложныхзапутаных и непонятных мест схемы.
    8. Оптимальная дистанция между элементами - 2-3 точки сетки(или 2-3 шага при перемещении элемента).
    [совет] Не пытайтесь сделать из схемы плотный комок.
    9. При "переломе" соединительной линии используйте функцию "выравнивание"(ПКМ на рабочем поле).
    
    Add(Button,6952249,497,329)
    {
    Left=25
    Top=40
    link(onClick,2738446:doOperation,[(565,335)(565,338)])
    }
    Add(Math,2738446,602,332)
    {
    }
    Add(Button,11376456,497,259)
    {
    Left=25
    Top=40
    link(onClick,10273190:doOperation,[])
    }
    Add(Math,10273190,602,259)
    {
    }
    Add(InfoTip,16175854,483,245)
    {
    Info=#9:Правильно|
    Font=[MS Sans Serif,8,0,32768,1]
    Width=176
    Height=60
    }
    Add(InfoTip,7351454,483,315)
    {
    Info=#12:Не правильно|
    Font=[MS Sans Serif,8,0,255,1]
    Width=176
    Height=60
    }

    ЗЫ: слово "стандарт" в заголовке семантической нагрузки не несёт.
    Статья несёт рекомендатеьный характер.
    Продуманые предложения приветствуются.
  • карма: 0
    Время верстки: %cr_time% Текущее время: %time%
    7
    Голосовали:filyaxxxcom, Assasin, andrestudio, AZot, Administrator, flud, EcsTasY
    Разработчик
    Ответов: 4698
    Рейтинг: 426
    #2: 2009-04-14 15:38:11 ЛС | профиль | цитата
    Пример1:
    Add(ChildPanel,8402740,56,210)
    {
    link(Data1,14905865:Handle,[])
    }
    BEGIN_SDK
    Add(EditMulti,13253092,21,21)
    {
    DataCount=1
    }
    Add(Panel,5033318,35,105)
    {
    Top=50
    Width=110
    Height=215
    Color=12632256
    link(onClick,2425228:doMove,[])
    }
    Add(MoveWindow,2425228,84,105)
    {
    link(Handle,13253092:Data1,[(90,63)(27,63)])
    }
    END_SDK
    Add(MainForm,14905865,56,147)
    {
    Point(Handle)
    Point(onKeyDown)
    link(onKeyDown,14805985:doText,[])
    }
    Add(Label,14805985,126,168)
    {
    Left=10
    Top=5
    }
    Add(ListBox,10016106,329,168)
    {
    Left=110
    Width=280
    Height=265
    }
    Add(Button,685486,56,105)
    {
    Left=10
    Top=30
    Width=90
    Caption="Ок"
    link(onClick,13686965:doEvent1,[])
    }
    Add(Timer,12510187,126,105)
    {
    Enable=1
    AutoStop=5
    Point(onStop)
    link(onTimer,14222857:doEvent1,[])
    link(onStop,6988516:doData,[(174,118)(174,174)])
    }
    Add(Random,14059768,238,105)
    {
    Max=1000
    link(onRandom,14331967:doConvert,[])
    }
    Add(Convertor,14331967,294,105)
    {
    Mode=4
    link(onResult,9382582:doStrCat,[])
    }
    Add(StrCat,9382582,350,105)
    {
    Point(doClear)
    link(onStrCat,11955562:doValue,[])
    link(Str1,9382582:Result,[(356,93)(344,93)(344,149)(356,149)])
    }
    Add(Memory,11955562,399,105)
    {
    }
    Add(DoData,6988516,189,168)
    {
    PColor(Data,32768)
    link(onEventData,3899261:doWork2,[])
    link(Data,11955562:Value,[(195,152)(405,152)])
    }
    Add(Hub,14222857,203,105)
    {
    PColor(onEvent2,128)
    link(onEvent1,14059768:doRandom,[])
    link(onEvent2,15776918:doNext,[(231,118)(231,188)])
    }
    Add(Counter,15776918,245,182)
    {
    Max=5
    link(onNext,3899261:doWork3,[(305,188)])
    }
    Add(HubEx,3899261,301,161)
    {
    link(onEvent,10016106:doAdd,[])
    }
    Add(Hub,13686965,98,105)
    {
    link(onEvent1,12510187:doTimer,[])
    link(onEvent2,8264781:In,[(119,118)(119,146)])
    }
    Add(LineBreak,12756621,189,203)
    {
    link(Out,15776918:doReset,[(232,209)(232,202)])
    Primary=[8264781,-63,-63]
    }
    Add(PointHint,6158119,35,182)
    {
    Info=#16:Перемещение окна|
    Transparent=0
    VAlign=0
    Width=85
    Height=67
    }
    ------------ Дoбавленo в 15.38:
    Опередили...
    карма: 10
    0
    файлы: 1code_12766.txt [1.7KB] [178]
    Ответов: 5227
    Рейтинг: 587
    #3: 2009-04-14 15:41:46 ЛС | профиль | цитата
    Sniper36, я созрел (помнится на эту тему я с тобой не согласился , каюсь ) так как в последнее время одно мракобесие уже обрыгло, называется загрузи схему и срочно закрой без сохранения.

    p.s стандарт всё же нужен как никак.
    карма: 4
    Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
    0
    Разработчик
    Ответов: 26170
    Рейтинг: 2127
    #4: 2009-04-14 15:44:19 ЛС | профиль | цитата
    andrestudio писал(а):
    стандарт всё же нужен как никак

    Не нужен. Нужен свод рекомендаций, но не стандарт. Рисование схем -- это искусство и я, например, не собираюсь его менять ни на какой стандарт.
    карма: 22

    1
    Голосовали:Assasin
    Ответов: 1088
    Рейтинг: 112
    #5: 2009-04-14 15:44:56 ЛС | профиль | цитата
    Assasin, вот специально написал же что примеры через 5 минут будут
    andrestudio, рад за тебя
    nesco, читай послесловие.
    карма: 0
    Время верстки: %cr_time% Текущее время: %time%
    0
    Разработчик
    Ответов: 26170
    Рейтинг: 2127
    #6: 2009-04-14 15:50:41 ЛС | профиль | цитата
    Sniper36 писал(а):
    читай послесловие

    Это относилось не к твоему посту. Перечитай внимательно мой пост и посмотри, к кому я отнес свой овет. В данном случае, я подтвердил твои слова
    Sniper36 писал(а):
    слово "стандарт" в заголовке семантической нагрузки не несёт.
    Статья несёт рекомендатеьный характер


    Так что мимо, не мне надо было перечитать послесловие
    карма: 22

    0
    Ответов: 16884
    Рейтинг: 1239
    #7: 2009-04-14 15:52:23 ЛС | профиль | цитата
    nesco писал(а):
    Не нужен
    Поддерживаю.
    Иногда смотришь на чью-то схему и не можешь понять - неужели человек не видит, что если пару компонент переместить, пропадает до десятка, а то и больше пересечений.
    И свод рекомендаций тоже не поможет.
    Просто смотреть надо.
    карма: 25
    Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
    0
    Ответов: 485
    Рейтинг: 86
    #8: 2009-04-14 15:55:55 ЛС | профиль | цитата
    Assasin, кстати, пример (code_12766.txt), мягко говоря, не очень соответствует рекомендациям.
    1. Лишнее пересечение линий справа вверху (под StrCat).
    2. Совершенно неоправданный разрыв линии.
    3. Панель без комментария.
    карма: 0

    0
    Разработчик
    Ответов: 4698
    Рейтинг: 426
    #9: 2009-04-14 16:01:05 ЛС | профиль | цитата
    1. не доконца опустил(я)
    2. Это имитация большого расстояния, да и к тому же тогда линия пересечет компоненты
    3. Видимо не докопировалась схема на форум
    карма: 10
    0
    Ответов: 5227
    Рейтинг: 587
    #10: 2009-04-14 16:04:40 ЛС | профиль | цитата
    nesco, когда человек хочет удовлетворить свою просьбу то пусть сам для чем то в этом поспособствует, иначе это трата чужого времени. Я его (время) в последнее время начинаю ценить.
    карма: 4
    Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
    0
    Ответов: 485
    Рейтинг: 86
    #11: 2009-04-14 16:06:12 ЛС | профиль | цитата
    Assasin писал(а):
    да и к тому же тогда линия пересечет компоненты
    Совсем не обязательно. Главная форма, панель и надпись передвигаются в другое место и все.
    карма: 0

    0
    Разработчик
    Ответов: 4698
    Рейтинг: 426
    #12: 2009-04-14 16:08:19 ЛС | профиль | цитата
    Ну и здвинешь, что дальше? Пересечется с таймером и doData
    карма: 10
    0
    Ответов: 1088
    Рейтинг: 112
    #13: 2009-04-14 16:09:26 ЛС | профиль | цитата
    filyaxxxcom, Assasin, флуд не разводите. Спасибо.
    карма: 0
    Время верстки: %cr_time% Текущее время: %time%
    0
    Ответов: 16884
    Рейтинг: 1239
    #14: 2009-04-14 16:32:07 ЛС | профиль | цитата
    Assasin, счетчик чистить нужно до запуска таймера
    карма: 25
    Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
    0
    Администрация
    Ответов: 15295
    Рейтинг: 1519
    #15: 2009-04-14 16:35:07 ЛС | профиль | цитата
    я как-то думал даже над алгоритмом интеллектуального анализа качества схемы и выдачи оценки по 100 бальной шкале. Впринципе должно достаточно адекватно оценивать схему по п. 1, 2, 3, 5, 7 и еще паре моментов, которые не были учтены в рекомендациях
    карма: 27
    1
    Голосовали:AZot
    Сообщение
    ...
    Прикрепленные файлы
    (файлы не залиты)