Flatness means just exactly what it sounds like, no point on the surface is higher or lower than half the tolerance given in the control frame. Imagine two virtual planes. one above the theoretical surface and one below it, each half the tolerance frame value from the theoretical perfect surface. no point on the real surface can extend above or below this tolerance band.
I have seen straightness and flatness confused, the way to keep them straight in your mind is that straightness is a 2 dimensional control (in only one direction such as straightness of a shaft axis) whereas flatness is a 3 dimensional control for planar surfaces.
paralellism is sort of the same but references another surface (or sometimes the axis of a cylindrical datum). No point on the paralell surface may be more than or less than half the tolerance shown in the control frame from being paralell with the referenced surface (or axis).
this brings up another common error that bugs me:
Axes are not and cannot be datums, only surfaces can be datums. HOWEVER, denoting a cylindrical surface as a datum means essentially the same thing with the added benefit that you get two "bonus" datum planes 90 degrees apart from each other essentially collinear with what could be envisioned in a centermark configuration, intersecting at the axis of the datum surface.
Did I make that clear enough without pictures?