Workforce assignment, scheduling, planning, and other optimization tasks are routine industry tasks best described by a system of constraints. A software system that supports these tasks would ideally be constructed by writing down the constraint system in a declarative fashion, therefore leaving the solution of the constraint systems to some specialized constraint-solving engine. Historically, such systems originated from the Prolog language.
This article surveys approaches to mating imperative object-oriented languages with constraint-solving capabilities. The two principal approaches--extending the language with a special syntax for constraints and adding constraint-solving libraries--are introduced with motivating examples, and the merits of both approaches are discussed.
The basic ideas behind constraint systems and their application in an object-oriented context are nicely and succinctly worked out. The only weak point of the article is the limited number of references. As this is a very short, introductory article, a few more references would have helped the initiate in the field to find further information.
I recommend this article to anyone who is thinking of solving a typical constraint problem in an ad hoc fashion (as is, unfortunately, far too often seen).