It depends on applications.  For some real world problems, object array is 
needed, eg a workbook object contains multiple worksheets, each worksheet is an 
object. However for such complex applications, object array itself is a 
non-issue.  please see the source code of the tara addon.

04.06.2014, в 23:57, Jon Hough <[email protected]> написал(а):

> It's going to take me a while to understand what you've done.
> "I'd be very interested in a concrete example of how using objects
> simplifies matters."
> Well, in this case, the objects just ties three related things together 
> (names and balance). Using three different arrays is a recipe for disaster, 
> and also gets very confusing, at least in a Java/C++ context. Perhaps in J 
> using three lists is the way to go?
> 
> 
>> Date: Wed, 4 Jun 2014 11:43:50 -0400
>> From: [email protected]
>> To: [email protected]
>> Subject: Re: [Jprogramming] More Object List Questions
>> 
>> I suppose you could do something like this:
>> 
>>   coclass 'Account'
>>   create =: verb define
>> balance =: 0
>> fname =: ''
>> lname =: ''
>> )
>>   coclass 'base'
>>   list =. 5 $ < 'Account'
>>   objs=. conew &> list
>>   objs
>> +-+-+-+-+-+
>> |1|2|3|4|5|
>> +-+-+-+-+-+
>>   conames''
>> 1         2         3         4         5         Account
>>   (<''''''),~&.>(<'create_'),&.>(":&.>objs),&.><'_'
>> +-----------+-----------+-----------+-----------+-----------+
>> |create_1_''|create_2_''|create_3_''|create_4_''|create_5_''|
>> +-----------+-----------+-----------+-----------+-----------+
>>   ".&>(<''''''),~&.>(<'create_'),&.>(":&.>objs),&.><'_'
>> 
>> 
>> 
>> 
>> 
>>   balance_1_
>> 0
>>   (<'balance_'),&.>(":&.>objs),&.><'_'
>> +----------+----------+----------+----------+----------+
>> |balance_1_|balance_2_|balance_3_|balance_4_|balance_5_|
>> +----------+----------+----------+----------+----------+
>>   ".&>(<'balance_'),&.>(":&.>objs),&.><'_'
>> 0 0 0 0 0
>> 
>> But this all seems rather clumsy compared to simply using arrays directly
>> rather than this vector of object names, e.g.:
>> 
>>   'bals fnms lnms'=.
>> (5$0);('Jon';'Dick';'Harry';'Sally';'May');<'Smith';'Jones';'Black';'White';'Eye'
>>   bals
>> 0 0 0 0 0
>>   fnms
>> +---+----+-----+-----+---+
>> |Jon|Dick|Harry|Sally|May|
>> +---+----+-----+-----+---+
>>   lnms
>> +-----+-----+-----+-----+---+
>> |Smith|Jones|Black|White|Eye|
>> +-----+-----+-----+-----+---+
>> 
>> I'd be very interested in a concrete example of how using objects
>> simplifies matters.
>> 
>> 
>> 
>> On Wed, Jun 4, 2014 at 11:16 AM, Jon Hough <[email protected]> wrote:
>> 
>>> I hope I'm not spamming the forum with my questions.
>>> I am still getting my head around OOP in J.
>>> My class:
>>> 
>>> coclass 'Account'
>>> 
>>> create =: verb define
>>> balance =: 0
>>> fname =: ''
>>> lname =: ''
>>> )
>>> It's just a dummy 'Account' class with balance, first name and last name.
>>> I want to create several objects in a list:
>>> 
>>> list =. 5 $ < 'Account'
>>> 
>>> list
>>> 
>>> 
>>> ┌───────┬───────┬───────┬───────┬───────┐│Account│Account│Account│Account│Account│└───────┴───────┴───────┴───────┴───────┘
>>> 
>>> So I have my list of 5 Accounts. Now I want to be able to access their
>>> fields, functions by indexing the list.
>>> e.g. in Java if I have an array of Accounts
>>> Account[] accounts = new Account[5];
>>> I can access the fields from the array index:
>>> for(int i = 0; i<5; i++){
>>>          accounts[i].fname = "No name given";
>>> }
>>> In J,
>>> I tried the following:
>>> create__(1{list)
>>> |value error: create__
>>> |       create__(1{list)
>>> I tried to call the create function of the 2nd Account (index 1) of th
>>> elist. It seems I can't append 1{list to create__.
>>> Next I thought about making a function to do the work for me:
>>> NB. function to return y's fname...
>>> func =: verb define     acct =. y        name =: fname__acct        name
>>> )
>>> The above function assumes y is an instance of Account.
>>> Alas, func 1{list doesn't work.
>>> However if I do:
>>> acct =: 1{list
>>> func acct
>>> This will return the fname.
>>> But I have to explicitly define acct, which is not particularly terse. Is
>>> there a way to call functions from the list of objects?
>>> 
>>> ----------------------------------------------------------------------
>>> For information about J forums see http://www.jsoftware.com/forums.htm
>> 
>> 
>> 
>> 
>> -- 
>> Devon McCormick, CFA
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
>                         
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to