+ All Categories

Slides

Date post: 04-Jul-2015
Category:
Upload: vti
View: 290 times
Download: 1 times
Share this document with a friend
38
Transcript
Page 1: Slides

Design by Contract â Perl

Âÿ÷åñëàâ Òèõàíîâñêèé (vti)

2012-12-22

Page 2: Slides

showmetheco.de

Page 3: Slides

ÎÎÏ

Page 4: Slides

Moose, Moos, Moo, Mo, M?

Page 5: Slides

Èíòåðôåéñû è íàñëåäîâàíèå îò àáñòðàêòíîãîêëàññà

Page 6: Slides

package Abs t r a c tRende r e r ;

sub new { . . . }

sub r e nd e r { die ' Implement me ! ' }

Page 7: Slides

package TT;use base ' Ab s t r a c tRende r e r ' ;sub r e nd e r {

my $ s e l f = s h i f t ;my ( $template , $ l ayou t , %va r s ) = @_;

return \ $ r ende r ed ;}

package Caml ;use base ' Ab s t r a c tRende r e r ' ;sub r e nd e r {

my $ s e l f = s h i f t ;my ( $template , %va r s ) = @_;

return $ r ende r ed ;}

Page 8: Slides

Design by Contract

Page 9: Slides

I Ïðîâåðêà âõîäíûõ è âûõîäíûõ óñëîâèé

I Ñëåäîâàíèå ïðèíöèïó ïîäñòàíîâêè Ëèñêîâ (Lâ SOLID) ïðè íàñëåäîâàíèè

I Äîêóìåíòèðîâàíèå èíòåðôåéñà

Page 10: Slides

I Ïðîâåðêà âõîäíûõ è âûõîäíûõ óñëîâèé

I Ñëåäîâàíèå ïðèíöèïó ïîäñòàíîâêè Ëèñêîâ (Lâ SOLID) ïðè íàñëåäîâàíèè

I Äîêóìåíòèðîâàíèå èíòåðôåéñà

Page 11: Slides

I Ïðîâåðêà âõîäíûõ è âûõîäíûõ óñëîâèé

I Ñëåäîâàíèå ïðèíöèïó ïîäñòàíîâêè Ëèñêîâ (Lâ SOLID) ïðè íàñëåäîâàíèè

I Äîêóìåíòèðîâàíèå èíòåðôåéñà

Page 12: Slides

package Abs t r a c tRende r e r ;sub new { . . . }

# Requ i r e s (STRING , %HASH_OF_ANY_VALUES)# Ensu re s (STRING)# Throws ( Excep t i on : : TemplateNotFound )sub r e nd e r {

my $ s e l f = s h i f t ;my ( $template , %va r s ) = @_;

. . .

return $ r ende r ed ;}

Page 13: Slides

package TT;use base ' Ab s t r a c tRende r e r ' ;sub r e nd e r { . . . }

package Caml ;use base ' Ab s t r a c tRende r e r ' ;sub r e nd e r { . . . }

Page 14: Slides

I Íå äîëæíî ñíèæàòü ÷èòàåìîñòü

I Íå òðåáóåò áîëüøèõ âû÷èñëèòåëüíûõðåñóðñîâ

I Îòêëþ÷àåìî

I Íàñëåäóåìî

I Çàïðåùàåò ìåíÿòü êîíòðàêò â äî÷åðíèõêëàññàõ

I Ïîíÿòíûå îøèáêè

I Êàê ìîæíî ìåíüøå ìàãèè*

I Ïîõîæå íà Perl*

Page 15: Slides

I Íå äîëæíî ñíèæàòü ÷èòàåìîñòü

I Íå òðåáóåò áîëüøèõ âû÷èñëèòåëüíûõðåñóðñîâ

I Îòêëþ÷àåìî

I Íàñëåäóåìî

I Çàïðåùàåò ìåíÿòü êîíòðàêò â äî÷åðíèõêëàññàõ

I Ïîíÿòíûå îøèáêè

I Êàê ìîæíî ìåíüøå ìàãèè*

I Ïîõîæå íà Perl*

Page 16: Slides

I Íå äîëæíî ñíèæàòü ÷èòàåìîñòü

I Íå òðåáóåò áîëüøèõ âû÷èñëèòåëüíûõðåñóðñîâ

I Îòêëþ÷àåìî

I Íàñëåäóåìî

I Çàïðåùàåò ìåíÿòü êîíòðàêò â äî÷åðíèõêëàññàõ

I Ïîíÿòíûå îøèáêè

I Êàê ìîæíî ìåíüøå ìàãèè*

I Ïîõîæå íà Perl*

Page 17: Slides

I Íå äîëæíî ñíèæàòü ÷èòàåìîñòü

I Íå òðåáóåò áîëüøèõ âû÷èñëèòåëüíûõðåñóðñîâ

I Îòêëþ÷àåìî

I Íàñëåäóåìî

I Çàïðåùàåò ìåíÿòü êîíòðàêò â äî÷åðíèõêëàññàõ

I Ïîíÿòíûå îøèáêè

I Êàê ìîæíî ìåíüøå ìàãèè*

I Ïîõîæå íà Perl*

Page 18: Slides

I Íå äîëæíî ñíèæàòü ÷èòàåìîñòü

I Íå òðåáóåò áîëüøèõ âû÷èñëèòåëüíûõðåñóðñîâ

