added software abstraction diagram