decomposition (slides)

CSc 110 - decomposition

Program decomposition

Program decomposition refers to the process of breaking down a complex program into smaller, more manageable, and understandable parts or components.

It avoids unnecessary common code and improves the structural quality of code.

Class activity one

Compare the three types of guitar, write your asnwers:

  • which parts of code are the same?

  • which parts of code are different?

Class activity one – answers

Classic guitar vs. Retro head guitar:

  • which parts of code are the same?

    • the neck

    • the body

  • which parts of code are different?

    • the head: line 1-4

Class activity one – answers

Retro head guitar vs. Retro head long neck guitar:

  • which parts of code are the same?

    • the head

    • the body

  • which parts of code are different?

    • the neck

Decomposition

def print_classic_guitar():
    print_head()
    print_neck()
    print_body()

def print_retro_guitar():
    print_retro_head()
    print_neck()
    print_body()
    
def print_long_guitar():
    print_head()
    print_neck()
    print_neck()
    print_body()

def main():
    print_classic_guitar() # print classic guitar
    print_retro_guitar() # print retro head guitar
    print_long_guitar() # print long neck guitar

main()

Class activity two

Read the code for classic guitar, write your asnwers:

  • which lines of code are the same?

    • in the head:

    • in the neck:

    • in the body:

Class activity two – answers

Read the code for classic guitar, answer the questions:

  • which lines of code are the same?

    • in the head: line 2 - 4

    • in the neck: line 6 - 7

    • in the body: line 9 - 10 and line 14 - 15

Write functions

Write functions print_head, print_neck, and print_body:

def print_classic_guitar():
    print_head()
    print_neck()
    print_body()

def print_long_guitar():
    print_head()
    print_neck()
    print_neck()
    print_body()

def main():
    print_classic_guitar() # print classic guitar
    print_long_guitar() # print long neck guitar

main()

Write functions – answers

def print_head():
    print("      ___")
    print("    o|* *|o")
    print("    o|* *|o")
    print("    o|* *|o")
    print("     \===/")

def print_neck():
    print("      |||" + "\n" + "      |||")
    
def print_body():
    print("   ___|||___")
    print("  /   |||   \ ")
    print(" /    |||    \ ")
    print("|     |||     |")
    print(" \   (|||)   /")
    print("  |   |||   |")
    print("  /   |||   \ ")
    print(" /    |||    \ ")
    print("/     |||     \ ")
    print("|    [===]    |")
    print(" \           /")
    print("  '.       .'")
    print("   '-------'")

def print_classic_guitar():
    print_head()
    print_neck()
    print_body()

def print_long_guitar():
    print_head()
    print_neck()
    print_neck()
    print_body()

def main():
    print_classic_guitar() # print classic guitar
    print_long_guitar() # print long neck guitar

main()
      ___
    o|* *|o
    o|* *|o
    o|* *|o
     \===/
      |||
      |||
   ___|||___
  /   |||   \ 
 /    |||    \ 
|     |||     |
 \   (|||)   /
  |   |||   |
  /   |||   \ 
 /    |||    \ 
/     |||     \ 
|    [===]    |
 \           /
  '.       .'
   '-------'
      ___
    o|* *|o
    o|* *|o
    o|* *|o
     \===/
      |||
      |||
      |||
      |||
   ___|||___
  /   |||   \ 
 /    |||    \ 
|     |||     |
 \   (|||)   /
  |   |||   |
  /   |||   \ 
 /    |||    \ 
/     |||     \ 
|    [===]    |
 \           /
  '.       .'
   '-------'

Write functions – improved answers

def print_head():
    print("      ___")
    pattern = "    o|* *|o"
    print(pattern)
    print(pattern)
    print(pattern)
    print("     \===/")

def print_neck():
    print("      |||" + "\n" + "      |||")
    
def print_body():
    print("   ___|||___")
    pattern = "  /   |||   \ " + "\n" + " /    |||    \ " 
    print(pattern)
    print("|     |||     |")
    print(" \   (|||)   /")
    print("  |   |||   |")
    print(pattern)
    print("/     |||     \ ")
    print("|    [===]    |")
    print(" \           /")
    print("  '.       .'")
    print("   '-------'")

