Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

Re^2: Splitting program into modules

by eyepopslikeamosquito (Archbishop)
on Nov 12, 2018 at 06:05 UTC ( [id://1225606]=note: print w/replies, xml ) Need Help??


in reply to Re: Splitting program into modules
in thread Splitting program into modules

Object Oriented Programming: logical modules are sometimes better OO classes ...

As for whether and when to use OO, my simple rule of thumb is to ask "do I need more than one?": if the answer is yes, an object is indicated; if the answer is no, a module.

A (non Perl-specific) design checklist (derived from On Coding Standards and Code Reviews):

  • Coupling and Cohesion. Systems should be designed as a set of cohesive modules as loosely coupled as is reasonably feasible.
  • Testability. Systems should be designed so that components can be easily tested in isolation.
  • Data hiding. Minimize the exposure of implementation details. Minimize global data.
  • Interfaces matter. Once an interface becomes widely used, changing it becomes practically impossible (just about anything else can be fixed in a later release).
  • Design the module's interface first.
  • Design interfaces that are: consistent; easy to use correctly; hard to use incorrectly; easy to read, maintain and extend; clearly documented; appropriate to your audience. Be sufficient, not complete; it is easier to add a new feature than to remove a mis-feature.
  • Use descriptive, explanatory, consistent and regular names.
  • Correctness, simplicity and clarity come first. Avoid unnecessary cleverness. If you must rely on cleverness, encapsulate and comment it.
  • DRY (Don't repeat yourself).
  • Establish a rational error handling policy and follow it strictly.

Replies are listed 'Best First'.
Re^3: Splitting program into modules
by LanX (Saint) on Nov 12, 2018 at 10:58 UTC
    I once had to maintain code which had many subs accessing a bunch of global states which where switched by calling an "init()" routine or passed flags.

    After long analysis (Freudian yes) I realized that these routines where effectively methods, the states where instance vars and the so called init() routine switched the instances.

    Well actually that was only a simplified description of what happened, I don't wanna give you nightmares. :)

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery FootballPerl is like chess, only without the dice

    </div

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1225606]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others meditating upon the Monastery: (6)
As of 2024-04-19 08:25 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found