Nette Component Model 4.0 brings three main changes. First, `getComponents()` loses its deprecated `$deep` and `$filterType` parameters, now returning only direct children; use `getComponentTree()` for full subtree traversal. Second, the `SmartObject` trait is removed from the base `Component` class, though higher-level classes like `Control` and `BaseControl` still include it. Third, and most significantly, monitoring callbacks now fire top-down (parent before children) instead of bottom-up. The old bottom-up approach collected all callbacks upfront as a snapshot, causing callbacks to fire on components that had already been removed from the tree. The new live-walk algorithm verifies each child is still attached before descending, prevents double-processing on moves, and matches DOM capture-phase intuition. Migration steps include replacing `getComponents(true)` with `getComponentTree()`, using `array_filter()` for type filtering, replacing magic property access with getters, and renaming the `NAME_SEPARATOR` constant to `NameSeparator`.