• Nie Znaleziono Wyników

R by2 Dyai zegawaiebiekwe

N/A
N/A
Protected

Academic year: 2021

Share "R by2 Dyai zegawaiebiekwe"

Copied!
18
0
0

Pełen tekst

(1)

Dynami zneprogramowanie obiektowe

(2)

deni jaklasy

lass Osoba

...

end

(3)

skªadoweklasy

atrybuty obiektów- zmienne, który h zakresemjestobiekt,i h

nazwy rozpo zynaj¡si od znaku 

atrybuty klasy -zmienne, który h zakresemjestklasa,i h

nazwy rozpo zynaj¡si od znaków 

metodyobiektuto funk jewywoªywane w kontek± ie obiektu,

maj¡dostp do wszystki h inny hskªadowy h obiektuiklasy

metodyklasy tofunk jewywoªywane wkontek± ie klasy,maj¡

dostp do wszystki hskªadowy h klasy

lass Osoba

def initialize(imie,nazwisko)

imie = imie

nazwisko = nazwisko

end

(4)

konstruktor

konstruktortometodao nazwieinitialize

konstruktormo»eby¢tylko jeden (w Rubym nie mo»na

prze i¡»a¢nazw metod)

lass Osoba

def initialize(imie, nazwisko)

imie = imie

nazwisko = nazwisko

end

(5)

atrybutyobiektów

atrybutów, podobniejak inny h zmienny h,nie deklaruje si

atrybut tworzy si przypisuj¡ do niegowarto±¢

zestawatrybutów obiektunie jestustalony

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

(6)

dynamikaobiektu

aktualn¡list atrybutówmo»na sprawdzi¢ zapomo ¡metody

instan e_variables (metodaklasy Obje t- patrzte» inne

metodytej klasy)

 o = Osoba.new("Jan","Kowalski")

=> #<Osoba:0x81 31f0 imie="Jan", nazwisko="Kowalski">

 o.instan e_variables

