Jack
OSPF has so many types as a way to increase the flexibility of the protocol. The major purpose is to match the behavior of the protocol to particular environments. In general each of the types is designed to increase the scalability of the protocol by reducing some amount of detail that the protocol must track and use in its calculations. In single area OSPF the router has the greatest amount of detail and the calculation of the SPF must process all of that detail. As you go through multi-area OSPF, stub OSPF, totally stub OSPF, NSSA OSPF there are various amounts of detail that the router does not maintain and so it reduces overhead and is therefore more scalable.
One way to look at this is that there is a trade-off between the amount of detail that you know (and therefore the better decision that you can make) and the amount of overhead that is required to process all that detail. In each of the OSPF types we give up some kind of detail and gain more scalability.
HTH
Rick
HTH
Rick