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