Forums
New posts
Search forums
Members
Current visitors
Log in
Register
What's new
Search
Search
Search titles only
By:
New posts
Search forums
Menu
Log in
Register
Install the app
Install
Forums
Archive
Archive
Ruby
proper use of classes
JavaScript is disabled. For a better experience, please enable JavaScript in your browser before proceeding.
You are using an out of date browser. It may not display this or other websites correctly.
You should upgrade or use an
alternative browser
.
Reply to thread
Message
[QUOTE="Tom Cloyd, post: 4629507"] Greetings... I'm continuing my learn-to-write-OO-Ruby journey. Had a recent bad experience trying to convert a complex method to a class. The method gets a lot of use in my program, and each time it needs to know a lot about the environment outside itself. I found myself having to write a ton of instance variable data into the class instance to get it to do its job, before I called it each time, then read a few more back out to get the results. It was awful. What had been a one line call was now about 14 lines of code. Ack! I gave up and converted it back to a method, which simply makes more sense. I could not find any "class-magic" in this experience - just a lot of locked doors. I now have three questions. I have read a number of people's accounts of what classes are and how you build them, etc., etc., and no one seems to address these matters at all well (or else I missed it): 1. HOW do you use a class? I was assuming that since I couldn't pass data to an instance, after creation, I have no option but to write data into its instance vars as needed. Sometimes, it seems there simply is no other option. But, is it approved practice to do something like junk = MyClass.new( var_1...var_n ).mymethod which creates an instance and calls a method which leaves its results in some instance vars., then simple read the results with...but how? there's no instance object! (Not that I can find, anyway.) That seems to leave me only with this possibility: myclass = MyClass.newMyClass.new( var_1...var_n ) myclass.mymethod varA = myclass.var_whatever etc....until I have all my results back out of the instance. Compared to a simple method call, this seems designed to make me crazy quickly. Is there a better way? Then, to call the instance again, I have to write new data into its instance vars. This simply looks like nonsense, unless one really needs to have the encapsulation that an instance offers. Am I missing something? Is this just the facts of life when using classes? 2. Is it accepted practice to simply create a new instance every time the class is needed, thus setting the instance's state once, using it with one or more method calls, then moving on to the next new instance? It occurs to me that maybe Ruby's garbage collection would sweep the old instance right up, knowing it won't be used again, but I don't know. My nightmare case is a class which operates on an input record, but differently each time, depending upon a number of factors in the environment outside the class. I just can't see a graceful way to do this. I'm struggling to see why I do OO programming at all in this case. 3. Finally, I'm still struggling with the "when do I make something a class?" question. I'm surprised that this question is so unimportant or its answer so obvious that no one much addresses it. Dave Thomas, in his 3rd ed. (I just upgraded, and its really nice!) finally gives two sentences to the matter, which is way more than I can find anywhere else: "Whenever you’re designing OO systems, a good first step is to identify the things you’re dealing with. Typically each type of thing becomes a class in your final program, and the things themselves are instances of these classes."(p. 59) I've been thinking only in terms of functions, things my program does, and not things it works on or with. Both are relevant, clearly, and I'm now out on a hunt for "things" that are more than functions. Maybe that will help. Anyone have any additional advice about "when to make something a class?" The principle reasons I see are to achieve scope closure, persistent state, and object duplication (multiple instances). Did I miss anything important? I come to the list with these questions only after days of struggle, with lots of code, some of it a rather nasty experience (errors I've never ever seen before!!!). The questions above are the ones I simply have not been able to resolve, and any help offered will be gratefully received. Thanks, Tom The easier one (probably): -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Tom Cloyd, MS MA, LMHC - Private practice Psychotherapist Bellingham, Washington, U.S.A: (360) 920-1226 << [email]tc@tomcloyd.com[/email] >> (email) << TomCloyd.com >> (website) << sleightmind.wordpress.com >> (mental health weblog) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [/QUOTE]
Verification
Post reply
Forums
Archive
Archive
Ruby
proper use of classes
Top