ERC4626 vault initialization and some concept questions

Sorry if this question is kind of dumb.
I need to code a contract using ERC4626Upgradeable.sol
This contract needs to be upgradable so it's inheriting
import {ERC4626Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC4626Upgradeable.sol";

I'm having hard time understanding this:

  1. The ERC4626Upgradeable is an erc20 token by itself right ?

  2. When deploying this contract, that token is created or should I create a standard token separately and link it to the vault ?

  3. That token (created separately or not) represent the shares of the vault and it will be minted to users depositing for example usdc, right ?

  4. When calling the function asset(), that returns the token representing the shares right ?

  5. I'm having issues to write the initialize() of the vault when putting parameters for the sharesToken. Do you guys have any example ?

  6. If I have a factory of such Vaults, how to put the parameters to deploy a new Vault ?

Thanks a lot for your time!

Please take a look at EIP-4626 to better understand some of these concepts.

In an EIP-4626 vault there are two tokens: the underlying asset that users can deposit and withdraw, and the tokenized yield-bearing shares. The vault itself is the ERC20 token that represents the vault shares.

asset() returns the underlying asset, so it could be WETH, USDC, etc.

Please share your attempts to write initialize() so we can help with that.

@frangio thanks a lot for your answer
I think what confused me is that the vault itself is a token...

I'm gonna try a few options and go back here.
Thanks!