Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Løsningsforslag til MOFScript oppgave. Metamodellen.

Liknende presentasjoner


Presentasjon om: "Løsningsforslag til MOFScript oppgave. Metamodellen."— Utskrift av presentasjonen:

1 Løsningsforslag til MOFScript oppgave

2 Metamodellen

3 Input modellen

4 Resultatet (1)

5 Resultatet (2) package library; import java.util.ArrayList; class Book { public String name; public String iSBN; public Book(String name, String iSBN){ this.name = name; this.iSBN = iSBN; }

6 Resultatet (4) package library; import java.util.ArrayList; class LibrarySystem { private ArrayList books; private ArrayList customers; public LibrarySystem(ArrayList books, ArrayList customers){ this.books = books; this.customers = customers; } public Book findBook (String name){ return null; } public Person findCustomer (String id){ return null; } public void rentBook (Book book, Person person){ }

7 Resultatet (4) package library; import java.util.ArrayList; class Person { public String name; public int age; public String id; public Person(String name, int age, String id){ this.name = name; this.age = age; this.id = id; }

8 Transformasjonen

9 Signaturen - Sier hvilken metamodel som brukes: ”classModel” - Gir et alias til metamodellen: ”mdl” texttransformation ExampleTransformation (in mdl:"classModel") {........

10 Main() - Itererer gjennom alle pakkene i modellen o g kaller mapPackage for hver av dem. mdl.Model::main () { self.ownedPackages->forEach(package : mdl.Package){ package.mapPackage() }

11 mapPackage() - Itererer gjennom alle classer i pakken, og kaller mapClass for hver av dem mdl.Package::mapPackage(){ self.ownedClasses->forEach(class : mdl.Class){ class.mapClass(self.name) }

12 mapClass() (1) -Lager en fil med navnet pakken + ’/’ + navnet på klassen + ’.java’ -Skriver ’package + ;’ til fila -Skriver ’import java.util.ArrayList;’ til fila -Skriver klasse signaturen til fila -Itererer gjennom alle attributtene til klassen, og kaller mapAttribute() for hver av dem -Kaller på createConstructor() -Itererer gjennom alle operasjoner i klassen og kaller mapOperation() for hver av dem

13 mapClass() (2) mdl.Class::mapClass(packageName : String){ file(packageName + "/" + self.name + ".java") 'package ' + packageName + '; import java.util.ArrayList; class ' self.name.firstToUpper() ' {' self.ownedAttrtibutes->forEach(attribute : mdl.Attribute){ attribute.mapAttribute() } self.createConstructor() self.ownedOperations->forEach(operation : mdl.Operation){ operation.mapOperation() } ' }' }

14 createConstructor() (1) -Skriver en konstruktør signatur til filen -Bruker navnet fra klassen i modellen som navn på konstruktøren og attributtene som parametere -Skriver kode i kroppen til konstruktøren, slik at attributtene får verdiene som ligger i parameterene.

15 createConstructor() (2) mdl.Class::createConstructor(){ '\n\n\tpublic ' self.name '(' self.ownedAttrtibutes->forEach(attribute : mdl.Attribute){ if(attribute.multivalued){ 'ArrayList ' attribute.name.firstToLower() }else{ attribute.type.name ' ' attribute.name.firstToLower() } if(self.ownedAttrtibutes.last() != attribute){ ', ’ } '){\n\t\t' self.ownedAttrtibutes->forEach(attribute : mdl.Attribute){ 'this.'attribute.name.firstToLower() ' = ' attribute.name.firstToLower() ';\n\t\t’ } '\n\t}’ }

16 mapAttribute() (1) -Dersom attributtet er public skrives ’public ’ til fila -Ellers skrives ’private ’ -Dersom attributtet er multivalued skrives ’ ArrayList ’ til fila etterfulg at navnet på attributtet -Ellers skrives navnet på typen til attributtet til fila etterfulg at navnet på attributtet

17 mapAttribute() (2) mdl.Attribute::mapAttribute(){ if(self.public){ '\n\tpublic ' }else{ '\n\tprivate ' } if(self.multivalued){ 'ArrayList 'self.name.firstToLower() ';' }else{ self.type.name ' ' self.name.firstToLower() ';' }

18 mapOperation (1) -Signaturen på metoden opprettes -Dersom operasjonen er public skrives ’public ’ til fila -Ellers skrives ’private ’ -Dersom retur typen til operasjonen ikke er satt skrives ’void ’ til fila -Ellers skrivs navnet på typen til retur verdien -navnet på operasjonen skrives til fila, etterfulgt av ’(’ -Type og navn på parametere skrives til fila med ’, ’ mellom hver parameter -Det hele acsluttes med at ’){’ skrives til fil -Kroppen på metoden opprettes -Setter ingenting dersom metoden ikke har noen retur type. -Setter ’return null;’ dersom den har en retur type

19 mapOperation() (2) mdl.Operation::mapOperation(){ '\n\n\t’ if(self.public){ 'public ' }else{ 'private ' } if(self.returnType = null){ 'void ' }else{ self.returnType.name ' ' } self.name ' (' self.ownedParameters->forEach(parameter : mdl.Parameter){ parameter.mapParameter() if(self.ownedParameters.last() != parameter){ ', ' } '){\n\t\t' if(self.returnType != null){ '\n\t\treturn null;' } '\n\t}’ }

20 mapParameter() - Skriver typen til parameteret og navnet til parameteret til fila, med et mellomrom imellom mdl.Parameter::mapParameter(){ self.type.name ’ ’ self.name.firstToLower() }


Laste ned ppt "Løsningsforslag til MOFScript oppgave. Metamodellen."

Liknende presentasjoner


Annonser fra Google