218
Informatika II Tomas Plankis 2012

Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Informatika II

Tomas Plankis

2012

Page 2: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Objektiškai orientuotas programavimas

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

2 / 218

Page 3: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

OOP

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

3 / 218

Objektiškai orientuotas programavimas (angl. Object-OrientedProgramming) tai programavimo paradigma, kompiuteriniu programuarchitekturoje naudojanti objektus ir ju sąveikas.

Page 4: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pagrindines koncepcijos

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

4 / 218

■ Klase - aprašas, nusakantis tam tikro tipo objektu duomenustrukturą ir ju valdymo taisykles.

■ Objektas - unikalus duomenu rinkinys, atitinkantis to objektoklaseje aprašytą strukturą. Galima vadinti klases egzemplioriumi(angl. instance).

■ Metodas - objekto valdymo taisykle (funkcija).■ Abstrakcija - galimybe programuoti nežinant konkrečiu detaliu

apie realizaciją.■ Inkapsuliacija (informacijos slepimas) - užtikrina, kad objekto

naudotojas negali pakeisti objekto busenos nenumatytu budu.■ Polimorfizmas - objekto elgsena priklausanti nuo jo klases.■ Paveldejimas - viena klase yra yra kitos klases išpletimas.

Page 5: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Klase

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

5 / 218

Klase iš esmes yra naudotojo apibrežtas duomenu tipas, leidžiantiskurti šio duomenu tipo objektus.

Page 6: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Klasiu savybes

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

6 / 218

■ Klases objektas iškviečiamas taip, tarsi tai butu funkcija.■ Objekto tipas yra klase.■ Klase turi atributus (požymius).■ Atributai skirstomi i deskriptorius (iskaitant funkcijas) arba

duomenu objektus.■ Atributas susietas su funkcija yra vadinamas metodu.■ Metodas gali buti specialus, pradedamas ir pabaigiamas su dviem

pabraukimais. Pitonas automatiškai iškviečia tokius metodus, jeiklase juos turi, kuomet atliekamos ivairios operacijos su tos klasesobjektais.

