Designing object-oriented software is difficult, and structuring a reusable object-oriented software is even harder. Mainly while you are designing an object-oriented software you have to keep in mind that your design should be specific to the problem at hand but also general enough to address future problems and requirements. You also want to avoid redesign,…