"it""> "it"">

Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Szabó Tamás Károly G6HT12 A Ruby programozási nyelv.

Hasonló előadás


Az előadások a következő témára: "Szabó Tamás Károly G6HT12 A Ruby programozási nyelv."— Előadás másolata:

1 Szabó Tamás Károly G6HT12 A Ruby programozási nyelv

2 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

3 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"

4 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

5 class Bicycle def initialize(gears=1) @wheels=2 @seats=1 @gears=gears end class Tandem < Bicycle def initialize(gears) super @seats=2 end

6 class Foo def mtd p "First definition" end def mtd p "Second definition" end Foo.new.mtd => "Second definition"

7 Tagváltozók @ 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

8 class Point attr_accessor :x attr_reader :y attr_writer :z def initialize(x,y,z) @x=x;@y=y;@z=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

9 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

10 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

11 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

12 class Polygon @@sides = 10 def self.sides @@sides end e end class Triangle<Polygon def setside @@sides=3 end t=Triangle.new p Polygon.sides => 10 p Triangle.sides => 10 t.setside p Polygon.sides => 3 p Triangle.sides => 3

13 class Polygon class << self attr_accessor :sides end @sides = 10 end class Triangle<Polygon @sides=3 end t=Triangle.new p Polygon.sides => 10 p Triangle.sides => 3

14 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

15 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"

16 Modulok Névtér Nincs ő s Nem példányosítható Lehetnek benne: Metódusok Osztályok Konstansok

17 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

18 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

19 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

20 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

21 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

22 Ü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

23 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

24 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!

25 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?


Letölteni ppt "Szabó Tamás Károly G6HT12 A Ruby programozási nyelv."

Hasonló előadás


Google Hirdetések