Szabó Tamás Károly G6HT12 A Ruby programozási nyelv
Osztályok Minden objektum az Object leszármazottja Az osztályok objektumok Egyszeres örökl ő dés Neve csak konstans lehet Nincs sealed osztál
Osztály definiálása class Foo < Bar end Alaptípus módosítása class String def printit p "it„ end end "asd".printit => "it"
Tagfüggvények Minden függvény osztály tagfüggvénye Minden függvény virtuális Nincs túlterhelés 1 konstruktor ami az initialize Nincs destruktor a szemétgy ű jtés miatt super
class Bicycle @gears=gears end class Tandem < Bicycle def initialize(gears) end
class Foo def mtd p "First definition" end def mtd p "Second definition" end Foo.new.mtd => "Second definition"
prefix Akkor jönnek létre mikor el ő ször értéket kapnak Kívülr ő l nem láthatóak(privát) Nem örökl ő dnek Getter, setter: attr_reader attr_writer attr_accessor
class Point attr_accessor :x attr_reader :y attr_writer :z def initialize(x,y,z) end pt = Point.new(1,2,3) pt.x = 4 puts pt.x pt.y = 4 #hiba puts pt.y pt.z = 4 puts pt.z #hiba
Hozzáférhetőség Publikus Bárhonnan, bárki meghívhatja Függvények alapértelmezetten Védett Csak osztály és leszármazottai Privát Csak implicit hívója lehet Örökl ő dnek
class A private def method1 p "I am private" end class B < A def mainmethod self.method1 end def mainmethod2 method1 end b=B.new b.mainmethod1 #hiba b.mainmethod2 Ha method1 protected akkor mindkett ő lefut
Statikus tagok Függvényeknél klasszikus értelemben Változók teljes „családra” közösek Függvények self. Prefix Változók Változók definiálhatók függvényen kívül
class Polygon = 10 def self.sides end e end class Triangle<Polygon def setside end t=Triangle.new p Polygon.sides => 10 p Triangle.sides => 10 t.setside p Polygon.sides => 3 p Triangle.sides => 3
class Polygon class << self attr_accessor :sides = 10 end class end t=Triangle.new p Polygon.sides => 10 p Triangle.sides => 3
Duck typing When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck. A függvény meghívásra kerül ha egyezik: Név Paraméterszám
class Duck def quack p "quack" end class Something def quack p "quack2" end def quacker(duck) duck.quack end d1=Duck.new d2=Something.new quacker(d1) => "quack" quacker(d2) => "quack2"
Modulok Névtér Nincs ő s Nem példányosítható Lehetnek benne: Metódusok Osztályok Konstansok
Mixin Osztály vagy objektum b ő vítése Modulok segítségével Többszörös örökl ő dés Viselkedés megosztása
module Common def printit p "it" end def self.sprintit p "sit" end class A include Common end a=A.new a.printit => "it" Common.sprintit => "sit" A.sprintit #hiba
module Common def sprintit p "sit" end class A extend Common end A.sprintit => ‘sit’ s1 = "b" s2 = "c" s1.extend Common s1.sprintit => "sit" s2.sprintit #hiba
Párhuzamosság Operációs rendszer szint ű Thread osztály használata Több mag használata implementáció függ ő Kezeletlen kivétel esetén az adott szál futása befejez ő dik Prioritás
Thread Indítás Thread.new{ #blokk } A blokk hozzáfér a látható változókhoz A bent lév ő lokális változók a szálhoz tartoznak Thread változói Thread.current["c"] Thread.main["b"] Sleep, stop, pass,exit
Ütemezés Hívó blokkolása amíg a másik be nem fejez ő dik t.join t.value visszaadja a szál eredményét A kivétel tovább terjed a hívó szálra Vezérlés átadása pass sleep stop Szál leállítása kill exit Felébresztés run
Szinkronizáció Thread.critical igaz esetén csak az adott szálat futtatja A szál átadhatja a vezérlést(pl pass,sleep,kivétel) Mutex Egyszer ű szemafort implementál Deadlock megakadályozására condition variable
cv = ConditionVariable.new a = Thread.new { mutex.synchronize { puts "A: I have critical section, but will wait for cv„ cv.wait(mutex) puts "A: I have critical section again! I rule!" } } puts "(Later, back at the ranch...)„ b = Thread.new { mutex.synchronize { puts "B: Now I am critical, but am done with cv" cv.signal puts "B: I am still critical, finishing up" }} a.join b.join A: I have critical section, but will wait for cv (Later, back at the ranch...) B: Now I am critical, but am done with cv B: I am still critical, finishing up A: I have critical section again! I rule!
Kérdések Mivel lehet megvalósítani a töbszörös örökl ő dést? Hol hívhatunk privát metódust? Hogyan érhetjük el egy szál változóit?