comparison lib/IMPL/Object.pm @ 407:c6e90e02dd17 ref20150831

renamed Lib->lib
author cin
date Fri, 04 Sep 2015 19:40:23 +0300
parents
children
comparison
equal deleted inserted replaced
406:f23fcb19d3c1 407:c6e90e02dd17
1 package IMPL::Object;
2 use strict;
3
4 use parent qw(IMPL::Object::Abstract);
5 use IMPL::require {
6 ClassPropertyImplementor => 'IMPL::Code::DirectPropertyImplementor'
7 };
8
9 sub surrogate {
10 bless {}, ref $_[0] || $_[0];
11 }
12
13 sub new {
14 my $class = shift;
15 my $self = bless {}, ref($class) || $class;
16 $self->callCTOR(@_);
17
18 $self;
19 }
20
21 1;
22
23 __END__
24
25 =pod
26
27 =head1 SINOPSYS
28
29 =begin code
30
31 package Foo;
32 use parent qw(IMPL::Object);
33
34 sub CTOR {
35 my ($this,$arg) = @_;
36 print "Foo: $arg\n";
37 }
38
39 package Bar;
40 use parent qw(IMPL::Object);
41
42 sub CTOR {
43 my ($this,$arg) = @_;
44 print "Bar: $arg\n";
45 }
46
47 package Baz;
48 use parent qw(Foo Bar);
49
50 our %CTOR = (
51 Foo => sub { my %args = @_; $args{Mazzi}; },
52 Bar => sub { my %args = @_; $args{Fugi}; }
53 );
54
55 package Composite;
56 use parent qw(Baz Foo Bar);
57
58 our %CTOR = (
59 Foo => undef,
60 Bar => undef
61 );
62
63 sub CTOR {
64 my ($this,%args) = @_;
65
66 print "Composite: $args{Text}\n";
67 }
68
69 package main;
70
71 my $obj = new Composite(
72 Text => 'Hello World!',
73 Mazzi => 'Mazzi',
74 Fugi => 'Fugi'
75 );
76
77 # will print
78 #
79 # Foo: Mazzi
80 # Bar: Fugi
81 # Bar:
82 # Composite: Hello World!
83
84 =end code
85
86 =head1 Description
87
88 Базовый класс для объектов, основанных на хеше.
89
90 =head1 Members
91
92 =over
93
94 =item operator C<new>(@args)
95
96 Создает экземпляр объекта и вызывает конструктор с параметрами @args.
97
98 =item operator C<surrogate>()
99
100 Создает неинициализированный экземпляр объекта.
101
102 =back
103
104 =head1 Cavearts
105
106 Нужно заметить, что директива C<use parent> работает не совсем прозрачно, если в нашем примере
107 класс C<Composite> наследуется от C<Baz>, а затем C<Foo>, то наследование от
108 C<Foo> не произойдет поскольку он уже имеется в C<Baz>. Вот не задача:)
109
110 =cut