Control Flow as Graph — 2. Selection

Control Flow as Graph is a sequence consisting of the following 5 notional machines:
1. Sequence
2. Selection
3. Multi-Way Selection
4. Short-Circuit
5. Repetition

Programming Language

imperative / Java



Attribution — Origin / Source

Collected by Matthias Hauswirth — Compilers (control-flow graphs) and flow charts

Conceptual Advantage

Understand concept of selection from structured programming (conditional statements like if, if-else), and make clear that a statement may or may not execute, based on a decision taken earlier in the control flow.


... ...
if condition diamond-shaped node
condition outcome label on an arrow coming out of a condition (e.g., true, false)

Draws Attention To

The idea of a 'selection' in structured programming, where a data (the condition's value) is turned into control flow (the next statement to execute).

Use When

When introducing if-statements


Requires prior introduction of 'Sequence'. Mismatch for short-circuit operators (&&, ||) or conditional expressions (c ? a : b), which don't map as naturally.


This is the second in a sequence of "Control Flow as Graph" notional machines:

  1. Sequence
  2. Selection
  3. Multi-Way Selection
  4. Short-Circuit
  5. Repetition

The following video Matthias Hauswirth uses the "Control Flow as Graph" notional machine in his "Programming Fundamentals 2" Bachelor course to explain if-statements in Java:

More Information

This notional machine is implemented by the Informa Clicker tool. This tool allows students in a classroom to construct control flow graphs in in-class clicker exercises.

Check this research paper

Matthias Hauswirth and Andrea Adamoli
Solve & Evaluate with Informa: A Java-based Classroom Response System for Teaching Java
PPPJ '09

Comments or Feedback?

Do you have feedback on this notional machine? Did you find a mistake, or do you have a request for improvement? You can create an Issue on GitHub, where the description is hosted. This way we can see your feedback and address it.

For this, you need a GitHub account. Then follow this link to see the source file of this page. In there, click the ... left of the highlighted line, then pick "Reference in a new issue".

Create an Issue on GitHub