A knowledge level software engineering methodology for agent oriented programming