2. Vogliamo permettere ad un utente non esperto di
programmazione di realizzare una applicazione che
rispecchi le sue necessità.
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
4. Creare uno strumento di sviluppo che si occupi
direttamente di generare il codice, lasciando all’utente
solo l’onere di spiegare quali sono i suoi requisiti.
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
6. Generazione di codice:
◦ Per shell
◦ Per semplici applicazioni procedurali
Analisi dei framework
◦ Solo analisi di API
◦ Analisi di codice sorgente
◦ Analisi di errori nel codice
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
7. Cambia l’approccio
◦ Partendo dalle stesse premesse(generazione automatica di
codice
◦ L’aggiunta di un linguaggio per descrivere i requisiti
◦ L’aggiunta di una analisi approfondita della programmazione
ad oggetti
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
13. Come è fatta un’applicazione?
◦ Boundary: interfacce disponibili verso l’esterno
◦ Control: parte operativa dell’applicazione
◦ Entity: parte strutturale dell’applicazione
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
14. Come è fatta un’applicazione?
◦ Boundary: interfacce disponibili verso l’esterno
◦ Control: parte operativa dell’applicazione
◦ Entity: parte strutturale dell’applicazione
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
15. Come è fatta un’applicazione?
◦ Boundary: interfacce disponibili verso l’esterno
◦ Control: parte operativa dell’applicazione
◦ Entity: parte strutturale dell’applicazione
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
16. Come è fatta un’applicazione?
◦ Boundary: interfacce disponibili verso l’esterno
◦ Control: parte operativa dell’applicazione
◦ Entity: parte strutturale dell’applicazione
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
17. Rappresentare cosa deve essere possibile fare con le
entità descritte nel dominio
UML offre un diagramma molto semplice e poco
sfruttato:
◦ Casi d’Uso
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
18. Fornisce
◦ Attore (entità attiva)
◦ Caso (operazione o insieme di operazioni)
◦ Relazioni tra casi (inclusione, estensione)
◦ Scenari (rappresentazioni pratiche e verbali di casi)
Vogliamo una applicazione uc sample
Che elenchi i link in una
pagina web
v iew Links on
Webpage
Utente
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
19. A partire dal modello UML semplificato, è possibile
definire un linguaggio (OOGLang):
Domain: webpages
Actor Utente
: view links on Webpage
End actor uc sample
v iew Links on
Webpage
Utente
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
20. La rappresentazione semplificata nella struttura ma
aumentata di semantica nelle operazioni permette di
trasformare come semplice passaggio logico il caso
d’uso in interfaccia
class sample_class
Domain: webpages
«interface»
Actor Utente IUtente
: view links on page
+ ViewLinks(webpage) : List<Link>
End actor
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
21. Dalla definizione del dominio abbiamo ottenuto
l’Entity
Dall’introspezione e dalla creazione delle interfacce
dichiarate nel linguaggio appena definito abbiamo la
struttura di base del boundary e alcune relazioni
logiche tra elementi del contol.
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
22. IUtente
Link Sylesheet
Utente
webpage
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
24. La Pianificazione è essenzialmente un problema di
ricerca. (Hendler, Tate, & Drummod, 1990)
In A.I. è un problema di ricerca in un numero illimitato
di stati
◦ Diventano fondamentali le operazioni
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
25. Diventa quindi fondamentale il problema della
conoscenza.
Diversi sistemi di pianificazione hanno rappresentato in
modo diverso le stesse informazioni:
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
26. Le operazioni dipendono dall’ambiente nel quale si va
ad operare.
Dipendono quindi dal framework di sviluppo ad oggetti
scelto per creare l’applicazione.
Diventa quindi fondamentale poter andare ad
analizzare il framework per conoscere le operazioni
possibili
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
27. E’ esperienza di ogni sviluppatore che utilizzi linguaggi
ad oggetti, che la conoscenza di questo modello di
programmazione si basi sostanzialmente su tre tipi di
conoscenza:
◦ Il modello ad oggetti come concetto teorico
◦ Il framework come insieme di librerie di operazioni
◦ Il framework come insieme di tipi di dato e trasformazioni
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
28. UML (di nuovo) offre un diagramma specifico per la
modellazione di oggetti:
◦ Diagramma delle classi
Questo diagramma, come tutti gli altri definiti nel
modello UML, è descritto tramite un meta-modello
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
29. Utilizzando il meta-modello UML è possibile descrivere
il modello ad oggetti tramite un insieme di relazioni
strutturali.
◦ Generalizzazione e realizzazione
◦ Aggregazione e composizione
◦ Uso
◦ Riferimento
Inoltre ogni entità contiene ulteriori elementi quali
◦ Operazioni
◦ Campi
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
30. class sample_class
«interface»
IUtente
+ ViewLinks(webpage) : List<Link>
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
31. Con la diffusione della programmazione ad oggetti, la
frequente esposizione a problemi simili ha portato alla
generazione di famiglie di soluzioni modulari
I pattern sono suddivisi in 3 famiglie
◦ Strutturali
◦ Creazionali
◦ Comportamentali
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
32. I pattern creazionali cambiano il ciclo di vita degli
oggetti
◦ Il costruttore non si trova (a volte) nel tipo di dato ma in altre
strutture dati
Come riconoscere i pattern per creare operazioni
specializzate nella creazione degli oggetti?
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
33. Un modo per rappresentare relazioni fra entità è RDF
Oggetto
Relazione
Soggetto
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
34. Un modo per rappresentare relazioni fra entità è RDF
Oggetto
Relazione
Soggetto Oggetto
Oggetto
Oggetto
Oggetto
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
35. Oggetto
Oggetto
Relazione
Soggetto
Oggetto Oggetto
Relazione
Soggetto Oggetto
Un modo per rappresentare relazioni fra entità è RDF
o Oggetto
Relazione
Soggetto
Oggetto Oggetto
Oggetto Oggetto
Relazione
to Oggetto
Oggetto
Relazione
Oggetto
Oggetto Oggetto
Oggetto GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
Oggetto
PIANIFICAZIONE
36. Il modello UML permette di esprimere relazioni fra tipi
di dato
◦ Diventa possibile rappresentare tutto il framework come
enorme grafo di relazioni ontologiche
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
37. IsAbstract
Prototype
class UC
Client Prototype
-prototype
+ Operation() + Clone()
p=
prototype->Clone()
Clone
HasParent
ConcretePrototype1 ConcretePrototype2
+ Clone() + Clone()
return copy of return copy of
self self
ConcretePrototype1
ConcretePrototype2
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
38. Possiamo quindi aggiungere le operazioni di creazione
degli elementi partecipanti a pattern creazionali
class UC
Singleton
- singletonData
- uniqueInstance
+ GetSingletonData()
+ Instance()
return uniqueInstance
+ SingletonOperation()
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
39. Quindi, riassumendo
obj ect Comunication analy...
UmlStore
RDFStore
Framework Analysis
PatternSearch
OperationStore
Planner
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
40. Un paio di numeri:
◦ 800.000 operazioni
◦ 1.250.000 relazioni
◦ 1.500 pattern creazionali
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
41. Ora con le operazioni disponibili è possibile pianificare
◦ Pianificazione ad ordinamento Parziale
Permette di evitare Anomalia di Sussman
Elimina la linearizzazione dall’ordinamento parziale
◦ Pianificazione Parallela
Distribuisce il carico di lavoro
Implica una distribuzione dello stato
Tempi: 1.5 - 2.5 giorni di calcoli
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
42. public class WebsiteManager
{
List<Link> GetLinks(Website website) {
return new List<Link>(website.Links);
}
}
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
43. public class WebsiteManager
public class WebsiteManager WebsiteManager
public class
{ public class
public class WebsiteManager WebsiteManager
{ {
List<Link> GetLinks(Website website) {
{
{ public class WebsiteManager public class WebsiteManager
List<Link> GetLinks(Website website) {
List<Link> GetLinks(Website website) {
return new GetLinks(Website website) {
List<Link> List<Link>(website.Links);
List<Link> GetLinks(Website website) {
{ {
public class WebsiteManager return new List<Link>(website.Links);
return new List<Link>(website.Links);
public class WebsiteManager } GetLinks(Website website)GetLinks(Website website) {
List<Link> } return new List<Link>(website.Links);
return new List<Link>(website.Links); List<Link> {
{ }
public }class WebsiteManager
{ } }
List<Link> GetLinks(Website website) { }return new List<Link>(website.StyleSheets);
return new List<Link>(website.Links);
}
{ } List<Link> GetLinks(Website website) {
}
return newclass WebsiteManager }
} List<Link>(website.Links);
public
List<Link> new List<Link>(website.Links); class WebsiteManager
return GetLinks(Website website)public
}{
}
} public class WebsiteManager
{
} return new List<Link>(website.Links); {
} List<Link> {GetLinks(Website website) {WebsiteManager
}
} public class WebsiteManager
List<Link> GetLinks(Website website) {
public class
List<Link> GetLinks(Website website) {
return new List<Link>(website.Links);
} {{ return new List<Link>(website.Links);
return new List<Link>(website.Links);
} List<Link> GetLinks(Website website) {{
}
List<Link> GetLinks(Website website)
}
}
} return new List<Link>();
return new List<Link>(website.Links);
}
}}
}}
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
44. Applicazione di matematica
Dobbiamo convertire una stringa in numero:
◦ Numero legato alla vita di una persona? (quindi gestibile
tramite convertitore per client di posta?)
◦ Numero legato a database?
◦ Numero legato a matematica?
(Quindi da convertire con cura)
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
45. Applicazione di matematica
Dobbiamo convertire una stringa in numero:
◦ Numero legato alla vita di una persona? (quindi gestibile
tramite convertitore per client di posta?)
◦ Numero legato a database?
◦ Numero legato a matematica?
(Quindi da convertire con cura)
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
46. Applicazione di matematica
Dobbiamo convertire una stringa in numero:
◦ Numero legato alla vita di una persona? (quindi gestibile
tramite convertitore per client di posta?)
◦ Numero legato a database?
◦ Numero legato a matematica?
(Quindi da convertire con cura)
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
47. Applicazione di matematica
Dobbiamo convertire una stringa in numero:
◦ Numero legato alla vita di una persona? (quindi gestibile
tramite convertitore per client di posta?)
◦ Numero legato a database?
◦ Numero legato a matematica?
(Quindi da convertire con cura e
Con la libreria adatta)
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
48. Poter sapere quale operazione ha senso è quindi un
problema centrale
◦ Sapere quale strada percorrere generalmente aiuta
Google Code Search, Koders
◦ Forniscono ricerca di codice in progetti open-source
◦ Manca una API
Google Code, SourceForge
◦ Forniscono supporto ai progetti (quindi classificazione)
◦ Forniscono spazio per versioning
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
49. Il problema:
◦ L’accesso ai sistemi di versioning è lungo e molto oneroso
◦ L’analisi del codice implica valutazioni complesse anche da un
punto di vista concettuale: diversi team hanno diversi stili di
codifica
◦ E’ necessario un periodo di “allineamento” ontologico tra i
diversi sistemi di gestione dei vari progetti.
Vantaggi
◦ L’accesso a sistemi di versioning permette di considerare
anche i bug e quindi valutare sia in positivo che in negativo le
operazioni all’interno del framework
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
50. Una volta effettuata la pianificazione è possibile
perendere direttamente il risultato e tramite parser
trasformarlo in codice del linguaggio desiderato o in un
eseguibile.
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
51. E’ possibile analizzare un framework complesso senza
conoscere il codice sorgente
La mancanza di Euristiche fa aumentare in modo
spropositato i tempi di esecuzione della pianificazione
con un numero molto alto di operazioni
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE
52. Java Euristiche Nuovi
metodi di
analisi del
codice
GENERAZIONE AUTOMATICA DI CODICE
ORIENTATO AGLI OGGETTI TRAMITE
PIANIFICAZIONE