I Îòêëþ÷àåìî

I Íàñëåäóåìî

I Çàïðåùàåò ìåíÿòü êîíòðàêò â äî÷åðíèõêëàññàõ

I Ïîíÿòíûå îøèáêè

I Êàê ìîæíî ìåíüøå ìàãèè*

I Ïîõîæå íà Perl*

Page 19: Slides

I Íå äîëæíî ñíèæàòü ÷èòàåìîñòü

I Íå òðåáóåò áîëüøèõ âû÷èñëèòåëüíûõðåñóðñîâ

I Îòêëþ÷àåìî

I Íàñëåäóåìî

I Çàïðåùàåò ìåíÿòü êîíòðàêò â äî÷åðíèõêëàññàõ

I Ïîíÿòíûå îøèáêè

I Êàê ìîæíî ìåíüøå ìàãèè*

I Ïîõîæå íà Perl*

Page 20: Slides

I Íå äîëæíî ñíèæàòü ÷èòàåìîñòü

I Íå òðåáóåò áîëüøèõ âû÷èñëèòåëüíûõðåñóðñîâ

I Îòêëþ÷àåìî

I Íàñëåäóåìî

I Çàïðåùàåò ìåíÿòü êîíòðàêò â äî÷åðíèõêëàññàõ

I Ïîíÿòíûå îøèáêè

I Êàê ìîæíî ìåíüøå ìàãèè*

I Ïîõîæå íà Perl*

Page 21: Slides

I Íå äîëæíî ñíèæàòü ÷èòàåìîñòü

I Íå òðåáóåò áîëüøèõ âû÷èñëèòåëüíûõðåñóðñîâ

I Îòêëþ÷àåìî

I Íàñëåäóåìî

I Çàïðåùàåò ìåíÿòü êîíòðàêò â äî÷åðíèõêëàññàõ

I Ïîíÿòíûå îøèáêè

I Êàê ìîæíî ìåíüøå ìàãèè*

I Ïîõîæå íà Perl*

Page 22: Slides

Class::Contract

Page 23: Slides

use C l a s s : : Cont rac t ;

c o n t r a c t {i n h e r i t s ' Ba seC l a s s ' ;

c t o r ' new ' ;

method 'methodname ' ;p r e { . . . } ;

f a i lm s g ' E r r o r message ' ;

po s t { . . . } ;f a i lm s g ' E r r o r message ' ;

imp l { . . . } ;} ;

Page 24: Slides

Sub::Contract

Page 25: Slides

use Sub : : Cont rac t qw( c o n t r a c t ) ;

c o n t r a c t ( ' s u r f a c e ' )−>in (\& i s_ i n t e g e r , \& i s_ i n t e g e r )−>out (\& i s_ i n t e g e r )−>enab l e ;

sub s u r f a c e {# no need to v a l i d a t e arguments anymore !# j u s t implement the l o g i c :return $_ [ 0 ] ∗ $_ [ 1 ] ;

}

Page 26: Slides

Sub::Assert

Page 27: Slides

a s s e r tp r e => {' paramete r l a r g e r than one ' => '$PARAM[ 0 ] >= 1 ' ,

} ,po s t => '$VOID or $RETURN <= $PARAM[ 0 ] ' ,sub => ' s qu a r e r o o t ' ,c on t e x t => ' novo id ' ,a c t i o n => ' ca rp ' ;

Page 28: Slides

Carp::Datum

Page 29: Slides

use Carp : : Datum ;

sub r o u t i n e {DFEATURE my $f_ , " o p t i o n a l message " ;my ( $a , $b ) = @_;DREQUIRE $a > $b , "a > b" ;$a += 1 ; $b += 1 ;DASSERT $a > $b , " o r d e r i n g a > b p r e s e r v e d " ;my $ r e s u l t = $b − $a ;DENSURE $ r e s u l t < 0 ;return DVAL $ r e s u l t ;

}

Page 30: Slides

MooseX::Contract

Page 31: Slides

c o n t r a c t ' add '=> acc ep t s [ . . . t ype . . . ]=> r e t u r n s vo id ,w i th_context (

p re => sub {. . .

} ,po s t => a s s e r t {

. . .}

) ;sub add {

my $ s e l f = s h i f t ;my $ i n c r = s h i f t ;$ s e l f −>{va l u e } += $ i n c r ;return ;

}

Page 32: Slides

Attribute::Contract

Page 33: Slides

package Abs t r a c tRende r e r ;use A t t r i b u t e : : Con t r ac t ;

sub new { . . . }

sub r e nd e r: Con t r a c tRequ i r e s (VALUE( S t r ) , %ANY): Con t r a c tEn su r e s (VALUE( S t r ) ): ContractThrows ( Excep t i on : : TemplateNotFound ) {

}

Page 34: Slides

DbC è TDD

Page 35: Slides

DbC è Defensive programming

Page 36: Slides

Êîãäà ïðèìåíÿòü?

I Áèáëèîòåêè, ìîäóëè

I Èíòåðôåéñû

Page 37: Slides

Êàê íå ïðèìåíÿòü?

I Íå âàëèäèðîâàòü äàííûå

I Íå ïðîèçâîäèòü ïîáî÷íûõ ýôôåêòîâ

Page 38: Slides

Ñïàñèáî!


Recommended