Programming by deisgn a practical approach to structured programming - Johnson (Prentice-Hall, 1996)