Domain-specific languages

Werbung
Domain-specific
languages
Mit Beispiel in Android
Referentin: Deasy Sukarya
Kolloquium: Forschungsprobleme der linguistischen Datenverarbeitung
SS14
Gliederung
1.
2.
3.
4.
Was sind Domänenspezifische Sprachen?
Klassifikation von DSLs
Vor-und Nachteile
Beispiel: Android - Fluent Interface für
Touchgesten
Was sind Domänenspezifische Sprachen?
❏ Sprachen mit Spezialisierung auf eine
Domäne
❏ Aufgabe: Darstellung der Probleme und
effiziente Lösung anbieten
❏ Außerhalb der Domäne kaum oder gar nicht
nutzbar
❏ Beispiel: CSS
Entwurf eines DSLs
❏ Beschreibung der Entitäten und Prozesse
❏ Beispiel: Betriebssystem
❏ Entitäten => Ordner und Dateien
❏ Prozess => Verschieben eines Ordners
Entwurf eines DSLs
❏ DSL bietet Lösung für ungelösten Prozess
(“Verschieben eines Ordners”)
❏ Werkzeug soll von DSL bereitsgestellt
werden
Klassifikation von DSLs
❏ Interne DSLs (Fluent Interface / Fluent API)
❏ Externe DSLs
Interne DSLs
❏ Oder: Embedded DSL, Fluent Interface
❏ Verwendung der Hostsprache (Java, Ruby
etc) für Entwicklung der Sprache
❏ Syntax der Hostsprache
Interne DSLs - Fluent Interface
❏ Annäherung an natürlicher Sprache =>
Fluent API
❏ Umsetzung: Methodenketten und
eingebettete Funktionen
❏ Beispiel in Java: Versenden einer Mail
Klassische Umsetzung in Java
Mailer mailer = new Mailer();
mailer.from("[email protected]");
mailer.to("[email protected]");
mailer.subject("Testing");
mailer.message("Testtest, Blabla");
mailer.send();
Fluent Interface in Java
Mailer.mail() //Static-Methode
.from("[email protected]")
.to("[email protected]")
.subject("Testing")
.message("Testtest, Blabla").send();
Externe DSLs
❏ Freie Definition der Syntax
❏ Mehr Flexibilität und Ausdrucksstärke
❏ Parser, Code Generator etc. muss selbst
erstellt werden
❏ Tool zur Vereinfachung: Xtext
Vorteile
❏ Geringere Kosten nach Entwicklung, gute
Lesbarkeit
❏ Nutzbar für Spezialisten der Domäne mit
wenig IT-Kenntnissen
❏ Hoher Grad an Abstraktion
Nachteile
❏ Langwierige Entwicklung
❏ Genaues Fachwissen über die Domäne
nötig
❏ Anzahl der verwendeten Sprachen steigt
Beispiel: Touchgesten in Android
Android-Architektur
Activity
public class StartActivity
View
extends Activity {
@Override
public void onCreate(Bundle
savedInstanceState) {
super.
onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
Anwendungskomponenten
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
// Tu irgendwas
break;
case MotionEvent.ACTION_MOVE:
// Tu irgendwas
break;
case MotionEvent.ACTION_UP:
// Tu irgendwas
break;
}
return true;
Nicht gut lesbar? Was tun?
Lösung: Fluent API für Touchgesten
Tutorial mit API http://www.codeproject.com/Articles/527608/A-Domain-SpecificLanguage-for-Android-touch-event
public TouchGesture create()
{
TouchGesture gesture = new
("SampleGestureName");
TouchGesture
this.Create(gesture)
.TouchDown()
.If(onCircle())
.AndNext().Move()
.If(within.millimeters(30).fromTouchDown(1))
.do2(showMessage("Nachricht nach 30mm!"));
return gesture;
}
Vielen Dank!
Literatur
Ghosh, Debasish. DSLs in action. Greenwich, Conn.: Manning, 2011.
"A Domain Specific Language for Android touch events: Part 1: Description and usage of the DSL." CodeProject. http://www.codeproject.com/Articles/527608/A-Domain-Specific-Language-for-Androidtouch-event (accessed May 26, 2014).
"Creating DSLs in Java, Part 1: What is a domain-specific language?." JavaWorld. http://www.
javaworld.com/article/2077865/core-java/creating-dsls-in-java--part-1--what-is-a-domain-specificlanguage-.html (accessed May 26, 2014).
Herunterladen