Transcript Slides

INF 212
Modularity
Instructors: Crista Lopes
Copyright © Instructors.
Outline


The 2 sides of Modularity
Today:
 Modularity
and Style
 Style in the other Arts
 Some Styles
Modules as physical components
Modules as conceptual units
Software Systems – Your Brain...
Software Systems – Your Code...
Your brain and Your code
Suggestion for thoughts
Expression of thoughts using PL
How to Divide the Problem?
(*)
(*) This is not a trivial question, and you only face it much later, possibly
after years of experience in programming.
(*) Some people never even face this question, having learnt only one
way of thinking.
PLs and Modularization

PLs are the materials of expression
Suggest ways of thinking, ordering, dividing

English suggests placing adjectives before nouns

 E.g.

“An inconvenient truth”
Latin languages suggest placing adjectives after
nouns
 E.g.
“Uma verdade inconveniente”
 Try doing this in English...
A very old issue



Expressing one’s thoughts using some language and
materials
Understanding the deeper structures of artifacts,
after analyzing them
One Word:
STYLE
STYLE
STYLE
STYLE
STYLE
STYLE
STYLE
STYLE
STYLE
PLs and Styles



PLs encourage styles of expression, sometimes quite
strongly
Often the style one learns first is the one that sticks
to our brain, like our mother natural language
Language wars are style wars
 “English
is better than French”
 “Haskell is better than Java”
 More on utilitarian perspectives later on
Styles in the other Arts

Pachelbel Canon in D
 Original
 18
styles (piano)
 A few more (guitar)

Exercises in Style, R. Queneau
When CS rediscovered the issue

Parnas “On the criteria to be used in decomposing
systems into modules”
 Concrete
examples and guidelines for different ways to
modularize
 Primarily how to deal with state

We can do it in many ways, now what? Which is
better?
 Parnas
suggestion: information hiding should play a role
in deciding that
 Functional programming had been suggesting it all
along without formulating the question
Modularity



Easier comprehension of complex problems
Systematic resolution: Divide-and-conquer
Loose coupling
 Division
of labor
 Enables independent evolution and maintenance
 Reuse

High Cohesion
 Module
has single responsibility/purpose
Example - KWIC

Problem
 Input:
Ordered set of lines, with ordered set of words,
with ordered set characters.
 Any line may be circularly shifted (removing the last
word of the line, appending at the beginning)
 Output: All circular shifts of all lines in alphabetical
order
1
Quick
12345
2
Brown
12345
3
Fox
123
Example - KWIC

Shared Data
Master Control
Text array
Word
index
Alphabetized
index
Example - KWIC
Pipe-and-filter (functional)
Read
input
Shift
Sort
Display
output
Example - KWIC
Monadic
Read
input
Shift
Sort
Display
output
Example - KWIC

OOP-ish (data abstraction)
Master
Control
Input
Output
Line
Storage
Circular
Shifter
Alphabetizer
Example - KWIC
Pub-Sub
Input
agent
listen/announce
listen/announce
Output
agent
Event
Manager
listen/announce
Shift
agent
listen/announce
Sort
agent