Now we're at the '_/How many Angels can dance on the head of a pin/_' question (like anything with wings would waste time dancing. Ever seen eagles mate (not the football players)? Dance it's not, but it looks like /sex on a roller coaster only better/! Get me a pair of wings!). Religious war over please! They get me long winded (as you'll note if you keep reading). So, back to the original questions, now long forgotten.

The questions (there were three) were:
(1) Why does Java require each class be in a separate file?
(2) Why Python has no such rule?
And
(3) Is there a reason I should do one or the other (I assume that means either, (3)(a) one class per file, regardless of language and/or (3)(b) Java or Python).

-------------------------------------------------- <evangelist flag off> --------------------------------------------------
Answers:
Question (1):

   There appear to be four answers to this question.
   (a) Don't know (most answers, but with some religious dogma
   attached. JAVA bad; PYTHON good and I worship PHP. Move the adj.
   around  to suit your tastes).

   (b) KISS principle. /Keep It Simple, Stupid/. This is probably the
   right answer. Back then SUN, or as some of us remember '/Stanford
   University Network/' employed some sharp people (I must admit, my
   main reason for disliking SUN and CISCO was where they started. I
   was from UC Berkeley. It should have been UCBUN, or Uncle Buns; but
   that's just wouldn't sell. See how well BSD or 'bastard' sells).

   (c) Early Java development technology not up to n+1 classes in a
   single file. Reasonable from an old programmer's point of view.
   Those old IPC workstation didn't have that much memory. Small
   compiling jobs and executable loads would have been preferred if not
   required. I remember my first IPC had 4 Megabytes of RAM (boy did I
   have to beg for that box!) My Compaq 386/20 MHz computer, running
   MSDOS 3.1 only had 1 Meg and a Hercules graphics card (16 colors. I
   must have been good that year). I must have been a star, as most
   other's new hires were using '*/Bleeding Edge/*' computers (and if
   you don't know the reference, your just too young; think Gateway or
   Dell's cheap, hobbled products). File and more importantly, virus
   transfers where by /SneakerNet/. You young people have it too good;
   just one message via Exchange and you can infect a million computers
   in a thousand countries in moments. We had to work at it before we
   could take a day off as IT reloaded our computers. Thank God or Bill
   Gates, that companies keep buying a broken product.

   (d) Last. It was developed for vending machines (as someone pointed
   out, it started life as 'OAK'). Small memory foot print and a
   limited feature set were no brainers. '/We Taka the coins in, We
   dropa the Twinky out'. /The net's early domination by Unix variants
   and the Macintosh made Java's '/jack of all trades'/ a good
   solution. It was the main reason Microsoft tried (and failed) to
   '/Embrace and Extend'/ Java (Novell watch your ass; Microsoft wants
   to embrace and extend up your backside. SUN, just like a good
   Catholic girl said NO! (Or not in public! as the IBM/SCO trial seems
   to show)).

   So, pick an answers. It's God's fault/feature (sorry, I forget SUN
   != Microsoft), a programming dogma, hardware related or just old
   fashion growing pains. Probably some of each is the truth.


Question (2):

   Python is a later generation language then Java. Without a SUN,
   Digital or Microsoft to push it, it had to serve it's users better.
   Design limitations, due to hardware (see HP and Korn shell) weren't
   a consideration. The main issue I could see, when I was first
   introduced to the Python language, was the reduction of overhead and
   limited ways of doing the same task (1/ Perl ^ n in my experience).
   The need to prettify code so other could read it, or more
   importantly, so other's couldn't read it (for job security), wasn't
   there. Python really is easy to learn, like Pascal was suppose to be.

   Python, like Java was OO from the word go (ok gcc for you purists),
   but was not syntactically  a descendant of C++, so non-C++
   programmers didn't need to pay homage to AT&T (and God's only son,
   Bell Labs, from whence the Holy Ghost, Unix was created, destroyed
   and reborn as BSD. Is there a movie with Mell Gibson there?
   Remember, I said it first!).

   Freedom of vendors often means best of breed wins (i.e. most useful
   feature are includes). Freedom of vendors also means it hard to get
   into your shop (no one ever got fired for buying IBM after all).

That takes care of why, I hope. _No doubt_ there's a few opinions left to be expressed. Who knows, they might stay on topic as well or better them I.

Question (3):

   (3)(a) Is there a reason I should practice the 'One Class per File'
   rule?
   Answer is *yes,* when it makes your programming task easier and
   *no,* when it makes your programming task harder (And yes, I could
   be a damn good congressman too!).

   For development, I think the n+1 class is the right choice. It lets
   you start easy with a prototype class, one with little more then
   placeholders and then using inheritances, build up the functionality
   (you can see my Object Oriented Life started with C++, not a silver
   or ruby spoon. I still have the first edition of "**The C++
   Programming Language"** by Bjarne Stroustrup; an almost unreadable
   book (six or eight beers make it easier, if not clearer; after
   twelve you don't care). Don't ask to buy it. It's going into my
   casket when I'm creamated, along with the first edition of '*The C
   Programming Language*' by Kernighan and Ritchie and my second best
   porn collection; might be tight in that casket, but what a FIRE!).
   Using this method, program growth history is preserved. Some would
   say that's the job of version control. But you can see where sandbox
   development records got IBM and version controls blind usage in
   Mircosoft's attempt at (5+ years) Vista. Somethings should be
   forgotten, sooner rather than later.

   For a developed, deployable product and JIT compilers, n+1 classes
   with dead overridden inheritances, are wasted cycles, wasted space
   and wasted download bandwidth. It just doesn't make sense. /Clean em
   up, move'em out/. That's what version control is for.

   (3)(b) Python or Java. Emmm, Dumb question (some question are,
   despite the feel good gurus your boss will bring in when he wants to
   cut your salary, double your workload or both while cutting you
   coffee rations). The answer depends on your boss's preference. Learn
   both and hope you can convience him the one you're best at, is the
   right choice (good luck; boss's are generally a generation or two
   behind and you. After all, you where hired because of your fresh
   knowledge and viewpoint.  We don't want that going to another
   company. When you feel this is situation is all wrong, read the
   novel Catch-22 and join th club). And please don't remind him that
   you'll be there to support the language he doesn't know. That's a
   ticket backwards and a new resume (yours).

-------------------------------------------------- <evangelist flag on> --------------------------------------------------

Now for some fun. I have a wicked (so I'm told) and rude sense of humor. Humor me, or you, if you please ...

You'll notice I didn't evangelize or denigrate Python, Jython, Java, PHP or C++ (/OK, C++ just a little; after all, I am a fallen CatholiC++/. /And a few jabs at Microsoft. The devil should always be mentioned, especially when he's hard to avoid/). So now here's the the motto or jingle of the dying and upstart languages languages:

   Perl: "Badges? We don't need any stinky badges!"
   FORTRAN: "GOTO 40"
   and
   FORTRAN-90: "GOTO 40-ish, please!"
   Basic: "Directory? What's a directory?"
   <shudder>Pascal</shudder> (need I say more?)
   and
   COBOL on or off Ng: "Your in the wrong column, again!"
And the upstarts language mottos:

   Ruby: I don't care if the slippers are suppose to be sliver; I'm
   paying for Technicolor dammit; those slippers will be RUBY!
   C-Sharp: Bitter on the tongue and leaves a bad after taste. Could I
   have a Java light instead?
   or C-Sharp's first cousin by bastardy with open source virgins (in
   time they'll realize that pains in their behinds should have been
   expected) ...
   Mono: much like the disease, ready to infect anything it touches.
   You should avoid it as fast as you can run.
   And ... Not to forget the forgetable ...
   PHP or for neophytes Perl Hypertext Protocol, also referred to as
   '2nd Wind' or 'Last Gasp' can't be bad for you!

Did I miss anything? No? Then I have no /Smalltalk/ left, so you should go /Forth/ and program. But remember JAVA & SCRIPT can grow infinitely, especially when taken to the exp( GOOGLE ) plexed.

sph

--------------------------------------
      P.S. Python RULES!
---------------------------------------
P.S.S. Still waiting for GWT via Python Google; I hate stepping backwards; can't tell what I'm stepping in, but GWT feels like dog poop; warm amd squishy but it stinks. Mom tells you to stay outside and clean your shoes. Flies think your sweet.
---------------------------------------

Carl Banks wrote:
On Apr 4, 5:23 pm, "Chris Lasher" <[EMAIL PROTECTED]> wrote:
A friend of mine with a programming background in Java and Perl places
each class in its own separate file in . I informed him that keeping
all related classes together in a single file is more in the Python
idiom than one file per class. He asked why, and frankly, his valid
question has me flummoxed.

A: Because you don't have to.

Less smart aleck: Python allows programmers to put more than one class
per file.  Given that freedom, most people didn't obey one-to-one
correspondence between classes and files.  Therefore, it's the more
common idiom in Python.


I tried to rationalize this Python idiom by claiming a file--a single
module--makes for a great container of code which is logically tied
together, such as a class and its subclasses. He posited that
directories (packages) can tie the files together just as well,

Which is not incorrect.


and by
having the classes as separate files, he can "diff" them to see how
they differ, something he wouldn't be able to do with the code all in
one file.

I agree with Bruno: feeling the need to do this is a big red flag that
the code is way too cut-and-paste.

(diff'ing different versions is useful, of course, but you can
usefully diff modules with many classes in them.)


I also offered that having related classes under one file gives more
direct access to those classes, e.g.:

[snip examples]

He doesn't find my arguments convincing, so I thought I'd ask here to
see why the Python idiom is the way it is: why should we NOT be
placing classes in their own separate files?

There's no overwhelming reason not to, IMO.  As long you have some
organization, be it with packages or modules, everything's ok.  Most
things you have to gain or lose by doing one way or the other are of
minor importance.


Carl Banks


-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to