A DAG node is simply an entity in the DAG. It may have and know about parents, siblings, and children, but it does not necessarily know about transformations or geometry. Transforms and Shapes are two types of nodes derived from a DAG node. A transform node is a type of DAG node which handles transformations (translate, rotate, and scale), while a shape node is a type of DAG node which handles geometry. A shape node does not maintain transformation information, and geometry cannot be hung below a transform node. This means that any piece of geometry requires two DAG nodes above it, a shape node immediately above it, and a transform node above the shape node.
MFnDagNode—has methods for determining the number of parents, and the parents of a node.
MFnNurbsSurface—is one of many types of function sets which operate on the many types of shape nodes (also derived from MFnDagNode, but not derived from MFnTransform) and has methods to get and set the CVs of the surface, etc.