munchie has asked for the wisdom of the Perl Monks concerning the following question:
Keep these points in mind:
- My perl knowledge is most of Learning Perl (3ed.), and some other stuff I've researched out of curiosity.
- I've only read the Perlboot manpage, and have no other knowledge of Object Orientation
- I'm on a Windows machine (running ActivePerl)
> munchie, the number munchin newb
Llama: The other other white meat!
(you had to be there :-P)
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Beginner's Object Orientation Exercises?
by Ryszard (Priest) on Mar 17, 2002 at 23:03 UTC | |
My 1st ever OOP project was a logger. Very, very basic, but it worked, and is still pretty cool, altho' as always (when continuing to learn at 100km/h), when you look back on your old code you shudder. I would also recommend reading up on OO theory, and making sure you have your jargon down. Its all great to talk of objects, classes, methods and attributes but what does it all mean? If you dont understand the jargon, you'll get very confused, very easily (and quickly). Keep in mind that when you program in OOP, something that took 3 or 4 lines before can take substancially more with your new found OO-fu. For example, using the above logger example, you open a file, print to the filehandle, and close the file. Three lines, easy, no sweat. If you wanted to do this OO style, then you need some code to set up each various method you may have, a constructor, and some attributes of the logger. this will take you way past the three lines. Dont be discouraged, the advantages are many, modular design, reusability to name a couple. Welcome to the world of OOP, good luck. | [reply] |
by oubiwann (Sexton) on Mar 17, 2002 at 23:36 UTC | |
My first foray into Perl's OO realm was actually just with packages. I wrote a wrapper for another module. Though not OO, it made me familiar with the world of packages - it was of immense value once I dove more deeply into OO. For true OO, I took apart someone's CPAN module and started re-writing it - another good experience. After that, I was ready to make my own. Good luck! | [reply] |
Re: Beginner's Object Orientation Exercises?
by Juerd (Abbot) on Mar 17, 2002 at 22:30 UTC | |
Does anyone have any ideas for excercises I could try that use OO? Try creating virtual versions of machines that exist in real. You could create a slot machine (has to know how much the user has won, has to count statistics, has to know how many credits are left, should accept money, should pay out) or the money mechanics in a coffee machine (how much money is there left? how can that be divided into coins?) or a "simple" flashlight (must have on/off, must know whether it's on or off, must know how much battery power is left, must be able to tell how bright the light is at the current power level, and could have a flash button). I've only read the Perlboot manpage, and have no other knowledge of Object Orientation That's your problem. If your knowlegde is not sufficient, you should learn more - it's the way of life. Thanks, I hope someone can come up with something! Don't forget that using object oriented modules can help a lot. Try to know _why_ they are object oriented instead of functional, try to figure out how the objects work, and read sources. Good luck!!
| [reply] |
by munchie (Monk) on Mar 18, 2002 at 01:54 UTC | |
It has everything but the battery power, which will be easy to implement in a few minutes when I find time. Commands: ison, pwrlvl, ChangePowerLevel, TurnOn, TurnOff, Flash > munchie, the number munchin newb | [reply] [d/l] |
by jeffa (Bishop) on Mar 18, 2002 at 04:11 UTC | |
This allows you to set a level and whether it is on or off when you instantiate (create) the object: which will create a flashlight that is on(1) with a level of 4. Next, you really shouldn't print messages to STDOUT inside an object's method(s). Instead, methods really should generally only get and set values. This means that your methods Flash and ChangePowerLevel really belong in the client that uses your Flashlight object. Also, pwrlvl and ison should return true or false values, and should be renamed to more standard names like change_level and is_on. Here is a complete re-write of your good but flawed first attempt (don't fret it, OO is an art form that takes a looong time to 'get'). Like music, this is just my interpretation of the problem at hand. Read more... (3 kB) | [reply] [d/l] [select] |
by nop (Hermit) on Mar 18, 2002 at 03:04 UTC | |
nop | [reply] |
by Juerd (Abbot) on Mar 18, 2002 at 06:50 UTC | |
I made a Flashlight program.
A program? I thought you wanted to exercise OO? Object properties are usually stored in the object itself, so that you can create multiple instances. If in your program you find that you need another flash light, you'll have to duplicate your entire package, or at least modify it heavily, to support multiple on/off states. All those $self's and the new constructor indicate this flashlight is an object, and you can create as many flashlights as you want. Now, it's your turn. I can say only one thing: try harder.
| [reply] [d/l] |
by munchie (Monk) on Mar 19, 2002 at 21:43 UTC | |
Re: Beginner's Object Orientation Exercises?
by Stegalex (Chaplain) on Mar 18, 2002 at 14:24 UTC | |
How's about trying to solve a business problem? If you are employed as a programmer, there's no shortage of them. Also, in addition to reading Damian Conway's book you should familiarize yourself with data structures and references. I like chicken. | [reply] |
Re: Beginner's Object Orientation Exercises?
by Silicon Cactus (Scribe) on Mar 18, 2002 at 20:53 UTC | |
Honestly, if you are new to OOP, you might want to start the way I did. It is Very Basic, and does not really use all the functionality (actually only properties), but at least can get you to understand how to build an object from scratch and how to work with the references to it. (BTW thanks all of you who were patient with me a while back when I was asking these same questions) We have good ol' web(non)sense here at work, which as probably a few of you know, is blind to external proxies. I found a site in Russia that lists proxy ip's and ports that are open for free use. I thought that was nifty, but it was a pain for me to keep checking it. Enter perl! I did some research in CPAN and was disappointed to see the lack of win32 ping modules (or i missed them) that provided response time. I decided to do it the Dirty Way.I ended up snarfing the page using an object and its methods from Win32::Internet, parsed it to get what i needed (good regex use too) and built an object with that data to contain ip,port,responsetime, and lost packets. I then backtick a win32 ping command and parse for response time and packet loss, adding the data to the object. Afterwards, a report is generated and I am good to go. It helped me so much to understand what I am doing. And yes, before I get hit with the badstick, it is slow, gawdawful and ugly, but it was a great learning project. | [reply] |
Re: Beginner's Object Orientation Exercises?
by munchie (Monk) on Mar 20, 2002 at 01:14 UTC | |
> munchie, the number munchin newb | [reply] [d/l] [select] |
by Necos (Friar) on Mar 21, 2002 at 00:45 UTC | |
Also, you can actually combine set_power and get_power into one sub, called power. But that's an exercise left for the reader... Theodore Charles III Network Administrator Los Angeles Senior High 4650 W. Olympic Blvd. Los Angeles, CA 90019 323-937-3210 ext. 224 email->secon_kun@hotmail.com | [reply] [d/l] |
by munchie (Monk) on Mar 21, 2002 at 01:04 UTC | |
into something like: It would be called as $obj->power("Power name") to set, and $obj->power() to view. > munchie, the number munchin newb | [reply] [d/l] [select] |
Re: Beginner's Object Orientation Exercises?
by buckaduck (Chaplain) on Mar 18, 2002 at 18:29 UTC | |
In my case, I made the code handle a lot of formatting tricks, and produce output in a variety of formats. Whatever you choose, I think the key is to make it something you might actually want to use. That's the only way you'll keep using it in the long run. buckaduck | [reply] |