Good answers Laurena and Dennis. On 5 remember that class names shouldn't be verbs and should be descriptive of their responsibilities. Barbara Ericson
1. It is bad to have one shape class because you can have multiple different shapes so it's better to design an abstract Shape class that has an abstract method draw. Then create subclasses Triangle, Circle, and Rectangle which inherit from Shape and have their own draw methods, overriding the draw method in Shape class.
2. Box should not inherit from Pen because Box is a not a Pen. Boxes draw themselves using a Pen class, so a Box has a Pen. Therefore, Box class should hold an instance of Pen. This way, some services that Box instance does not need to know about get passed on to the Pen instance (delegation).
3. Copying code is a waste of time and it makes it hard to reuse the code later on. Therefore, the code should be extracted and let other objects inherit from it.
4. Having one main class and a couple of helper classes is not object-oriented programming. You need to create more classes that have their own responsibilities so that not everything depends on one class.