open close principle applied