=> [:imie, :nazwisko℄

 o.nadaj_pesel("12345678")

=> "12345678"

 o.instan e_variables

=> [:imie, :nazwisko, :pesel℄

(7)

dynamikaobiektu

Mo»liwe jestte»dodawanie pojedyn zemu obiektowimetod.

 b=Obje t.new

=> #<Obje t:0x8239760>

 def b.moja()print"Tylko jato umiem!"end

=> nil

 b.moja

Tylko ja to umiem!

 b.singleton_methods # lista metod wªasny h obiektu

=> [:moja℄

(8)

Programowanieobiektoweopartenaprototypa h

Programowanie obiektowe opartenaprototypa h (prototype-based

OOP) toalternatywnewobe opartego naklasa h podej± ie do

programowania obiektowego. Podstawowe opera jeto:

klonowaneobiektów

rozszerzanie obiektów

Dziekipokazanym w ze±niej me hanizmom, Ruby umo»liwia

stosowanie tego styluprogramowania.

(9)

Programowanieobiektoweopartenaprototypa h: przykªad

 b=Obje t.new

=> #<Obje t:0x8239760>

 defb.moja()print"Jatoumiem!"end

=> nil

 b.moja

Tylko ja to umiem!

 =b. lone

=> #<Obje t:0x822894 >

 .moja

Tylko ja to umiem!

=> nil

 def .tylkomoja()print"Ajaumiemjesz zeto!"end

=> nil

 .tylkomoja

A ja umiem jesz ze to!

=> nil

 b.tylkomoja

NoMethodError: undefined method `tylkomoja' for #<Obje t:0x8239760>

from (irb):65503

(10)

dynamikaklasy

W trak ie dziaªania programu mo»na zmodykowa¢ deni j klasy,

nawet je±liistniej¡ju»obiekty 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

(11)

dynamikaklasy

Modykowa¢ mo»na wszystkieklasy!

 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

(12)

dynamikaklasyiobiektu: realiza ja

klasajestobiektem(typClass)

klasa(obiektklasy - typu Class)prze howuje list metod

(listata mo»esi zmienia¢),list atrybutówklasy (listata

mo»e sizmienia¢)oraz referen jdonadklasy(innego obiektu

typuClass)

obiekt (instan ji klasy)prze howuje referen jdo obiektu

swojej klasy(obiektten mo»e ulega¢ modyka ji)oraz list

zmienny hobiektu(lista tamo»e sizmienia¢)

(13)

dziedzi zenie

dziedzi zeniejednokrotne

skªadnia:

lass A << B

...

end

wywoªanie konstruktora nadklasy:

super(parametry )

(14)

klasyanonimowe

Mo»liwe jestdeniowanie nienazwanejklasy tylko dlapojedyn zego

obiektu.

a = nil

lass << a

def hello

print "Cze±¢, jestem jedyny z tej klasy"

end

end

a.hello

(15)

domieszkowanie(mixins)

me hanizmpodobny do interfejsówJavy

ale bardziej elasty znyi owiekszej mo y(domieszka mo»e

zawiera¢ wszystkieelementy,któremog¡wyst¡pi¢w deni ji

klasy)

domieszkimo»na rozumie¢jako z± iowe deni je klasy

domieszkideniuje si jako moduªy (module)

moduªy mo»nawª¡ za¢do klas (wdowolnejilo± i), jak

równie» do pojedyn zy h obiektów

(16)

doª¡ zeniemoduªudoklasy

module Numerowany

def setid(id)

id=id

end

def id

id

end

end

lass Osoba

in ludeNumerowany

def initialize(imie, nazwisko)

imie = imie

nazwisko = nazwisko

end

end

$osoba = Osoba.new("Jan","Kowalski ")

$osoba.setid(12345678)

(17)

doª¡ zeniemoduªudopojedyn zegoobiektu

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 Numerowany

osoba.setid(12345678)

(18)

Ewaluowaniedowolnegokoduwkontek± ieobiektu

Poza opera jamizdeniowanymi w posta imetod,mo»liwe jest

ewaluowanie dowolnegokoduw kontek± ie obiektu.

lass Osoba

def initialize(imie, nazwisko)

imie = imie

nazwisko = nazwisko

end

end

a = Osoba.new("Jan","Kowals ki")

a.instan e_eval{ print imie + ' ' + nazwisko }

a.instan e_eval{ ekstra_atrybut = "Hej!" }

a.instan e_eval{ print ekstra_atrybut}

Cytaty

Powiązane dokumenty

LEWANDOWSKI JAKUB BIELSKI BARTŁOMIEJ DAWIDOWSKI ADRIAN HERMAN MICHAŁ GÓRALCZYK JAKUB SMOLIŃSKI MAKSYMILIAN WASZKIEWICZ OSKAR BAGIŃSKI RAFAŁ RUSAK TOMASZ KOSSAKOWSKI JAKUB

4 Chyliński Szymon 5 Dzienis Martyna 6 Golubiewska Natalia 7 Juszkiewicz Julia 8 Kruczyński Piotr 9 Małkowska Karolina 10 Popławski Damian 11 Skrajnowski Damian 12 Smoleńska

Uczeniesi ֒ezewzmocnieniem—eksploracja17 Politykaeksploracji Abypo l ֒aczy´cskuteczn֒aeksploracj֒e´swiatazeksploatacj֒aposiadanejwiedzy

Śmiało można stwierdzić, że jedynym lekarstwem dla Polski jest spokój – tylko niepoddanie się panice i zdrowy rozsądek może dać szansę na łagodne przejście

Dodawa¢ mo»emy tylko ma ierze tego samego typu.. Dodawanie jest wykonywane 'po

jaka jest interpreta ja elementów w m-tej potdze ma

zaszªa taka konie zno±¢, to najpierw przestawiliby±my wiersze (przy.. pomo y ma ierzy permuta yjnej), a

niezale»ne, zyli rz¡d ma ierzy A jest równy n.. Wzór na