Download - An Introduction to Ruby
![Page 2: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/2.jpg)
Überblick
Einführung
Getting started
Grundlagen
Blocks und Iteratoren
Goodies
Resources
Ruby on Rails - Übung
2
![Page 3: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/3.jpg)
Einführung
3
![Page 4: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/4.jpg)
Ruby?
Ruby ist eine vollständig objektorientierte Skriptsprache
Das Beste von Perl und Python
Public release 1995 durch Yukihiro Matsumoto, a.k.a “Matz”
4
![Page 5: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/5.jpg)
Wichtigste Eigenschaften
Interpretierte Skriptsprache
Aktuell ist Ruby 1.8.2
Komplett Objekt-Orientiert
Dynamische Typbindung
Verfügbar über GPL oder eigene Lizenz
The 5 E’s (by DHH)
5
![Page 6: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/6.jpg)
The 5 E’s
Everything is an object
Elegant blocks give inline power
Exploring with reflection
Extending at runtime
Extensive standard libray
6
![Page 7: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/7.jpg)
Beispiel 05.times do puts “ruby ist cool”.upcase end
Output:RUBY IST COOL
RUBY IST COOLRUBY IST COOL
RUBY IST COOLRUBY IST COOL
7
![Page 8: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/8.jpg)
Getting Started
8
![Page 9: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/9.jpg)
Ruby installieren
GPL , somit Sourcen verfügbar:
CVS, tar, make && make install
Binary installer für Windows
http://rubyforge.org/projects/rubyinstaller/
9
![Page 10: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/10.jpg)
Ruby ausführen
Interpreter aufrufen und Skript übergeben:
prompt> ruby meinprogramm.rb
Shebang:
#!/usr/local/bin/ruby
print “a”
10
![Page 11: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/11.jpg)
Interactive RubyInteractive Ruby (irb) ist eine Ruby “Shell”
Erlaubt ausführen von eingegeben Code oder lesen von Code aus Dateien
Shell-Eigenschaften wie History, Job-Controll und Commandline-Editing
Perfekt, um zu probieren und spielen
11
![Page 12: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/12.jpg)
Demo
12
![Page 13: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/13.jpg)
Dokumentation
Ruby wird meist in RDoc dokumentiert (vergleichbar JavaDoc)
Konvertierung in HTML und ri
ri erlaubt Zugang über Kommandozeile:
prompt> ri WAS_ICH_WISSEN_WILL
13
![Page 14: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/14.jpg)
Demo
14
![Page 15: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/15.jpg)
Grundlagen
15
![Page 16: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/16.jpg)
GrundregelnKein Semikolon am Ende der Zeile (bei einer Anweisung pro Zeile)
Keine geschweiften Klammern zur Deklaration vom Blöcken, sondern “xxxx......end”
Keine Deklaration von Variablen!
() können bei Methoden weggelassen werden
16
![Page 17: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/17.jpg)
Alles ist ein ObjektNummern und Strings sind auch Objekte
“nil” als Null-Objekt statt null-pointer
Zugang zu Instanz-Methoden über:
Instanz.methode(arg1, arg2)
Zugang zu Instanz-Attributen über:
Instanz.attribut = 517
![Page 18: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/18.jpg)
Beispiel 1a = 9
b = 1c = a + b
print c ; c = “Hi”; print cd = c.length + c.index(”i”)
c = -99.absein_string = String.new(”HALLO”)
auch_ein_string = ‘a’ + “bcdefg #{c}”
18
![Page 19: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/19.jpg)
Funktionen/Methoden
Einleitung mit
def funktions_name(argument)
....
end
implizites return des letzten Ausdruckes (wie überall in Ruby)
19
![Page 20: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/20.jpg)
Beispiel 2def my_func
puts “abc” 99
enddef my_func2(a, b)
return a+bend
def a; “a”; end
ergebnis = my_func(1,2)a()
20
![Page 21: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/21.jpg)
Namen
Klassen, Konstanten und Module fangen mit Grossbuchstaben an
Methodennamen sind kleingeschrieben
Variablen (somit Objekte) fangen mit Kleinbuchstaben an
21
![Page 22: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/22.jpg)
Namen 2
Instanzvariablen fangen mit @ an
Klassenvariablen fangen mit @@ an
Globale Variablen beginnen mit $
Lokale Variablen beginnen mit Kleinbuchstaben
22
![Page 23: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/23.jpg)
Klassen
Zugriff auf Klasseneigenschaften über
Klasse.methode(arg1, arg2, arg3)
Klasse.klassenvariable
Klasse::KONSTANTE
Definition von Klassen-Methoden über Klassenname.methode
23
![Page 24: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/24.jpg)
Beispiel 3class Person @name #Instanz-var @alter #Instanz-var @@anzahl_auf_der_welt #Klassen-var MAX_ALTER = 100 #Konstante def check_alter(alter) #Instanz-meth alter < Person::MAX_ALTER endend
a = Person.newif a.check_alter(90) puts “jung genug”end 24
![Page 25: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/25.jpg)
Beispiel 3 contclass Person def Person.how_many @@anzahl_auf_der_welt endend
anzahl = Person.how_many
25
![Page 26: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/26.jpg)
Vererbung
Konstruktor-Methode ist “initialize”
class a < b bedeutet, dass a von b erbt
“super” ist der Konstruktor der SuperKlasse
26
![Page 27: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/27.jpg)
Demo
27
![Page 28: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/28.jpg)
Access Control
Private, public und protected
Methoden sind default public
Instanzvariablen gar nicht zugänglich, man muss erst passende Methoden erschaffen (Attribute)
28
![Page 29: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/29.jpg)
Beispiel 4class Person @name #Instanz-var @alter #Instanz-var def name @name end public def alter @alter end protected :alterend
print “#{Hansi.name} ist #{Hansi.alter} Jahre alt”
29
![Page 30: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/30.jpg)
Attribute
Zuweisung auf Instanzvariablen durch Methoden:
def funk_name=(arg)
....
end
30
![Page 31: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/31.jpg)
Beispiel 5class Person def name=(wie_soll_ich_heissen) @name = wie_soll_ich_heissen end attr_writer :alterend
Hansi = Person.newHansi.name = “Hansi”Hansi.alter = 12print “#{Hansi.name} ist #{Hansi.alter} Jahre alt”
31
![Page 32: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/32.jpg)
Automatische Attribute
Benutzung der Macros “attr_reader”, “attr_writer” oder “attr_access”
32
![Page 33: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/33.jpg)
Standard Datentypen
Numbers (Fixum, Bignum)
Strings
Array
Hash
Regular expression
Range
33
![Page 34: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/34.jpg)
Beispiel 6string_a = “HUIBU”fixnummer = 9big_nummer = 1.23e10m_array = [”a”, “b”, [1,2], “c”, 3]mein_hash = {’anfang’ => “abc”, ‘ende’ => “xyz”}
puts string_a + mein_hash[’anfang’] + m_array[0]
meine_range = 1..10meine_range.include?(5)
34
![Page 35: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/35.jpg)
Blocks und Iteratoren
35
![Page 36: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/36.jpg)
Blocks
Blocks sind eine Art anonyme Funktion
Sie werden (fast) immer mit “normalen” Funktionen eingesetzt
Dabei wird der Kontrollfluß zwischen den Funktionen hin und her gereicht
36
![Page 37: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/37.jpg)
Blocks
Blocks werden auf der selben Zeile wie der Methoden-Aufruf geschrieben
Notation in {...} oder do...end
Die “normale” Funktion kann den Block über “yield” aufrufen
37
![Page 38: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/38.jpg)
Beispiel 7def foo yield puts “2 von foo” yieldend
foo { print “2 von Block”}
Output:2 von Block2 von foo2 von Block
38
![Page 39: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/39.jpg)
Beispiel 8def foo yield puts “2 von foo” yieldend
foo do puts “2 von Block”end
Output:2 von Block2 von foo2 von Block
39
![Page 40: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/40.jpg)
Yield
Yield kann auch Variablen übergeben, die an den Block weitergereicht werden
Das Ergebnis des Blocks wird die Rückgabe von yield
{|var1, var2| print var1 .....}
do |var3, var4|
...end40
![Page 41: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/41.jpg)
Beispiel 9def foo(a, b) c = a + b print yield(c)end
foo(1,2) do |var1| var1 * 2end
Output:6
41
![Page 42: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/42.jpg)
Iteratoren
Iteratoren sind Funktionen, die Blocks repetitiv aufrufen
Finden dort Einsatz, wo andere Sprachen normalerweise Schleifen nutzen würden
Intuitiv zu benutzten
42
![Page 43: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/43.jpg)
Beispiel 95.times { puts “Hi”}
a = [1, 2]a.each do |the_one| print the_oneend
[”H”, “A”, “L”].collect {|x| x.succ} --> [”I”, “B”, “M”]
[1, 2, 3, 5, 7, 9].find {|v| v*v > 30} --> 7
43
![Page 44: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/44.jpg)
Beispiel 10class Array def find for i in 0..size value = self[i] return value if yield(value) end return nil endend
44
![Page 45: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/45.jpg)
Proc Objekt
Man kann Blocks mit Hilfer der lamba Funktion oder des Konstruktor der Proc-Klasse in Objekte verwandeln
Diese kann man nun “rumreichen”
Abfangen des Blocks und Umwandeln in Proc auch in der “normalen” Methode möglich
45
![Page 46: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/46.jpg)
Demo
46
![Page 47: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/47.jpg)
Goodies
47
![Page 48: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/48.jpg)
Exceptions
Ruby unterstützt und benutzt (!!!) Exceptions
Schlüsselwörter raise, rescue und ensure
Kontrollflußsteuerung über throw/catch
48
![Page 49: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/49.jpg)
Beispiel 11begin
funktion_die_schief_laufen_kann(1,2,”aaa”)
rescue StandardError
puts “Fehler aufgetreten”
ensure
puts “wird immer ausgeführt”
end
49
![Page 50: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/50.jpg)
Integrierter Debugger
Aufrufbar über:
prompt> ruby -r debug skript.rb
Breakpoint, Watches, Steps,....
50
![Page 51: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/51.jpg)
Integriertes UnitTest FrameworkRuby 1.8 hat das Test::Unit Framework integriert
Unterstützung von Cases +Suits
Neuer Test:
requiere test/unit
class TestUser < Test::Unit::Case
51
![Page 52: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/52.jpg)
Mixes
Module und deren Eigenschaften können in beliebige Klassen “gemixt” werden
Diese erhalten somit alle Methoden und Variablen
Eine Art Java Interfaces nur mit Implementierung
52
![Page 53: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/53.jpg)
RubyGemsPaketverwaltung für Ruby Programme und Bibliotheken
Vergleichbar mit Pear und CPAN
Installation von Programmen in verschiedenen Versionen möglich
gem install rails --remote
gem upgrade --remote53
![Page 54: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/54.jpg)
erb, eruby und mod_ruby erb und eruby sind filter, die es erlauben, Ruby Code in HTML unterzubringen (PHP)
<h1> Willkommen,
<% print #{Hansi.name} %>
</h1>
mod_ruby vergleichbar mit mod_php54
![Page 55: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/55.jpg)
Ruby on Rails
Framework für Web-Anwendungen
Model-View-Controller Ansatz
Nur eine Konfigurationsdatei: Datenbank Zugangsdaten
THE REASON to check out Ruby
55
![Page 56: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/56.jpg)
Integrierter Webserver
WEBrick ist ein in Ruby geschriebener Webserver, der in der Standard Distribution enthalten ist
Kann als Servlet-Container arbeiten
56
![Page 57: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/57.jpg)
Grafische Oberflächen
RubyTK/GTK, FXRuby, ruby-gnome2, QT/Ruby, Ruby/Cocoa, WxRuby, FLTK, RubyWise, ParaGUI, Widestudio, Apollo,....
Somit “normale” GUI-Programme möglich
57
![Page 58: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/58.jpg)
Taint Obejcts
Taint-modus, ähnlich wie bei Perl
Setzen des Levels(1-4) über $SAFE
Alle externen Daten sind “tainted”
Tainted Objects können nicht an gefährliche Funktionen übergeben werden (z.B. System)
58
![Page 59: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/59.jpg)
Reflection
Ruby hat massive Reflection API
Möglich unbekannte Objekte, Klassen, Module und Funktionen zu inspizieren
Wichtig für Debugger, IDEs und dynamische Erweiterbarkeit
59
![Page 60: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/60.jpg)
Distributed Ruby
drb erlaubt ausführen von RubyCode auf entfernen Rechnern
Vergleichbar CORBA, Java-RMI
Einfach und schnell
1GHz PowerBook: 500 Calls pro Sek
60
![Page 61: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/61.jpg)
Crossplatform IDEFreeRIDE ist eine Ruby IDE für Windows, UNIX und Mac OS X
Unterstützung von Debugging, Code completion, Refactoring, remote pair-programming
http://freeride.rubyforge.org
61
![Page 62: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/62.jpg)
Resources
62
![Page 63: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/63.jpg)
Prgramming RubyThe PickAxe Book
Standardwerk von den Pragmatic Programmers
Tutorial und Referenz
Absolut zu empfehlen
63
![Page 64: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/64.jpg)
www.ruby-lang.org
Rubys Homepage
Sourcecode und FAQ
Links zu anderen Ruby Seiten
Ruby Application Archive (RAA)
64
![Page 65: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/65.jpg)
www.ruby-doc.org
Zentrale Dokumentation
RDoc Dokumentation als HTML
Erste Version PickAxe als HTML
65
![Page 66: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/66.jpg)
www.rubygarden.org
WebBlog/Wiki von Ruby Entwicklern
Viele gute Artikel zum Thema Ruby
Viele gute Links
66
![Page 67: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/67.jpg)
Bibliotheken und PaketeRubyForge
http://www.rubyforge.org
Ruby Production Archive
http://rpa-base.rubyforge.org/wiki/wiki.cgi
Ruby Application Archive
http://raa.ruby-lang.org67
![Page 68: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/68.jpg)
Ruby on Rails
68
Übung
![Page 69: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/69.jpg)
Ruby on Rails
Framework für Web-Anwendungen
Model-View-Controller Ansatz
Nur eine Konfigurationsdatei: Datenbank Zugangsdaten
THE REASON to check out Ruby
69
![Page 70: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/70.jpg)
Überblick
Einführung MVC
Überblick Rails-Architektur
Übung
70
![Page 71: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/71.jpg)
Model-View-Controller
Design-Pattern für Programme mit Interaktion mit dem Benutzer
KLassen werden in drei Gruppen eingeteilt, die sich auf ihre jeweillige Aufgabe spezialisieren
Vorteil: Entkopplung und somit Wiederverwendbarkeit
71
![Page 72: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/72.jpg)
Model
Klasse, die das Business-Objekt abbildet mit allen seinen Funktionalitäten
BSP:
Klasse Benutzer
Klasse Buch
72
![Page 73: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/73.jpg)
ViewEigentliche Darstellung für den User
Keine Funktionalität, nur Design+Anzeige
BSP:
Template, dass alle Bücher im System anzeigt
Template, dass alle Bücher eines Benutzers anzeigt
73
![Page 74: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/74.jpg)
ControllerVerbindung zwischen Model und View
Lädt benötigte Daten aus dem Model und füttert sie in den View
Prozess-Logik
BSP:
Lade alle Bücher im System und gebe sie dem richtigem Template
74
![Page 75: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/75.jpg)
Rails-Architektur
75
![Page 76: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/76.jpg)
Active Record
Model
Verbindet Ruby-Klasse mit Daten aus der Datenbank
Bereitstellung von Funktionen zur Manipulation der Daten in der DB
76
![Page 77: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/77.jpg)
Action Controller
Controller
Bietet die eigentlichen Funktionalitäten an, mit denen der Benutzer interagiert
Lädt den passenden Action View
77
![Page 78: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/78.jpg)
Action View
View
Ruby Template
HTML mit ERb-tags
Das was der Benutzer zu sehen bekommt
78
![Page 79: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/79.jpg)
Übung
79
Implementierung einer Webapplikation in weniger als 30 Minuten
![Page 80: An Introduction to Ruby](https://reader031.vdokument.com/reader031/viewer/2022020110/5568b6cfd8b42a7c7d8b46bd/html5/thumbnails/80.jpg)
Fin
80
Fragen?