[Biococoa-dev] Compilation warnings with tools

Koen van der Drift kvddrift at earthlink.net
Mon Feb 7 22:52:06 EST 2005


On Feb 7, 2005, at 8:05 PM, Charles PARNOT wrote:

>> I don't understand why there have to be two methods, instead of one 
>> general like this:
>>
>> -(NSArray *) translateSequence: (BCSequence *)sequence 
>> usingGeneticCode: code
>
> This works fine if you only use BCSequence and never relies on the 
> other sequence classes. But if you use a BCSequenceDNA on the above 
> method, you get a compiler warning.
>
> Just to let the possibility for strong typing. e.g. if  John wants to 
> enforce the use of a BCSequenceDNA for that method, then we need a 
> separate method with the BCSequenceDNA typing. An alternative is to 
> use the BCAbstractSequence type and have only one method. But then it 
> would also accept BCSequenceProtein, etc...
>
> An alternative is to define a 'BCSequenceDNA' protocol, that both 
> BCSequence and BCSequenceDNA would follow. I am not a big fan of 
> protocols, but that may be a nice use of them. Importantly, the user 
> would not have to worry about the protocol.
>
> Bottom line: it might be best to have both methods. The 'generic' one 
> would test for the sequence type, and return an empty array if 
> non-relevant type, or call the method for BCSequenceDNA if the 
> sequence is indeed of that type.


Or have one weak typed method as I suggested in a previous post, and 
test for the type in that method. Then either return an empty or useful 
array.



>
>
>> I still believe that we should keep the BCSequence class et al as 
>> clean as possible, and put all the manipulations in a separate class. 
>> The way I see it to use the tools classes is as follows:
>>
>> myTool = [BCSequenceToolFoo toolFooWithSequence: BCSequence];
>>
>> [myTool setParameter1: param1];
>> [myTool setParameter:2 param2];
>>
>> result = [myTool doSomethingWithSequence];
>>
>> This way we keep the framework modular, and don't clog BCSequence 
>> with code that works for some classes in one case, and other classes 
>> in another case.  It will also be more confusing for the user when 
>> some methods are in BCSequence, other ones are in a separate 
>> BCSequenceTool subclass.  However, we can alsways have convenience 
>> methods in the BCSequence classes to the BCSequenceTool classes that 
>> takes care of some very general situations. If the user needs some 
>> more special manipulations (s)he can always use the approach as I 
>> sketched above. Also making some tools private and others not is 
>> confusing, so we should stick with one approach, I think.
>>
>
> I completely agree that there should only be one approach, so no tool 
> should be private. I was foolish to imagine the other possibility... 
> Now, what do you think of this other 'rule': to NOT have a convenience 
> method both in the tool (+translateSequence:usingGeneticCode:) AND in 
> the BCSequence (-translatedSequenceUsingGeneticCode:), but only in the 
> BCSequence? I am not completely sure about all this and we may have to 
> see how it works out in the long term...
>

That seems like a reasonable 'rule'. I don't see any problems when the 
convenience method is only in BCSequence.


- Koen.




More information about the Biococoa-dev mailing list