Re: [PW-dev] Static methods - was Widget factory
Status: Alpha
Brought to you by:
spadkins
From: Issac G. <ne...@wr...> - 2001-06-12 10:27:34
|
> At 05:08 PM 6/11/2001 -0500, you wrote: > >"Jay Lawrence" <Ja...@La...> wrote: > >>James and Stephen, > >> > >>Could you please expand on what you mean by static methods? > > > >These would be methods that are not tied to an instance -- the `new' method > >(basically, any constructor) is an example of a usually static method. Any > >method that requires an instance of an object class is not a static method. > > > >Perl blurs the line between static and non-static methods. C++ is very > >explicit and requires the `static' keyword before the function declaration. > > > >The static methods do not have an object to get any information from, so any > >configuration information they get would have to either come from the > function > >arguments or from globals. > >-- > >James Smith <JG...@TA...>, 979-862-3725 > >Texas A&M CIS Operating Systems Group, Unix > > > > James is correct on all points. > For example > > $wc = Widget->controller(); > > is a "static" method on the Widget package. No instance of a "Widget" class > was required in order to call the controller() method. Any routine called > from the package name (i.e. Package::Name->method_name()) is a static method. > (The terminology indeed comes from C++ and Java.) > > A "normal" method call (dynamic?) is called on an instance of a class. i.e. > > $query = CGI->new(); # this is a static method call, called from > package > print $query->param("x"); # this is a normal (dynamic) method call, > called from object > > The "Factory" pattern is a standard way of constructing objects without > knowing > what type of objects they actually are. In order to instantiate an object, > you > normally need to know the class of the object. With a factory, you can let > the > factory decide. In this way, > > $wc = Widget->controller(); > > is letting the static method, "controller()", in the Widget package decide > which > class it should instantiate when returning a Controller. > Similarly, with > > $date_widget = $wc->widget("date"); > > we are letting the controller decide (based on config and runtime information) > what actual class to instantiate. > > Thus, both the Widget package and Widget::Controller objects are acting as > factories > in the PWL. > > Stephen Wait a second... I was under the impression that the Widget::COntroller object simply got "bound" to a top level Widget object somewhere... That you couldn't actually go about creating the actual Widgets until you had an instantiated Controller.... Am I barking up wrong trees here??? Issac Internet is a wonderful mechanism for making a fool of yourself in front of a very large audience. --Anonymous Moving the mouse won't get you into trouble... Clicking it might. --Anonymous PGP Key 0xE0FA561B - Fingerprint: 7E18 C018 D623 A57B 7F37 D902 8C84 7675 E0FA 561B |