def print_classic_guitar():
    print_head()
    print_neck()
    print_body()

def print_long_guitar():
    print_head()
    print_neck()
    print_neck()
    print_body()

def main():
    print_classic_guitar() # print classic guitar
    print_long_guitar() # print long neck guitar

main()
      ___
    o|* *|o
    o|* *|o
    o|* *|o
     \===/
      |||
      |||
   ___|||___
  /   |||   \ 
 /    |||    \ 
|     |||     |
 \   (|||)   /
  |   |||   |
  /   |||   \ 
 /    |||    \ 
/     |||     \ 
|    [===]    |
 \           /
  '.       .'
   '-------'
      ___
    o|* *|o
    o|* *|o
    o|* *|o
     \===/
      |||
      |||
      |||
      |||
   ___|||___
  /   |||   \ 
 /    |||    \ 
|     |||     |
 \   (|||)   /
  |   |||   |
  /   |||   \ 
 /    |||    \ 
/     |||     \ 
|    [===]    |
 \           /
  '.       .'
   '-------'

Write a function

Write print_retro_head:

def print_retro_guitar():
    print_retro_head()
    print_neck()
    print_body()

def main():
    print_classic_guitar() # print classic guitar
    print_long_guitar() # print long neck guitar
    print_retro_guitar() # print retro head guitar

main()

Write a function – answer

def print_head():
    print("      ___")
    pattern = "    o|* *|o"
    print(pattern)
    print(pattern)
    print(pattern)
    print("     \===/")

def print_retro_head():
    print("     ._-_.")
    print("    +|\G/|+")
    pattern = "    +|\./|+"
    print(pattern)
    print(pattern)
    print("     \===/")

def print_neck():
    print("      |||" + "\n" + "      |||")
    
def print_body():
    print("   ___|||___")
    pattern = "  /   |||   \ " + "\n" + " /    |||    \ " 
    print(pattern)
    print("|     |||     |")
    print(" \   (|||)   /")
    print("  |   |||   |")
    print(pattern)
    print("/     |||     \ ")
    print("|    [===]    |")
    print(" \           /")
    print("  '.       .'")
    print("   '-------'")

def print_classic_guitar():
    print_head()
    print_neck()
    print_body()

def print_retro_guitar():
    print_retro_head()
    print_neck()
    print_body()
    
def print_long_guitar():
    print_head()
    print_neck()
    print_neck()
    print_body()

def main():
    print_classic_guitar() # print classic guitar
    print_retro_guitar() # print retro head guitar
    print_long_guitar() # print long neck guitar

main()
      ___
    o|* *|o
    o|* *|o
    o|* *|o
     \===/
      |||
      |||
   ___|||___
  /   |||   \ 
 /    |||    \ 
|     |||     |
 \   (|||)   /
  |   |||   |
  /   |||   \ 
 /    |||    \ 
/     |||     \ 
|    [===]    |
 \           /
  '.       .'
   '-------'
     ._-_.
    +|\G/|+
    +|\./|+
    +|\./|+
     \===/
      |||
      |||
   ___|||___
  /   |||   \ 
 /    |||    \ 
|     |||     |
 \   (|||)   /
  |   |||   |
  /   |||   \ 
 /    |||    \ 
/     |||     \ 
|    [===]    |
 \           /
  '.       .'
   '-------'
      ___
    o|* *|o
    o|* *|o
    o|* *|o
     \===/
      |||
      |||
      |||
      |||
   ___|||___
  /   |||   \ 
 /    |||    \ 
|     |||     |
 \   (|||)   /
  |   |||   |
  /   |||   \ 
 /    |||    \ 
/     |||     \ 
|    [===]    |
 \           /
  '.       .'
   '-------'

Discussion

Download and run old guitar file and new guitar file:

  • Which version is more readable?

  • Why it is better?