Frameworks capture the commonalities in design and implementation betw
een a family of related applications and are typically expressed in a
general-purpose object-oriented language. Software engineers use frame
works to reduce the cost of building complex applications. Although th
e task of using a framework to build an application is error-prone, fe
w techniques and tools exist to aid the engineer. This paper character
izes the operations of instantiation, extension and refinement used to
build applications from frameworks and explores how these operations
are supported by one common language-level tool, namely the static typ
ing policies (and associated tools) of common object-oriented language
s. It was found that both conservative contravariant and covariant sta
tic typing policies were effective in supporting the operations of fra
mework instantiation and framework extension. However, both policies w
ere ineffective at supporting the operation of framework refinement. A
lthough it does not support the refinement operation itself, covarianc
e is sufficiently expressive to support the instantiation of a properl
y refined framework. This result provides a basis for defining and bui
lding tools to support the effective use and evolution of frameworks i
n software engineering environments.