final public function setProperties(array $properties = [])
    {
        foreach ($properties as $name => $value) {
            if (property_exists($this, $name)) {
                $this->$name = $value;
            } else {
                trigger_error(
                    Message::get(
                        Message::MSG_PROPERTY_UNKNOWN,
                        $name,
                        get_class($this)
                    ),
                    E_USER_WARNING
                );
            }
        }
    }