As modern complex systems become increasingly large, sophisticated, feature-rich and data-intensive, people have recognized the importance of precisely and unambiguously specifying them with formal methods for a number of years. This paper advocates the use of Object-Z, a formal specification language, in the description of complex systems. Object-Z is an extension to the Z language to facilitate specification in an object-oriented style. The notation Object-Z builds on Z's strengths in modeling complex data and algorithms, and on its new class structuring's strengths in succinctly specifying the various relationships and communication between objects in a large system. In detail, first we describe informally the syntax and semantics of Object-Z, highlighting those features that facilitate decomposing a large system into a collection of interacting objects and thus separating concerns. Then, we demonstrate the use of Object-Z by presenting a case study of a petrol supply system, illustrating how the system runs by communicating the constituent objects. Finally, we discuss several issues we encountered in this exercise, which may serve as feedback to the development of Object-Z.