Science of computer programming : methods of software design: techniques and applications