Expand on the shapes hierarchy by adding an Exception class named ShapesException. ShapesException should be made a subclass of class ApplicationException, i.e.

    Class ShapesException 
        Inherits ApplicationException
        ...

The ShapesException class should include at least the following method:

    Public Sub New (message as String)
        MyBase.New(message)
    End Sub

You should throw a new ShapesException anytime the shapes classes are used incorrectly. For example, if the user of the classes tries to create a circle with a negative radius or if two points in a polygon are the same. e.g.

    throw new ShapesException("tried to create a circle with a negative radius")