Traditional switches make forwarding decisions locally. SDN pulls that logic into a central controller, leaving switches to do one thing well: move packets.
The data plane forwards packets at line rate. The control plane decides where they should go. In classic gear both live in every box; in SDN the control plane moves to software you can program.
A controller installs flow rules into switches: match on header fields, then act (forward, drop, rewrite). This lets you express policy as code rather than per-box configuration.