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

Perl course, lesson #5

Perl course, lesson #5

Perl OOP

Avatar for Vadim Pushtaev

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