This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Add Damian's list of when to use OO - copied from PBP
[perl5.git] / pod / perlootut.pod
index e1cfedb..062706d 100644 (file)
@@ -373,6 +373,64 @@ Perl does not have any built-in way to express roles. In the past,
 people just bit the bullet and used multiple inheritance. Nowadays,
 there are several good choices on CPAN for using roles.
 
+=head2 When to Use OO
+
+Object Orientation is not the best solution to every problem. In I<Perl
+Best Practices> (copyright 2004, Published by O'Reilly Media, Inc.),
+Damian Conway provides a list of criteria to use when deciding if OO is
+the right fit for your problem:
+
+=over 4
+
+=item
+
+The system being designed is large, or is likely to become large.
+
+=item
+
+The data can be aggregated into obvious structures, especially if
+there's a large amount of data in each aggregate.
+
+=item
+
+The various types of data aggregate form a natural hierarchy that
+facilitates the use of inheritance and polymorphism.
+
+=item
+
+You have a piece of data on which many different operations are
+applied.
+
+=item
+
+You need to perform the same general operations on related types of
+data, but with slight variations depending on the specific type of data
+the operations are applied to.
+
+=item
+
+It's likely you'll have to add new data types later.
+
+=item
+
+The typical interactions between pieces of data are best represented by
+operators.
+
+=item
+
+The implementation of individual components of the system is likely to
+change over time.
+
+=item
+
+The system design is already object-oriented.
+
+=item
+
+Large numbers of other programmers will be using your code modules.
+
+=back
+
 =head1 PERL OO SYSTEMS
 
 As we mentioned before, Perl's built-in OO system is very minimal, but