Info2/2008tavasz/kuka
1. sor: | 1. sor: | ||
− | + | A tárgy főoldala: [[info2/2008tavasz]] | |
+ | A tárgy oktatásához felhasznált, http://wiki.math.bme.hu/ -n belüli wikioldalak [http://en.wikipedia.org/wiki/GNU_Free_Documentation_License GNU FDL] licenc vagy (választás szerint) [http://hu.wikipedia.org/wiki/Creative_commons CC-BY-SA-2.0] licenc szerint szabadon használhatók és terjeszthetők. | ||
− | == | + | == 8. előadás (2007-04-04) == |
− | === | + | === Objektum-orientált programozás === |
− | |||
− | + | Néhány új fogalom: | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | * osztály (a C-beli struktúratípusnak felel meg) | |
+ | * objektum (a C-beli struktúrának felel meg) | ||
+ | * attribútum (a C-beli struktúramezőnek felel meg) | ||
+ | * metódus (a C-beli függvénynek felel meg) | ||
− | + | Osztály ''class'' (síkidom), osztálypéldány ''class instance'' = objektum ''object'' (kör, téglalap), konstruktor ''constructor'' (új objektum létrehozása), objektum azonosító (object identifier - object ID), példány változó ''instance variable'' (mely az objektum állapotát/tulajdonságait tartalmazza, pl. középpont), példány metódus ''instance method'' (), | |
− | + | === Ruby nyelv === | |
− | + | A Ruby '''interpretált''', '''szkriptnyelv''' (interpretált, és minden rendszer szintű szolgáltatáshoz hozzá lehet férni). | |
− | + | ||
− | + | ||
− | + | A Ruby osztályhierarchiája hasonló a biológiai törzsfához. Például a gerincesek (osztály) törzsén belül a madarak (osztály) osztályának egy alosztálya a pacsirta (osztály) nevű faj, melynek egy példánya a Csipcsip nevű kismadarunk (objektum), aki nem mellesleg egy pacsirta. Őt jellemezhetjük különböző tulajdonságai alapján; ezek az attribútumok. Például: él-e még? , mennyire éhes, hogy hívják a párját, stb. Tehát bizonyos tulajdonságait megadjuk, amik csak rá jellemzőek. | |
− | + | Változók Konstansok és | |
+ | Lokális Globális Példány Osztály osztály nevek | ||
+ | |||
+ | valtozo $valami @nev @@osztvalt PI | ||
+ | joEjt_2 $_ @XY @@N String | ||
− | |||
− | |||
− | |||
− | |||
− | + | === feltételes és ciklusutasítások === | |
− | + | ==== if ==== | |
− | + | ||
− | + | Először then-nel, majd újsorral elválasztva: | |
− | + | if x==2 then x += 1 end | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
+ | if x==2 | ||
+ | x += 1 | ||
+ | end | ||
− | === | + | if x==2; x += 1 end |
− | + | ==== else ==== | |
− | + | if x==2 then x += 1 else x += 2 end | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | ==== | + | if x==2 |
+ | x += 1 | ||
+ | else | ||
+ | x += 2 | ||
+ | end | ||
− | + | ==== elsif ==== | |
− | + | if x == 1 | |
+ | "hetfo" | ||
+ | elsif x == 2 | ||
+ | "kedd" | ||
+ | elsif x == 3 then "szerda" | ||
+ | else "hetvege" | ||
+ | end | ||
− | + | ==== if kifejezésben ==== | |
− | + | x = if y == 1 | |
+ | 3 | ||
+ | else | ||
+ | 4 | ||
+ | end | ||
− | + | x = 4 | |
+ | x = 3 if y == 1 | ||
− | + | ==== unless ==== | |
− | + | ||
+ | unless x <= 4 | ||
+ | "nagyobb, mint 4" | ||
+ | end | ||
+ | |||
+ | unless x <= 4 | ||
+ | "nagyobb, mint 4" | ||
else | else | ||
− | + | "nem nagyobb" | |
+ | end | ||
+ | |||
+ | x = unless x <= 4 then 5 end | ||
+ | |||
+ | x = 5 unless x <= 4 | ||
+ | |||
+ | |||
+ | |||
+ | Matmul Ruby nyelven: | ||
+ | |||
+ | a=[[1,2], #megadjuk az 'a' mátrixot | ||
+ | [3,4], | ||
+ | [5,6]] | ||
+ | |||
+ | b=[[7], #megadjuk a 'b' mátrixot | ||
+ | [8]] | ||
+ | |||
+ | ab=[] #létrehozzuk az üres szorzatmátrixot | ||
+ | i=0; while i<a.size; #'' while'' ciklust nem véletlenül használunk, mivel Rubyban nincs ''for'' ciklus | ||
+ | ujsor=[] | ||
+ | j=0; while j<b[0].size; | ||
+ | x=0 | ||
+ | k=0; while k<b.size | ||
+ | x+=a[i][k]*b[k][j] | ||
+ | ujsor[j]=x | ||
+ | end | ||
+ | ab[i]=ujsor | ||
+ | end | ||
+ | |||
+ | Objektum-orientáltan kezdtünk programozni Ruby nyelven, a Sikidom, BBox és Kor osztályok kerültek fel a táblára. | ||
+ | |||
+ | class BBox | ||
+ | attr_accessor :llx, :lly, :urx, :ury | ||
+ | end | ||
+ | |||
+ | class Sikidom | ||
+ | def bbox() | ||
+ | fail # még nem tudjuk megírni, a Sikidom túl absztrakt | ||
+ | end | ||
+ | def kerulet() | ||
+ | fail # még nem tudjuk megírni, a Sikidom túl absztrakt | ||
+ | end | ||
+ | def terulet() | ||
+ | fail # még nem tudjuk megírni, a Sikidom túl absztrakt | ||
+ | end | ||
+ | end | ||
+ | |||
+ | class Kor <Sikidom | ||
+ | attr_accessor :cx, :cy, :r | ||
+ | def bbox() | ||
+ | b=BBox.new | ||
+ | b.llx=@cx-@r; b.lly=@cy-@r | ||
+ | b.urx=@cx+@r; b.ury=@cy+@r | ||
+ | return b # a return fölösleges | ||
+ | end | ||
+ | def kerulet() | ||
+ | Math::PI*2*@r | ||
+ | end | ||
+ | def terulet() | ||
+ | Math::PI*@r*@r | ||
+ | end | ||
+ | end | ||
+ | |||
+ | |||
+ | ==== Iterátorok ==== | ||
− | + | Az | |
− | + | >> [1,2,3].each {|i| p i} | |
− | [ | + | 1 |
+ | 2 | ||
+ | 3 | ||
+ | => [1, 2, 3] | ||
+ | >> [1,2,3].map {|i| i**2} | ||
+ | => [1, 4, 9] | ||
+ | >> [1,2,3].inject {|sum, i| sum + i} | ||
+ | => 6 |
A lap 2008. április 24., 10:35-kori változata
A tárgy főoldala: info2/2008tavasz A tárgy oktatásához felhasznált, http://wiki.math.bme.hu/ -n belüli wikioldalak GNU FDL licenc vagy (választás szerint) CC-BY-SA-2.0 licenc szerint szabadon használhatók és terjeszthetők.
Tartalomjegyzék |
8. előadás (2007-04-04)
Objektum-orientált programozás
Néhány új fogalom:
- osztály (a C-beli struktúratípusnak felel meg)
- objektum (a C-beli struktúrának felel meg)
- attribútum (a C-beli struktúramezőnek felel meg)
- metódus (a C-beli függvénynek felel meg)
Osztály class (síkidom), osztálypéldány class instance = objektum object (kör, téglalap), konstruktor constructor (új objektum létrehozása), objektum azonosító (object identifier - object ID), példány változó instance variable (mely az objektum állapotát/tulajdonságait tartalmazza, pl. középpont), példány metódus instance method (),
Ruby nyelv
A Ruby interpretált, szkriptnyelv (interpretált, és minden rendszer szintű szolgáltatáshoz hozzá lehet férni).
A Ruby osztályhierarchiája hasonló a biológiai törzsfához. Például a gerincesek (osztály) törzsén belül a madarak (osztály) osztályának egy alosztálya a pacsirta (osztály) nevű faj, melynek egy példánya a Csipcsip nevű kismadarunk (objektum), aki nem mellesleg egy pacsirta. Őt jellemezhetjük különböző tulajdonságai alapján; ezek az attribútumok. Például: él-e még? , mennyire éhes, hogy hívják a párját, stb. Tehát bizonyos tulajdonságait megadjuk, amik csak rá jellemzőek.
Változók Konstansok és Lokális Globális Példány Osztály osztály nevek valtozo $valami @nev @@osztvalt PI joEjt_2 $_ @XY @@N String
feltételes és ciklusutasítások
if
Először then-nel, majd újsorral elválasztva:
if x==2 then x += 1 end
if x==2 x += 1 end
if x==2; x += 1 end
else
if x==2 then x += 1 else x += 2 end
if x==2 x += 1 else x += 2 end
elsif
if x == 1 "hetfo" elsif x == 2 "kedd" elsif x == 3 then "szerda" else "hetvege" end
if kifejezésben
x = if y == 1 3 else 4 end
x = 4 x = 3 if y == 1
unless
unless x <= 4 "nagyobb, mint 4" end
unless x <= 4 "nagyobb, mint 4" else "nem nagyobb" end
x = unless x <= 4 then 5 end
x = 5 unless x <= 4
Matmul Ruby nyelven:
a=[[1,2], #megadjuk az 'a' mátrixot [3,4], [5,6]] b=[[7], #megadjuk a 'b' mátrixot [8]] ab=[] #létrehozzuk az üres szorzatmátrixot i=0; while i<a.size; # while ciklust nem véletlenül használunk, mivel Rubyban nincs for ciklus ujsor=[] j=0; while j<b[0].size; x=0 k=0; while k<b.size x+=a[i][k]*b[k][j] ujsor[j]=x end ab[i]=ujsor end
Objektum-orientáltan kezdtünk programozni Ruby nyelven, a Sikidom, BBox és Kor osztályok kerültek fel a táblára.
class BBox attr_accessor :llx, :lly, :urx, :ury end class Sikidom def bbox() fail # még nem tudjuk megírni, a Sikidom túl absztrakt end def kerulet() fail # még nem tudjuk megírni, a Sikidom túl absztrakt end def terulet() fail # még nem tudjuk megírni, a Sikidom túl absztrakt end end class Kor <Sikidom attr_accessor :cx, :cy, :r def bbox() b=BBox.new b.llx=@cx-@r; b.lly=@cy-@r b.urx=@cx+@r; b.ury=@cy+@r return b # a return fölösleges end def kerulet() Math::PI*2*@r end def terulet() Math::PI*@r*@r end end
Iterátorok
Az
>> [1,2,3].each {|i| p i} 1 2 3 => [1, 2, 3] >> [1,2,3].map {|i| i**2} => [1, 4, 9] >> [1,2,3].inject {|sum, i| sum + i} => 6