Креирано 2025-11-16 Sun 13:12, притисни ESC за мапу, Ctrl+Shift+F за претрагу, "?" за помоћ
* Прецизније, мета-метамодел је апстрактна синтакса таквог језика. Језик још
чине и конкретне синтаксе и семантика.
-(4-1)*5/(2+4.67) можемо у постфиксној нотацији записати као 4
1 - 5 * 2 4.67 + / -. Ово ће резултовати различитим стаблима парсирања али је
суштина израза иста и може резултовати истим апстрактним синтаксним стаблом.
Да ли су ова два мограма иста?
А сада?
def inner_from_python(expression):
retval = None
if isinstance(expression, types.FunctionType):
# If this expression is a parser rule
rule_name = expression.__name__
if rule_name in __rule_cache:
c_rule = __rule_cache.get(rule_name)
if self.debug:
print("Rule {} founded in cache.".format(rule_name))
if isinstance(c_rule, CrossRef):
self.__cross_refs += 1
if self.debug:
print("CrossRef usage: {}"
.format(c_rule.target_rule_name))
return c_rule
...
Пројекционе радионице - директна измена апстрактне репрезентације кроз пројекцију.
Базиране на парсерима - измена се врши посредно кроз текст који се парсира да би се добила апстрактна репрезентација.
Eye icon designed by Freepik. Hand icon by Yannick Lung.
* J. Miller, J. Mukerji, et al., MDA Guide Version 1.0.1, Object Management
Group, vol. 234, 2003
Модел представља поједностављење система са одређеним циљем. Модел треба да одговори на питања уместо стварног система. Одговори добијени од модела морају да буду исти као и они добијени од реалног система, под условом да се питања налазе у домену дефинисаном циљем модела. Да би био користан, модел мора бити једноставнији за употребу од реалног система. Да би се ово постигло, многи детаљи реалног система су апстраховани и изостављени. Ово поједностављење је срж моделовања.
* J. Bézivin and O. Gerbé, Towards a precise definition of the OMG/MDA
framework, in ase, p. 273, Published by the IEEE Computer Society, 2001
Апстрактна синтакса је мета-модел
Два важна проблема постоје када је стек за метамоделовање у питању:
Object концепта са М2 нивоа.Class концептом М2 нивоа.
If you assume a certain basic knowledge in the audience, you can talk in a language that deals with bigger concepts, and express things in a much shorter and clearer way. This, more or less, is what abstraction is.
Class UML метамодела. У том случају, класификација је извршена на основу
особина Class концепта.
Узмимо за пример да је потребно креирати метамодел за област електронике. Циљ нам је креирање софтвера за цртање електричних шема. У разговору са доменским експертима чујемо следеће исказе:
Електрична шема се састоји од електричних компоненти које поседују терминале. Терминали се спајају конекцијама. Свака шема, компонента, терминал и конекција имају назив и опис.
У току анализе користимо конкретне примере модела да би боље разумели домен.
Даљи ток разговора може ићи у правцу профињења модела, односно дефинисања детаља. Искази би могли бити, на пример:
Компоненте имају особине које су дефинисане називом и вредношћу. Тип особине одређује GUI компоненту за унос вредности, подразумевану вредност, јединицу мере, минималну и максималну допуштену вредност.
Компоненте су такође одређеног типа. Све компоненте истог типа имају исту икону, опис, типове особина и терминала. Типови терминала дефинишу додатно и позицију терминала на типу компоненте.
Програм можемо трансформисати са једног језика на други. На пример
\(p_{l_1} \overset{T}{\rightarrow} p_{l_2}\)
Трансформација \(T\) преводи програм са језика \(l_1\) на језик \(l_2\). Нпр. Legacy Modernization.
Можемо трансформисати програм унутар истог језика уз очување функционалних карактеристика.
\({p_1}_{l} \overset{T_{refc}}{\rightarrow} {p_2}_{l}\)
Трансформацију \(T_{refc}\) називамо рефакторисање.
Ако је језик \(l\) специфичан за домен тада се домен може дефинисати као скуп свих програма на датом језику, у ознаци \(P_l\).
\(P_l \subset P\)
Али ова дефиниција није претерано корисна
Језик специфичан за неки домен \(D\) (у ознаци \(l_D\)) представља језик који је специјализован и оптимизован за енкодовање програма из скупа \(P_D\). Можемо рећи да је \(l_D\) ефикаснији у репрезентацији програма из \(P_D\) од других језика. Ова ефикасност се постиже употребом апстракција које су прилагођене домену и изостављањем непотребних детаља који су небитни за \(D\).