Løsningsforslag til MOFScript oppgave. Metamodellen.

Slides:



Advertisements
Liknende presentasjoner
Repetisjon innkapsling static tabell av primitiv datatype LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring.
Advertisements

14 okt. 2003, Arne Maus Inst. for informatikk, UiO
Uke 10 - Sortering, og hvordan lage en klasse for et klassebibliotek 21 okt. 2003, Arne Maus Inst. for informatikk, UiO.
Uke 8 - Mer om: Objekter, klasser og pekere
NUUG.topic = Ruby.new Johannes Brodwall Takk til Dave Thomas for bruk av enkelte slides.
1 Java 6 Mer om metoder Tekster Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo.
1 Litt om OO og programmering Arne Maus. 2 OO og Java (og C++, C#)  Arven fra Simula  Programstruktur i Java  Generering av objekter  Beskyttelse.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Java 12 Mer filbehandling - skrive til fil HashMap Et større eksempel Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet.
Mer sortering Mer Debugging Introduksjon til strukturer.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Eksempel: Administrasjon av biler. Eksempel •Program for å administrere informasjon om biler •Vi ser på tre deler: –Registrere biler: legge inn i tabell.
Objekt, Instanser og referanser + litt til. Objekter  Instanser  En instans er et objekt av en bestemt klasse  Instanser blir laget ved å kalle klassens.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Java 14 Et eksempel fra bioinformatikk: analyse av biologiske sekvenser Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet.
IS-102 Klassedefinisjoner
Eiendomregister mars 2002 Arne Maus. import java.util.*; import inf101.*; /* Klasse med main() som starter hele programmet */ class EiendomsregisterMain.
Tema: Introduksjon Hvorfor Velocity? Installasjon Velocity VS. JSF / JSP Eksempler Oppsumering.
C# for javaprogrammerere
Generelt I/O if/else Funksjoner Lists Løkker Dictionaries Annet Listebehandling Klasser Python med noen algdat-anvendelser Åsmund Eldhuset asmunde *at*
En gang til!? .
Fag LO189D - Objektorientert programmering Objektorientert programmering© Else Lervik, TISIP - HiST/IDB vår-99Leksjon 11 Applet’s Hva karakteriserer applet’sside.
Å lage sikre klasser Unntaksklassene i Java-API-et Unntakshåndtering i databasesammenheng try-catch-finally-setningen Trelagsarkitektur; egen databaseklasse.
Objekt Orientert Programmering (OOP). Objektorientering (OO)1/6 Objektorientering er en grunnleggende måte å organisere komplekse fenomener på.
Kap 05 Abstrakte datastrukturer. Arv - Implementering Interface / Abstrakte klasser / Konkrete klasser Concrete classAbstract class Interface extends.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Objektorientert programmering
ADA 95 – del3 Foreleser: Olaf Hallan Graven Bok: Programming in ADA95 (2nd) John Barnes.
Criteria Når og hvorfor bruke Criteria i Hibernate.
JavaOne oppsumering tobias k torrissen
  Den perfekte julegaven til Javakoden din Johannes Brodwall Steria.
Uke 7 - del I: Repetisjon del II: Objekter, klasser og pekere 30 sept. 2003, Arne Maus Inst. for informatikk, UiO.
Java 11 Programmering med og uten objekter: hva er forskjellen?
OOT Seminar H-97 CORBA Praktisk del. Valg av ORB implementasjon n Har valgt å bruke Visigenic sin ORB implementsjon n ORB’en er 100% Java kodet n Bygger.
1 Kap 06 Ordnede / Sorterte lister Oppgave nr 06_02 Polynomer Klassehierarki Javadokumentasjon.
Å lese tall fra en fil, klassen Scanner 1.Et Scanner-objekt kan knyttes til et strømobjekt eller til en streng. 2.Kan skanne teksten etter data av ulike.
Oppgaver til kodegenerering etc. INF-5110, 2013 Oppgave 1: Vi skal se på koden generert av TA-instruksjonene til høyre i figur 9.10 i det utdelte notatet,
02 - Java datatyper Grundlæggende om datatyper og variable.
Tabeller Dette er en tabell, eller array. Den kan defineres sånn som dette: public int[] heltallsTabell = new int[11]; //Her er 11 tabellens lengde for.
GPS simulator Et C# program som sender data fra en GPS fil til RS232 og simulerer en GPS engine. Tre linjer pr. sekund er satt opp.
OpenEdge og.NET Jan Kolstad PUG Norway Lillehammer 2004.
Föreläsning 13 Programmeringsteknik och Matlab 2D1312/2D1305 Inläsning från fil Skriva till fil StringTokenizer Sortering.
INF1000 (Uke 14) Resten av eksamen H03 + del av V05 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Anja B.
INF1000 (Uke 13) Resten av eksamen H03 + del av V05 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Arild.
Objekt, Instanser og referanser + litt til. Objekter  Instanser  Kan sees på som det samme. Personen Per kan være både et objekt og en instans av klassen.
Indledende Datalogi /kelk 1 Need to know Løkker Klasser, instanser og Objekter Hvorfor objektorientering? Scope – hvor erklæres en variabel? ”Access Modifiers”
Main metoden n public static void main(String[] args){ } n Inni denne metoden skjer alt! n Det kan bare finnes en main metode per program. n Den kan ligge.
INF Objektorientert programmering
Programmering i Java versjon september 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
GSV – Generic Storage and Validation Hovedprosjekt 2004/2005 Oppgave 10E Trond Smaavik
Object  Klassen i java  Alle klasser arver fra denne om ikke noe annet blir spesifisert  ArrayList.add(Object instans)  Alle elementer formes til Object.
Ekstra mange tips til Oblig 3! 12. mars 2007 Are Magnus Bruaset og Arild Waaler Inst. for informatikk, UiO.
INF1000 (Uke 14) Eksamen V06 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Arild Waaler.
Byggeklosser i java  Klassedefinisjon  Variabel deklarasjon  Metodedeklarasjoner  En ordentlig klasse  Spesielle/kryptiske skrivemåter  løkker og.
Inf1000 (Uke 10) HashMap og ArrayList
XML og JDOM Helge Furuseth XML  XML = Extensible Markup Language Basert på SGML – Standard Generalized Markup Language  HTML =
Inf1000 (Uke 5) Arrayer, filer og tekst
Quiz – Uge 4 – mandag – første time
Triks Avslutt alle klasser, metoder og løkker samtidig som du lager dem. Deklarer alle variablene/referansene på begynnelsen av klassen. Hvis du definerer.
IS-102 Interaksjon med objekter
BilSalg klassedatastruktur Bil klassedatastruktur
Quiz – Uge 4 – mandag – første time
BilSalg klassedatastruktur Bil klassedatastruktur
Model til tekst transformasjoner med MOFScript
Utskrift av presentasjonen:

Løsningsforslag til MOFScript oppgave

Metamodellen

Input modellen

Resultatet (1)

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; }

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){ }

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; }

Transformasjonen

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

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() }

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) }

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

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() } ' }' }

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.

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}’ }

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

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() ';' }

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

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}’ }

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