pattern oriented software architecture