Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Perl course, lesson #5

Perl course, lesson #5

Perl OOP

Vadim Pushtaev

April 06, 2015
Tweet

More Decks by Vadim Pushtaev

Other Decks in Programming

Transcript

  1. Содержание 1. Введение 2. Методы 3. Примеры 4. Наследование 5.

    Method Resolution Order 6. Детали 7. Moose­like 8. ДЗ 2 / 48
  2. bless { p a c k a g e C

    l a s s : : N a m e ; # . . . } m y $ o b j = b l e s s { } , ' P a c k a g e : : N a m e ' ; m y $ o b j 2 = b l e s s [ ] , ' . . . ' ; m y $ s c a l a r = 4 2 ; m y $ o b j 2 = b l e s s \ $ s c a l a r , ' . . . ' ; 3 / 48
  3. Содержание 1. Введение 2. Методы 3. Примеры 4. Наследование 5.

    Method Resolution Order 6. Детали 7. Moose­like 8. ДЗ 4 / 48
  4. Методы { p a c k a g e A

    ; s u b s e t _ a { m y ( $ s e l f , $ v a l u e ) = @ _ ; $ s e l f - > { a } = $ v a l u e ; r e t u r n ; } s u b g e t _ a { m y ( $ s e l f ) = @ _ ; r e t u r n $ s e l f - > { a } ; } } m y $ o b j = b l e s s { } , ' A ' ; $ o b j - > s e t _ a ( 4 2 ) ; p r i n t $ o b j - > g e t _ a ( ) ; # 4 2 5 / 48
  5. Атрибуты { p a c k a g e A

    ; s u b n e w { m y ( $ c l a s s , % p a r a m s ) = @ _ ; r e t u r n b l e s s \ % p a r a m s , $ c l a s s ; } } m y $ o b j = A - > n e w ( a = > 1 , b = > 2 ) ; p r i n t $ o b j - > { a } ; # 1 p r i n t $ o b j - > { b } ; # 2 6 / 48
  6. Методы класса { p a c k a g e

    A ; s u b n e w { m y ( $ c l a s s , % p a r a m s ) = @ _ ; r e t u r n b l e s s \ % p a r a m s , $ c l a s s ; } s u b g e t _ a { m y ( $ s e l f ) = @ _ ; r e t u r n $ s e l f - > { a } ; } } m y $ o b j = A - > n e w ( a = > 4 2 ) ; $ o b j - > g e t _ a ( ) ; # 4 2 7 / 48
  7. Методы — еще варианты $ o b j - >

    A : : g e t _ a ( ) ; m y $ c l a s s = ' A ' ; $ c l a s s - > n e w ( ) ; m y $ m e t h o d _ n a m e = $ c o n d ? ' g e t _ a ' : ' g e t _ b ' ; $ o b j - > $ m e t h o d _ n a m e ; A : : n e w ( ) ; # n o t t h e s a m e ! 8 / 48
  8. Методы — indirect n e w M y : :

    C l a s s ( 1 , 2 , 3 ) ; M y : : C l a s s - > n e w ( 1 , 2 , 3 ) ; f o o $ o b j ( 1 2 3 ) ; # $ o b j - > f o o ( 1 2 3 ) ; u s e s t r i c t ; u s e w a r n i n g s ; S y n t a x e r r o r ! e x i t 0 ; 9 / 48
  9. Методы — WHY!? u s e s t r i

    c t ; u s e w a r n i n g s ; S y n t a x e r r o r ! e x i t 0 ; u s e w a r n i n g s ; u s e s t r i c t ; ' e r r o r ' - > S y n t a x ( ! e x i t ( 0 ) ) ; 10 / 48
  10. can { p a c k a g e A

    ; s u b t e s t { r e t u r n 4 2 ; } } i f ( A - > c a n ( ' t e s t ' ) ) { p r i n t A - > t e s t ; } p r i n t A - > c a n ( ' t e s t ' ) - > ( ' A ' ) ; m y $ o b j = b l e s s { } , ' A ' ; $ o b j - > c a n ( ' t e s t ' ) ; 11 / 48
  11. Filehandles o p e n ( m y $ f

    h , ' > ' , ' p a t h / t o / f i l e ' ) ; $ f h - > a u t o f l u s h ( ) ; $ f h - > p r i n t ( ' c o n t e n t ' ) ; S T D O U T - > a u t o f l u s h ( ) ; 12 / 48
  12. Пакеты u s e S o m e : :

    P a c k a g e q w ( a b c ) ; # S o m e : : P a c k a g e - > i m p o r t ( q w ( a b c ) ) ; n o S o m e : : P a c k a g e ; # S o m e : : P a c k a g e - > u n i m p o r t ; u s e S o m e : : P a c k a g e 1 0 . 0 1 # S o m e : : P a c k a g e - > V E R S I O N ( 1 0 . 0 1 ) ; 13 / 48
  13. Содержание 1. Введение 2. Методы 3. Примеры 4. Наследование 5.

    Method Resolution Order 6. Детали 7. Moose­like 8. ДЗ 14 / 48
  14. DBI $ d b h = D B I -

    > c o n n e c t ( $ d a t a _ s o u r c e , $ u s e r n a m e , $ a u t h , \ % a t t r ) ; $ r v = $ d b h - > d o ( ' D E L E T E F R O M t a b l e ' ) ; 15 / 48
  15. XML::LibXML; u s e X M L : : L

    i b X M L ; m y $ d o c u m e n t = X M L : : L i b X M L - > l o a d _ x m l ( s t r i n g = > ' . . . ' ) ; m y $ l i s t = $ d o c u m e n t - > f i n d n o d e s ( ' . . . ' ) ; # X M L : : L i b X M L : : N o d e L i s t X M L : : L i b X M L : : N o d e / \ X M L : : L i b X M L : : D o c u m e n t X M L : : L i b X M L : : E l e m e n t 16 / 48
  16. File::Spec u s e F i l e : :

    S p e c ; p r i n t F i l e : : S p e c - > c a t f i l e ( ' a ' , ' b ' , ' c ' ) ; 17 / 48
  17. JSON u s e J S O N ; J

    S O N - > n e w - > u t f 8 - > d e c o d e ( ' . . . ' ) ; d e c o d e _ j s o n ' . . . ' ; 18 / 48
  18. Содержание 1. Введение 2. Методы 3. Примеры 4. Наследование 5.

    Method Resolution Order 6. Детали 7. Moose­like 8. ДЗ 19 / 48
  19. Наследование { p a c k a g e L

    y n x ; B E G I N { p u s h ( @ I S A , ' D o g ' , ' C a t ' ) } u s e b a s e q w ( D o g C a t ) ; u s e p a r e n t q w ( D o g C a t ) ; } 20 / 48
  20. UNIVERSAL $ o b j - > c a n

    ( ' m e t h o d ' ) ; $ o b j - > i s a ( ' A n i m a l ' ) ; D o g - > i s a ( ' A n i m a l ' ) ; $ o b j - > V E R S I O N ( 5 . 1 2 ) ; 21 / 48
  21. SUPER s u b m e t h o d

    { m y ( $ s e l f , % p a r a m s ) = @ _ ; $ s e l f - > S U P E R : : m e t h o d ( % p a r a m s ) ; r e t u r n ; } 22 / 48
  22. Содержание 1. Введение 2. Методы 3. Примеры 4. Наследование 5.

    Method Resolution Order 6. Детали 7. Moose­like 8. ДЗ 23 / 48
  23. Method Resolution Order A n i m a l |

    P e t B a r k a b l e / \ / C a t D o g \ / L y n x L y n x - > m e t h o d ( ) ; q w ( L y n x C a t P e t A n i m a l D o g B a r k a b l e ) ; 24 / 48
  24. use mro; A n i m a l | P

    e t B a r k a b l e / \ / C a t D o g \ / L y n x u s e m r o ' c 3 ' ; L y n x - > m e t h o d ( ) ; q w ( L y n x C a t D o g P e t A n i m a l B a r k a b l e ) ; 25 / 48
  25. mro — next::method p a c k a g e

    A ; u s e m r o ; s u b f o o { m y ( $ s e l f , $ p a r a m ) = @ _ ; $ p a r a m + + ; r e t u r n $ o b j - > n e x t : : m e t h o d ( $ p a r a m ) ; } 26 / 48
  26. Содержание 1. Введение 2. Методы 3. Примеры 4. Наследование 5.

    Method Resolution Order 6. Детали 7. Moose­like 8. ДЗ 27 / 48
  27. b l e s s e d , r e

    f u s e J S O N : u s e S c a l a r : : U t i l ' b l e s s e d ' ; r e f J S O N - > n e w ( ) ; # ' J S O N ' r e f [ ] ; # ' A R R A Y ' r e f { } ; # ' H A S H ' r e f 0 ; # ' ' b l e s s e d J S O N - > n e w ( ) ; # ' J S O N ' b l e s s e d [ ] ; # u n d e f b l e s s e d { } ; # u n d e f b l e s s e d 0 ; # u n d e f 28 / 48
  28. AUTOLOAD p a c k a g e A ;

    o u r $ A U T O L O A D ; s u b n e w { m y ( $ c l a s s , % p a r a m s ) = @ _ ; r e t u r n b l e s s \ % p a r a m s , $ c l a s s ; } s u b A U T O L O A D { p r i n t $ A U T O L O A D } A - > n e w ( ) - > t e s t ( ) ; # t e s t A - > c a n ( ' a n y t h i n g ' ) ; # : ( s u b U N I V E R S A L : : A U T O L O A D { # : > } # D o g - > m ( ) ; A n i m a l - > m ( ) ; U N I V E R S A L - > m ( ) ; # D o g - > A U T O L O A D ( ) ; A n i m a l - > A U T O L O A D ( ) ; U N I V E R S A L - > A U T O L O A D ( ) ; 29 / 48
  29. DESTROY p a c k a g e A ;

    s u b n e w { m y ( $ c l a s s , % p a r a m s ) = @ _ ; r e t u r n b l e s s \ % p a r a m s , $ c l a s s ; } s u b D E S T R O Y { p r i n t ' D ' ; } A - > n e w ( ) ; # p r i n t ' D ' 30 / 48
  30. DESTROY — сложности d i e l o c a

    l A U T O L O A D $ { ^ G L O B A L _ P H A S E } e q ' D E S T R U C T ' s u b D E S T R O Y { m y ( $ s e l f ) = @ _ ; $ s e l f - > { h a n d l e } - > c l o s e ( ) i f $ s e l f - > { h a n d l e } ; } 31 / 48
  31. Class::Accessor p a c k a g e F o

    o ; u s e b a s e q w ( C l a s s : : A c c e s s o r ) ; F o o - > f o l l o w _ b e s t _ p r a c t i c e ; F o o - > m k _ a c c e s s o r s ( q w ( n a m e r o l e s a l a r y ) ) ; u s e b a s e q w ( C l a s s : : A c c e s s o r : : F a s t ) ; u s e b a s e q w ( C l a s s : : A c c e s s o r : : F a s t ) C l a s s : : X S A c c e s s o r X S A c c e s s o r ) ; 32 / 48
  32. Содержание 1. Введение 2. Методы 3. Примеры 4. Наследование 5.

    Method Resolution Order 6. Детали 7. Moose­like 8. ДЗ 33 / 48
  33. Moose p a c k a g e P e

    r s o n ; u s e M o o s e ; h a s f i r s t _ n a m e = > ( i s = > ' r w ' , i s a = > ' S t r ' , ) ; h a s l a s t _ n a m e = > ( i s = > ' r w ' , i s a = > ' S t r ' , ) ; P e r s o n - > n e w ( f i r s t _ n a m e = > ' V a d i m ' , l a s t _ n a m e = > ' P u s h t a e v ' , ) ; 34 / 48
  34. Moose — наследование p a c k a g e

    U s e r ; u s e M o o s e ; e x t e n d s ' P e r s o n ' ; h a s p a s s w o r d = > ( i s = > ' r o ' , i s a = > ' S t r ' , ) ; 35 / 48
  35. Moose — инициализация BUILD h a s a g e

    = > ( i s = > ' r o ' , i s a = > ' I n t ' ) ; h a s i s _ a d u l t = > ( i s = > ' r o ' , i s a = > ' B o o l ' ) ; s u b B U I L D { m y ( $ s e l f ) = @ _ ; $ s e l f - > i s _ a d u l t ( $ s e l f - > a g e > = 1 8 ) ; r e t u r n ; } 36 / 48
  36. Moose — инициализация default h a s a g e

    = > ( i s = > ' r o ' , i s a = > ' I n t ' ) ; h a s i s _ a d u l t = > ( i s = > ' r o ' , i s a = > ' B o o l ' , l a z y = > 1 , d e f a u l t = > s u b { m y ( $ s e l f ) = @ _ ; r e t u r n $ s e l f - > a g e > = 1 8 ; } ) ; 37 / 48
  37. Moose — инициализация builder h a s a g e

    = > ( i s = > ' r o ' , i s a = > ' I n t ' ) ; h a s i s _ a d u l t = > ( i s = > ' r o ' , i s a = > ' B o o l ' , l a z y = > 1 , b u i l d e r = > ' _ b u i l d _ i s _ a d u l t ' , ) ; s u b _ b u i l d _ i s _ a d u l t { m y ( $ s e l f ) = @ _ ; r e t u r n $ s e l f - > a g e > = 1 8 ; } p a c k a g e S u p e r M a n ; e x t e n d s ' P e r s o n ' ; s u b _ b u i l d _ i s _ a d u l t { r e t u r n 1 ; } 38 / 48
  38. Moose — инициализация Цепочки h a s [ q w

    ( f i l e _ n a m e f h f i l e _ c o n t e n t x m l _ d o c u m e n t d a t a ) ] = > ( l a z y _ b u i l d = > 1 , # . . . ) ; s u b _ b u i l d _ f h { # o p e n ( f i l e _ n a m e ) } s u b _ b u i l d _ f i l e _ c o n t e n t { # r e a d ( f h ) } s u b _ b u i l d _ x m l _ d o c u m e n t { # p a r s e ( f i l e _ c o n t e n t ) } s u b _ b u i l d _ d a t a { # f i n d ( x m l _ d o c u m e n t ) } 39 / 48
  39. Moose — миксины w i t h ' R o

    l e : : H a s P a s s w o r d ' ; p a c k a g e R o l e : : H a s P a s s w o r d ; u s e M o o s e : : R o l e ; u s e S o m e : : D i g e s t ; h a s p a s s w o r d = > ( i s = > ' r o ' , i s a = > ' S t r ' , ) ; s u b p a s s w o r d _ d i g e s t { m y ( $ s e l f ) = @ _ ; r e t u r n S o m e : : D i g e s t - > n e w ( $ s e l f - > p a s s w o r d ) ; } 40 / 48
  40. Moose — делегирование h a s d o c =

    > ( i s = > ' r o ' , i s a = > ' I t e m ' , h a n d l e s = > [ q w ( r e a d w r i t e s i z e ) ] , ) ; h a s l a s t _ l o g i n = > ( i s = > ' r w ' , i s a = > ' D a t e T i m e ' , h a n d l e s = > { ' d a t e _ o f _ l a s t _ l o g i n ' = > ' d a t e ' } , ) ; { h a n d l e s = > q r / ^ g e t _ ( a | b | c ) | s e t _ ( a | d | e ) $ / , h a n d l e s = > ' R o l e : : N a m e ' , } 41 / 48
  41. Moose — и т. д. b e f o r

    e ' i s _ a d u l t ' = > s u b { s h i f t - > r e c a l c u l a t e _ a g e } s u b t y p e ' M o d e r n D a t e T i m e ' = > a s ' D a t e T i m e ' = > w h e r e { $ _ - > y e a r ( ) > = 1 9 8 0 } = > m e s s a g e { ' T h e d a t e y o u p r o v i d e d i s n o t m o d e r n e n o u g h ' } ; h a s ' v a l i d _ d a t e s ' = > ( i s = > ' r o ' , i s a = > ' A r r a y R e f [ D a t e T i m e ] ' , ) ; p a c k a g e C o n f i g ; u s e M o o s e X : : S i n g l e t o n ; # i n s t e a d o f M o o s e h a s ' c a c h e _ d i r ' = > ( . . . ) ; 42 / 48
  42. Содержание 1. Введение 2. Методы 3. Примеры 4. Наследование 5.

    Method Resolution Order 6. Детали 7. Moose­like 8. ДЗ 44 / 48
  43. ДЗ 5.1 Парсер публичных групп в Одноклассниках без авторизации. m

    y $ g r o u p = L o c a l : : O K : : G r o u p - > n e w ( ' h t t p : / / o k . r u / g r o u p / 5 4 1 2 9 2 0 0 2 0 1 7 2 8 / ' ) ; $ g r o u p - > i d ; $ g r o u p - > n a m e ; $ g r o u p - > c o n t e n t ; $ g r o u p - > u r l ; 45 / 48
  44. ДЗ 5.2 Парсер постов в публичных групп в Одноклассниках без

    авторизации. m y $ t o p i c = L o c a l : : O K : : T o p i c - > n e w ( ' h t t p : / / o k . r u / g o o d f o o d / t o p i c / 6 6 7 9 1 6 7 3 1 7 6 0 6 4 ' ) ; $ t o p i c - > i d ; $ t o p i c - > c o n t e n t ; $ t o p i c - > t e x t ; $ t o p i c - > g r o u p ; # L i b : : O K : : G r o u p ; 46 / 48
  45. ДЗ 5.3 Общая логика для L i b : :

    O K : : G r o u p и L i b : : O K : : T o p i c . p a c k a g e L o c a l : : M i x i n : : D o w n l o a d a b l e ; # U R L - > c o n t e n t 47 / 48
  46. ДЗ 5.4 Объект прямого конуса и окружности. Реализовать через Moose­like

    библиотеку. m y $ c o n e = L o c a l : : C o n e - > n e w ( b a s e = > L o c a l : : C i r c l e - > n e w ( r a d i u s = > 1 . 5 ) , h e i g h t = > 1 2 , ) ; $ c o n e - > h e i g h t ; $ c o n e - > s l a n t _ h e i g h t ; $ c o n e - > s u r f a c e _ a r e a ; $ c o n e - > v o l u m e ; $ c o n e - > b a s e ; $ c o n e - > b a s e - > a r e a ; $ c o n e - > b a s e - > l e n g t h ; 48 / 48