Od wymagań do Javy w mgnieniu oka: modelowanie oprogramowania w praktyce Michał Śmiałek Politechnika Warszawska Wyzwania Modelowania Inżynierskiego i Biznesowego Warszawa, 5 kwietnia 206 Prelegent Czym się zajmowałem (od ok. 99 r.) Profesor nzw. (informatyka) Politechnika Warszawska; UML, Inżynieria Wymagań, Projektowanie, MDD/MDA, Kierownik grupy SMoG (modelowanie oprogramowania) Kierownik zespołu PW w projekcie REMICS (7PR) Koordynator naukowy konsorcjum projektu ReDSeeDS (6PR): główny współautor języka RSL Trener w wielu szkoleniach dla profesjonalistów (> 200 edycji szkoleń) z zakresu inżynierii oprogramowania Konsultant w firmie Infovide-Matrix Kierownik projektów z zakresu budowy oprogramowania Inżynier procesu (pierwszy w Polsce certyfikat trenera RUP) Analityk wymagań oprogramowania i biznesu Projektant oprogramowania i programista WMIiB 206 2
Treść seminarium Wprowadzenie wymagania i MDD/MDA Modelowanie wymagań i transformacje w mgnieniu oka Programowanie na poziomie wymagań Wyjaśnienie semantyki przypadków użycia Logika aplikacji i logika dziedziny/biznesu Programowanie dla zwykłych ludzi? Od wymagań do kodu Automatyczna transformacja wymagań (scenariuszy przypadków użycia) w kod logiki aplikacji i logiki dziedziny/biznesu Szczegóły transformacji Metamodel języka (Requirements Specification Language) Reguły transformacji z RSL do kodu Podsumowanie WMIiB 206 3 :: WPROWADZENIE WYMAGANIA I MDD/MDA :: 2
Marzenie kierownika projektu IT Deweloper Użytkownik Wymagania TEXT Kod Czego potrzebujemy Język specyfikowania wymagań Dobra komunikacja Automatyczna translacja WMIiB 206 5 Od biznesu do kodu - tradycyjnie Specyfikacja wymagań w języku naturalnym specyfikacja projektowa wywiedziona z wymagań kod wywiedziony z modeli projektowych Ręczne przekształcenie Biznes Specyfikacja Wymagań TEXT Dokumentacja Projektowa Kod Zamawiający Analityk Projektant Programista WMIiB 206 6 3
Od biznesu do kodu sterowane modelami Specyfikacja wymagań z półformalnymi modelami modele projektowe ze śladem od wymagań kod częściowo generowany z modeli projektowych Śledzenie wymagań wsparte narzędziami Projektant transformacji Biznes Specyfikacja Wymagań Dokumentacja Projektowa Kod Zamawiający Analityk Projektant Programista Częściowo automatyczna transformacja WMIiB 206 7 Od biznesu do kodu języki dziedzinowe Specyfikacja systemu używając języków spec. dla dziedziny (DSL) wygenerowany kod W pełni automatyczna transformacja Znaczące przyrosty produktywności! Biznes Projektant języka Specyfikacja Wymagań DSL Projektant transformacji Kod Domain Specific Language Zamawiający Analityk Ograniczony zakres dziedzin, potrzebne wysokie kwalifikacje w tworzeniu języków, wymagania? WMIiB 206 8 4
Programowanie na poziomie wymagań? Specyfikacja wymagań przy użyciu formalnych modeli kod wygenerowany z wymagań W pełni automatyczna transformacja Pstryk! Pomysł: częściowa generacja kodu Biznes Specyfikacja Wymagań RPL Kod Ujednolicony język Zamawiający Analityk Brak technologii! WMIiB 206 9 Proponowane rozwiązanie Wymagania z częściowo formalnymi modelami kod częściowo generowany z wymagań W pełni automatyczna transformacja Formalne Wymagani Kod Autom. RSL Biznes Półformalne Wymagania Analityk Zamawiający Programista Kod Półautom. RSL Częściowo automatyczna transformacja WMIiB 206 0 5
@svo : SVOSentence {SVOSentences} @svo : SVOSentence {SVOSentences} dobject : NounLink {Phrases} {ELSE} @svo : SVOSentence {SVOSentences} source predicate source cverb : PhraseVerbLink {Phrases} noun {ELSE} predicate source pred : Predicate {SVOSentences} object : NounLink {Phrases} cpred : Predicate {SVOSentences} verb cnph : NounPhrase {Phrases} @cl : Class {Kernel} predicate target noun predicate object source target 2 vph : SimpleVerbPhrase {Phrases} object @genop : Operation {Kernel} verbphrase nph : NounPhrase {Phrases} cvph : ComplexVerbPhrase {Phrases} complexverbphrase simpleverbphrase svph : SimpleVerbPhrase source {Phrases} 3 @ui_op : Operation 4 {Kernel} verb : PhraseVerbLink {Phrases} utl_addprocedurecall(@verb.value, @object.v alue, "", @genop, @cl, @ui_op) verbphrase source cnph2 : NounPhrase {Phrases} iobject : NounLink {Phrases} utl_addprocedurecall(@cverb.v alue, @dobject.value, @iobject.value, @genop, @cl, @ui_op) verb verbphrase object noun source Od biznesu do kodu - ReDSeeDS Specyfikacja wymagań przy użyciu precyzyjnych wymagań kod wygenerowany z wymagań Automatyczna generacja Biznes Specyfikacja Wymagań Model Projektowy Kod RSL Zamawiający Analityk Agile Programista WMIiB 206 ReDSeeDS: jak to działa? Model przypadków użycia Reguły transformacji Wykonywalny kod public void SelectsOK(XStudent pstudent){ int res; astudent = pstudent; mstudent.validates(astudent); res = mstudent.getresult(); if (res == 0) { vacknowledgement = new VAcknowledgement(); vacknowledgement.caddstudent = this; vacknowledgement.presents(); } else if (res == ) { verrormessage = new VErrorMessage(); verrormessage.caddstudent = this; verrormessage.shows(); } } Model scenariuszy: RSL Model projektowy: UML + metody w Javie WMIiB 206 2 6
:: PROGRAMOWANIE NA POZIOMIE WYMAGAŃ :: Jeszcze wyższy poziom programowania? Tradycyjnie Specyfikacja wymagań Ogólne stwierdzenie problemu Szczegółowe wymagania na oprogramowanie Propozycja Specyfikacja wymagań Ogólne stwierdzenie problemu Program zorientow. na użytkownika Historie (logika aplikacji) Słownik dziedziny (logika biznesu) WMIiB 206 4 7
Precyzyjny język naturalny? RSL? Użytkownicy Analitycy Programiści Mniej formalny Bardziej formalny WMIiB 206 5 Historia i środowisko 4. Tom rides to the old hut. 2. Lord Mark goes to the old hut. 3. Aunt Martha goes to Tom the wise..a. Lord Mark runs to aunt Marta s house. b. He talks with aunt Martha. WMIiB 206 6 8
Pisanie dobrych opowiadań a pisanie dobrych wymagań Połączenie opowiadania (sekwencji zdarzeń) i opisów środowiska (ludzie, wnętrza, krajobraz ). WMIiB 206 7 Rozdzielenie opowiadania od środowiska Zdarzenia a sceny WMIiB 206 8 9
Styl pisania opowiadań Najprostsze możliwe zdania Student enters the semester. Teacher accepts the current marks. Subject Verb Objects ( or 2) System assigns the student to the new semester. WMIiB 206 9 Rozszerzenie opowiadania o środowisko Uwaga: opowiadania nie zawierają definicji pojęć Student enters the semester where the semester is a number between and 0 denoting the level of studies ale gdzieś w innym odległym opowiadaniu: Dean accepts the semester for the new student where the semester is a number denoting the current student s status? WMIiB 206 20 0
Oddzielenie pojęć od opowiadań Osobny słownik pojęć, ale spójny z opowiadaniami Student enters the semester where the semester is a number between and 0 denoting the level of studies Semester Dean accepts number the between semester and 0 denoting for the the new level student of studies and where the semester is a number the current student s status. denoting the current student s status WMIiB 206 2 Pisanie scenariuszy Scenariusz jest sekwencją zdań Dean adds new lecture to a course. Dean selects to add new lecture to course 2. System asks for semester 3. Dean enters the semester 4. System asks for data of the lecture 5. Dean enters the data of the lecture 6. System adds the lecture to the list of lectures WMIiB 206 22
Budowanie słownika Słownik jest mapą terenu dla użytkownika. Warto, aby mapa miała formę graficzną.. Deanwants to add new lecture to course 2. System asks for semester 3. Dean enters the semester. 4. DeanSystem asks for data of the lecture 2. 5. Dean Dean enters the semester 3. System asks. enters for Dean the data data of enters of the lecture the the semester lecture 6. System 4. Dean enters 2. adds the System the lecture data of the asks to lecture for the datalist of of the lectures lecture 5. System assigns 3. the Dean teacher enters to the the data lecture of the lecture 4. System prints the data of the student Lecture Student Course Teacher List of lectures Semester WMIiB 206 23 Odgrywanie opowiadań Spójność opowiadań można sprawdzić uzupełniając słownik. Deanwants to add new lecture to course 2. System asks for semester 3. Dean enters the semester 4. System asks for data of the lecture 5. Dean enters the data of the lecture 6. System adds the lecture to the list of lectures add new lecture enter ask for Lecture Student Course Teacher List of lectures Semester WMIiB 206 24 2
Mapowanie wymagań na strukturę systemu Opowiadania Warstwa interfejsu GUI presentation view (MVC*) Logika aplikacji workflow logic (Fowler 2002) controller (MVC*) Logika dziedziny data processing algorithms model (MVC*) *Reenskaug 977 Słownik dziedziny WMIiB 206 25 Koncepcja: program na poziomie wymagań Requirements Specification Language (RSL) Przypadek użycia Logika aplikacji Logika dziedziny Step Step Step Step Step Step Krok Action on a domain element Action on a domain element Action on a domain element Action on a domain element Action on a domain element Action on a domain element Action on a domain element Action on a domain element Akcja na elemencie dziedziny Element dziedziny Akcja(reguła biznesowa) WMIiB 206 26 3
Dygresja: wzorce logiki aplikacji enter book data validate book data register book data Library domain Step Step Step Step Book data validate enter sales item validate sales item register sales item E-shop domain Step Step Sales item Step Step Step Step validate WMIiB 206 27 :: OD WYMAGAŃ DO KODU :: 4
Całościowe rozwiązanie Requirements Specification Language: język formalny (DSL) dla specyfikowania typowej logiki aplikacji biznesowych + przetwarzane dane + elementy UI (brak logiki dziedzinowej) Składnia abstrakcyjna oparta na precyzyjnym metamodelu Składnia konkretna: graficzne diagramy + ograniczony język naturalny Elastyczna semantyka czasu wykonania W pełni automatyczna transformacja z języka RSL do kodu dla wybranych technologii Całościowe wsparcie narzędziowe (edytor języka RSL, automatyczna, parametryzowalna transformacja) Bardzo szybkie prototypowanie Całościowa realizacja idei MDD/MDA WMIiB 206 29 Zasada działania narzędzia? Wymagania Kompilator MOLA Transformati Program on on program MOLA Java formułowanie Edytor RSL kompilacja Maszyna Transformująca MOLA ReDSeeDS wyjście generacja Edytor UML zapis Model RSL wejście Model UML + kod metod eksport Repozytorium modeli WMIiB 206 30 5
AuthorDAO + AuthorDAO(Connection) + delete(int) :int + delete(object) :int + deletelist(list<?>) :int[] + insert(object) :int + insertlist(list<?>) :int[] + read(list<?>) :List<XAuthor> + read(object) :List<XAuthor> + read(int) :XAuthor + update(object, int) :int + updatelist(list<?>) :int[] «interface» IObjectDAO + delete(object) :int + delete(int) :int + deletelist(list<?>) :int[] + insert(object) :int + insertlist(list<?>) :int[] + read(int) :Object + read(list<?>) :List<?> + read(object) :List<?> + update(object, int) :int + updatelist(list<?>) :int[] BookDAO + BookDAO(Connection) + delete(object) :int + delete(int) :int + deletelist(list<?>) :int[] + insert(object) :int + insertlist(list<?>) :int[] + read(list<?>) :List<XBook> + read(int) :XBook + read(object) :List<XBook> + update(object, int) :int + updatelist(list<?>) :int[] util::connectionfactory + getconnection() :Connection + getinstance() :ConnectionFactory util::daomanager # connection :Connection = null {bag} # daoobject :IObjectDAO = null {bag} + executeandclose(daocommand) :Object + getdaoobject(object) :IObjectDAO + getinstance() :DAOManager + transaction(daocommand) :Object + transactionandclose(daocommand) :Object # getconnection() :Connection # gettxconnection() :Connection Wnętrze transformacji RSL metamodel MOLA program UML metamodel meta-level M2 «use» «use» «instanceof» «instanceof» Show course list meta-level M Course manager indexnumber name. Course manager selects courselist button 2. System fetches courselist 3. System showscourselist page => invoke: Add newcourse student savestudent deletstudent MOLA transformation engine Model in RSL Model in UML + methods WMIiB 206 3 Możliwości transformacji RSL to UML Component architecture model in UML Design model based on Abstracat Factory pattern Code skeleton in an objectoriented language RSL model RSL to code Platformspecific design model in UML Runnable application code RSL to SOA SOA model in SoaML Specific cloud platform model RSL to? * WMIiB 206 32 6
ContentPane VAddNewPublisherPage + actionperformed(actionevent) :void + init(ipresenter) :void WindowPane VIncorrectBookMessage + actionperformed(actionevent) :void + init(ipresenter) :void PAddReview + callingpclass :IInvoke {bag} + res :int {bag} + sentence_no :int {bag} + view :IView {bag} + _first(iinvoke) :void + returnfrominvoke(int) :void + SelectsAddReviewButton() :void + SelectsSaveReviewButton() :void ReviewDAO + deletelist(list<?>) :int[] «interface» IModel + DeletesAuthor() :void + DeletesBook() :void + FetchesAuthorList() :void + FetchesBook() :void + FetchesBookList() :void + SavesAuthor() :void + SavesBook() :void + SavesPublisher() :void + SavesReview() :void + ValidatesAuthor() :void + ValidatesBook() :void + ValidatesPublisher() :void ApplicationInstance EchoApp + closecurrentpage() :void + init() :Window + setpresenter(ipresenter) :void + showaddnewauthorpage() :void + showaddnewbookpage() :void + showaddnewpublisherpage() :void + showaddreviewpage() :void + showauthorlistpage() :void + showauthorsbooklistpage() :void + showbookdetailspage() :void + showbooklistpage() :void + showeditbookpage() :void + showhomepage() :void + showincorrectbookmessage() :void + showinvalidauthormessage() :void + showinvalidpublishermessage() :void PEditBook + callingpclass :IInvoke {bag} + res :int {bag} + sentence_no :int {bag} + view :IView {bag} + _first(iinvoke) :void + returnfrominvoke(int) :void + SelectsEditBookButton() :void + SelectsSaveBookButton() :void «interface» IObjectDAO + read(int) :Object + updatelist(list<?>) :int[] PublisherDAO + deletelist(list<?>) :int[] WindowPane VInvalidPublisherMessage + actionperformed(actionevent) :void + init(ipresenter) :void PAddNewPublisher + callingpclass :IInvoke {bag} + res :int {bag} + sentence_no :int {bag} + view :IView{bag} + _first(iinvoke) :void + returnfrominvoke(int) :void + SelectsAddNewPublisherButton() :void + SelectsAddPublisherButton() :void ModelImpl + DeletesAuthor() :void + DeletesBook() :void + FetchesAuthorList() :void + FetchesBook() :void + FetchesBookList() :void + SavesAuthor() :void + SavesBook() :void + SavesPublisher() :void + SavesReview() :void + ValidatesAuthor() :void + ValidatesBook() :void + ValidatesPublisher() :void ContentPane VEditBookPage + actionperformed(actionevent) :void + init(ipresenter) :void BookDAO + delete(int) :int Reguły transformacji i sterowanie Arch = MVP View = Echo JavaFX DL = DAO Transformation Transformation program RSL program to Code UML + method bodies V Course manag er Nonfunctional reqs. Show course list. Course manager selects course list button 2. System fetches courselist 3. System showscourselist page => invoke: Add newcourse input input MOLA transformati on engine output P M indexnumber student savestudent + delete(int) :int + delete(object) :int name deletstudent + deletelist(list<?>) :int[] + insert(object) :int + insertlist(list<?>) :int[] + read(list<?>) :List<?> + read(object) :List<?> + update(object, int) :int Model in RSL + delete(int) :int + delete(object) :int + delete(object) :int + delete(int) :int + BookDAO(Connection) + delete(object) :int + insert(object) :int + insertlist(list<?>) :int[] + insert(object) :int + insertlist(list<?>) :int[] + deletelist(list<?>) :int[] + insert(object) :int + read(int) :XReview + read(object) :List<XReview> + PublisherDAO(Connection) + read(list<?>) :List<XPublisher> + insertlist(list<?>) :int[] + read(int) :XBook + read(list<?>) :List<XReview> + ReviewDAO(Connection) + read(object) :List<XPublisher> + read(int) :XPublisher + read(list<?>) :List<XBook> + read(object) :List<XBook> + update(object, int) :int + updatelist(list<?>) :int[] + update(object, int) :int + updatelist(list<?>) :int[] + update(object, int) :int + updatelist(list<?>) :int[] WMIiB 206 33 Najpierw: piszemy wymagania add student to course User course add student to course remove student from course save course Developer Zrozumiałe, ale precyzyjne WMIiB 206 34 7
Potem: naciskamy guzik public void SelectsOK(XStudent pstudent){ int res; astudent = pstudent; mstudent.validates(astudent); res = mstudent.getresult(); if (res == 0) { vacknowledgement = new VAcknowledgement(); vacknowledgement.caddstudent = this; vacknowledgement.presents(); } else if (res == ) { verrormessage = new VErrorMessage(); verrormessage.caddstudent = this; verrormessage.shows(); } } WMIiB 206 35 Wygenerowana struktura systemu show() buttonclicked() Interfejs użytkownika Logika aplikacji Przejrzysta struktura logiczna Wybrana technologia save() verify() Logika dziedziny WMIiB 206 36 8
Wygenerowany działający kod aplikacji Interfejs użytkownika show() buttonclicked() Logika aplikacji res = mstudent.getresult(); if (res == 0) { vacknowledgement = new VAcknowledgement(); vacknowledgement.caddstudent = this; vacknowledgement.presents(); } else if (res == ) { verrormessage = new VErrorMessage(); verrormessage.caddstudent = this; verrormessage.shows(); } save() verify() Logika dziedziny W pełni działający kod Tylko dodaj logikę dziedziny WMIiB 206 37 Wymagania + technologia = działający system show() Add new course Show extended course list buttonclicked() res = mstudent.getresult(); if (res == 0) { vacknowledgement = new VAcknowledgement(); vacknowledgement.caddstudent = this; vacknowledgement.presents(); } else if (res == ) { verrormessage = new VErrorMessage(); verrormessage.caddstudent = this; verrormessage.shows(); } Course manager save() verify() Złożoność właściwa Złożoność poboczna WMIiB 206 38 9
:: SZCZEGÓŁY TRANSFORMACJI :: RSL metamodel: frazy (Phrase) Phrase NounPhrase object verbphrase VerbPhrase 0.. * * SimpleVerbPhrase ComplexVerbPhrase modifier 0.. Term Modifier noun Term Noun * verb Term Verb 0.. 0.. * Term Preposition preposition name :String name :String name :String name :String add selected student student to course WMIiB 206 40 20
RSL metamodel: pojęcia (Notion) source DomainElement Relationship * target DomainElement Actor * * name source Multiplicity 0.. target Multiplicity 0.. Notion * name NounPhrase DomainElement Multiplicity statement * DomainStatement statement name Phrase 0.. Course Manager course entry form show course entry form course addstudent to course remove student from course save course * 2..2 student modify class class check availability of class WMIiB 206 4 RSL metamodel: zdania SVO (SVOSentence) ConstrainedLanguageSentence source SVOSentence source subject PhraseHyperlink Subject subject * predicate PhraseHyperlink Predicate predicate * target target NounPhrase object verbphrase 0.. VerbPhrase Course manager System fills course entry form adds student to course WMIiB 206 42 2
RSL metamodel: scenariusze +scenariostep * {ordered} ConstrainedLanguageSentence +scenario 0.. ContrainedLanguageScenario SVOSentence ControlSentence +scenarios..* RSLUseCase ConditionSentence InvocationSentence +source +target InvocationRelationship Course manager Browse course details Add new course «invoke». Course manager selects add course option 2. System shows course entry form 3. Course manager fills course entry form 4. Courses manager selects save course option 5. System validates course cond: course valid 6. System saves course invoke: Browse course details WMIiB 206 43 0..* Przykład RSL do kodu User Add new book «invoke» Add new author «trigger» save book button «trigger» add new book button. Userselects add new book button 2. System shows add new book page. Userselects add new book button invoke Add new author 2. Systemshowsadd newbook page 3. User enters book invoke 4. User selects save book button invoke 5. System validates book 3. User enters book cond: book valid 6a. 4. System User selects saves book save book button 5. System validates book cond: book invalid 6b. System shows invalid book message «list» book list «frame» addnewbookpage * book «message» invalid book message * * author «attr» title: Text «attr» hardcover: Boolean «attr» issuedate: Date WMIiB 206 44 22
Generowanie interfejsów «interface» IView User Addnew book. Userselectsadd newbook button. Userselectsadd newbook button 2. System shows add new book page 2. invoke Systemshowsaddnewbook Add author page 3. User invoke enters book 4. User invoke selects save book button 5. System 3. Uservalidates enters book book 4. cond: User selects book valid save book button 6a. System saves book 5. System validates book cond: book invalid user-totrigger sys-toconcept sys-to-frame sys-tomessage + setpresenter(ipresenter) :void + showaddnewauthorpage() :void + showaddnewbookpage() :void + showaddnewpublisherpage() :void + showbooklistpage() :void + showinvalidauthormessage() :void + showinvalidbookmessage() :void + showinvalidpublishermessage() :void «interface» IPresenter + SelectsAddNewAuthorButton() :void + SelectsAddNewBookButton() :void + SelectsAddNewPublisherButton() :void + SelectsAddPublisherButton() :void + SelectsDeleteBookButton() :void + SelectsSaveAuthorButton() :void + SelectsShowBookListButton() :void + SelectsSaveBookButton() :void + setmodel(imodel) :void + setview(iview) :void V P 6b. System shows invalid book message «interface» IModel + DeletesBook() :void + FetchesBookList() :void + SavesAuthor() :void + SavesBook() :void + SavesPublisher() :void + ValidatesAuthor() :void + ValidatesBook() :void + ValidatesPublisher() :void M WMIiB 206 45 Semantyka scenariuszy 3 4 2 User IView User Addnew book. Userselectsadd newbookbutton. Userselectsadd newbookbutton 2. Systemshows add new book page 2. invoke Systemshows Addnewadd author new book page 3. User invoke enters book 4. User invoke selects save book button 5. 3. System User enters validatesbook 4. User cond: selects booksave validbook button 6a. 5. System savesbook validatesbook cond: book invalid 6b. System showsinvalid book message invoke 4 public class PresenterImpl implements IPresenter { private IModel model; private IView view; public void SelectsAddNewBookButton() { view.showaddnewbookpage(); } public void SelectsSaveBookButton(){ int res = model.validatesbook(); if ( res == /*book valid*/) { model.savesbook(); } else if ( res == 2 /*book invalid*/) { view.showinvalidbookmessage(); } } public void SelectsAddNewAuthorButton(){ // code for Add new author use case... } 6a 2 5... IModel WMIiB 206 46 23
Generowanie UI User Addnew book. Userselectsadd newbookbutton 2. System showsadd new bookpage. invoke Userselectsadd Addnewauthor newbookbutton 3. 2. User System entershowsadd book new bookpage 4. User invoke selects save book button 5. System invoke validatesbook 3. User enters book cond: bookvalid 4. User selects save book button 6a. 5. System System saves validatesbook book cond: bookinvalid 6b. System showsinvalidbook message «frame» booklist page «list» booklist «trigger» savebookbutton «frame» addnewbookpage * book «message» invalidbookmessage * * author Book BookList list Page «attr» title: Text «attr» hardcover: Boolean «attr» issuedate : Date Book List Title Issue date Hard cover Author Addnewbook AddNew BookPage Book Book Title Author Issue date Text Field Select author(s) 203-04-08 Title Author Issue date Hard cover Text Field Select author(s) 203-04-08 Invalid book message The entered book data is invalid OK Hard cover < Back Save book Add new author < Back WMIiB 206 47 Generowanie DTO book * * author «attr» title: Text «attr» hardcover: Boolean «attr» issuedate: Date «attr» name: Text «attr» birthyear: Number XBook - xbookid :int - title :String - issuedate :Date - hashardcover :boolean XAuthor - xauthorid :int - authorsname :String - birthyear :int Auto-generated getters and setters + getauthorlist() :List<XAuthor> + gethashardcover() :boolean + getid() :int + getissuedate() :Date + gettitle() :String + setauthorlist(list<xauthor>) :void + sethashardcover(boolean) :void + setid(int) :void + setissuedate(date) :void + settitle(string) :void -booklist * -authorlist + getauthorsname() :String + getbirthyear() :int * + getbooklist() :List<XBook> + getid() :int + setauthorsname(string) :void + setbirthyear(int) :void + setbooklist(list<xbook>) :void + setid(int) :void Auto-generated getters and setters WMIiB 206 48 24
Generowanie DAO author * * book «interface» IObjectDAO CRUD operations + delete(object) :int + delete(int) :int + deletelist(list<?>) :int[] + insert(object) :int + insertlist(list<?>) :int[] + read(int) :Object + read(list<?>) :List<?> + read(object) :List<?> + update(object, int) :int + updatelist(list<?>) :int[] util::connectionfactory + getconnection() :Connection + getinstance() :ConnectionFactory AuthorDAO BookDAO + AuthorDAO(Connection) + delete(int) :int + delete(object) :int + deletelist(list<?>) :int[] + insert(object) :int + insertlist(list<?>) :int[] + read(list<?>) :List<XAuthor> + read(object) :List<XAuthor> + read(int) :XAuthor + update(object, int) :int + updatelist(list<?>) :int[] + BookDAO(Connection) + delete(object) :int + delete(int) :int + deletelist(list<?>) :int[] + insert(object) :int + insertlist(list<?>) :int[] + read(list<?>) :List<XBook> + read(int) :XBook + read(object) :List<XBook> + update(object, int) :int + updatelist(list<?>) :int[] util::daomanager # connection :Connection = null {bag} # daoobject :IObjectDAO = null {bag} + executeandclose(daocommand) :Object + getdaoobject(object) :IObjectDAO + getinstance() :DAOManager + transaction(daocommand) :Object + transactionandclose(daocommand) :Object # getconnection() :Connection # gettxconnection() :Connection WMIiB 206 49 :: PODSUMOWANIE :: 25
Dla kogo jest ReDSeeDS? Sformułowanie wymagań Sprecyzowanie wymagań Zaprojektowanie systemu Zamawiający Oszacowanie pracochłonności Przetestowanie systemu Zamawiający Wykonawcy Zaimplementowanie systemu Organizacje zamawiające oprogramowanie Firmy produkujące oprogramowanie Osoby amatorsko tworzące oprogramowanie WMIiB 206 5 Aktualny status Dostepna pełna specyfikacja języka RSL ReDSeeDS Engine ver. 0.6.5 dostępna on-line Edytor RSL: przypadki użycia, scenariusze, pojęcia dziedzinowe Edytory graficzne Edytory tekstowe Automatyczne tworzenie modelu dziedziny Zintegrowana maszyna transformacji Integracja z Enterprise Architect i Modelio Generacja UML i kodu Java + MVP + Swing Java + MVP + Echo web framework WMIiB 206 52 26
Przyszłość Rozszerzenie możliwości generacji kodu Rozszerzenie docelowych technologii UI (JavaFX, Flex, Android SDK, ) Rozszerzenie docelowych modeli architektury i języków Nowe zastosowania: odzyskiwanie i migracja wyeksploatowanych systemów Projekt REMICS (www.remics.eu) Odzyskiwanie na podstawie obserwowalnego zachowania (zapisywanie skryptów UI) do RSLa i generacja w nowej technologii Niezależna od pokręconego wnętrza wyeksploatowanego systemu WMIiB 206 53 www.redseeds.eu Dziękuję za uwagę! 27