Shortcode doesn’t work with classes

Here’s a simple example using your original code that successfully registers the shortcode. You need to instantiate the Loader class, then call its activate() method.

class Shortcodes {
  public static function notifications_shortcode( $atts, $content = "" ) {
    return 'notifications foo foo';
  }
}

class MvcPluginLoader {
  function __construct() {
  }
}

class Loader extends MvcPluginLoader {
    function __construct() {
        parent::__construct();
    }

  function add_shortcodes() {
    add_shortcode( 'ls_notifications', array( 'Shortcodes', 'notifications_shortcode' ) );
  }
}

add_action( 'init', 'LoaderInit' );
function LoaderInit() {
    $my_loader = new Loader();
    $my_loader->add_shortcodes();
}