A Review of the Principles of Designing Smart Cyber-Physical Systems for Run-Time Adaptation