Agent-oriented methods for engineering complex distributed systems