How do you create an object? By calling a constructor method,
of course.
But ... actually ... there's no "of course" about it. Here's a piece of code from an example I wrote yesterday:
sageroll.push Transact::factory(current)
and that call creates an object ...
Whilst you
can create an object by directly calling the constructor, in a real-world example you'll often call another method which calls the constructor internally and returns you the instance variable just as a constructor would - and that's known as a
factory method. Why use a factory method?
• The data may have arrived in the application in various forms, and the translation necessary to convert it into data that's appropriate for the constructor will logically be written and maintained within the class.
• The incoming data may need examining to see what type of object is actually to be created - so you'll want to use a method which indirectly calls the real constructor, via logic that works out
which constructor
• The incoming data may be such that it will create a whole array / hash of objects (or no objects at all) and once again the logic to work this out is logically written and maintained within the class for everyone to use, rather than within each and every application that uses it.
On yesterday's Ruby course, I wrote a sample to tie together many of the features of the OO model into a simple but practical real - world - like example. There's a factory method, comparators, conversion of data from a stream into objects, etc. I didn't go on to multiple families of
associated objects - but then I've a lot more to talk about in Ruby as well. The sample code is
[here] and the data file that goes with it is
[here]. Details of the Ruby course? ... for people who are new to programming - see
[here], or if you've programmed before, but in another language, see
[here] (written 2010-09-30)
Associated topics are indexed under
R108 - Ruby - More Classes and Objects [3782] Standard methods available on all objects in Ruby - (2012-06-23)
[3781] Private, Protected, Public in Ruby. What about interfaces and abstract classes in Ruby? - (2012-06-23)
[3760] Why you should use objects even for short data manipulation programs in Ruby - (2012-06-10)
[3260] Ruby - a training example that puts many language elements together to demonstrate the whole - (2011-04-23)
[3158] Ruby training - some fresh examples for string handling applications - (2011-02-05)
[3154] Changing a class later on - Ruby - (2011-02-02)
[3142] Private and Public - and things between - (2011-01-22)
[2980] Ruby - examples of regular expressions, inheritance and polymorphism - (2010-10-02)
[2717] The Multiple Inheritance Conundrum, interfaces and mixins - (2010-04-11)
[2623] Object Oriented Ruby - new examples - (2010-02-03)
[2620] Direct access to object variable (attributes) in Ruby - (2010-02-02)
[2616] Defining a static method - Java, Python and Ruby - (2010-02-01)
[2604] Tips for writing a test program (Ruby / Python / Java) - (2010-01-29)
[2603] Ruby objects - a primer - (2010-01-29)
[2601] Ruby - is_a? v instance_of? - what is the difference? - (2010-01-27)
[2292] Object Orientation in Ruby - intermediate examples - (2009-07-16)
[1587] Some Ruby programming examples from our course - (2008-03-21)
[1217] What are factory and singleton classes? - (2007-06-04)
[656] Think about your design even if you don't use full UML - (2006-03-24)
[184] MTBF of coffee machines - (2005-01-20)
Q908 - Object Orientation and General technical topics - Object Orientation: Design Patterns [4021] Spike solution, refactored and reusable, Python - Example - (2013-02-28)
[3843] Caching Design Patterns - (2012-08-20)
[3810] Reading files, and using factories to create vectors of objects from the data in C++ - (2012-07-21)
[3716] Learning C++ - a design pattern for your first class - (2012-05-02)
[3608] Design Patterns - what are they? Why use them? - (2012-02-12)
[2741] What is a factory? - (2010-04-26)
[2322] Looking for a practical standards course - (2009-08-05)
[1224] Object Relation Mapping (ORM) - (2007-06-09)
[485] North, Norther and Northest - PHP 5 Objects - (2005-11-04)
Q907 - Object Orientation and General technical topics - Object Orientation: Design Techniques [3978] Teaching OO - how to avoid lots of window switching early on - (2013-01-17)
[3928] Storing your intermediate data - what format should you you choose? - (2012-11-20)
[3887] Inheritance, Composition and Associated objects - when to use which - Python example - (2012-10-10)
[3878] From Structured to Object Oriented Programming. - (2012-10-02)
[3844] Rooms ready for guests - each time, every time, thanks to good system design - (2012-08-20)
[3798] When you should use Object Orientation even in a short program - Python example - (2012-07-06)
[3763] Spike solutions and refactoring - a Python example - (2012-06-13)
[3607] Designing your application - using UML techniques - (2012-02-11)
[3454] Your PHP website - how to factor and refactor to reduce growing pains - (2011-09-24)
[3085] Object Oriented Programming for Structured Programmers - conversion training - (2010-12-14)
[3063] Comments in and on Perl - a case for extreme OO programming - (2010-11-21)
[2953] Turning an exercise into the real thing with extreme programming - (2010-09-11)
[2889] Should Python classes each be in their own file? - (2010-07-27)
[2878] Program for reliability and efficiency - do not duplicate, but rather share and re-use - (2010-07-19)
[2865] Relationships between Java classes - inheritance, packaging and others - (2010-07-10)
[2785] The Light bulb moment when people see how Object Orientation works in real use - (2010-05-28)
[2747] Containment, Associative Objects, Inheritance, packages and modules - (2010-04-30)
[2523] Plan your application before you start - (2009-12-02)
[2501] Simples - (2009-11-12)
[2380] Object Oriented programming - a practical design example - (2009-08-27)
[2327] Planning! - (2009-08-08)
[2170] Designing a heirarcy of classes - getting inheritance right - (2009-05-11)
[2169] When should I use OO techniques? - (2009-05-11)
[1538] Teaching Object Oriented Java with Students and Ice Cream - (2008-02-12)
[1528] Object Oriented Tcl - (2008-02-02)
[1435] Object Oriented Programming in Perl - Course - (2007-11-18)
[1047] Maintainable code - some positive advice - (2007-01-21)
[836] Build on what you already have with OO - (2006-08-17)
[831] Comparison of Object Oriented Philosophy - Python, Java, C++, Perl - (2006-08-13)
[747] The Fag Packet Design Methodology - (2006-06-06)
[534] Design - one name, one action - (2005-12-19)
[507] Introduction to Object Oriented Programming - (2005-11-27)
[236] Tapping in on resources - (2005-03-05)
[80] OO - real benefits - (2004-10-09)
5651
Some other Articles
How to set up short and meaningfull alternative URLsRuby - yield; parallel routinesChristmas 2010 - Well House Manor, Melksham, HotelWhat is a factory method and why use one? - Example in RubyCreating, extending, traversing and combining Ruby arraysWhy do I need brackets in Ruby ... or Perl, Python, C or JavaFormatting your output - options available in RubyLearning to program - where to start if you have never programmed beforeSome more advanced Perl examples from a recent course