This thesis presents a formal model of object-oriented concepts; in particular we focus on the concepts found useful by experienced designers of reusable software components. The value of the formal model is shown by studying safe substitution of sets of objects in a software system. Safe substitution means that sets of objects may be substituted with similar sets, while the rest of the objects in the system will observe no difference. The conclusion is that safe substitution can be ensured by setting sufficient requirements on the sets of objects and on the similarity relations between such sets. Many of these requirements correspond with common design practice. However, the study has shown that some requirements traditionally considered necessary are not needed, and that new requirements must be added to ensure safe substitution. If or when these new requirements are incorporated into common practice, the result will, hopefully, be more efficient system development and maintenance.