Object-oriented programming lacks a simple theoretical foundation. This is manifested by the abundance of formal models for this programming paradigm. In its simplest form, an object can be viewed as an internal state plus a set of operations on objects. We use directed labelled graph, called state graph, to model the run-time behaviour of objects, with nodes as objects and edges as references to other objects. The graph model, based on conventional operational semantics, is natural and simple. We are then able to formulate an axiomatic semantics for reasoning about object-oriented programs. The axiomatic semantics is proved to be sound and complete with respect to the operational semantics. Our work suggests that graph is an good candidate for capturing the characteristic features of object-oriented programming languages.