객체지향 애플리케이션의 공동 목표는 애플리케이션 기능이며, 작은 역할을 가진 객체들이 각자의 책임을 다하여 협력해서 목표를 이룬다. 객체는 협력적이어야 하며 동시에 자율적이어야 한다. 객체는 메시지를 통해 다른 객체에게 책임을 수행할 것을 요청한다.
현실의 객체에 직접적으로 대응되는 소프트웨어 객체의 유사성은 거의 없다. 그럼에도 이 비유는 객체지향 설계의 핵심 사상인 연결완전성을 설명하는데 적합하다.
역할, 책임, 협력이다. 객체 지향 애플리케이션의 공동의 목표는 기능이다. 애플리케이션의 기능은 더 작은 책임으로 분할되고 책임은 적절한 역할을 수행할 수 있는 객체에 의해 수행된다. 객체는 자신의 책임을 수행하는 도중에 다른 객체에게 도움을 요청하기도 한다. 결론적으로 시스템은 연쇄적인 요청과 응답의 흐름으로 구성된 협력으로 구현된다.
객체는 충분히 협력적이어야 한다. 객체는 다른 객체의 요청을 수신할 수 있고 다른 객체에게 도움을 요청할 수 있을 정도로 열려있어야 한다.
객체는 충분히 자율적이어야 한다. 외부가 아닌 자신이 스스로 자신의 상태를 결정할 수 있어야 한다. 다른 객체의 요청에 응할지 여부는 객체가 스스로 결정한다. 요청에 응해 책임을 수행할 때도 다른 객체의 명령에 복종하는 것이 아니라 요청이 응답할 뿐이다.
객체는 다른 객체와 협력하기 위해 메시지를 전송한다. 메시지의 수신자는 요청에 응할 것인지를 판단하고 자신만의 방법에 따라 메시지를 처리하는데, 이처럼 객체가 수신된 메시지를 처리하는 방법을 메서드라고 부른다. 메시지를 수신한 객체는 실행 시간에 메서드를 선택할 수 있다. 커피 주문에서 바리스타는 커피 머신을 이용해 커피를 제조할 수도 있고, 커피머신을 사용하지 않고 수작업으로 커피를 제조할 수도 있다. 이렇게 외부의 요청을 표현하는 메시지와 요청을 처리하는 구체적인 방법인 메서드를 분리하는 것은 객체의 자율성을 높이는 핵심 메커니즘이다.