■ Klase gali paveldeti (ang. inherit) iš kitu klasiu, tai reiškia, kad jigali perduoti (angl. delegate kitai klasei atributu paiešką, jei jienerandami toje pačioje klaseje.

Page 7: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

7 / 218

c l a s s Klases−pavad in imas ( v i r s k l a s i a i ) :s a k i n i a i

Page 8: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pastabos

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

8 / 218

■ Klases-pavadinimas yra identifikatorius, kuris susiejamas su klasesobjektu

■ virsklasiai yra kableliu atskiriamas klasiu sąrašas. Dažnaiivardinamos kaip:

◆ Bazes (angl. bases)◆ Superklases (angl. superclasses)◆ Tevines klases (angl. parents)

■ Sakoma, kad kuriama klase :

◆ paveldi (angl. inherit)◆ išvedama (angl. derive)◆ išplečia (angl. extend)◆ paveldi (angl. subclass)

■ Visos klases išskyrus vieną yra poklasiai klases object■ Paveldejimas yra tranzityvus, t.y., jei C1 -> C2, C2 -> C3, tai C1

-> C3

Page 9: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Objektas

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

9 / 218

Objektas (angl. instance) sukuriamas kviečiant klasę kaip funkciją.Metodas isinstance(O, K) patikrina ar O yra klases K arba bet kuriojos poklasio objektas.

o b j e k t a s = Kla se ( )

Page 10: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Atributai

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

10 / 218

Kuomet sukuriams objektas, jo atributai pasiekiami taško "."pagalba. Objekto atributai gali buti apibrežti išreikštiniu budu:

>>> c l a s s C( ob j e c t ) :. . . pass

>>> z = C()>>> z . x = 1>>> z . x1

Page 11: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

__init__

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

11 / 218

Kuomet klaseje yra apibrežtas metodas __init__, kuriant objektą jisyra iškviečiamas pagal nutylejimą tam, kad butu atliekamas objektuibudingas inicializavimas. Perduodami parametrai turi atitiktiapibrežtus metode:

>>> c l a s s Kla se ( o b j e c t ) :. . . def __init__( s e l f , n ) :. . . s e l f . x = n>>> ob j e k t a s = Kla se (50)

Page 12: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pastabos

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

12 / 218

■ Kadangi __init__ metodas inicializuoja atributus, jis neturigrąžinti reikšmes, priešingu atveju gausime klaidą TypeError.

■ Rekomenduojama naudoti __init__ metodą atributuinicializavimui, nors tai ir nera butina.

■ Jei metodo __init__ nera, objektas kuriamas be jam budinguatributu.

Page 13: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

13 / 218

>>> c l a s s Taskas ( o b j e c t ) :. . . x = 0. . . y = x. . . def spausd inkX ( s e l f ) :. . . pr in t ( s e l f . x )>>> Taskas .__name__’ Taskas ’>>> Taskas .__base__<c l a s s ’ o b j e c t ’>>>> Taskas . __dict__d ic t_proxy ({ ’__module__ ’ : ’__main__ ’ , ’__dict__ ’ : . .>>> c = C( )>>> c . spausd inkX ( )0

Page 14: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Privatus kintamieji

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

14 / 218

Privatus kintamasis yra toks, kuris naudojamas tik klases viduje irnera pasiekiamas "iš išores". Pitonas šią koncepciją igyvendina taip:jei identifikatorius prasideda su dviem pabraukimais - __pav, tuometinterpretatorius automatiškai prideda klases vardą -_klases_vardas__pav.

Page 15: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys I

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

15 / 218

>>> c l a s s Taskas :. . . __x = 0. . . def p ( s e l f ) :. . . pr in t ( s e l f .__x)>>> t=Taskas ( )>>> t . p ( )0>>> t .__x = 5>>> t . p ( )0>>> pr in t ( t .__x)5>>> t .__dict__{ ’__x ’ : 5}>>> Taskas . __dict__d ic t_proxy ( . . . ’_Taskas__x ’ : 0 , . . . )

Page 16: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys II

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

16 / 218

>>> c l a s s Taskas :. . . __x = 0. . . def p ( s e l f ) :. . . pr in t ( s e l f .__x). . . s e l f .__x += 1. . .>>> t = Taskas ( )>>> t . p ( )0>>> t . p ( )1>>> t . p ( )2

Page 17: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Klases dokumentacines eilutes

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

17 / 218

Jei pirma eilute klaseje yra simboliu eilute, tuomet ši eilute yrasusiejama su dokumentaciniu klases atributu __doc__

Page 18: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

18 / 218

>>> c l a s s Taskas :. . . ’ S i ␣ k l a s e ␣naudojama␣ a p r a s y t i ␣ t a s k u i ’. . .>>> Taskas .__doc__’ S i ␣ k l a s e ␣naudojama␣ a p r a s y t i ␣ t a s k u i ’

Page 19: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Deskriptorius

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

19 / 218

Taip vadinamas bet koks naujo stiliaus objektas, kurio klase turi bentvieną iš specialiu metodu __get__, __set__, __delete__. Jeiapibrežti du metodai __get__ ir __set__, tuomet objektasvadinamas duomenu deskriptoriumi.

Page 20: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

20 / 218

c l a s s De s k r i p t o r i u s ( o b j e c t ) :def __init__( s e l f ) :

s e l f ._name = ’ ’def __get__( s e l f , i n s t a n c e , owner ) :

pr in t ( " Ge t t i n g : ␣%s " % s e l f ._name)return s e l f ._name

def __set__( s e l f , i n s t a n c e , name ) :pr in t ( " S e t t i n g : ␣%s " % name )s e l f ._name = name . t i t l e ( )

def __delete__( s e l f , i n s t a n c e ) :pr in t ( " De l e t i n g : ␣%s " %s e l f ._name)del s e l f ._name

c l a s s Testas ( o b j e c t ) :x = D e s k r i p t o r i u s ( )

Page 21: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

21 / 218

>>> a = C()>>> a . c = ’ j o n a s ’S e t t i n g : j o n a s>>> a . cGe t t i n g : Jonas’ Jonas ’>>> del ( a . c )De l e t i n g : Jonas

Page 22: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Gamybine funkcija (angl. factory-function)

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

22 / 218

Tai programos projektavimo budas, kuomet funkcija grąžina reikiamosklases objektą.

c l a s s S p e c i a l u s A t v e j i s ( o b j e c t ) :def metodas ( s e l f ) :pr in t ( " s p e c i a l u s " )

c l a s s Norma l u sA t v e j i s ( o b j e c t ) :def metodas ( s e l f ) :pr in t ( " norma lus " )

def t i n k ama sA t v e j i s ( ar_normalus=True ) :i f ar_normalus :

return Norma l u sA t v e j i s ( )e l s e :

return S p e c i a l u s A t v e j i s ( )>>> ob j e k t a s = t i n k ama sA t v e j i s ( ar_normalus=Fa l s e )>>> ob j e k t a s . metodas ( )" s p e c i a l u s "

Page 23: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

__new__

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

23 / 218

Naujojo tipo klases turi statini metodą __new__, kuris yraiškviečiamas iškviečiant konstruktoriu Klase(*args, **kwds). Kuometiškviečiame konstruktoriu, Pitonas iš pradžiu iškviečia metodą__new__, o po to ir __init__, jei sukonstruotas objektaspriklauso klasei Klase arba jos poklasiams.

Page 24: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Statinis metodas

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

24 / 218

Statinis metodas yra toks metodas, kuri galima iškviesti ne tikobjekto, bet ir klases pagalba. Statinis metodas apibrežiamasfunkcijos staticmethod() pagalba (nebutinai pačiame klases apraše).

c l a s s Kla se ( o b j e c t ) :def s t a t i n i s ( ) :

pr in t ( ’ s t a t i n i s ␣metodas ’ )s t a t i n i s = s t a t i cme thod ( s t a t i n i s )

#nuo 3 v e r s i j o s n ebu t i n a sob j e k t a s = Kla se ( )K la se . s t a t i n i s ( )# at sp au sd i n a : s t a t i n i s metodasob j e k t a s . s t a t i n i s ( )# at sp au sd i n a : s t a t i n i s metodas

Page 25: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Klases metodas

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

25 / 218

Klases metodas yra toks metodas, kuri galima iškviesti ne tik objekto,bet ir klases pagalba ir yra susietas su pačia klase. Klases metodasapibrežiamas funkcijos classmethod() pagalba. Pirmasis metodoargumentas yra cls.

Page 26: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Klases metodas

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

26 / 218

c l a s s Kla se ( o b j e c t ) :def k l a s i n i s ( c l s ) :

pr in t ( c l s .__name__, ’ k l a s i n i s ␣metodas ␣ ’ )k l a s i n i s = c l a s smethod ( k l a s i n i s )

#nuo 3 v e r s i j o s n ebu t i n a sc l a s s Nau jaK la se ( K la se ) :

pass

ob j e k t a s 1 = Kla se ( )o b j e k t a s 2 = Nau jaK la se ( )K la se . k l a s i n i s ( )# at sp au sd i n a : K la se k l a s i n i s metodasob j e k t a s 1 . k l a s i n i s ( )# at sp au sd i n a : K la se k l a s i n i s metodasNau jaK la se . k l a s i n i s ( )# at sp au sd i n a : Nau jaK la se k l a s i n i s metodasob j e k t a s 2 . k l a s i n i s ( )# at sp au sd i n a : Nau jaK la se k l a s i n i s metodas

Page 27: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Susietieji metodai

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

27 / 218

Gilinantis i Pitono programavimo kalbą galima aptikti tokias sąvokaskaip susietieji (angl. bound) ir nesusietieji (angl. unbound) metodai.Iš esmes susietasis metodas yra toks, kuris yra susietas su objektu(štai iš kur atsiranda self ). Ir kai kreipiamasi i metodą, jis iš pradžiukreipiasi i tą objektą, kuris ji iškviete.

Page 28: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

28 / 218

def make_adder_as_closure ( augend ) :def add ( addend , _augend=augend ) :

return addend+_augendreturn add

def make_adder_as_bound_method( augend ) :c l a s s Adder ( o b j e c t ) :

def _ _init_ _( s e l f , augend ) :s e l f . augend = augend

def add ( s e l f , addend ) :return addend+s e l f . augend

return Adder ( augend ) . add

Page 29: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Paveldejimas

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

29 / 218

Paveldejimas tai egzistuojančios klases atributu pakartotinispanaudojimas.

Page 30: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

30 / 218

>>> c l a s s Taskas ( o b j e c t ) :. . . def __init__( s e l f ) :. . . s e l f . x=0. . . s e l f . y=0. . . def p ( s e l f ) :. . . pr in t ( s e l f . x , s e l f . y )>>> c l a s s Atkarpa ( Taskas ) :. . . def __init__( s e l f ) :. . . Taskas . __init__( s e l f ). . . s e l f . r=1. . . def ats tumas ( s e l f ) :. . . pr in t ( s e l f . x+s e l f . r , s e l f . y )>>> a=Atkarpa ( )>>> a . p ( )0 0>>> a . ats tumas ( )1 0

Page 31: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Daugialypis paveldejimas

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

31 / 218

Page 32: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

super

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

32 / 218

Tai raktažodis, leidžiantis kreiptis i tevinę klasę neišreikštiniu budu

Page 33: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

33 / 218

c l a s s A( ob j e c t ) :def met ( s e l f ) :

pr in t ( ’A . met ’ )c l a s s B(A) :

def met ( s e l f ) :pr in t ( ’B . met ’ )supe r (B, s e l f ) . met ( )

c l a s s C(A) :def met ( s e l f ) :

pr in t ( ’C . met ’ )supe r (C , s e l f ) . met ( )

c l a s s D(B,C ) :def met ( s e l f ) :

pr in t ( ’D. met ’ )supe r (D, s e l f ) . met ( )

Page 34: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Polimorfizmas

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

34 / 218

Polimorfizmas - tai galimybe kurti kintamuosius, funkcijas arobjektus, turinčius daugiau nei vieną pavidalą, bet naudojamus tokiupačiu budu.

Page 35: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

35 / 218

c l a s s Mai s ta s ( o b j e c t ) :def __init__( s e l f , pavad in imas , k a l o r i j o s ) :

s e l f . name = pavad in imass e l f . c a l o r i e s = k a l o r i j o s

def s k o n i s ( s e l f ) :r a i s e Not ImplementedExcept ion ( " P o k l a s i a i ␣\

␣␣␣␣␣␣␣␣␣␣␣␣ a t s a k i n g i ␣uz␣ s i o ␣metodo␣ r e a l i z a v im a " )

c l a s s Hamburger i s ( Ma i s ta s ) :def s k o n i s ( s e l f ) :

return " b e s k on i s "

c l a s s V i s t i e n o s P y r a g e l i s ( Ma i s ta s ) :def s k o n i s ( s e l f ) :

return " s k o n i s ␣ ka i p ␣ v i s t i e n o s "

Page 36: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Metodu perrašymas

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

36 / 218

Metodu perrašymas tai to paties metodo pavadinimo panaudojimassu skirtingu parametru rinkiniu. Pavyzdžiui:

def s p au sd i n k ( s e l f ) :pr in t ( ’ kuku ’ )

def s p au sd i n k ( s e l f , t e k s t a s ) :pr in t ( t e k s t a s )

Pitonas tokios galimybes nepalaiko! Tą galima igyvendintiperduodant parametru rinkini. Pavyzdžiui:

def s p au sd i n k ( s e l f , ∗ a rgumenta i ) :. . .

Page 37: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Savybes (angl. Properties)

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

37 / 218

Itaisytasis deskriptorius su specialiomis galimybemis - iškviesti objektometodus kaip argumentus.

Page 38: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

38 / 218

c l a s s Stac i a kamp i s ( o b j e c t ) :def __init__( s e l f , p l o t i s , a u k s t i s ) :

s e l f . p l o t i s = p l o t i ss e l f . a u k s t i s = a u k s t i s

def g e tP l o t a s ( s e l f ) :return s e l f . p l o t i s ∗ s e l f . a u k s t i s

p l o t a s = p r op e r t y ( g e tP l o t a s ,doc=’ s t a c i a k amp i o ␣ p l o t a s ’ )

>>> s=Stac i a kamp i s (5 , 5)>>> s . p l o t a s25>>> s . p l o t i s =4>>> s . p l o t a s20

Page 39: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Savybes

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

39 / 218

■ Savybes yra tik skaitomos■ Naudingos kaip viešoji sąsaja■ Yra paveldimos, bet metodai, i kuriuos kreipiasi, priklauso tik tai

pačiai klasei, kurioje savybes aprašytos

Page 40: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys I

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

40 / 218

c l a s s B( ob j e c t ) :def f ( s e l f ) : return 23g = p r op e r t y ( f )

c l a s s C(B ) :def f ( s e l f ) : return 42

c = C( )pr in t c . g # spau sd i n a 23

Page 41: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys II

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

41 / 218

O čia pavyzdys, kaip "apeiti" ribojimą:

c l a s s B( ob j e c t ) :def f ( s e l f ) : return 23def _f_getter ( s e l f ) : return s e l f . f ( )g = p r op e r t y ( _f_getter )

c l a s s C(B ) :def f ( s e l f ) : return 42

c = C( )pr in t c . g # spau sd i n a 42

Page 42: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

__slots__

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

42 / 218

■ Šis atributas pilnai pakeičia standartini klases atributą__dict__.

■ Jis apibrežia baigtinę atributu aibę.■ Leidžia išsaugoti šiek tiek atminties.■ Neleidžia sukurti nauju atributu.

Page 43: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

43 / 218

c l a s s Opt im i zuo t a sS t a c i a k amp i s ( S ta c i a kamp i s ) :__slots__ = ( ’ p l o t i s ’ , ’ i l g i s ’ )

>>> t = T()>>> t . p l o t i s = 1>>> t . x = 1Traceback (most r e c e n t c a l l l a s t ) :

F i l e "<s t d i n >" , l i n e 1 , in <module>A t t r i b u t e E r r o r : ’T ’ o b j e c t has no a t t r i b u t e ’ x ’

Page 44: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Specialus metodai

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

44 / 218

Klase gali tureti arba paveldeti specialius metodus (kurie prasideda irbaigiasi dvigubu pabraukimu). Pitonas automatiškai iškviečiaatitinkamą specialu metodą, kai atliekamos susijusios operacijos.Toliau aptarsime kai kurias šiu metodu savybes.

Page 45: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Savybes

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

45 / 218

■ x.__pavadinimas__() iš esmes ekvivalentusx.__class__.__pavadinimas__(x, )

■ Bendrieji metodai■ Specialus metodai

Page 46: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Bendrieji metodai I

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

46 / 218

■ __call__ - objektas iškviečiamas kaip funkcija, jei turi ši metodą

■ __cmp__ - jei konkretus specialusis metodas (pavyzdžiui,__lt__ ar __gt__) neegzistuoja arba grąžina klaidąNonImplemented, iškviečiamas šis objektu palyginimuitarpusavyje. Jei šio metodo nera, eiliškumo operatoriai (<, <=,>, >=) grąžins klaidos pranešimą. Lygybes operatoriai tikrinstapatybę, t.y. x == y id(x) == id (y)

■ __del__ - objektu naikinimas (tik esant poreikiui)■ __delattr__ - objekto atributo naikinimas■ __lt__, __le__, __gt__, __ge__, __eq__, __ne__ -

objektu palyginimas tarpusavyje (<, <=, >, >=, ==, !=)■ __getattr__ - jei objekto atributo nepavyko rasti normaliu budu

(x.__dict__ arba x.__class__ ), tuomet kviečiamas šisatributas x.__getattr__(’y’)

Page 47: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Bendrieji metodai II

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

47 / 218

■ __getattribute__ - jei objektas yra naujojo stiliaus klases,kiekvienas kreipinys i atributą x.y yra keičiamasx.__getattribute__(’y’)

■ __hash__ - naudoja objektą kaip žodyno raktą (grąžina 32 bituint)

■ __init__ - Kai kviečiamas konstruktorius C(), objektasinicializuojamas kviečiant ši metodą. Tevine klase nerainicializuojama, todel reikia tą nurodyti išreikštiniu budu -super(C, self).__init__()

■ __new__ - (naujo stiliaus klasems) objekto inicializavimas. Šismetodas iš esmes yra statinis ir gali grąžinti nebutinai klases Cobjektą. Rekomenduojama daugiau naudoti __init__

■ __nonzero__ - objektas ivertinamas loginiame kontekste (True,False). Jei šis metodas neegzistuoja, kviečiamas __len__ (Falseatitinka 0). Rekomenduojama naudoti if talpykla: vietoje iflen(talpykla) > 0:

Page 48: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Bendrieji metodai III

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

48 / 218

■ __repr__ - objekto atvaizdavimas simboline eilute. Jei šismetodas neapibrežtas, Pitonas naudoja numatytąją simbolinęišraišką.

■ __setattr__ - atributo priskyrimas objektui. Kviečiamaspriskyrimo metu (dažniausiai): x.y = reikšme. Modifikuoja__dict__ tiesiogiai - x.__dict__[’y’] = reikšme

■ __str__ - objekto atvaizdavimas neoficialia glausta simbolineeilute. Jei šio metodo nera, kviečiamas __repr__

■ __unicode__ - objekto atvaizdavimas simboline eilute kaip ir__str__ atveju. Šiam metodui teikiama pirmenybe

Page 49: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Specialus metodai darbui su talpyklomis (angl.container)

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

49 / 218

■ __contains__ - patikrina, ar seka turi elementą - y in x■ __delitem__ - ištrina sekos (seka negali buti fiksuota) elementą■ __getitem__ - grąžina sekos elementą x[key]■ __iter__ - objekto iteratorius grąžinamas, pavyzdžiui, tokiais

atvejais: for elementas in x■ __len__ - grąžina elementu skaičiu konteineryje. Visi

konteineriai turetu tureti šią funkciją, nebent ji butu labai"brangi"

■ __setitem__ - patalpina elementą i seką (x[key] = y). Sekanegali buti fiksuota

Page 50: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Specialus metodai skaitiniams objektams I

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

50 / 218

■ __abs__, __invert__, __neg__, __pos__ - kviečiamiunariniu operatoriu: abs(x), x, -x, +x

■ __add__, __div__, __floordiv__, __mod__, __mul__,__sub__, __truediv__ - operatoriai x+y, x/y, x//y, x%y, x*y,x-y, x/y

■ __and__, __lshift__, __or__, __rshift__, __xor__ -operatoriai x&y, x«y, x|y, x»y, xy

■ __coerce__ - skaitiniu operaciju metu šis metodas paverčia x iry tipus priimtinais. Uždraustas. Naudojamas tik suderinamumo susenesnemis versijomis tikslu.

■ __complex__, __float__, __int__, __long__ - itaisytiejitipai. complex(x), float(x), int(x), long(x)

■ __divmod__ - divmod(x, y) grąžina porą (dalmuo, liekana)■ __hex__, __oct__ - hex(x), oct(x) - grąžina simbolinę

išraišką atitinkamoje skaičiavimo sistemoje

Page 51: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Specialus metodai skaitiniams objektams II

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

51 / 218

■ __iadd__, __idiv__, __ifloordiv__, __imod__,__imul__, __isub__, __itruediv__ - x+=y, x/=y,x//=y%=y, x*=y, x-=y, x/=y

■ __iand__, __ilshift__, __ior__, __irshift__, __ixor__- x& =y, x«=y, x|=y, x»=y, x=y

■ __ipow__ - x**=y■ __pow__ - x**y■ __radd__, __rdiv__, __rmod__, __rmul__, __rsub__

- kviečiami, jei y neturi tokiu operaciju y+x, y/x, y%y, y*x, y-x■ __rand__, __rlshift__, __ror__, __rrshift__, __rxor__

- panašiai, kaip ir anksčiau minetu atveju■ __rdivmod__ - panaš.■ __rpow__ - panaš.

Page 52: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Dekoratoriai

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

52 / 218

Dekoratorius - tai funkcijos perrašymo budas.

Page 53: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

53 / 218

def f ( c l s , . . . ) :. . . kodas . . .

f = c l a s smethod ( f )

@c lassmethod def f ( c l s , . . . ) :. . . kodas . . .

Page 54: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Savybes

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

54 / 218

■ Po dekoratoriaus iš karto turi buti apibrežiama funkcija■ Dekoratoriu galima susikurti patiems■ Dekoratoriaus kvietimas suletina funkcijos iškvietimą■ Piktnaudžiavimas jais gali padaryti kodą sunkiai ištaisomu

Page 55: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

55 / 218

def makebold ( fn ) :def wrapped ( ) :

return "<b>" + fn ( ) + "</b>"return wrapped

@makebolddef h e l l o ( ) :

return " h e l l o ␣ wor ld "

pr in t h e l l o ( ) ## r e t u r n s <b>h e l l o wor ld </b>

Page 56: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pastaba

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

56 / 218

Užrašas:

@d eko r a t o r i u sdef f u n k c i j a ( ) :

. . . kodas . . .

yra ekvivalentus tokiam:

def f u n k c i j a ( ) :. . . kodas . . . .

f u n k c i j a = d e k o r a t o r i u s ( f u n k c i j a )

Page 57: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Užduotis

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

57 / 218

Paaiškinkite ši kodo fragmentą:

def makebold ( f ) :return lambda : "<b>" + f ( ) + "</b>"

def ma k e i t a l i c ( f ) :return lambda : "<i>" + f ( ) + "</i>"

@makebold@make i t a l i cdef say ( ) :

return " S v e i k i "

pr in t say ( )

Page 58: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Metaklases

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

58 / 218

Metaklases - tai klasiu kurimo klases.

Page 59: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Šis bei tas apie klases

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

59 / 218

■ Klase naudojama sukurti objektui.■ Bet klase taip pat yra objektas!■ Metaklase yra atsakinga už klases objekto sukurimą.

Page 60: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

60 / 218

>>> x=20>>> x . __class__<c l a s s ’ i n t ’>>>> c l a s s X( ob j e c t ) : pass

>>> x=X()>>> x . __class__<c l a s s ’__main__.X ’>>>> x . __class__ . __class__<c l a s s ’ t ype ’>

Page 61: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

type

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

61 / 218

Tai yra itaisytoji Pitono metaklase, kuri naudojama kuriant visusobjektus.

Page 62: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Dar šis bei tas

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

62 / 218

■ Galima sukurti savo metaklases■ Apsirašant klasę galima naudoti atributą __metaclass__■ Galima tiesiog naudoti type

Page 63: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

type naudojimo pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

63 / 218

>>> ManoKlase=type ( ’ ManoKlase ’ , ( ) , { } )>>> a=ManoKlase ( )>>> a . __class__<c l a s s ’__main__. ManoKlase ’>

Page 64: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

__metaclass__ naudojimo pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

64 / 218

Pagrindinis tikslas - automatiškai keisti klasę jos sukurimo metu.

c l a s s Foo ( o b j e c t ) :__metaclass__ = . . . kodas . . .

c l a s s Foo ( Bar ) :pass

■ Patikrinama ar klase Foo turi atributą __metaclass__■ Jei nera, tikrinama ar tevine klase turi atributą __metaclass__■ Jei nera, tikrinama ar egzistuoja atributas __metaclass__

modulio lygiu■ Jei nera, naudojamas type

Page 65: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Baigiant

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

65 / 218

99% programuotoju praktiškai niekada nesirupina tuo, kas yrametaklases. Jei kyla klausimas ar reikalinga metaklase, tuometatsakymas yra ne. Metaklases dažniausiai naudojamos kuriant API.

Page 66: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Grafine naudotojo sąsaja

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

66 / 218

Page 67: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

GNS - grafine naudotojo sąsaja

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

67 / 218

Grafikos priemonemis pagrista sąsaja tarp žmogaus ir kompiuterio(angl. GUI - graphic user interface).

Page 68: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pitonas ir GNS

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

68 / 218

Pitonas neturi savojo (angl. native) GNS palaikymo, tačiau egzistuojapakankamai biblioteku kitose programavimo kalbose, kurias galinaudoti Pitonas. Tą užtikrina taip vadinami susiejejai (angl.bindings) ar apgaubejai (angl. wrappers).

Page 69: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Bibliotekos

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

69 / 218

■ Naudojančios tcl/tk:

◆ tkinter - standartine◆ wck (widget construction kit) - trečios šalies biblioteka

■ Nenaudojančios tk (daugiaplatformes):

◆ PyGtk◆ PyQt◆ wxPython

Page 70: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

widget

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

70 / 218

Valdiklis - grafines sąsajos valdymo elementas arba programa,sukurianti valdikli ir dirbanti su juo.

Page 71: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

GNS pagrindinis veikimo principas

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

71 / 218

Page 72: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys (pseudokodas)

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

72 / 218

whi le True :even t = getNextEvent ( )i f even t :

i f even t == Terminate :break

p ro c e s sEv en t ( even t )

Page 73: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pastaba

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

73 / 218

Pitono konsolines programos visada rašoos su .py pletiniu, tuo tarpuGNS programoms galima naudoti .pyw. Tai aktualu WIndows OS, nesnaudojamas pythonw.exe interpretatorius vietoje python.exe. KitomsOS tai nera taip aktualu.

Page 74: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

74 / 218

#!/ u s r / b i n / python3

import t k i n t e r

Page 75: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

75 / 218

GNS yra iš esmes objektu hierarchija. Todel kiekvienas elementas turiparametrą parent.

#!/ u s r / b i n / python3

import t k i n t e r

c l a s s Pavyzdys ( t k i n t e r . Tk ) :def __init__( s e l f , p a r en t ) :

t k i n t e r . Tk . __init__( s e l f , p a r en t )

Page 76: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

76 / 218

Išlaikome nuorodą i tevini objektą.

#!/ u s r / b i n / python3

import t k i n t e r

c l a s s Pavyzdys ( t k i n t e r . Tk ) :def __init__( s e l f , p a r en t ) :

t k i n t e r . Tk . __init__( s e l f , p a r en t )s e l f . p a r en t = pa ren t

Page 77: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

77 / 218

Atskiriame logiką nuo grafiniu elementu.

#!/ u s r / b i n / python3

import t k i n t e r

c l a s s Pavyzdys ( t k i n t e r . Tk ) :def __init__( s e l f , p a r en t ) :

t k i n t e r . Tk . __init__( s e l f , p a r en t )s e l f . p a r en t = pa ren ts e l f . i n i t i a l i z e ( )

def i n i t i a l i z e ( s e l f ) :pass

Page 78: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

78 / 218

Sukuriame metodą main paleidimui iš komandines eilutes ir nurodomeprogramai kartoti ciklą (mainloop).

#!/ u s r / b i n / python3

import t k i n t e rc l a s s Pavyzdys ( t k i n t e r . Tk ) :

def __init__( s e l f , p a r en t ) :t k i n t e r . Tk . __init__( s e l f , p a r en t )s e l f . p a r en t = pa ren ts e l f . i n i t i a l i z e ( )

def i n i t i a l i z e ( s e l f ) :pass

i f __name__ == "__main__" :app = Pavyzdys (None )app . t i t l e ( ’Mano␣ p i rm o j i ␣ programa ’ )app . ma in loop ( )

Page 79: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pastaba

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

79 / 218

Ką tik sukureme pati paprasčiausią tuščią langą. Galima paleistiprogramą.

Page 80: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

80 / 218

Yra keletas budu, norint išdestyti elementus lange. Tą atlieka klasesvadinamos maketavimo tvarkytuvemis (angl. layout manager).Pasinaudosime pačia paprasčiausia - grid.

. . . .def i n i t i a l i z e ( s e l f ) :

s e l f . g r i d ( ). . . .

Page 81: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

81 / 218

Sukuriame valdikli ir patalpiname ji tvarkytuveje.

. . . .def i n i t i a l i z e ( s e l f ) :

s e l f . g r i d ( )

s e l f . t e k s t a s = t k i n t e r . Ent ry ( s e l f )s e l f . t e k s t a s . g r i d ( column = 0 , row = 0 ,s t i c k y = ’EW’ )

. . . .

Page 82: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pastaba

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

82 / 218

Ką tik sukureme langą su teksto ivedimo laukeliu. Galima paleistiprogramą.

Page 83: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

83 / 218

Sukuriame mygtuką ir patalpiname ji tvarkytuveje.

. . . .def i n i t i a l i z e ( s e l f ) :

s e l f . g r i d ( )

s e l f . t e k s t a s = t k i n t e r . Ent ry ( s e l f )s e l f . t e k s t a s . g r i d ( column = 0 , row = 0 ,s t i c k y = ’EW’ )

mygtukas = t k i n t e r . Button ( s e l f ,t e x t = ’ Paspausk␣mane␣ ! ’ )

mygtukas . g r i d ( column = 1 , row = 0). . . .

Page 84: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pastaba

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

84 / 218

Ką tik sukureme langą su teksto ivedimo laukeliu ir mygtuku. Galimapaleisti programą. Deja, bet mygtukas nieko nedaro!

Page 85: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

85 / 218

Sukuriame etiketę (angl. label) ir patalpiname ją tvarkytuveje.

. . . .def i n i t i a l i z e ( s e l f ) :

s e l f . g r i d ( ). . .mygtukas = t k i n t e r . Button ( s e l f ,t e x t = ’ Paspausk␣mane␣ ! ’ )

mygtukas . g r i d ( column = 1 , row = 0)

a n t r a s t e = t k i n t e r . Labe l ( s e l f , anchor = ’w ’ ,f g = ’ wh i t e ’ , bg = ’ g reen ’ )

a n t r a s t e . g r i d ( column = 0 , row = 1 ,columnspan = 2 , s t i c k y = ’EW’ )

. . . .

Page 86: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

86 / 218

Ijungiame automatini elementu dydžio keitimą (pirmajam stulpeliui) irnurodome, kad lango parametrus keisti galesime tik horizontaliai.

. . . .def i n i t i a l i z e ( s e l f ) :

s e l f . g r i d ( ). . .a n t r a s t e = t k i n t e r . Labe l ( s e l f , anchor = ’w ’ ,f g = ’ b l u e ’ , bg = ’ g reen ’ )

a n t r a s t e . g r i d ( column = 0 , row = 1 ,columnspan = 2 , s t i c k y = ’EW’ )

s e l f . g r i d_co l umncon f i gu r e (0 , we ight = 1)s e l f . r e s i z a b l e ( True , F a l s e )

. . . .

Page 87: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pastaba

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

87 / 218

Iki šiol tik deliojome elementus. Toliau pridesime interaktyvumo.

Page 88: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

88 / 218

Pridedame tekstiniam laukui ir mygtukui ivykiu valdiklius (angl. eventhandler)

s e l f . t e k s t a s = t k i n t e r . Ent ry ( s e l f )s e l f . t e k s t a s . g r i d ( column = 0 , row = 0 ,

s t i c k y = ’EW’ )s e l f . t e k s t a s . b ind ( ’<Return>’ ,

s e l f . OnPressEnter )mygtukas = t k i n t e r . Button ( s e l f ,

t e x t = ’ Paspausk␣mane␣ ! ’ ,command = s e l f . OnButtonCl i ck )

mygtukas . g r i d ( column = 1 , row = 0)s e l f . a n t r a s t e sK i n t ama s i s = t k i n t e r . S t r i n gVa r ( )a n t r a s t e = t k i n t e r . Labe l ( s e l f ,

t e x t v a r i a b l e = s e l f . a n t r a s t e sK i n t ama s i s ,anchor = ’w ’ , f g = ’ wh i t e ’ , bg = ’ g reen ’ )

a n t r a s t e . g r i d ( column = 0 , row = 1 ,columnspan = 2 , s t i c k y = ’EW’ )

Page 89: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

89 / 218

Funkcijos, reaguojančios i ivykius.

. . . .def i n i t i a l i z e ( s e l f ) :

. . .def OnButtonCl i ck ( s e l f ) :

s e l f . a n t r a s t e sK i n t ama s i s . s e t (’ Paspaus ta s ␣mygtukas ! ’ )

def OnPressEnter ( s e l f , e ven t ) :s e l f . a n t r a s t e sK i n t ama s i s . s e t (

’ Paspaus ta s ␣ Ente r ! ’ ). . . .

Page 90: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

90 / 218

Pakeičiame funkciju elgesi:

. . . .def i n i t i a l i z e ( s e l f ) :

. . .def OnButtonCl i ck ( s e l f ) :

s e l f . a n t r a s t e sK i n t ama s i s . s e t (s e l f . t e k s t a t sK i n t ama s i s . ge t ( ) )

def OnPressEnter ( s e l f , e ven t ) :s e l f . a n t r a s t e sK i n t ama s i s . s e t (

s e l f . t e k s t a sK i n t ama s i s . ge t ( ) ). . . .

Page 91: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pastaba

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

91 / 218

Programa pilnai parašyta. Toliau aptarsime kelis patobulinimus.

Page 92: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Patobulinimas I

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

92 / 218

Pirmoji eilute automatiškai parenka tekstini lauką kaip aktyvu. Antrojieilute nurodo, kad bus pažymimas visas tekstas.

. . .s e l f . t e k s t a s . f ocus_se t ( )s e l f . t e k s t a s . s e l e c t i o n_ r a n g e (0 , t k i n t e r .END). . .

Page 93: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Patobulinimas I

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

93 / 218

tkinter turi vieną nedidelę dydžio keitimo problemą. Šis modulisvisada megina pakeisti lango dydi priklausomai nuo jo valdikliu.Kartais tai tinka, bet dažniausiai ne. Todel atliekame langopakeitimus kurimo metu ir užfiksuojame jo dydi.

def i n i t i a l i z e ( s e l f ) :. . . .s e l f . update ( )s e l f . geometry ( s e l f . geometry ( ) ). . . .

Page 94: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Valdikliu klases I

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

94 / 218

Egzistuoja ir daugiau klasiu darbui su GNS:

■ Button - mygtukas■ Canvas - piešimo valdiklis■ Checkbutton - žymimasis langelis■ Entry - teksto ivedimo valdiklis■ Frame - Naudojamas kitu valdikliu grupavimui ir organizavimui

(veikia kaip konteineris). Gali buti naudojamas kaip bazine klasesudetingu valdikliu kurimui.

■ Label - antrašte■ Listbox - pasirenkamasis sąrašas■ Menubutton - meniu mygtukas■ Menu - meniu■ Message - daugiaeilute etikete■ Radiobutton - žymimoji akute

Page 95: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Valdikliu klases II

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

95 / 218

■ Scale - šliaužiklis■ Scrollbar - slankiklis■ Text - tekstinis laukas■ Toplevel - atskiro lango konteineris (neturi tevinio valdiklio)■ Spinbox - redaguojamas sąrašas■ PanedWindow - langas, sudarytas iš polangiu■ LabelFrame - valdiklis Frame su antrašte. Naudojamas

grupavimui■ tkMessageBox - modulis, skirtas pranešimu atvaizdavimui

Page 96: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Valdiklio Canvas pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

96 / 218

import t k i n t e r

top = t k i n t e r . Tk ( )C = t k i n t e r . Canvas ( top , bg=" b l u e " ,

h e i g h t =250 , w idth=300)coord = 10 , 50 , 240 , 210a r c = C . c r ea t e_a rc ( coord , s t a r t =0,

e x t e n t =150 , f i l l =" red " )C . pack ( )top . ma in loop ( )

Page 97: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Rezultatas

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

97 / 218

Page 98: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Valdiklio Checkbutton pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

98 / 218

import t k i n t e rfrom t k i n t e r import ∗

top = t k i n t e r . Tk ( )CheckVar1 = In tVa r ( )CheckVar2 = In tVa r ( )C1 = Checkbutton ( top , t e x t = "Music" ,

v a r i a b l e = CheckVar1 , onva l u e = 1 ,o f f v a l u e = 0 , h e i g h t =5, width = 20)

C2 = Checkbutton ( top , t e x t = "Video " ,v a r i a b l e = CheckVar2 , onva l u e = 1 ,o f f v a l u e = 0 , h e i g h t =5, width = 20)

C1 . pack ( )C2 . pack ( )top . ma in loop ( )

Page 99: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Rezultatas

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

99 / 218

Page 100: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Valdiklio Frame pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

100 / 218

import t k i n t e rr oo t = t k i n t e r . Tk ( )frame = t k i n t e r . Frame ( r oo t )frame . pack ( )bottomframe = t k i n t e r . Frame ( r oo t )bottomframe . pack ( s i d e = t k i n t e r .BOTTOM )redbu t ton = t k i n t e r . Button ( frame , t e x t="Red" , f g=" redr edbu t ton . pack ( s i d e = t k i n t e r . LEFT)g r eenbu t ton = t k i n t e r . Button ( frame , t e x t="Brown" , f g=greenbu t ton . pack ( s i d e = t k i n t e r . LEFT )b l u ebu t t on = t k i n t e r . Button ( frame , t e x t="Blue " , f g="b l u ebu t t on . pack ( s i d e = t k i n t e r . LEFT )b l a ckbu t t on = t k i n t e r . Button ( bottomframe , t e x t="Blackb l a ckbu t t on . pack ( s i d e = t k i n t e r .BOTTOM)roo t . ma in loop ( )

Page 101: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Rezultatas

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

101 / 218

Page 102: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Valdiklio Listbox pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

102 / 218

from Tk i n t e r import ∗

import tkMessageBoximport Tk i n t e r

top = Tk ( )Lb1 = L i s t b o x ( top )Lb1 . i n s e r t (1 , "Python" )Lb1 . i n s e r t (2 , " P e r l " )Lb1 . i n s e r t (3 , "C" )Lb1 . i n s e r t (4 , "PHP" )Lb1 . i n s e r t (5 , "JSP" )Lb1 . i n s e r t (6 , "Ruby" )Lb1 . pack ( )top . ma in loop ( )

Page 103: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Rezultatas

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

103 / 218

Page 104: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Valdiklio Menubutton pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

104 / 218

from Tk i n t e r import ∗

import tkMessageBoximport Tk i n t e rtop = Tk ( )mb = Menubutton ( top , t e x t=" cond iments " ,

r e l i e f=RAISED )mb. g r i d ( )mb. menu = Menu ( mb, t e a r o f f = 0 )mb[ "menu" ] = mb. menumayoVar = In tVa r ( )ketchVar = In tVa r ( )mb. menu . add_checkbutton ( l a b e l="mayo" ,

v a r i a b l e=mayoVar )mb. menu . add_checkbutton ( l a b e l=" ketchup " ,

v a r i a b l e=ketchVar )mb. pack ( )top . ma in loop ( )

Page 105: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Rezultatas

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

105 / 218

Page 106: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Valdiklio Menu pavyzdys I

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

106 / 218

from Tk i n t e r import ∗

def donoth ing ( ) :f i l e w i n = Top l e v e l ( r oo t )but ton = Button ( f i l e w i n , t e x t="Do␣ no th i ng ␣ but ton "but ton . pack ( )

r oo t = Tk ( )menubar = Menu( r oo t )f i l emenu = Menu(menubar , t e a r o f f =0)f i l emenu . add_command( l a b e l="New" , command=donoth ing )f i l emenu . add_command( l a b e l="Open" , command=donoth ingf i l emenu . add_command( l a b e l="Save" , command=donoth ingf i l emenu . add_command( l a b e l="Save␣ as . . . " , command=donf i l emenu . add_command( l a b e l=" C lo s e " , command=donoth ingf i l emenu . add_sepa ra to r ( )

Page 107: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Valdiklio Menu pavyzdys II

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

107 / 218

f i l emenu . add_command( l a b e l=" Ex i t " , command=roo t . q u i tmenubar . add_cascade ( l a b e l=" F i l e " , menu=f i l emenu )ed i tmenu = Menu(menubar , t e a r o f f =0)ed i tmenu . add_command( l a b e l="Undo" , command=donoth inged i tmenu . add_sepa ra to r ( )ed i tmenu . add_command( l a b e l="Cut" , command=donoth ing )ed i tmenu . add_command( l a b e l="Copy" , command=donoth inged i tmenu . add_command( l a b e l="Paste " , command=donoth inged i tmenu . add_command( l a b e l="De l e t e " , command=donoth ined i tmenu . add_command( l a b e l=" S e l e c t ␣ A l l " , command=donmenubar . add_cascade ( l a b e l=" Ed i t " , menu=edi tmenu )helpmenu = Menu(menubar , t e a r o f f =0)helpmenu . add_command( l a b e l="Help ␣ I ndex " , command=donhelpmenu . add_command( l a b e l="About . . . " , command=donotmenubar . add_cascade ( l a b e l="Help " , menu=helpmenu )r oo t . c o n f i g (menu=menubar )r oo t . ma in loop ( )

Page 108: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Rezultatas

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

108 / 218

Page 109: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Valdiklio Radiobutton pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

109 / 218

from Tk i n t e r import ∗

def s e l ( ) :s e l e c t i o n = " P a s i r i n k o t e ␣" + s t r ( va r . ge t ( ) )l a b e l . c o n f i g ( t e x t = s e l e c t i o n )

r oo t = Tk ( )va r = In tVa r ( )R1 = Rad iobut ton ( root , t e x t="Option ␣1" ,

v a r i a b l e=var , v a l u e =1, command=s e l )R1 . pack ( anchor = W )R2 = Rad iobut ton ( root , t e x t="Option ␣2" ,

v a r i a b l e=var , v a l u e =2, command=s e l )R2 . pack ( anchor = W )R3 = Rad iobut ton ( root , t e x t="Option ␣3" ,

v a r i a b l e=var , v a l u e =3, command=s e l )R3 . pack ( anchor = W)l a b e l = Labe l ( r oo t )l a b e l . pack ( )r oo t . ma in loop ( )

Page 110: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Rezultatas

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

110 / 218

Page 111: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Modulio tkMessageBox galimybes

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

111 / 218

Galima sukurti kelis skirtingus dialogo langustkMessageBox.funkcija(antrašte, pranešimas [, parametrai]):

■ showinfo()■ showwarning()■ showerror()■ askquestion()■ askokcancel()■ askyesno()■ askretrycancel()

Page 112: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Reguliariosios išraiškos

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

112 / 218

Page 113: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Reguliari išraiška (angl. regular expression

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

113 / 218

Tai simboliu eilute aprašanti šabloną (angl. pattern)

Page 114: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Keletas faktu

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

114 / 218

■ Darbui su reguliariosiomis išraiškomis naudojamas standartinismodulis re

■ Raides ir skaitmenys atitinka patys save, t.y. šablonas, sudarytasiš raidžiu ir skaičiu atitinką tą pačią simboliu eilutę

■ Simbolis "" yra komandinis. Daugelis raidžiu ir skaitmenu igyja naująprasmę, kai prieš juos naudojamas komandinis simbolis

■ Skyryba veikia atvirkščiai - specialią reikšmę turi kol nerakomandinio simbolio

■ Reguliarioji išraiška suformuojama funkcijos compile("išraiška")pagalba

Page 115: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Sintakse

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

115 / 218

■ "." – atitinka bet kuri simboli išskyrus "\n" (jei DOTALL,atitinka ir ji)

■ "∧" – atitinka simboliu eilutes pradžią (jei MULTILINE, veikia irpo "\n")

■ "$" – atitinka simboliu eilutes pabaigą (jei MULTILINE, veikia itprieš "\n")

■ "*" – atitinka nuli ar daugiau ankstesnes reguliarios išraiškosatveju (godus - lygina tiek kartu kiek tik galima)

■ "+" – atitinka vieną ar daugiau ankstesnes reguliarios išraiškosatveju (godus)

■ "?" – atitinka nuli ar vieną ankstesnes reguliarios išraiškos atveji(atitinka vieną jei galima)

■ "*?, +?, ??" – negodus "*", "+", "?" atvejai (atitinka kuomažiau atveji)

■ "{m}" – atitinka tiksliai m reguliarios išraiškos atveju

Page 116: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Sintakse

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

116 / 218

■ "{m, n}" – atitinka nuo m iki n ankstesnes reguliarios išraiškosatveju (godus)

■ "{m, n}?" – atitinka nuo m iki n ankstesnes reguliarios išraiškosatveju (negodus)

■ "[...]" – atitinka bet kuri iš nurodytos skliausteliuose simboliuaibes. Pirmasis aibes simbolis "∧" atitinka neigini

■ "|" – atitinka bet kurią iš prieš ji arba po jo esančią išraišką■ "(...)" – atitinka reguliarią išraišką skliausteliuose ir apibrežia

grupę■ "(?aiLmsux)" – viena ar kelios raides iš aibes "a", "i", "L", "m",

"s", "u", "x"■ "(?:...)" – veikia kaip (...), tik neapibrežia kaip grupes■ "(?P<id>...)" – veikia kaip (...), tik grupe dar igyja vardą id■ "(?P=id)" – atitinka tai, kas buvo apibrežta grupe id■ "(?#...)" – komentaras

Page 117: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Sintakse

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

117 / 218

■ "(?=...)" – "pažvelk i prieki", tik tikrina ar nurodyta reguliariišraiška skliausteliuose bus sutinkama toliau

■ "(?!...)" – neigiamas "pažvelk i prieki" tikrinimas (ar neranurodytos reguliarios išraiškos)

■ "(?<=...)" – "pažvelk atgal"■ "(?<!...)" – neigiamas "pažvelk atgal"■ "\number" – atitinka bet ką, kas anksčiau buvo tikrinta su grupe,

kurios numeris yra number (grupes numeruojamos automatiškainuo 1 iki 99)

■ "\A" – atitinka tuščią simboliu eilutę, bet tik nuo visos simboliueilutes pradžios

■ "\b" – atitinka tuščią simboliu eilutę, bet tik žodžio pradžioje arpabaigoje

■ "\B" – atitinka tuščią simboliu eilutę, bet tik ne žodžio pradžiojear pabaigoje

Page 118: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Sintakse

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

118 / 218

■ "\d" – atitinka vieną skaitmeni, kaip aibe [0-9]■ "\D" – atitinka vieną ne skaitmeni, kaip aibe [∧0-9]■ "\s" – atitinka matomus tarpus, kaip aibe [\t\n\r\f\v]■ "\S" – atitinka ne matomus tarpus, kaip aibe [∧\t\n\r\f\v]■ "\w" – atitinka vieną iš raidžiu ar skaitmenu simboliu, nebent

nustatyta LOCALE ar UNICODE, kaip aibe [a-zA-Z0-9_]■ "\W" – atitinka vieną ne iš raidžiu ar skaitmenu simboliu■ "\Z" – atitinka tuščią eilutę, bet tik visos eilutes pabaigoje■ "\" – atitinka kairini brukšni

Page 119: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Palyginimas

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

119 / 218

■ išraiška.match("simboline eilute") – ieško atitikmens nuosimbolines eilutes pradžios

◆ re.match("šablonas", "simboline eilute")

■ search() – ieško atitikmens bet kur simbolineje eiluteje

Page 120: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Kitos funkcijos

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

120 / 218

■ findall■ finditer■ split■ sub■ subn

Page 121: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Rezultatas

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

121 / 218

Palyginimo rezultatas yra match objektas.

Page 122: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Match objekto atributai

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

122 / 218

■ pos – simbolines eilutes indeksas, nuo kurios vietos paieškaprasidejo

■ endpos – simbolines eilutes indeksas, iki kurios vietos paieškavyko

■ lastgroup■ lastindex■ re – naudotas reguliariosios išraiškos objektas■ string – naudota simboline eilute

Page 123: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Match funkcijos

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

123 / 218

■ end, span, start■ expand■ group■ groups■ groupdict

Page 124: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys 1

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

124 / 218

>>> re . match ( "kuku" , "kuku" )<_sre . SRE_Match o b j e c t a t 0 x1005d33d8>>>> re . match ( "kuku" , " kukube" )<_sre . SRE_Match o b j e c t a t 0 x1005d3370>>>> re . match ( "kuku" , " bekukube" )>>> re . match ( " .∗ kuku" , " bekukube" )<_sre . SRE_Match o b j e c t a t 0 x1005d33d8>>>> re . match ( "kuku .∗ " , " bekukube" )>>>

Page 125: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys 2

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

125 / 218

>>> m = re . match ( " (\w+)␣ (\w+)" ," I s a a c ␣Newton , ␣ p h y s i c i s t " )

>>> m. group (0 ) # P i l n a s r e z u l t a t a s’ I s a a c ␣Newton ’>>> m. group (1 ) # Pi rma s i s p og r up i s .’ I s a a c ’>>> m. group (2 ) # An t r a s i s p og r up i s .’ Newton ’>>> m. group (1 , 2) # Rezu l t a t u k o r t e z a s .( ’ I s a a c ’ , ’ Newton ’ )

Page 126: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys 3

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

126 / 218

>>> m = re . match ( " (?P<f i r s t_name>\w+)(?P<last_name>\w+)" , "Malcolm␣Reyno lds " )>>> m. group ( ’ f i r s t_name ’ )’ Malcolm ’>>> m. group ( ’ last_name ’ )’ Reyno lds ’

Page 127: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys 4

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

127 / 218

>>> m = re . match ( " ( . . )+ " , " a1b2c3" )# Sutampa 3 k a r t u s .>>> m. group (1 )# Rezu l t a t a s t i k p a s k u t i n i s su tap imas .’ c3 ’

Page 128: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys 5

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

128 / 218

>>> ema i l = " va rd en i s@dopa sa l i n k_ta imena s . net ">>> m = re . s e a r c h ( " p a s a l i n k_ t a i " , ema i l )>>> ema i l [ :m. s t a r t ( ) ] + ema i l [m. end ( ) : ]’ va rden i s@domenas . net ’

Page 129: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Serializacija

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

129 / 218

Page 130: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Serializacija

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

130 / 218

Tai procesas, kurio metu objektai yra paverčiami baitiniu srautuduomenu perdavimui. Priešingas procesas baitini srautą vel paverčiaobjektu.

Page 131: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Moduliai

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

131 / 218

■ pickle – Pitono modulis■ cPickle – C kalba parašytas serializacijos modulis■ marshal – primityvesnis Pitono serializacijos modulis

Page 132: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Kokius tipus galima serializuoti?

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

132 / 218

■ None, True, False■ Skaičius, iskaitant kompleksinius■ Simbolines eilutes■ Kortežus, sąrašus, aibes ir žodynus sudarytus iš serializuojamu

objektu■ Aukščiausio lygio modulio funkcijas■ Aukščiausio lygio modulio itaisytąsias funkcijas■ Aukščiausio lygio modulio klases■ Tokiu klasiu objektai, kuriu __dict__ arba funkcijos

__getstate()__ rezultatas yra serializuojami

Page 133: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pagrindines funkcijos

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

133 / 218

■ dump(objektas, failas[, protokolas]) – irašo serializuotą objektoišraišką i failą

■ load(file) – nuskaito simbolinę eilutę iš failo ir interpretuoja ją kaipserializuotą duomenu srautą, rezultate grąžina atstatytą objektą

■ dumps(objektas[, protokolas]) – ekvivalenti funkcijai dump(), betgrąžina simbolinę eilutę

■ loads(simboline_eilute) – simbolinę eilutę paverčią objektu

Page 134: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

134 / 218

import p i c k l e>>> c l a s s Foo :. . . a t t r = ’ t e k s t a s ’>>> ps = p i c k l e . dumps ( Foo )>>> psb ’ \ x80\x03c__main__\nFoo\nq\x00 . ’>>> x = p i c k l e . l o a d s ( ps )>>> x<c l a s s ’__main__. Foo ’>>>> x . a t t r’ t e k s t a s ’

Page 135: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Kam naudojama

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

135 / 218

■ Išsaugant programos busenos duomenis■ Siunčiant duomenis TCP ryšiu■ Išsaugant Pitono duomenis duomenu bazeje■ Paverčiant objektą simboline eilute, kurią galima panaudoti kaip

žodyno raktą

◆ Pastaruoju atveju galimos problemos, kaip dvieju identiškuobjektu (ar netgi to paties) skirtinga simbolines eilutesreprezentacija

Page 136: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Laiko operacijos

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

136 / 218

Page 137: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Laiko operacijos

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

137 / 218

Kaip matuojamas laikas? Kam jis naudojamas?

Page 138: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Kai kurie faktai

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

138 / 218

■ Laikas matuojamas sekundemis (arba sekundes dalimis)■ Atskaitos taškas (gali buti keli variantai, dažnai naudojamas 1970

m. sausio 1 d.)■ Dažniausiai naudojamas ivedimo ir išvedimo operacijos■ Laikas gali buti atvaizduojamas ivairiais budais

Page 139: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Moduliai

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

139 / 218

■ time■ datetime■ pytz■ dateutil■ sched■ calendar■ mx.DateTime

Page 140: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys 1

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

140 / 218

>>> x = time . t ime ( )>>> x1361126459.358845>>> time . l o c a l t i m e ( x )t ime . s t ru c t_t ime ( tm_year=2013 , tm_mon=2, tm_mday=17,tm_hour=20, tm_min=40, tm_sec=59, tm_wday=6,tm_yday=48, tm_isdst=0)

>>> time . a s c t ime ( t ime . l o c a l t i m e ( x ) )’ Sun␣Feb␣17␣ 20 : 40 : 59 ␣2013 ’

Page 141: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys 2

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

141 / 218

import t imeimport ospr in t ( ’ Zad i n tuva s ␣ p a l e i s t a s . . . ’ )not_executed = 1

whi le ( not_executed ) :dt = l i s t ( t ime . l o c a l t i m e ( ) )hour = dt [ 3 ]minute = dt [ 4 ]t ime . s l e e p (30)i f hour == 6 and minute == 50 :os . popen2 ( "YOUR_COMMAND" )not_executed = 0

Page 142: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Atgalinis laikmatis

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

142 / 218

import t ime

def ge tTota lM inu t e s ( ) :s = i npu t ( ’ i n pu t ␣ format : ␣xxhxxm\n ’ )hour = s [ 0 : s . f i n d ( ’ h ’ ) ]minute = s [ s . f i n d ( ’ h ’ )+1: s . f i n d ( ’m’ ) ]return i n t ( hour )∗60+ i n t ( minute )

def run ( ) :pr in t ( " s i g n a l a s " )pr in t ( "\a" )

Page 143: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Atgalinis laikmatis

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

143 / 218

i f __name__ == ’__main__ ’ :minutes = ge tTota lM inu t e s ( )pr in t ( " Ska i c i u o j amos ␣minutes : ␣" + s t r ( minutes ) )whi le minutes > 0 :

t ime . s l e e p (60)minutes = minutes − 1

run ( )

Page 144: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Gijos ir procesai

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

144 / 218

Page 145: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Procesas

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

145 / 218

Tai veikiančios programos objektas.

Page 146: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Gija

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

146 / 218

Nepriklausomai vykdoma instrukciju seka.

Page 147: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Procesu savybes

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

147 / 218

■ OS izoliuoja vieną procesą nuo kito.■ Priklausomai nuo kompiuterio architekturos arba OS

daugiaproceses programos gali veikti geriau nei paremtos gijomis.■ Procesai tarpusavyje komunikuoja per tarpprocesini bendravimą

(angl. inter-process communication), kuris remiasi:

◆ failais (iskaitant virtualius failus (angl. memory-mapped file),kai virtualioje atmintyje saugomas failo turinys)

◆ duomenu bazemis◆ kanalais (angl. pipe)

■ Standartiniai moduliai – process, subprocess ir os

Page 148: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Giju savybes

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

148 / 218

■ Gija egzistuoja proceso viduje ir naudoja proceso išteklius■ Užtikrina nepriklausomą instrukciju sekos vykdymo kontrolę■ Viename procese gali buti vykdomos kelios gijos■ Vieno proceso gijos dalijasi proceso ištekliais

Page 149: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Gijos ar procesai?

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

149 / 218

■ Proceso sukurimo ir valdymo kaina yra didesne nei proceso■ Duomenu mainai tarp giju yra greitesni, nei tarp procesu■ Gijos gali efektyviau dirbti, jei ivedimo/išvedimo operacijos

persipina su skaičiavimais■ Gijos tinkamos apdoroti asinchroninius ivykius (galima dirbti

toliau laukiant signalo)

Page 150: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Giju panaudojimo modeliai

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

150 / 218

■ Šeimininkas/tarnas – viena gija atsakinga už darbu paskirstymą irrezultatu pateikimą

■ Konvejeris – užduotis suskaidoma i operaciju sekas, kurias atliekaskirtingos gijos

■ Lygiavertes gijos – viena gija paskirsto darbus ir dirba kartu sukitomis

Page 151: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Giju moduliai

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

151 / 218

■ thread – senasis, žemo lygio modulis su minimaliomis galimybemis(nerekomenduojama naudoti)

■ threading – aukšto lygio modulis (išplečia moduli thread),paremtas Java kalbos gijomis

■ queue – skirtas giju sinchronizavimui

Page 152: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Giju naudojimo pavojai

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

152 / 218

■ Aklaviete (angl. deadlock) – Gija1 užrakina duomenis A ir meginaužrakinti duomenis B, tačiau tuo pat metu Gija2 yra užrakinusiduomenis B ir megina užrakinti duomenis A.

◆ To galima išvengti nustačius užrakinimo eiliškumą, t.y. tikužrakinus A, galima užrakinti B ir t.t.

■ Naudingas darbas – jei daugybe giju laukia galimybes užrakintiduomenis naudojimui, tuomet jos "pakimba" ir nieko nedaro

◆ To praktiškai neimanoma išvengti, tačiau galima sumažintiapribojus darbu kieki su užrakintais duomenimis

Page 153: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Giju realizavimas

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

153 / 218

■ Sukurti gijos objektą Thread ir jai perduoti kviečiamą objektą■ Sukurti klasę, kuri paveldi gijos klasę

Page 154: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys I

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

154 / 218

import t h r e a d i n gimport t imepr in t ( "Paspausk␣ k l a v i s a ! " )i n pu t ( )th readBreak = Fa l s edef TimeProcess ( ) :

whi le not th readBreak :pr in t ( t ime . t ime ( ) − s t a r tT ime )t ime . s l e e p (3 )

s t a r tT ime = time . t ime ( )t h r e a d i n g . Thread ( t a r g e t = TimeProcess ) . s t a r t ( )i n pu t ( )th readBreak = Truepr in t ( " La i kma t i s ␣ su s t abdy t a s , ␣ s p a u s k i t e ␣ k l a v i s a ␣ noredi n pu t ( )q u i t ( )

Page 155: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys II

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

155 / 218

from t h r e a d i n g import Thread

c l a s s ManoGija ( Thread ) :def run ( s e l f ) :

pr in t ( ’ G i j a ␣%s ’ % s e l f . name)

fo r i in range ( 3 ) :g i j a = ManoGija ( )g i j a . name = ig i j a . s t a r t ( )

Page 156: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys III

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

156 / 218

c l a s s ManoGija ( Thread ) :def __init__( s e l f , i ) :

Thread . __init__( s e l f )s e l f . i = i

def run ( s e l f ) :whi le True :

pr in t ( ’ G i j a ␣#␣%i ’ % s e l f . i )t ime . s l e e p ( s e l f . i )

Page 157: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Klase Thread

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

157 / 218

Thread (group = None , #paramet ra s r e z e r v u o t a s

ThreadGroup k l a s e it a r g e t = None , #ob j ek t a s , t u r i n t i s metoda

run ( )name = None , #g i j o s va rda sa rg s = ( ) , #parametru k o r t e z a s kv iec iamam

o b j e k t u ikwargs={}, #parametru zodynas kv iec iamam

o b j e k t u i)

Page 158: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Thread klases atributai

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

158 / 218

■ start() – paleidžia objektą kaip giją jo run() metodu■ run() – metodas valdantis giją, gali buti perrašomas poklaseje■ join(timeout = None) – laukiama, kol gija baigs darbą■ name – identifikacine simboline eilute (kelios gijos gali tureti tą

pati pavadinimą)■ ident – gijos identifikatorius■ is_alive() – patikrinama, ar gija yra "gyva"■ daemon – nurodo, ar gija yra "demoniška", t.y. tokia gija

automatiškai baigs darbą, kai bus uždaroma pagrindine programa

Page 159: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Lock ir RLock

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

159 / 218

Sinchronizuoja giju darbą.

■ acquire([blokuojantis]) – užrakinami duomenys■ release() – atrakinami duomenys

Page 160: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

threading modulis

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

160 / 218

■ active_count() – veikiančiu giju skaičius■ Condition() – gamykline funkcija grąžinanti sąlygini kintanti

objektą, suteikia galimybę gijoms laukti kitu giju pranešimu■ current_thread() – grąžina dabartini gijos objektą■ enumerate() – pateikia sąrašą visu aktyviu giju■ Event() – gamykline funkcija grąžinanti naują ivykio objektą■ local – klase, vaizduojanti gijos duomenis■ Lock()■ RLock()■ Semaphore(value=1)■ BoundedSemaphore(value=1)■ Thread■ Timer■ settrace(funkcija)■ setprofile(funkcija)■ stack_size([size])

Page 161: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Prievadai ir tinklo protokolo moduliai serveriui

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

161 / 218

Page 162: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Apibrežimai

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

162 / 218

Prievadas (angl. socket) – sąsaja duomenims arba komandomspersiusti tarp kompiuterio ir jo išoriniu itaisu/prietaisu.Protokolas (angl. protocol) – taisykliu ir susitarimu rinkinys,apibrežiantis duomenu perdavimo formatus bei proceduras tarpkompiuteriu.

Page 163: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Keli faktai

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

163 / 218

■ Su prievadais galima dirbti socket modulio pagalba■ Egzistuoja ir daugiau standartiniu ir trečiuju šaliu moduliu■ Visi moduliai yra priklausomi nuo operaciniu sistemu savuju (angl.

native) prievadu funkcionalumo■ Modulis socket yra žemo lygio■ Aukštesnio lygio moduliai yra paprastesni (naudojimo atžvilgiu)

Page 164: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Modulis socket

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

164 / 218

Gamybine funkcija socket() leidžia sukurti prievado objektą s. Norintatlikti tinklo operacijas, reikia kviesti atitinkamus objekto s metodus.Atkreipsime demesi i tai, kad Pitonas palaiko tiek IPv4, tiek IPv6internetiniu protokolu (IP) standartus.

Page 165: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

IP standartai

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

165 / 218

■ IPv4 – adresą sudaro pora (host, port). host yra pagrindiniokompiuterio vardas ir gali buti DNS vardas (pvz., www.delfi.lt)arba tiesiog internetinis adresas (pvz., 192.168.100.100). port yrasveikasis skaičius nurodantis prievado jungties numeri

■ IPv6 – adresą sudaro kortežas (host, port, flowinfo, scopeid)

Page 166: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Modulio socket funkcijos (1)

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

166 / 218

■ getdefaulttimeout() – parodo, kiek laiko pagal nutylejimą skirtaprievadui galioti

■ getfqdn(host=”) – grąžina galiojanti srities vardą (angl. domainname

■ gethostbyaddr(ipaddr) – grąžina kortežą (hostname, alias_list,ipaddr_list) su kompiuterio vardu

■ gethostbyname_ex(hostname) – analogiškai prieš tai buvusiaifunkcijai

■ htonl(i32) – paverčia 32 bitu sveikąji skaičiu i tinklo formatą■ htons(i16) – paverčia 16 bitu sveikąji skaičiu i tinklo formatą■ inet_aton(ipaddr_string) – paverčia IP adresą i 32 bitu tinko

formatą, 4 baitu simbolinę eilutę■ inet_ntoa(packed_string) – paverčia simbolinę eilutę i IP adresą

Page 167: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Modulio socket funkcijos (2)

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

167 / 218

■ ntohl(i32) – paverčia 32 bitu sveikąji skaičiu iš tinklo formato isavąji

■ ntohl(i16) – paverčia 16 bitu sveikąji skaičiu iš tinklo formato isavąji

■ setdefaulttimeout(t) – nustato, kiek laiko galios prievadas■ socket(family, type) – sukuria prievado objektą, priklausanti tam

tikrai šeimai (AF_INET, AF_UNIX) ir turinti tam tikrą tipą,pavyzdžiui SOCKET_STREAM (TCP jungčiai) arSOCK_DGRAM (UDP jungčiai)

Page 168: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Klase socket (1)

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

168 / 218

■ accept() – priima susijungimo prašymą ir grąžina porą (s1,(ipaddr, port)). s1 yra aktyvus prievadas, o kita dalis nurodo"pašnekovą". Prieš tai turejo buti iškviesti metodai bind ir listen

■ bind((host, port)) – susieja prievadą s su pašnekovu adresu hostir jungties numeriu port

■ close() – užbaigia prievado darbą■ connect((host, port)) – sujungia prievadą su nurodytu serveriu■ getpeername() – grąžina porą (ipaddr, port) nutolusio prievado■ getsockname() – grąžina porą (ipaddr, port) vietinio prievado■ getsockopt(level, optname[, bufsize]) – grąžina dabartinę prievado

nustatymu vertę■ gettimeout() – parodo, kiek laiko nustatyta prievadui galioti

Page 169: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Klase socket (2)

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

169 / 218

■ listen(maxpending) – laukia meginimu prisijungti prie prievado,leidžiant ne daugiau kaip maxpending meginimu bet kuriuo metu

■ makefile(mode = ’r’) – sukuria failo objektą, kuris dirba suprievadu. Failą butina uždaryti, kitaip prievadas liks atvertas

■ recv(bufsize) – gauna ne didesnio nei nurodyto dydžio simboliueilutę

■ recvfrom(bufsize) – grąžina kortežą (data, (ipaddr, port))■ send(string) – siunčia simboliu eilutę kaip baitu seką per prievadą.

Grąžina išsiustu baitu skaičiu n■ sendall(string) – išsiunčia visą simboliu eilutę■ sendto(string, (host, port)) – siunčia duomenis nurodytam

prievadui ir grąžina išsiustu baitu skaičiu n■ settimeout(value) – nurodo, kiek laiko truks blokuojanti operacija

Page 170: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

170 / 218

>>> import s o ck e t>>> s = sock e t . s o ck e t ( )>>> s . connect ( ( "www. d e l f i . l t " , 80 ) )>>> s . getpeername ( )( ’ 91 . 234 . 200 . 112 ’ , 80)>>> s . getsockname ( )( ’ 192 . 168 . 0 . 1 51 ’ , 59045)>>> s . s e t t imeou t (10)>>> s . ge t t imeou t ( )10 .0>>> s . r e c v (10)Traceback (most r e c e n t c a l l l a s t ) :

F i l e "<s t d i n >" , l i n e 1 , in <module>sock e t . t imeout : t imed out

Page 171: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Primityvus serverio pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

171 / 218

import s o ck e tHOST = ’ ’PORT = 5000s = sock e t . s o ck e t ( s o ck e t . AF_INET,so ck e t .SOCK_STREAM)

s . b ind ( (HOST, PORT))s . l i s t e n (1 )conn , addr = s . a ccep t ( )whi le True :

data = conn . r e c v (1024)i f not data : break

conn . s e n d a l l ( data )conn . c l o s e ( )

Page 172: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Primityvus kliento pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

172 / 218

import s o ck e t

HOST = ’ ’PORT = 5000s = sock e t . s o ck e t ( s o ck e t . AF_INET,so ck e t .SOCK_STREAM)

s . connect ( (HOST, PORT))s . s e n d a l l ( b ’ Sve i ka s , ␣ p a s a u l i ’ )data = s . r e c v (1024)s . c l o s e ( )pr in t ( ’ Gauta : ␣ ’ , r e p r ( data ) )

Page 173: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Patobulintas serverio pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

173 / 218

import s o ck e t sock = sock e t . s o ck e t ( s o ck e t . AF_INET,so ck e t .SOCK_STREAM)

sock . b ind ( ( ’ ’ , 8881))sock . l i s t e n (5 )t ry :

whi le True :newSocket , a dd r e s s = sock . a ccep t ( )pr in t " P r i s i j u n g t a ␣ p r i e : ␣" , a dd r e s swhi le True :

r e c e i v edDa t a = newSocket . r e c v (8192)i f not r e c e i v edDa ta : break

newSocket . s e n d a l l ( r e c e i v edDa t a )newSocket . c l o s e ( )pr in t ( " A t s i j u n g t a ␣nuo : ␣" , a dd r e s s )

f i n a l l y :sock . c l o s e ( )

Page 174: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Bendroji interneto sąsaja

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

174 / 218

Page 175: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

CGI (angl. common gateway interface)

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

175 / 218

Bendroji interneto sąsaja – programavimo budas, nusakantis, kaipserveriai perduoda informaciją, panaudodami papildomas programas,vykdomas serveryje.

Page 176: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Kaip tai veikia?

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

176 / 218

Egzistuoja dvieju tipu turinys - statinis ir dinaminis. Dinaminis turinysir yra tai, kam reikalinga sąsaja.

■ Naudotojas siunčia užklausą serveriui■ Serveris ivykdo kitą programą, kuriai perduoda užklausą■ Serveris paima vykdytos programos atsakymą■ Serveris siunčia atsakymą naudotojui

Taigi, serveris veikia kaip tarpininkas tarp naudotojo ir programos,kuri vadinama CGI programa arba scenarijumi (angl. script).

Page 177: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pastaba

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

177 / 218

Šiuo metu CGI retai naudojamas, nes tai yra žemo lygio sąsaja.Paprastai naudojamos lankstesnes ir nestandartines architekturos, nesjos leidžia panaudoti aukštesni abstrakcijos lygi produktyvumuipadidinti. Tačiau principai išlieka tie patys.

Page 178: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Formu valdymo metodai

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

178 / 218

■ GET – naudoja adreso eilutę perduoti duomenims ir yra apribotas(URL ilgis yra apie 200 baitu)

■ POST – persiunčia formos turinio koduotą duomenu srautą ir yraneriboto ilgio

Page 179: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Žinotina

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

179 / 218

■ CGI standartas nenurodo ar konkretus scenarijus gali dirbti tiek suužklausos eilute (GET), tiek su standartine ivestim (POST).

■ Pitono standartinis modulis cgi duomenis gauna tik iš užklausos,jei ji yra, priešingu atveju naudoja standartinę ivesti.

Page 180: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

cgi modulis

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

180 / 218

■ escape(str, quote=False) – pakeičia simboliu eilutes simblolius &,<, > atitinkamais HTML esybemis &amp, &lt, &gt; jeiquote=True, tuomet ir kabutes pakeičia i &quot

■ class FieldStorage(keep_blank_values=0) – tiek užklausos, tiekstandartinio ivado duomenys perduodami kuriamam šios klasesobjektui f. f yra atvaizdis: perduodamos formos vardiniaiatributai tampa f raktais. f užtikrina žodyno funkcionalumo dali:raktu iteravimas (for n in f ), rakto egzistavimas (if n in f ),indeksavimas (f[n]). Gaunama reikšme gali buti arba FieldStorageobjektu sąrašas (vardas n pasikartoja kelis kartus), arba vienasobjektas

Page 181: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

FieldStorage klases metodai

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

181 / 218

■ getfirst(key, default=None) – grąžina elemento arba, jei taisąrašas, sąrašo elemento pirmąją reikšmę, jei raktas nerastas –default reikšmę

■ getlist(key) – grąžina sąrašą sudaryta iš vienos arba keliu reikšmiuarba tuščią sąrašą

Page 182: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

FieldStorage klases atributai

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

182 / 218

■ disposition – turinio išdestymo antrašte■ disposition_options – antraštes savybiu atvaizdis■ headers – antraščiu atvaizdis■ file – failo tipo objektas iš kurio galima nuskaityti valdymo

komandą■ filename – failo pavadinimas komandoms nurodomas kliento■ name – valdymo atributo pavadinimas■ type – turinio tipo antrašte■ type_options – turinio tipo antraštes savybiu atvaizdis■ value – komandos reikšme simbolines eilutes pavidalu

Page 183: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Rezultatas

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

183 / 218

■ Serveris surenka visus CGI scenarijaus rezultatus ir persiunčiaklientui

■ Rezultatai gali buti ivairaus tipo priklausomai nuo standarto

pr in t ( "Content−Type : ␣ t e x t / html " )pr in t ( "<html><head><t i t l e >Sv e i k i ,␣HTML</ t i t l e ></head>" )pr in t ( "<body><p>Sv e i k i ,␣CGI␣ i r ␣HTML␣ ka r t u !</p></body></html>" )

Page 184: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Kaip paleisti Pitono CGI scenarijus

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

184 / 218

■ Reikia, kad serveryje butu instaliuotas Pitonas ir standartinebiblioteka

■ Scenarijus privalo tureti vykdymo režimą (chmod +x)■ Unix sistemose pirma eilute turi buti #!/usr/local/bin/python3■ Microsoft web serveriuose rekomenduojama naudoti pletini .pyg ir

ji susieti su atitinkamu interpretatoriumi

Page 185: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Slapukai

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

185 / 218

Slapukas (angl. cookie) – serverio perduodamas ir kliento saugomasduomenu elementas. Perdavimas vyksta antraštes pagalba. Kiekvieną

slapuką sudaro slapuko vardas ir reikšme, o taip pat papildomiatributai, pavyzdžiui max-age nurodo kiek laiko slapukas galioja. Beto, slapukai neužtikrina privatumo, todel duomenys turetu butikoduojami.

Page 186: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Cookie modulis

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

186 / 218

Sudaro kelios alternatyvios klases:

■ Morsel■ SimpleCookie■ SmartCookie

Page 187: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys (1)

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

187 / 218

import Cookie , t ime , os , sys , t r a c eba ck

s y s . s t d e r r = s y s . s t dou t

t ry :c = Cook ie . S imp leCook i e ( )c [ " l a s t v i s i t "]= s t r ( t ime . t ime ( ) )pr in t ( c . output ( ) )pr in t ( "Content−Type : ␣ t e x t / html " )pr in t ( "<html><head><t i t l e >Sve i ka s , ␣ l a n k y t o j a u !

␣␣␣␣</ t i t l e ></head><body>" )

Page 188: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys (2)

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

188 / 218

c = Cook ie . S imp leCook i e (os . e n v i r o n . get ( "HTTP_COOKIE" ) )

when = c . get ( " l a s t v i s i t " )i f when i s None :

pr in t ( "<p>S v e i k i ␣ a t v yke ␣ i ␣ s i ␣ p u s l a p i␣␣␣␣␣␣␣␣ pi rma ␣ ka r t a !</p>" )

pr in t ( "<p>Spau s k i t e ␣mygtuka␣ ’ A t n a u j i n t i ’ ,␣␣␣␣␣␣␣␣ j e i ␣ n o r i t e ␣ t e s t i </p>" )

e l s e :t ry : l a s t v i s i t = f l o a t (when . v a l u e )except :

pr in t ( "<p>Neimanoma␣ dekoduo t i ␣ s l a puko␣␣␣␣␣␣␣␣␣␣␣␣{0}</p>" . format (when . v a l u e ) )

pr in t ( "</br><pre>" )t r a c eba ck . p r i n t_exc ( )

Page 189: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys (3)

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

189 / 218

e l s e :formwhen = time . a s c t ime (t ime . l o c a l t i m e ( l a s t v i s i t ) )pr in t ( "<p>S v e i k i ␣ s u g r i z e !</p>" )pr in t ( "<p>Pa s k u t i n i ␣ k a r t a ␣ l a n k e t e s

␣␣␣␣␣␣␣␣␣␣␣␣{0}</p>" . format ( formwhen ) )pr in t ( "</body></html>" )

except :pr in t ( "Content−Type : ␣ t e x t / html " )pr in t ( )pr in t ( "</br><pre>" )t r a c eba ck . p r i n t_exc ( )

Page 190: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

HTML – strukturizuotas tekstas

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

190 / 218

Page 191: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

HTML

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

191 / 218

Hiperteksto ženklinimo kalba (angl. HyperText Markup Language) –elektroninio dokumento tekstas, kurio atskiros dalys siejamos saitais(nuorodomis)

Page 192: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Apie ši bei tą

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

192 / 218

■ HTML yra SGML (angl. Standart General Markup Language)standarto daline realizacija

■ XHTML yra sugriežtinta sintakses atžvilgiu HTMl kalba■ Egzistuoja keletas biblioteku, kurios leidžia išgauti naudingą

informaciją iš HTML dokumentu

Page 193: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Bibliotekos

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

193 / 218

■ sgmllib■ htmllib■ HTMLParser

Page 194: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

sgmllib biblioteka

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

194 / 218

Turi klasę SGMLParser:

■ close() –■ do_tag(attributes) –■ end_tag() –■ feed(data) –■ handle_charref(ref) –■ handle_comment(comment) –■ handle_data(data) –■ handle_endtag(tag.method) –■ handle_entityref(ref) –■ handle_starttag(tag, method, attributes) –■ report_unbalanced(tag) –■ start_tag(attributes) –■ unknown_charref(ref) –■ unknown_endtag(tag) –■ unknown_entityref(ref) –■ unknown_starttag(tag, attributes) –

Page 195: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys I

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

195 / 218

import s gm l l i b , u r l l i b , u r l p a r s e

c l a s s L i n k sPa r s e r ( s gm l l i b . SGMLParser ) :def __init__( s e l f ) :

s gm l l i b . SGMLParser . __init__( s e l f )s e l f . s een = s e t ( )

def do_a( s e l f , a t t r i b u t e s ) :fo r name , v a l u e in a t t r i b u t e s :

i f name == ’ h r e f ’ and v a l u e not in s e l f .s e l f . s een . add ( v a l u e )p i e c e s = u r l p a r s e . u r l p a r s e ( v a l u e )i f p i e c e s [ 0 ] != ’ h t tp ’ : return

p r in t ( u r l p a r s e . u r l u n p a r s e ( p i e c e s ) )return

Page 196: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys II

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

196 / 218

p = L i n k sPa r s e r ( )f = u r l l i b . u r l o p en ( ’ h t tp : //www. python . org / i nd ex . htmlBUFSIZE = 8192whi le True :

data = f . read (BUFSIZE)i f not data : break

p . f e ed ( data )p . c l o s e ( )

Page 197: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

htmllib biblioteka

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

197 / 218

Turi klasę HTMLParser:

■ anchor_bgn(href, name, type) –■ anchor_end() –■ anchorlist –■ formatter –■ handle_image(source, alt, ismap=’ ’, align=’ ’, width=’ ’,

height=’ ’) –■ nofill –■ save_bgn() –■ save_end() –

Page 198: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys I

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

198 / 218

import h tm l l i b , f o rma t t e r , u r l l i b , u r l p a r s e

p = h tm l l i b . HTMLParser ( f o rma t t e r . Nu l l Fo rma t t e r ( ) )f = u r l l i b . u r l o p en ( ’ h t tp : //www. python . org / i nd ex . htmlBUFSIZE = 8192whi le True :

data = f . read (BUFSIZE)i f not data : break

p . f e ed ( data )p . c l o s e ( )

Page 199: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys II

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

199 / 218

seen = s e t ( )fo r u r l in p . a n c h o r l i s t :

i f u r l in seen : continue

seen . add ( u r l )p i e c e s = u r l p a r s e . u r l p a r s e ( u r l )i f p i e c e s [ 0 ] == ’ ht tp ’ :

pr in t ( u r l p a r s e . u r l u n p a r s e ( p i e c e s ) )

Page 200: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

HTMLParser biblioteka

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

200 / 218

■ Turi vieną klasę – HTMLParser■ Klase paprastesne už SGMLParser klasę, bet palaiko XHTML

Page 201: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys I

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

201 / 218

import HTMLParser , u r l l i b , u r l p a r s e

c l a s s L i n k sPa r s e r (HTMLParser . HTMLParser ) :def _ _init_ _( s e l f ) :

HTMLParser . HTMLParser ._ _init_ _( s e l f )s e l f . s een = s e t ( )

def hand l e_s t a r t t a g ( s e l f , tag , a t t r i b u t e s ) :i f tag != ’ a ’ : return

fo r name , v a l u e in a t t r i b u t e s :i f name == ’ h r e f ’ and v a l u e not in s e l f .

s e l f . s een . add ( v a l u e )p i e c e s = u r l p a r s e . u r l p a r s e ( v a l u e )i f p i e c e s [ 0 ] != ’ h t tp ’ : return

p r in t u r l p a r s e . u r l u n p a r s e ( p i e c e s )return

Page 202: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys II

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

202 / 218

p = L i n k sPa r s e r ( )f = u r l l i b . u r l o p en ( ’ h t tp : //www. python . org / i nd ex . htmlBUFSIZE = 8192whi le True :

data = f . read (BUFSIZE)i f not data : break

p . f e ed ( data )

p . c l o s e ( )

Page 203: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

XML – strukturizuotas tekstas

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

203 / 218

Page 204: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Antrašte

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

204 / 218

XML (angl. extensible markup language) – universali ženklinimokalba, skirta dokumento strukturai aprašyti.

Page 205: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Sintakse

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

205 / 218

■ Elementai arba žymes (angl. tags) – prasideda ir baigiasisimboliais "<", ">", kuriu viduje irašomas elemento vardas

■ Elementas gali tureti papildomu atributu ar vardu sričiu■ Elementas gali aprašyti kitus elementus■ Elementai tarpusavyje nepersidengia

<elementas>...</elementas>■ Atributas užrašomas taip: atributo_vardas="atributo_reikšme"■ Atributas užrašomas po elemento žymeje po jo vardo■ Elementas negali tureti dvieju atributu tuo pačiu vardu■ Kai kurie atributai yra rezervuoti■ Ir t.t.

Page 206: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys 1

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

206 / 218

<studen ta s><vardas>Varden i s </vardas><pavarde>Pava rden i s </pavarde><ad re sa s>

<namo_nr>13</namo_nr>. . .</ad re sa s>. . .

</s tuden ta s>

Page 207: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys 2

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

207 / 218

<s tud en t a s va rda s=" Va rd en i s " pava rde=" Pava rd en i s "><ad re sa s>

<namas nr="13"/>. . .</ad re sa s>. . .

</s tuden ta s>

Page 208: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

XML analize (angl. parsing)

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

208 / 218

■ SAX – ivykiu valdoma analize, kuomet dokumentas nuskaitomasnuosekliai ir analizuojama reikalinga dokumento dalis

■ DOM – objektu valdoma analize, kuomet dokumentasnuskaitomas visas ir sukuriamos atmintyje duomenu strukturos,atvaizduojančios naršomą dokumentą

Page 209: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Privalumai ir trukumai

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

209 / 218

■ SAX – reikia mažiau ištekliu, tačiau programine iranga taip patturi buti atitinkamai susiteminta.

■ DOM – lankstesnis, tačiau reikalaujantis daugiau ištekliu. Taippat naudojamas dokumentu sukurimui ar keitimui.

Page 210: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

xml.sax modulis

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

210 / 218

■ make_parser(parsers_list=[]) – sukuria analizatoriu■ parse(file, handler, error_handler=None) – analizuojamas failas■ parseString(string, handler, error_handler=None) –

analizuojamas simbolines eilutes išraišką turintis XMLdokumentas

■ ContentHandler – turinio valdiklio klase

◆ characters(data) –◆ endDocument() –◆ endElement(tag) –◆ endElementNS(name, qname) –◆ startDocument() –◆ startElement(tag, attrs) –◆ startElementNS(name, qname, attrs) –

■ close() – kviečiamas, kai XML dokumentas yra užbaigtas■ feed(data) – perduoda analizatoriui dokumento dali■ reset() – iškviečiamas prieš dirbant su kitu XML dokumentu

Page 211: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys I

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

211 / 218

import xml . sax , u r l l i b , u r l p a r s e

c l a s s L i nk sHand l e r ( xml . sax . ContentHand l e r ) :def startDocument ( s e l f ) :

s e l f . s een = s e t ( )def s t a r tE l emen t ( s e l f , tag , a t t r i b u t e s ) :

i f tag != ’ a ’ : return

v a l u e = a t t r i b u t e s . ge t ( ’ h r e f ’ )i f v a l u e i s not None and v a l u e not in s e l f . s e

s e l f . s een . add ( v a l u e )p i e c e s = u r l p a r s e . u r l p a r s e ( v a l u e )i f p i e c e s [ 0 ] != ’ h t tp ’ : return

p r in t ( u r l p a r s e . u r l u n p a r s e ( p i e c e s ) )

Page 212: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys II

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

212 / 218

p = xml . sax . make_parser ( )p . s e tCon t en tHand l e r ( L i n k sHand l e r ( ) )f = u r l l i b . u r l o p en ( ’ h t tp : //www.w3 . org /MarkUp/ ’ )BUFSIZE = 8192

whi le True :data = f . read (BUFSIZE)i f not data : break

p . f e ed ( data )

p . c l o s e ( )

Page 213: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

xml.dom paketas

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

213 / 218

■ xml.dom minidom modulis – minimali XML DOM standartorealizacija

■ xml.dom.pulldom – tarpine realizacija tarp SAX ir DOM metodu

Page 214: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Klase Node

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

214 / 218

■ attributes –■ childNodes –■ firstChild –■ hasChildNodes() –■ isSameNode(other) –■ lastChild –■ localName –■ namespaceURI –■ nextSibling –■ nodeName –■ nodeType –■ nodeValue –■ normalize() –■ ownerDocument –■ parentNode –■ prefix –■ previousSibling –

Page 215: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Klase Document

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

215 / 218

■ doctype –■ documentElement –■ getElementById(elementId) –■ getElementsByTagName(tagName) –■ getElementsByTagNameNS(namespaceURI, localName) –

Page 216: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Klase Element

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

216 / 218

Klases Node poklasis.

■ getAttribute(name) –■ getAttributeNS(namespaceURI, localName) –■ getAttributeNode(name) –■ getAttributeNodeNS(namespaceURI, localName) –■ getElementsByTagName(tagName) –■ getElementsByTagNameNS(namespaceURI,localName) –■ hasAttribute(name) –■ hasAttributeNS(namespaceURI,localName) –

Page 217: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Pavyzdys

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

217 / 218

import xml . dom . minidom , u r l l i b , u r l p a r s e

f = u r l l i b . u r l o p en ( ’ h t tp : //www.w3 . org /MarkUp/ ’ )doc = xml . dom . minidom . pa r s e ( f )l i n k s = doc . getElementsByTagName ( ’ a ’ )seen = s e t ( )fo r a in l i n k s :

v a l u e = a . g e tA t t r i b u t e ( ’ h r e f ’ )i f v a l u e and v a l u e not in seen :

seen . add ( v a l u e )p i e c e s = u r l p a r s e . u r l p a r s e ( v a l u e )i f p i e c e s [ 0 ] == ’ ht tp ’ and p i e c e s [ 1 ] != ’www.w

pr in t u r l p a r s e . u r l u n p a r s e ( p i e c e s )

Page 218: Informatika II - Vilniaus universitetastomukas/Knygos/pavasaris.pdf · 2013-04-28 · Pagrindine˙s koncepcijos 1 skyrius 2 skyrius 3 skyrius 4 skyrius 5 skyrius 6 skyrius 7 skyrius

Universalus ištekliaus identifikatorius

1 skyrius

2 skyrius

3 skyrius

4 skyrius

5 skyrius

6 skyrius

7 skyrius

8 skyrius

9 skyrius

10 skyrius

218 / 218

URI (angl. uniform resource identifier) – kuomet yra naudojamasdaugiau nei vienas XML žodynas (pvz. naudojami keli skirtingušaltiniu xml failai), tam, kad išvengti elementu ar ju atributupersidengimo, naudojamas papildomas identifikatorius, kuris turetuužtikrinti unikalumą.

■ Aprašomas taip – xmlns:prefix■ Gali jo ir nebuti – xmlns=""