Kreirano 2024-09-30 Mon 14:12, pritisni ESC za mapu, m za meni, Ctrl+Shift+F za pretragu
*
Preciznije, meta-metamodel je apstraktna sintaksa takvog jezika. Jezik još
čine i konkretne sintakse i semantika.
-(4-1)*5/(2+4.67)
možemo u postfiksnoj notaciji zapisati kao 4
1 - 5 * 2 4.67 + / -
. Ovo će rezultovati različitim stablima parsiranja ali je
suština izraza ista i može rezultovati istim apstraktnim sintaksnim stablom.
Da li su ova dva mograma ista?
A sada?
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
...
Projekcione radionice - direktna izmena apstraktne reprezentacije kroz projekciju.
Bazirane na parserima - izmena se vrši posredno kroz tekst koji se parsira da bi se dobila apstraktna reprezentacija.
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
Model predstavlja pojednostavljenje sistema sa određenim ciljem. Model treba da odgovori na pitanja umesto stvarnog sistema. Odgovori dobijeni od modela moraju da budu isti kao i oni dobijeni od realnog sistema, pod uslovom da se pitanja nalaze u domenu definisanom ciljem modela. Da bi bio koristan, model mora biti jednostavniji za upotrebu od realnog sistema. Da bi se ovo postiglo, mnogi detalji realnog sistema su apstrahovani i izostavljeni. Ovo pojednostavljenje je srž modelovanja.
*
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
Apstraktna sintaksa je meta-model
Dva važna problema postoje kada je stek za metamodelovanje u pitanju:
Object
koncepta sa M2 nivoa.Class
konceptom M2 nivoa.
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 metamodela. U tom slučaju, klasifikacija je izvršena na
osnovu osobina Class
koncepta.
Uzmimo za primer da je potrebno kreirati metamodel za oblast elektronike. Cilj nam je kreiranje softvera za crtanje električnih šema. U razgovoru sa domenskim ekspertima čujemo sledeće iskaze:
Električna šema se sastoji od električnih komponenti koje poseduju terminale. Terminali se spajaju konekcijama. Svaka šema, komponenta, terminal i konekcija imaju naziv i opis.
U toku analize koristimo konkretne primere modela da bi bolje razumeli domen.
Dalji tok razgovora može ići u pravcu profinjenja modela, odnosno definisanja detalja. Iskazi bi mogli biti, na primer:
Komponente imaju osobine koje su definisane nazivom i vrednošću. Tip osobine određuje GUI komponentu za unos vrednosti, podrazumevanu vrednost, jedinicu mere, minimalnu i maksimalnu dopuštenu vrednost.
Komponente su takođe određenog tipa. Sve komponente istog tipa imaju istu ikonu, opis, tipove osobina i terminala. Tipovi terminala definišu dodatno i poziciju terminala na tipu komponente.
Program možemo transformisati sa jednog jezika na drugi. Na primer
\(p_{l_1} \overset{T}{\rightarrow} p_{l_2}\)
Transformacija \(T\) prevodi program sa jezika \(l_1\) na jezik \(l_2\). Npr. Legacy Modernization.
Možemo transformisati program unutar istog jezika uz očuvanje funkcionalnih karakteristika.
\({p_1}_{l} \overset{T_{refc}}{\rightarrow} {p_2}_{l}\)
Transformaciju \(T_{refc}\) nazivamo refaktorisanje.
Ako je jezik \(l\) specifičan za domen tada se domen može definisati kao skup svih programa na datom jeziku, u oznaci \(P_l\).
\(P_l \subset P\)
Ali ova definicija nije preterano korisna
Jezik specifičan za neki domen \(D\) (u oznaci \(l_D\)) predstavlja jezik koji je specijalizovan i optimizovan za enkodovanje programa iz skupa \(P_D\). Možemo reći da je \(l_D\) efikasniji u reprezentaciji programa iz \(P_D\) od drugih jezika. Ova efikasnost se postiže upotrebom apstrakcija koje su prilagođene domenu i izostavljanjem nepotrebnih detalja koji su nebitni za \(D\).