Ruby on Rails Im Rahmen des Seminares Programmiersprachen SS09 Steffen Schildknecht
Einleitung Ruby Interpretierte, dynamische Skriptsprache Everything is an object human-oriented Ruby on Rails Serverseitiges Framework für Datenbankgestützte Webapplikationen Model-View-Controller Struktur Don't repeat yourself Convention over configuration
Ruby Konzept und Implementierung: Yukihiro Matsumoto, 1995 Open Source Interpreter Keine Spezifikation 2000: Programming Ruby, Pragmatic Programmers Verwandschaften Smalltalk: Dynamik, Objektorientierung - Kontrollstrukturen Perl: Semantische Eigenschaften (Regex), Standardbibliothekenumfang Python als Negativbeispiel: Aufgesetzte Objektorientierung
Ruby - Charasterika Alles ist ein Objekt, keine primitive types Skriptsprache: Interpretiert, großer Standardbibliothekenumfang Einfachvererbung, Mixins Variablen = Referenzen auf Objekte Typenlos Duck Typing, stark und dynamisch If it walks like a duck and quacks like a duck, it's probably a duck Keine impliziten Typkonversionen Type-check zur Laufzeit
Ruby - Charasterika II Anwendung zur Laufzeit erweiterbar, eval Reflektive Eigenschaften Object Space Unterstützte Methoden, Vererbungsrelationen Exceptions Objektorientiert (Java), weitere Ablaufbefehle Garbage Collector Mark-and-sweep Ruby Threads Green threads
Ruby - Syntax C/Java Familie Zeilenorientiert, befehlsabschließende Semikolons optional Runde, eckige Klammern oftmals optional Namenskonventionen zur Variablenbenennung variable = lokale Variable @variable = Instanzvariable @@variable = Klassenvariable $variable = Globale Variable Analog: Konstante Syntactic Sugar : Methodennamen wie Operatoren
Ruby - Semantik Keine Initialisierung von Variablen nötig Duck Typing: Prüfe Objekt nur auf Methode, nicht Typ Verminderte Typsicherheit Fehler tritt erst zur Laufzeit auf Jede Variable eines Objekts privat attr_accessor, attr_reader, attr_writer
Ruby - Semantik - Blöcke Block = Codefragment Nimmt Parameter entgegen Wird als Parameter übergeben Aufruf über yield def blocktest for i in 0..10 return i if yield(i) end end result = blocktest do x x**2 > 20 end Weiteres Beispiel: Array.each Instanziieren eines Blocks: Proc-Objekt Eigener Variablenkontext und -zustand
Ruby - Semantik - Mixins Mixin Einfügen von Instanzmethoden in Klassen Effizientes Erweitern von Klassendefinitionen Keyword include Beispiel: Comparable class Song include Comparable def initialize(name, artist, duration) @name = name @artist = artist @duration = duration end def <=>(other) self.duration <=> other.duration end end Song unterstützt nun zusätzlich <,<=,>,>=,==. Mixin agiert effektiv als Superklasse.
Ruby on Rails Serverseitiges Framework zur Entwicklung von Datenbank-gestützten Webanwendungen Ruby Implementierung Model-View-Controller (MVC) Struktur 2003 von David Heinemeier Hansson erstellt Open Source
Ruby on Rails - Convention over Configuration Intelligente Standards Vermeiden manueller Konfiguration (Routings) Stattdessen Namenskonventionen Für Beziehungen im MVC-Modell Aussagekraft von Name und Ort einer Datei Beispiel: Erzeugen eines Models Person erzeugt Tabelle People
Ruby on Rails Don't repeat yourself (DRY) "Every piece of knowledge must have a single, unambiguous, authoritative representation within a system." Korrekte Kapselung Ausschliessen von Codedopplung Durchgehend MVC-legitime Orte zum Speichern mehrfachgenutzten Codes
Ruby on Rails Model View Controller Model Repräsentiert Klasse von Objekten (Entity-Set, Tabelle) Instanziiertes Model repräsentiert Objekt (Entity, Zeile) View Generiert aus Daten vom Controller User-Interface Leitet User-Eingaben an Controller weiter Controller Nimmt User-Eingaben aus View entgegen Operiert auf Models Gibt Daten an View zurück Sitz der modelübergreifenden Business-Logik
Ruby on Rails Model View Controller II 1. Aufruf einer URL/eines Formulars wird zu einer Methode ( Action ) eines Controllers geroutet. 2. Action operiert auf einem oder mehreren Models. Modelinstanzen werden aus der DB gelesen. 3. Action stellt einem View Daten zur Verfügung, welcher diese in einer geeigneten Repräsentation darstellt.
Ruby on Rails - Model - Active Record ORMapper: Model-Objekte/Klassen <-> Relationale DB DRY: Attribute von Objekten nur in Spalten gespeichert Dynamisch erzeugte Setter und Getter Veränderung an Model-Attributen über Migration Pure Ruby Skript Abstrahiert von Eigenheiten verschiedener DBs Methoden zum Erstellen, Finden, Updaten und Löschen von Objekten Validierungen Beziehungen zu anderen Models (Relationship) Demo: Erzeugen DB, Model, Validierung, Migration, console
Ruby on Rails - Controller Action Controller Operiert auf Model-Objekten Ein Controller mehrere Actions z. B. Create, Read, Update, Delete (CRUD) Navigieren zwischen Views URL-Routing Standard: controller/action/id Speichern von Daten in Session-Hash Demo: Erzeugen Controller mit Actions readall, create, delete
Ruby on Rails - View - Action View HTML-, XML-Dokument mit Inline Ruby <%... %> zum Steuern des Programmflusses <%=... %> zum Einfügen von HTML-Elementen Zugriff auf im Controller definierten Instanzvariablen Helper die das Erstellen von Formularen und anderen HTML-Elementen erleichtern, Script.aculo.us DRY: Auslagern von Seitenlayouts in Layoutdatei Demo: View mit Liste, Formular und Löschfunktion
Ruby on Rails - Architektur
Ruby on Rails - Ausblick Ruby Keine Desktop-Anwendungen Performance-Schwierigkeiten Jruby, IronRuby Ruby on Rails RIA, Web 2.0,... Hype Twitter: skalierbar, zuverlässig einsetzbar Duck-Typing: Backend zu Scala portiert