ruby hands on - chaos computer club · 2018-05-22 · oop knowledge fancy knowledge ruby hands on...
TRANSCRIPT
![Page 1: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/1.jpg)
Ruby Hands On
Mario Manno
Ruby Hands On – p. 1
![Page 2: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/2.jpg)
Welcome
Ruby Hands On – p. 2
![Page 3: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/3.jpg)
Content
about ruby
base knowledgehandling data
oop knowledge
fancy knowledge
Ruby Hands On – p. 3
![Page 4: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/4.jpg)
about ruby
historymade in japan10 Jahre alt
featuresSkriptspracheDynamische TypenObjektorientiert
Ruby Hands On – p. 4
![Page 5: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/5.jpg)
base knowledge - using it
ruby script.rb
irb
Ruby Hands On – p. 5
![Page 6: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/6.jpg)
base knowledge - variable definition
num = 3
str = ’drei’
arr = [ 1 ,2 ,3 ]
hash = {a => ’1’, b=>’2’}
hash = Hash.new
range = (1..3)
regexp = /[1-3]/
x,y = y,x
constants are capitalized: SomeConstant, TRUE, ARGV, ENVRuby Hands On – p. 6
![Page 7: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/7.jpg)
handling data - string control
# Ausgabeputs "yello"s = "old data"print "#{s}"printf "%s", s
# Modifikations.chomp!s.gsub!("old","new")
zahl = s.lengths = "12"zahl = s.to_i
Ruby Hands On – p. 7
![Page 8: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/8.jpg)
base knowledge - Kontrollstrukturen
Programme bestehen aus Sequenzen.
Sequenzen, also aufeinanderfolgenden Code Zeilen,lassen sich in Blöcke zusammenfassen.
Zwei Arten existieren um Blöcke zu notieren:
do...
end
{ ... }
Ruby Hands On – p. 8
![Page 9: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/9.jpg)
base knowledge - Kontrollstrukturen
Anweisung
Anweisung Anweisung
Bedingung
yes
noAnweisung
Anweisung
Anweisung
Bedingungno
yes
Schleifen sind einer der Grundbestandteile jeder Sprache. Siewiederholen Blöcke von Anweisungen in Abhängigkeit voneiner Bedingung.
Ruby Hands On – p. 9
![Page 10: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/10.jpg)
base knowledge - Kontrollstrukturen
Wenn
Anweisung Anweisung
Anweisung
noyes
Die Auswahl, auch Fallunterscheidung genannt, führt Code inAbhängigkeit von einer logischen Bedingung aus.
Ruby Hands On – p. 10
![Page 11: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/11.jpg)
base knowledge - loop
Endlosschleifeloop do
print "hi"end
Ruby Hands On – p. 11
![Page 12: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/12.jpg)
base knowledge - while / until
while variable.nil?print "hi"
end
Ruby Hands On – p. 12
![Page 13: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/13.jpg)
base knowledge - times
10.times { print "text" }
Ruby Hands On – p. 13
![Page 14: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/14.jpg)
base knowledge - for
for i in (1..10)print i
end
Ruby Hands On – p. 14
![Page 15: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/15.jpg)
base knowledge - next / break
next - beendet durchlauf eines blocks, springt zurbedingung
break - beendet einen block
loop donext unless STDIN.readline.strip == ’jo’print "jo was entered n"
end
Ruby Hands On – p. 15
![Page 16: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/16.jpg)
base knowledge - if / unless
if aprint a
elsif b == ’jo’print ’jo’
end
auchprint "wahr" unless False
Ruby Hands On – p. 16
![Page 17: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/17.jpg)
base knowledge - case
case swhen /Ich/
return "mm"when /Du/
return "xy"end
Ruby Hands On – p. 17
![Page 18: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/18.jpg)
base knowledge - block arguments
Blöcke können Argumente übergeben bekommen.{ |x,y| p x*y }
Ruby Hands On – p. 18
![Page 19: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/19.jpg)
base knowledge - iterators
Iteratoren bearbeiten Elemente einer Liste
each ist der Standard Iterator
select, inject, collect sind von each abgeleitet
Objekte können ihre eigenen Iteratoren definieren
Ruby Hands On – p. 19
![Page 20: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/20.jpg)
base knowledge - iterators
(0..10).each {|i| print i}# 012345678910
s = "hello world"a = s.split(//)
a.each do |c| print c end"hello world".split(//).each { |c| p c }
a.select do |c| c =~ /[a-m]/ end# => ["h", "e", "l", "l", "l", "d"]
Dir.open(".").sort.each{ |f| print f }Dir.foreach(".") {|f| puts f }
Ruby Hands On – p. 20
![Page 21: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/21.jpg)
handling data - array control
arr=[2,4,8,16]arr2 = Array.new # []arr.push "element"
s = arr.join(’,’)s = arr.to_s
arr + arr2[arr[1],arr[-1]]
arr.reversearr.include? "element"arr.each { |e| p e }arr.each_index { |i| print arr[i] }
Ruby Hands On – p. 21
![Page 22: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/22.jpg)
handling data - hash control
Hashes sind Name-Wert Paare. Auch Dictionaries oderAssoziative Arrays genannt.
# Zuweisungh = Hash.new # {}h = { ’a’=>1, ’b’=>2 }a = h.keys
# Iterierenh.each { |n,v| print "#{n} = #{v}" }h.each_key { |n| print "#{n} = #{h[n]}" }
# Testsh.empty?h.key?("test")
Ruby Hands On – p. 22
![Page 23: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/23.jpg)
handling data - Hash of Arrays
# constructh = Hash.newh[’mm’] = [’ford’,’nixon’]
# addh[’mm’].push("bush")h[’c4’] = Array.newh[’c4’].push("w8n")# {"mm"=>["ford", "nixon", "bush"], "c4"=>["w8n"]}
# outputp h[’mm’][1]# "nixon"
Ruby Hands On – p. 23
![Page 24: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/24.jpg)
handling data - file control
file = File.open(’/etc/shadow’)file.chmod(0777)
# und alles was io kann:file.readlines.each { |l| print l }
# Ausgabe an [email protected] senden
Ruby Hands On – p. 24
![Page 25: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/25.jpg)
handling data - file control
File.open(’/etc/passwd’).each{ |f| puts f }.close
File.open(’/etc/passwd’).select{ |l|l =~ /root/
}.collect{ |m|" t"+m+" n"
}.each{ |n|puts n
}
Ruby Hands On – p. 25
![Page 26: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/26.jpg)
handling data - regular expressions
matchs = ’3llo.rb’res = /^( d+).* .rb/.match(s)
p res[1]# "3"
substitution:s = "chaos computer club cologne"neu = s.gsub(/^chaos computer(.*)$/)
{ "club mate"+$1 }
p neu# "club mate club cologne"
Ruby Hands On – p. 26
![Page 27: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/27.jpg)
handling data - regular expressions
perl style
line = "open chaos"if line =~ /(.*) chaos/
p $1# openp $&# open chaos
end
Ruby Hands On – p. 27
![Page 28: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/28.jpg)
handling data - other builtins
TimeDirThreadNumberRange
Ruby Hands On – p. 28
![Page 29: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/29.jpg)
base knowledge - function interface
a,b - Normale Objekte
*c - Liste von Objekten, z.B. ein Array oder Hash
&d - Code Block (proc objekt)
Deklaration:def throw (a,b,*c)end
Aufruf:throw(a,b,c)throw(a,b,c,d)
Ruby Hands On – p. 29
![Page 30: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/30.jpg)
base knowledge - function return values
def test"test"
end
# optionale parameterdef test2(a,b=’’)
return a+" "+bend
print test# "test"print test2("hallo")# "hallo "print test2("hallo","welt")# "hallo welt"
Ruby Hands On – p. 30
![Page 31: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/31.jpg)
base knowledge - exceptions
begindangerous_code
rescue Exception1, Exception2 => exp ex
rescue Exception3puts $!
elseputs "fine"
ensureputs "always"
end
Ruby Hands On – p. 31
![Page 32: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/32.jpg)
base knowledge - exceptions
def dangerous_functionerror=1if error
raise "the message"end
end
begindangerous_function
rescueputs $!
end
Ruby Hands On – p. 32
![Page 33: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/33.jpg)
base knowledge - exceptions real example
beginf = File.new(’test’)
rescue Errno::ENOENTputs "file open error: #{$!}"
rescue Exception => exputs "other error: #{ex.to_str}"
ensuref.close if f
end
Ruby Hands On – p. 33
![Page 34: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/34.jpg)
oop knowledge
Die Instanz einer Klasse wird Objekt genannt.
Klasse -> Objekt (Instanz)
Eine Klasse besteht aus Methoden (Operationen) undAttributen.
Die Schnittstelle einer Operation und ihr Rückgabewertwerden Signatur genannt.
Alle Signaturen eines Objekts bestimmen sein Interface.
Man spricht auch vom Typ eines Objekts, damit ist einspezifischer Teil seines Interfaces gemeint.
Kapselung, Objekte verstecken ihre Daten vor derAussenwelt.
Ruby Hands On – p. 34
![Page 35: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/35.jpg)
handling objects - get information
puts FALSE.classputs FALSE.methods.sortputs $stdin.methods.select { |m| m =~ /read/ }
a = Array.newif a.respond_to?(’clear’)
a.send(’clear’)end
Ruby Hands On – p. 35
![Page 36: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/36.jpg)
oop knowledge - variable scope
Der Gültigkeitsbereich einer Variable wird in Ruby wie folgtnotiert:
instance @a
global $ai.e. STDERR $stderr
class @@a
Ruby Hands On – p. 36
![Page 37: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/37.jpg)
oop knowledge - class constructor
Erschafft die Objektinstanz während der Laufzeit.
Initialisiert die Objektinstanz.
Die Attribute des Objekts können mit Werten aus derSchnittstelle des Konstruktors vorbelegt werden.
def initializedef initialize(wert)
Ruby Hands On – p. 37
![Page 38: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/38.jpg)
oop knowledge - class/func definition
class Elefantdef initialize
@farbe = ’grau’end
def troeteend
end
Ruby Hands On – p. 38
![Page 39: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/39.jpg)
oop knowledge - class attrib reader/writer
Es ist nicht notwendig get_ und set_ Methoden zu schreiben.
Lesender Zugriff auf die Attribute a und c
attr_reader :a, :c
Schreibender Zugriff auf das Attribut a
attr_writer :a
Ruby Hands On – p. 39
![Page 40: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/40.jpg)
oop knowledge - class creation (new)
Erschaffung eines Objektes instanz der Klasse Something.Dem Konstruktor werden in diesem Beispiel keine Parameterübergeben.instanz = Something.new
Ruby Hands On – p. 40
![Page 41: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/41.jpg)
oop knowledge - object debugging
Nützliche Ausgaben zu einem Objekt.
p instanz
p instanz.methods
p instanz.display
p instanz.inspect
Ruby Hands On – p. 41
![Page 42: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/42.jpg)
oop knowledge - full class example, definition
class Additiondef initialize(a,b)
@a = a@b = b
endattr_reader :aattr_writer :b
def ergebnis@a+@b
endend
continued on next page ...
Ruby Hands On – p. 42
![Page 43: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/43.jpg)
oop knowledge - full class example, usage
add = Addition.new(2,3)p add.ergebnisp add.aadd.b = 5p add.ergebnis
Ruby Hands On – p. 43
![Page 44: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/44.jpg)
oop knowledge - class inheritance
Vererbung (Inheritance), Objekte können Attribute undMethoden von anderen Objekten erben.
Polymorphie, dynamische Bindung, es spielt keine Rollewelche Klasse die betreffende Methode implementiert,solange die Signatur stimmt.
Spezialisierung ist der häufigste Anwendungsfall fürVererbung.
Mixins und Komposition sind Alternativen zur Vererbung.
Ruby Hands On – p. 44
![Page 45: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/45.jpg)
oop knowledge - class inheritance
class Subtraktion < Additiondef ergebnis
@a-@bend
end
Ruby Hands On – p. 45
![Page 46: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/46.jpg)
oop knowledge - Mixins
Module sind gebräuchliche Mixins für Klassen.
Sie sind nichtinstanzierbare Klassen.
Über Module lassen sich auch Namespaces realisieren,
In manchen Sprachen werden Mixins über multipleVererbung realisiert.
Definition: module ToolsVerwendung: include Tools
module Toolsdef ausgabe(s)
printf("%10.3f",s)end
endRuby Hands On – p. 46
![Page 47: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/47.jpg)
oop knowledge - Mixins
class Subtraktioninclude Toolsdef ergebnis_ausgeben
ausgabe(ergebnis)end
end
sub = Subtraktion.new(5,2)sub.ergebnis_ausgeben# 3.000
Ruby Hands On – p. 47
![Page 48: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/48.jpg)
oop knowledge - Assoziation
Die Assoziation wird durch keinen besonderenMechanismus ausgedrückt.
Assoziation liegt vor wenn zwei, oder mehr Objektevoneinander wissen.
Enthält ein Objekt eine Referenz auf ein Anderes, ist esfür das Andere verantwortlich, spricht man auch vonAggregation.
Ruby Hands On – p. 48
![Page 49: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/49.jpg)
oop knowledge - Komposition
Die stärkste Form der Aggregation ist die Komposition. Stattunübersichtliche Vererbungs Hierarchien zwischen denKlassen aufzubauen, besitzt ein Objekt andere Objekte ganz.
Die Objekte müssen nicht vom gleichem Typ sein.
Die Objekte müssen komplett im Hauptobjekt liegen.
Die Objekte sind an die Laufzeit des Hauptobjektesgebunden.
Vererbungs ist “white-box“ Reuse.
Komposition ist “black-box“ Reuse.
Ruby Hands On – p. 49
![Page 50: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/50.jpg)
oop knowledge - Komposition
class Rechnerdef rechne (op=’+’,a=0,b=0)
case opwhen /+/
rechenwerk = Addition.new(a,b)when /-/
rechenwerk = Subtraktion.new(a,b)endrechenwerk.ergebnis # Polymorphie
endend
rechner = Rechner.newp rechner.rechne(’+’,2,3)p rechner.rechne(’-’,5,3)
Ruby Hands On – p. 50
![Page 51: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/51.jpg)
design knowledge - delegation
Mittels Delegation wird Komposition ähnlich mächtig wieVererbung.
Delegation unterscheidet in ein empfangendes und eindelegiertes Objekt.
Das empfangende Objekt ruft eine Methode desdelegierten Objektes auf und übergibt sich selbst.
Das delegierte Objekt arbeitet dann auf demempfangenden Objekt.
Ruby Hands On – p. 51
![Page 52: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/52.jpg)
oop knowledge - Delegation
class Multiplikatordef berechne(obj,a,b) obj.erg = a*b end
endclass Rechner
def initialize@op = Multiplikator.new
endattr_writer :ergdef multipliziere(a,b)
@op.berechne(self,a,b)p @erg
endendr = Rechner.newr.multipliziere(2,4)
Ruby Hands On – p. 52
![Page 53: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/53.jpg)
design patterns - observer/singleton/visitor
Singleton - Es kann nur eine Instanz dieser Klasse geben
Visitor - externe Operationen auf Listen von Objekten
Observer - Objekte schicken sich Updates
Ruby Hands On – p. 53
![Page 54: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/54.jpg)
design patterns - singleton
Es kann nur eine Instanz einer Klasse geben.
require ’singleton’
class Highlanderinclude Singletondef slay_stupid_code_examplesend
end
Ruby Hands On – p. 54
![Page 55: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/55.jpg)
design patterns - visitor
Arbeitet auf Listen nicht gleichartiger Objekte.
Der Visitor enthält Methoden fuer jede Klasse in der Liste.
Die Objekte rufen ihre entsprechende Methode im Visitorauf und uebergeben sich selbst.
Mit dem Visitor lassen sich Objekte erweitern ohne sie zuändern.
Verschiedene Konkrete Visitor Klassen sind möglich.
Ruby Hands On – p. 55
![Page 56: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/56.jpg)
design patterns - visitor, Erweiterung
class Additiondef accept(v)
v.visitAddition(self)end
end
class Subtraktiondef accept(v)
v.visitSubtraktion(self)end
end
continued on next page ...
Ruby Hands On – p. 56
![Page 57: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/57.jpg)
design patterns - visitor, Klassen
class HalbierVisitordef visitAddition(o)
p o.erg/2enddef visitSubtraktion(o) p o.erg/2 end
end
class QuadrierVisitordef visitAddition(o)
p o.ergebnis**2enddef visitSubtraktion(o) p o.ergebnis**2 end
end
continued on next page ...
Ruby Hands On – p. 57
![Page 58: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/58.jpg)
design patterns - visitor, usage
allerechner = []allerechner.push(Addition.new(2,4))allerechner.push(Subtraktion.new(5,3))
visitor = HalbierVisitor.newallerechner.each { |r| r.accept(visitor) }
visitor = QuadrierVisitor.newallerechner.each { |r| r.accept(visitor) }
Ruby Hands On – p. 58
![Page 59: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/59.jpg)
design patterns - observer
Ein Objekt schickt Updates an unbekannte Objekte.
Empfänger registrieren sich beim Producer Objekt.
Producer informiert alle Empfänger bei Veränderungseines States.
Producer / Consumer Problem(Publish-Subscribe)
Ruby Hands On – p. 59
![Page 60: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/60.jpg)
design patterns - observer example, Generator
require "observer"class Generatorinclude Observable
def looploop do
changednotify_observers("value received")
endend
end
continued on next page ...
Ruby Hands On – p. 60
![Page 61: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/61.jpg)
design patterns - observer example, Consumer
class Consumerdef initialize(id,g)
@id = idg.add_observer(self)
enddef update(val)
print "#{@id} #{val} n"end
end
continued on next page ...
Ruby Hands On – p. 61
![Page 62: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/62.jpg)
design patterns - observer example, Usage
generator = Generator.newc1 = Consumer.new(1,generator)c2 = Consumer.new(2,generator)generator.loop
Ruby Hands On – p. 62
![Page 63: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/63.jpg)
fancy knowledge - yield
Iteratoren werden ueber yield implementiert.
yield gibt einen Wert an den aufrufenden Block.
Das Programm läuft anschliessend nach dem yield weiter.
def random_listloop do yield rand end
end
random_list { |i| p i }
Ruby Hands On – p. 63
![Page 64: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/64.jpg)
fancy knowledge - blocks
def work(&block)(1..10).each { |i|
block.call(’ruby’,’rails’,i)}
end
work { |a,b,i| puts "#{i}: #{a} on #{b}" }
Ruby Hands On – p. 64
![Page 65: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/65.jpg)
fancy knowledge - inherit from Enumerable
class RandomListinclude Enumerabledef each
loop dor = randyield rbreak if r > 0.8
endend
end
list = RandomList.newa = list.select { |i| i > 0.2 }p a
Ruby Hands On – p. 65
![Page 66: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/66.jpg)
fancy knowledge - drb
Verteilte Ruby Programme
Ein Server, Viele Clients
Es wird ein komplettes Ruby Objekt exportiert
Ruby Hands On – p. 66
![Page 67: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/67.jpg)
fancy knowledge - drb client
#!/usr/bin/env rubyrequire "drb"require "readline"DRb.start_service()obj = DRbObject.new(nil, ’druby://localhost:9001’)print obj.helploop dobeginline = readline("#")eval line
rescue NameError, EOFErrorputs "error!"
endend
Ruby Hands On – p. 67
![Page 68: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/68.jpg)
fancy knowledge - drb server
require "drb"class TheServer
def initialize@arr= []@s="test"
endattr_reader :arr, :sattr_writer :arr, :sdef add (elem)
@arr.push elemend
continued on next page ...
Ruby Hands On – p. 68
![Page 69: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/69.jpg)
fancy knowledge - drb server, cont.
def helpreturn <<EOFYou can use:
p obj.methodsp obj.displayp obj.inspectobj.arr.push "data"obj.s = "asd"
EOFend
end# start the serveraServerObject = TheServer.newDRb.start_service(’druby://:9001’, aServerObject)DRb.thread.join # Don’t exit just yet!
Ruby Hands On – p. 69
![Page 70: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/70.jpg)
fancy knowledge - ruby doc
Erzeugt html aus .rb DateienAufruf: rdoc test.rb
Ruby InfoAufruf: ri Hash
Inline Dokumentation=begin=endAufruf: rd2 -r rd/rd2man-lib.rb -o rcguard rcguard.rb
Ruby Hands On – p. 70
![Page 71: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/71.jpg)
fancy knowledge - raa
Enthält viele Ruby Modulehttp://raa.ruby-lang.org/
Einfache Installation über GEMhttp://raa.ruby-lang.org/project/rubygems/
Ruby Hands On – p. 71
![Page 72: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/72.jpg)
fancy knowledge - using c code with swig
Swig ist ein Interface Konverter von C zu vielen Skriptsprachen.Auch zu Ruby:
# wrapper generierenswig -ruby -module ArpNG arpNG.h# objekte kompilierengcc -c arpNG.c arpNG_wrap.c
-I/usr/lib/ruby/1.8/i386-linux/-D_GNU_SOURCE
# shared object file linkenld -G arpNG.o arpNG_wrap.o -lnet -o ArpNG.so# testenruby -e "require ’ArpNG’; p ArpNG.methods;"
Ruby Hands On – p. 72
![Page 73: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/73.jpg)
Ressources
aptitude install rubybook
“ruby in a nutshell“, O’Reilly
http://poignantguide.net/ruby/
“Design Patterns“, Erich Gamma
“Lehrbuch der Objektmodellierung“, Heide Balzert
“UML kurz&gut“, O’Reilly
Extending Rubyhttp://www.onlamp.com/pub/a/onlamp/2004/11/18/extending_ruby.html
http://www.approximity.com/rubybuch2/
Ruby Hands On – p. 73
![Page 74: Ruby Hands On - Chaos Computer Club · 2018-05-22 · oop knowledge fancy knowledge Ruby Hands On – p. 3. about ruby history made in japan 10 Jahre alt features Skriptsprache Dynamische](https://reader034.vdocument.in/reader034/viewer/2022042913/5f4c4594b34a5a4ac9396728/html5/thumbnails/74.jpg)
Thank You
Ruby Hands On – p. 74