contract oriented programming