Program composition that supports building object-oriented systems as compositions of subjects, extending systems by composing them with new subjects, and integrating systems by composing them with one another (perhaps with glue or adapter subjects). The flexibility of subject composition introduces novel opportunities for developing and modularising object-oriented programs. Subject-oriented programming-in-the-large involves dividing a system into subjects and writing rules to compose them correctly. It complements object-oriented programming, solving a number of problems that arise when OOP is used to develop large systems or suites of interoperating or integrated applications.