Rub
y
(2)
Dynami zne
p
rogramo
w
anie
obiekto
w
e
Rub
y
deni ja
klasy
lass
Osoba
...
end
Rub
y
skª
ado
w
e
klasy
◮
atrybut
y
obiektó
w
-
zmienne,
któ
ry h
zakresem
jest
obiekt,
i h
nazwy
rozp
o
zynaj¡
si
o
d
znaku
◮
atrybut
y
klasy
-
zmienne,
któ
ry h
zakresem
jest
klasa,
i h
nazwy
rozp
o
zynaj¡
si
o
d
znak
ó
w
◮
meto
dy
obiektu
to
funk
je
wyw
oªyw
ane
w
k
ontek± ie
obiektu,
maj¡
dostp
do
wszystki h
inny h
skª
ado
wy h
obiektu
i
klasy
◮
meto
dy
klasy
to
funk
je
wyw
oªyw
ane
w
k
ontek± ie
klasy
,
maj¡
dostp
do
wszystki h
skª
ado
wy h
klasy
lass
Osoba
def
initialize(imie,nazwisko)
imie
=
imie
nazwisko
=
nazwisko
end
end
Rub
y
k
onstrukto
r
◮
k
onstrukto
r
to
meto
da
o
nazwie
initialize
◮
k
onstrukto
r
mo»e
b
y¢
t
ylk
o
jeden
(w
Rub
ym
nie
mo»na
p
rze i¡»a¢
nazw
meto
d)
lass
Osoba
def
initialize(imie,
nazwisko)
imie
=
imie
nazwisko
=
nazwisko
end
end
Rub
y
atrybut
y
obiektó
w
◮
atrybutó
w,
p
o
dobnie
jak
inny h
zmienny h,
nie
dekla
ruje
si
◮
atrybut
t
w
o
rzy
si
p
rzypisuj¡
do
niego
w
a
rto±¢
◮
zesta
w
atrybutó
w
obiektu
nie
jest
ustalony
lass
Osoba
def
initialize(imie,
nazwisko)
imie
=
imie
nazwisko
=
nazwisko
end
def
nadaj_pesel(imie)
pesel=pesel
end
end
osoba
=
Osoba.new("Jan","Kowals ki" )
#
obiek
osoba
ma
2
atrybuty
osoba.nadaj_pesel("1234 5678 ")
#
obiekt
osoba
ma
3
atrybuty
nazwisko
Rub
y
dynamik
a
obiektu
◮
aktualn¡
list
atrybutó
w
mo»na
sp
ra
wdzi¢
za
p
omo
¡
meto
dy
instan e_variables
(meto
da
klasy
Obje t
-
patrz
te»
inne
meto
dy
tej
klasy)
o
=
Osoba.new("Jan"
,"
Kow
al
sk
i")
=>
#<Osoba:0x81 31f
0
imie="Jan",
nazwisko="Kowa
lsk
i"
>
o.instan e_variab
le
s
=>
[:imie,
:nazwisko℄
o.nadaj_pesel("12
34
56
78"
)
=>
"12345678"
o.instan e_variab
le
s
=>
[:imie,
:nazwisko,
:pesel℄
Rub
y
dynamik
a
obiektu
Mo»liw
e
jest
te»
do
da
w
anie
p
ojedyn zemu
obiekto
wi
meto
d.
b=Obje t.new
=>
#<Obje t:0x82397
60
>
def
b.moja()
p
rint
"T
ylk
o
ja
to
umiem!"
end
=>
nil
b.moja
Tylko
ja
to
umiem!
b.singleton_metho
ds
#
lista
metod
wªasny h
obiektu
=>
[:moja℄
Rub
y
Programo
w
anie
obiekto
w
e
opa
rte
na
p
rotot
ypa h
Programo
w
anie
obiekto
w
e
opa
rte
na
p
rotot
ypa h
(p
rotot
yp
e-based
OOP)
to
alternat
ywne
w
ob
e
opa
rtego
na
klasa h
p
o
dej± ie
do
p
rogramo
w
ania
obiekto
w
ego.
P
o
dsta
w
o
w
e
op
era je
to:
◮
klono
w
ane
obiektó
w
◮
rozszerzanie
obiektó
w
Dzieki
p
ok
azanym
w
ze±niej
me hanizmom,
Rub
y
umo»liwia
stoso
w
anie
tego
st
ylu
p
rogramo
w
ania.
Rub
y
Programo
w
anie
obiekto
w
e
opa
rte
na
p
rotot
ypa h:
p
rzykª
ad
b=Obje t.new
=>
#<Obje t:0x8239760>
def
b.moja()
p
rint
"Ja
to
umiem!"
end
=>
nil
b.moja
Tylko
ja
to
umiem!
=
b. lone
=>
#<Obje t:0x822894 >
.moja
Tylko
ja
to
umiem!
=>
nil
def
.t
ylk
omoja()
p
rint
"A
ja
umiem
jesz ze
to!"
end
=>
nil
.tylkomoja
A
ja
umiem
jesz ze
to!
=>
nil
b.tylkomoja
NoMethodError:
undefined
method
`tylkomoja'
for
#<Obje t:0x8239760>
from
(irb):65503
from
/usr/bin/irb1.9:12:in
`<main>'
Rub
y
dynamik
a
klasy
W
trak
ie
dziaª
ania
p
rogramu
mo»na
zmo
dyk
o
w
a¢
deni j
klasy
,
na
w
et
je±li
istniej¡
ju»
obiekt
y
tej
klasy
.
lass
K;
end
=>
nil
k
=
K.new
=>
#<K:0x824d6a >
k.instan e_variables
=>
[℄
K.method_defined?(:nazwij )
=>
false
lass
K;
def
nazwij(imie)
imie
=
imie
end
end
=>
nil
K.method_defined?(:nazwij )
=>
true
k.nazwij("Jan")
=>
"Jan"
k.instan e_variables
=>
[:imie℄
Rub
y
dynamik
a
klasy
Mo
dyk
o
w
a¢
mo»na
wszystkie
klasy!
lass
Array;
def
sum()
inje t(0)|a,x|
a+x
end
end
=>
nil
[1,2,3,4℄.sum
=>
10
lass
Fixnum;
def
+(x)
self*x
end
end
=>
nil
2+4
=>
8
Rub
y
dynamik
a
klasy
i
obiektu:
realiza ja
◮
klasa
jest
obiektem
(t
yp
Class)
◮
klasa
(obiekt
klasy
-
t
ypu
Class)
p
rze ho
wuje
list
meto
d
(lista
ta
mo»e
si
zmienia¢),
list
atrybutó
w
klasy
(lista
ta
mo»e
si
zmienia¢)
o
raz
referen j
do
nadklasy
(innego
obiektu
t
ypu
Class)
◮
obiekt
(instan ji
klasy)
p
rze ho
wuje
referen j
do
obiektu
sw
ojej
klasy
(obiekt
ten
mo»e
ulega¢
mo
dyk
a ji)
o
raz
list
zmienny h
obiektu
(lista
ta
mo»e
si
zmienia¢)
Rub
y
dziedzi zenie
◮
dziedzi zenie
jednokrotne
◮
skª
adnia:
lass
A
<<
B
...
end
◮
wyw
oª
anie
k
onstrukto
ra
nadklasy:
super(
pa
rametry
)
Rub
y
klasy
anonimo
w
e
Mo»liw
e
jest
denio
w
anie
nienazw
anej
klasy
t
ylk
o
dla
p
ojedyn zego
obiektu.
a
=
nil
lass
a
def
hello
"Cze±¢,
jestem
jedyny
z
tej
klasy"
end
end
a.hello
Rub
y
domieszk
o
w
anie
(mixins)
◮
me hanizm
p
o
dobny
do
interfejsó
w
Javy
◮
ale
ba
rdziej
elast
y zny
i
o
wiekszej
mo
y
(domieszk
a
mo»e
za
wiera¢
wszystkie
element
y
,
któ
re
mog¡
wyst¡pi¢
w
deni ji
klasy)
◮
domieszki
mo»na
rozumie¢
jak
o
z± io
w
e
deni je
klasy
◮
domieszki
deniuje
si
jak
o
mo
duªy
(module)
◮
mo
duªy
mo»na
wª
¡ za¢
do
klas
(w
do
w
olnej
ilo± i),
jak
ró
wnie»
do
p
ojedyn zy h
obiektó
w
Rub
y
doª
¡ zenie
mo
duªu
do
klasy
module
Numerowany
def
setid(id)
id=id
end
def
id
id
end
end
lass
Osoba
in lude
Numero
w
any
def
initialize(imie,
nazwisko)
imie
=
imie
nazwisko
=
nazwisko
end
end
$osoba
=
Osoba.new("Jan","Kowalski ")
$osoba.setid(12345678)
$osoba.id
Rub
y
doª
¡ zenie
mo
duªu
do
p
ojedyn zego
obiektu
module
Numerowany
def
setid(id)
id=id
end
def
id
id
end
end
lass
Osoba
def
initialize(imie,
nazwisko)
imie
=
imie
nazwisko
=
nazwisko
end
end
osoba
=
Osoba.new("Jan","Kowals ki" )
osoba.extend
Numero
w
any
osoba.setid(12345678)
osoba.id
Rub
y
Ew
aluo
w
anie
do
w
olnego
k
o
du
w
k
ontek± ie
obiektu
P
oza
op
era jami
zdenio
w
anymi
w
p
osta i
meto
d,
mo»liw
e
jest
ew
aluo
w
anie
do
w
olnego
k
o
du
w
k
ontek± ie
obiektu.
lass
Osoba
def
initialize(imie,
nazwisko)
imie
=
imie
nazwisko
=
nazwisko
end
end
a
=
Osoba.new("Jan","Kowals ki")
a.instan e_eval
imie
+
'
'
+
nazwisko
a.instan e_eval
ekstra_atrybut
=
"Hej!"
a.instan e_eval
ekstra_atrybut