Artikel

 
September 2009 | Artikel

JRuby: Aller Anfang ist leicht Fortsetzung, Teil 3

Teil 1   Teil 2   Teil 3   Teil 4   

Eine Schnittstelle implementieren
Das folgende Beispiel zeigt, wie eine Schnittstelle namens IPerson von einer Ruby-Klasse implementiert wird. Zunächst wird die Schnittstellendefinition gezeigt:

  1. package com.railsexperts.jruby.call2java;
  2. public interface IPerson {
  3. public String getName();
  4. public String getEmailAddress();
  5. }


IPerson kennt zwei Methoden: getName und getEmailAddress. Diese müssen von der Ruby-Klasse implementiert werden (Listing 2).

Listing 2
  1. include Java
  2. include_class "java.util.ArrayList"
  3. include_class "com.railsexperts.jruby.call2java.IPerson"
  4. class CallingJava
  5. include IPerson
  6. def getName
  7. "Michael"
  8. end
  9. def getEmailAddress
  10. "mjohann@rails-experts.com"
  11. end
  12. def initialize
  13. super
  14. @msgList = ArrayList.new
  15. @message = "Hallo aus JRuby."
  16. end
  17. def say_hello
  18. puts @message
  19. end
  20. def add_message(msg)
  21. @msgList.add(msg)
  22. end
  23. def output_messages
  24. puts "Anzahl der Nachrichten = #{@msgList.size}"
  25. @msgList.each do |msg|
  26. puts msg
  27. end
  28. end
  29. end
  30. p = CallingJava.new
  31. puts p.class
  32. puts "Diese Klasse implementiert IPerson" if p.is_a? IPerson
  33. puts p.getName
  34. puts p.getEmailAddress
  35. p.say_hello
  36. p.add_message "Hallo zusammen"
  37. p.add_message "Tach auch"
  38. p.add_message "Moin, moin"
  39. puts p.output_messages


Der Schlüssel ist die include-Anweisung innerhalb der Klassendefinition. Eine Schnittstelle aus Java wird so als Module-Mixin implementiert und eingebunden. Damit muss die Ruby-Klasse die beiden Methoden getName und getEmailAddress implementieren. Dies wird auch prompt im weiteren Verlauf des Beispiels erledigt. Konkret werden im Beispiel einfach passende Strings zurückgegeben. Im Konstruktor der Ruby-Klasse legt man eine Instanz von java.util.ArrayList an und weist der Instanzvariablen @message ein String-Objekt zu, das von der Methode say_hello ausgegeben wird. Die Methode add_message fügt Textnachrichten in die ArrayList-Instanz ein. Beim Aufruf der Methode output_messages sorgt dann eine Iteration für die Ausgabe aller Objekte in der ArrayList. Das Skript am Ende des Listings zeigt dann die Anwendung und erzeugt folgende Ausgabe:

CallingJava
Diese Klasse implementiert IPerson
Michael
mjohann@rails-experts.com
Hallo aus JRuby.
Anzahl der Nachrichten = 3
Hallo zusammen
Tach auch
Moin, moin
nil

Mit dieser einfachen Demonstration haben wir die wichtigsten Informationen für die Integration vorhandener Java-Klassen in ein Ruby-Programm unter JRuby dargestellt. Der nächste Abschnitt zeigt, wie man mit einfachen Mitteln eine Swing-Anwendung in Ruby schreibt.

Eine Swing-Anwendung mit JRuby
Das folgende Beispiel zeigt Ihnen, wie Sie eine Swing-Anwendung mit JRuby erstellen. Hierzu dient eine einfache To-Do-Liste, die das Hinzufügen und Löschen von Einträgen erlaubt (Abb. 1).

Zunächst wird eine Klasse namens RubySwingTodo erstellt, die in die Datei ruby_swing_todo.rb geschrieben wird:

include Java
class RubySwingTodo
end

Damit wird wie üblich die Java-Funktionalität in unseren Scope geholt. Dann benötigen wir ein kleines Script, das eine Instanz von RubySwingTodo erstellt und eine Methode, die ich hier run genannt habe, um die Anwendung zu starten:

todo = RubySwingTodo.new
todo.run

Teil 1   Teil 2   Teil 3   Teil 4   

Anzeige

Kommentare

Gravatar Wolfgang Schell 08.09.2009
um 16:24 Uhr
Warum Groovy und Grails wegen der besonderen Nähe JRuby's zu Rails zweite Wahl sein soll verstehe ich ja nicht. Ebenso wenig warum man bei Rails "an der Quelle" sitzt Grails aber nur ein Nachbau (und deswegen "schlechter"???) ist. Eine große Community hat Grails übrigens auch!Ich denke dass sich Grails und Rails eher gegenseitig befruchten könn(t)en. Klar Grails hat viele Konzepte von Rails übernommen hat aber auch genug eigene entwickelt und ist vor allem optimal an die Java-Plattform angepasst während Rails "nur" kompatibel gemacht wurde. Meiner Meinung nach wäre es besser wenn man wertfrei über die Vorteile von Web Frameworks mit CoC und DRY im Allgemeinen schreibt und vielleicht neue Entwickler dafür interessiert. Auf Grails herabzuschauen weil es später kam und zufällig nicht in der heiligen Sprache Ruby geschrieben ist halte ich nicht für sinnvoll. Die Auswahl zwischen Grails und Rails (oder Lift oder sonstigen Frameworks) kann man dann getrost dem mündigen Entwickler und seinen Präferenzen bzw. seinem persönlichen Geschmack überlassen. #zitieren

Anzeige

zurück zum Seitenanfang