"Domain models contain processes that are not technically motivated but actually meaningful in the problem domain. When alternative processes must be provided, the complexity of choosing the appropriate process combines with the complexity of the multiple processes themselves, and things get out of hand."
Eric Evans
"Domain-driven design: Tackling the complexity in the heart of software"
Addison-Wesley, 2004, p.311
Programmers more and more frequently must deal with non-easy-to-represent data. Data can be complex by nature and it can be affected by structural irregularities. The reflective technique of lazy typing -- essentially deferring the exact definition of object methods until the latest possible moment -- can help programmers more easily and consistently deal with partial or incomplete data. From a behavioral point of view, lazy types provide more flexibility than conventional types by dynamically selecting implementation strategies. Practically speaking, lazy types reduce the coding complexity and maintenance effort required in those situations where standard type modeling falls short.

Many applications can benefit from the transparent management of imprecise and/or incomplete information. Modern object-oriented programming platforms include mechanisms, such as reflection or metadata attributes, that allow for development of frameworks to deal with imprecision in the description and use of objects. Using these mechanisms, generic code can be developed to provide advanced features without interfering with the programmers' efforts.

Lazy types provide the foundation upon which the management of semistructured data can be incorporated into mainstream programming environments and languages (and that can be done without burdening the developers with a new skill to master). Lazy objects change their behavior on the fly depending on the available information...