snapping and blender


There is nice snap tool in RHinoceros 4.0 but is there something similar in Blender? Please advice how to snap to objets and to different parts of them by using shortcuts.

How to find a midpoint of an object? How to snap to polygon vertex or nurbs control point? How to find center of the object? And so on.