@startuml

package pmsco {
    class Project {
        cluster_generator
        export_cluster()
    }

    abstract class ClusterGenerator {
        project
        {abstract} count_emitters()
        {abstract} create_cluster()
    }

    class LegacyClusterGenerator {
        project
        count_emitters()
        create_cluster()
    }
}

package "user project" {
    class UserClusterGenerator {
        project
        count_emitters()
        create_cluster()
    }

    note bottom : for complex cluster

    class UserProject {
        count_emitters()
        create_cluster()
    }

    note bottom : for simple cluster

}

Project <|-- UserProject
ClusterGenerator <|-- LegacyClusterGenerator
ClusterGenerator <|-- UserClusterGenerator
Project *-- ClusterGenerator
UserProject .> LegacyClusterGenerator
UserProject .> UserClusterGenerator

@enduml