So a "smart template" created by the debugger would just do the following, when 
defining the following Class method:

performedExperiment := PerformedExperiment 
   for: anExperiment
   startedAt: aStartTime 
   stopedAt: aStopTime 
   madeBy: aParticipant   "Not sure what participant is, so maybe madeBy is not 
a good name"
   with: aCollectionOfTasks.

DNU => HIT CREATE BUTTON => Automatically create the following methods

1)
 PerformedExperiment class >> 
   for: anExperiment
   startedAt: aStartTime 
   stopedAt: aStopTime 
   madeBy: aParticipant   
   with: aCollectionOfTasks.
        | instance |
        instance := self new.
        instance
                initializeFor: anExperiment
                startedAt: aStartTime 
                stopedAt: aStopTime 
                madeBy: aParticipant   
                with: aCollectionOfTasks.
        ^ instance      

2)
PerformedExperiment>> initializeFor: anExperiment
   startedAt: aStartTime 
   stopedAt: aStopTime 
   madeBy: aParticipant   
   with: aCollectionOfTasks.
                self shouldBeImplemented





On Oct 14, 2010, at 10:35 PM, Hernan Wilkinson wrote:

> Hi Fernando,
>  I think that you are saying that having too many parameter could be a 
> problem for understanding the message, is that right?
>  I mean, having too many inst var as you say, it is a smell of bad design, 
> and having too many parameters also, so I guess we agree on that.
>  About reading the code, from the sender point of view, if you don't have an 
> instance creation message that creates a "complete" object, then you would do 
> something like this:
> 
> performedExperiment := PerformedExperiment new
>    experimient: anExperiment;
>    start: aStartTime ;
>    stop: aStopTime ;
>    participant: aParticipant;
>    tasks: aCollectionOfTasks;
>    yourself.
> 
> With an inst. creation message that returns a complete object, you would use 
> it like this:
> 
> performedExperiment := PerformedExperiment 
>    experimient: anExperiment
>    start: aStartTime 
>    stop: aStopTime 
>    participant: aParticipant
>    tasks: aCollectionOfTasks.
> 
> So, it is basically the same but with less messages and less error prone (in 
> the former you can forget to send a message, ie. stop: and nobody will 
> complain immediately, but in the last one you wont make that mistake, or if 
> you doit you will get a dnu immediately).
> 
> About the implementation of the inst. creation message, it is true that it 
> could bother a little the reading, but when there are so many parameters I 
> format the code this way:
> 
> PerformedExperiment class>>experimient: anExperiment
>    start: aStartTime 
>    stop: aStopTime 
>    participant: aParticipant
>    tasks: aCollectionOfTasks
> 
>    ^self new initializeExperimient: anExperiment
>       start: aStartTime 
>       stop: aStopTime 
>       participant: aParticipant
>       tasks: aCollectionOfTasks
> 
> that makes it more readable.
> Also look that there is an initializeXxx message to distinguish it from the 
> inst. creation message. This helps when analyzing code automatically (ie. 
> initialize messages should only be sent from the class side) or generating 
> code automatically on the debugger with the create button (as the enhancement 
> 3099 that I sent the other day, the debugger could be smart enough to realize 
> it is an initialization message so it could provide a better template than 
> just a "self shouldBeImplemented").
> I the meantime, I would suggest another name for the message you are using as 
> example, something easier to read like:
> 
> performedExperiment := PerformedExperiment 
>    for: anExperiment
>    startedAt: aStartTime 
>    stopedAt: aStopTime 
>    madeBy: aParticipant   "Not sure what participant is, so maybe madeBy is 
> not a good name"
>    with: aCollectionOfTasks.
> 
> I think it reads better. With the former you have duplicated "names" like 
> "experimient: anExperiment", "start: anStartTime", etc., with the last one 
> you don't have that problem.
> 
> Hope it helps, let me know what you think!
> 
> Hernan.
> 
> 
> On Thu, Oct 14, 2010 at 4:48 PM, Fernando olivero <[email protected]> 
> wrote:
> Hi Hernan, just wanted to get your opinion on the following method, that 
> attempts to adhere to your "complete objects" pattern. ( ESUG 2010 TALK).
> 
> PerformedExperiment>>experiment: anExperiment start: aTime stop: aStopTime 
> participant: aParticipant tasks: aCollectionOfTasks
>        | experiment |
>        experiment := self new.
>        experiment experiment: anExperiment start: aTime stop: aStopTime 
> participant: aParticipant tasks: aCollectionOfTasks.
>        ^ experiment
> 
> 
> In your experience, how does the pattern cope with large keyword selectors.
> 
> Maybe this case is not that evident, although we should try to avoid having 
> more than 4 instance variables anyway, i would like to get your opinion on 
> this problem (?).
> 
> Thanks,
> Fernando
> _______________________________________________
> Pharo-project mailing list
> [email protected]
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
> 
> 
> 
> -- 
> HernĂ¡n Wilkinson
> Agile Software Development, Teaching & Coaching
> Mobile: +54 - 911 - 4470 - 7207
> email: [email protected]
> site: http://www.10Pines.com
> 
> <ATT00001..txt>

_______________________________________________
Pharo-project mailing list
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

Reply via email to