Live data from Hacker News

On the criteria to be used in decomposing systems into modules (1972) [pdf]

win.tue.nl

11–20 of 33 posts

Re: On the criteria to be used in decomposing systems into modules (1972) [pdf]

#11
post #8
post #6

Why are those PDF's so ugly? It would be so much more readable if it was just a regular web page. (And sorry for the negativity since this is a fascinating article. But I'm genuinely curious why the this PDF is so ugly, since I'm sure the original published version looked significantly better, and the text seems to have been OCR'ed)

Have a look at the footer of a page of the PDF. It says „Communications of the ACM, Decembre 1972, Volume 15, Number 12“ there. It is a scan of an old article from a journal.

[deleted]

Re: On the criteria to be used in decomposing systems into modules (1972) [pdf]

#12
This also pertains to the much-misunderstood "Single Responsibility" principle. The article argues that modules should encapsulate decisions which may change, i.e shield other modules from effect of such changes. The SRP argues that each module should only encapsulate one such decision.

Re: On the criteria to be used in decomposing systems into modules (1972) [pdf]

#13

I really thought there had been a previous submission with more comments, but maybe it was another Parnas paper. The only past submission with comments: https://news.ycombinator.com/item?id=8849468 - Jan 7, 2015 (5 comments)

I thought so too, but couldn't find one.

Re: On the criteria to be used in decomposing systems into modules (1972) [pdf]

#14
I always bring up this paper when I read a post criticizing OOP. It's a bit old but still very relevant and practical. In it the concept of information hiding, closely related to encapsulation, was first described. This concept plays a central role in the strategy for effective system modularization and is IMHO the basis of OOP.

Shameless plug: A couple of years ago I wrote a post about this paper trying to expand it based on my personal experience and providing a more simpler example to elucidate the concepts presented in it [1]

[1] https://thomasvilhena.com/2020/03/a-strategy-for-effective-s...

Re: On the criteria to be used in decomposing systems into modules (1972) [pdf]

#15
post #14

I always bring up this paper when I read a post criticizing OOP. It's a bit old but still very relevant and practical. In it the concept of information hiding, closely related to encapsulation, was first described. This concept plays a central role in the strategy for effective system modularization and is IMHO the basis of OOP. Shameless plug: A couple of years ago I wrote a post about this paper trying to expand it…

Loved this post

Re: On the criteria to be used in decomposing systems into modules (1972) [pdf]

#17
post #14

I always bring up this paper when I read a post criticizing OOP. It's a bit old but still very relevant and practical. In it the concept of information hiding, closely related to encapsulation, was first described. This concept plays a central role in the strategy for effective system modularization and is IMHO the basis of OOP. Shameless plug: A couple of years ago I wrote a post about this paper trying to expand it…

I don't remember seeing a criticism of OOP that is a criticism of encapsulation. Everybody tends to agree that encapsulation is desirable. It seems to me criticisms of OOP are that it rolls too many things into one construct, the class: it's a type, with encapsulation of methods and data structure, plus inheritance, all into one. And it can lead to not so efficient data placement on modern CPU (AoS vs SoA).

Languages like Ada and Ocaml have object orientation extensions to the initial languages (Ada 83, and Caml/SML) that can very often be ignored. And still are very good for encapsulation. With them, modules (packages for Ada) and types are separate. It is very natural to group close types together into one module, while exporting opaque abstract types only usable through a module services.

Rolling different concepts into the class may give a more intuitive result at first, particularly when simulating real world entities. But it's also a bit limiting compared to keeping those concepts orthogonal.

Re: On the criteria to be used in decomposing systems into modules (1972) [pdf]

#18
post #2

> Conclusion We have tried to demonstrate by these examples that it is almost always incorrect to begin the decomposition of a system into modules on the basis of a flowchart. We propose instead that one begins with a list of difficult design decisions or design decisions which are likely to change. Each module is then designed to hide such a decision from the others. Since, in most cases, design decisions transcend…

[deleted]

Re: On the criteria to be used in decomposing systems into modules (1972) [pdf]

#19
post #2

> Conclusion We have tried to demonstrate by these examples that it is almost always incorrect to begin the decomposition of a system into modules on the basis of a flowchart. We propose instead that one begins with a list of difficult design decisions or design decisions which are likely to change. Each module is then designed to hide such a decision from the others. Since, in most cases, design decisions transcend…

There are clear cases when the approach advocated in the paper just does not work. For example, one cannot hide behind an abstraction the difference between a reliable local and unreliable network storage.

Another problem is that designing module boundaries to minimize the future changes require to anticipate what may change. But as the saying goes, “it is really hard to predict especially about the future”. If the prediction was wrong, then the initial split into components was hiding the wrong thing.

For example, in the example in the paper they assumed that the task would stay the same, only hardware or the size of data set would change. But allow to change the task, and the whole proposed module split becomes wrong while design based on what was called flowcharts in the paper could require less rewrites.

Re: On the criteria to be used in decomposing systems into modules (1972) [pdf]

#20
post #14

I always bring up this paper when I read a post criticizing OOP. It's a bit old but still very relevant and practical. In it the concept of information hiding, closely related to encapsulation, was first described. This concept plays a central role in the strategy for effective system modularization and is IMHO the basis of OOP. Shameless plug: A couple of years ago I wrote a post about this paper trying to expand it…

The problem with OOP is that the code using it has tendency to produce way too many objects thus putting into the code rather rigid assumptions how the system may evolve. This essentially contradicts what the paper advocates which is more like a toolbox approach.
Post reply on HN