A denotational semantics of a programming language specifies the meani
ng of the language in terms of well-defined mathematical structures. T
o this end, state-based formal specification notations such as VDM and
Z can be used to specify denotational semantics by defining the trans
ition from language constructs into mathematical entities. However, wh
en using such notations, the abstract syntax, static semantics and dyn
amic semantics are typically defined separately using distinct formal
structures. As a consequence, adding a new construct to the language u
sually requires modification of each of the above structures. Furtherm
ore, this traditional denotational semantic style generally has limite
d modularity and reusability. This paper advocates the use of the Obje
ct-Z notation to give an object-oriented specification of programming
language semantics. With this approach, programming language construct
s, such as expressions and statements, are viewed as objects, with the
result that the abstract syntax, static and dynamic semantics of indi
vidual language constructs become encapsulated in one class. This modu
larity assists readability and facilitates subsequent semantic modific
ation with minimal disruption.