@startuml
!include style.puml
skinparam arrowThickness 1.1
skinparam arrowColor STORAGE_COLOR
skinparam classBackgroundColor STORAGE_COLOR

package Storage{

package "UserPrefs Storage" #F4F6F6{
Interface UserPrefsStorage <<Interface>>
Class JsonUserPrefsStorage
}

Interface Storage <<Interface>>

Class StorageManager
package "AddressBook Storage" #F4F6F6{
Interface AddressBookStorage <<Interface>>
Class JsonAddressBookStorage
Class JsonSerializableAddressBook
Class "{abstract}\nJsonAdaptedPerson" as Person
Class JsonAdaptedStudent extends Person
Class JsonAdaptedTutor extends Person
Class JsonAdaptedTag
}

}

Class HiddenOutside #FFFFFF
HiddenOutside ..> Storage

StorageManager .up.|> Storage
StorageManager -up-> "1" UserPrefsStorage
StorageManager -up-> "1" AddressBookStorage

Storage -left-|> UserPrefsStorage
Storage -right-|> AddressBookStorage

JsonUserPrefsStorage .up.|> UserPrefsStorage
JsonAddressBookStorage .up.|> AddressBookStorage
JsonAddressBookStorage ..> JsonSerializableAddressBook
JsonSerializableAddressBook --> "*" Person
Person --> "*" JsonAdaptedTag

@enduml
