@startuml package "(obda-core)\nspec.mapping" { interface Mapping } package "(optimization)\niq.optimizer" { interface IQOptimizer { optimize(IQ): IQ } } package "(optimization)\niq.optimizer.impl" { class AbstractIntensionalQueryMerger IQOptimizer <|.. AbstractIntensionalQueryMerger } package "" as settings <<Rectangle>> { package "(reformulation-core)\nanswering.reformulation\n.unfolding" #FFFFEE { interface QueryUnfolder IQOptimizer <|-- QueryUnfolder } package "(reformulation-core)\nanswering.reformulation\n.unfolding.impl" #FFFFEE { class BasicQueryUnfolder { ctor(Mapping,\n IntermediateQueryFactory,\n SubstitutionFactory,\n QueryTransformerFactory,\n UnionBasedQueryMerger,\n CoreUtilsFactory) } AbstractIntensionalQueryMerger <|-- BasicQueryUnfolder QueryUnfolder <|.. BasicQueryUnfolder BasicQueryUnfolder .> Mapping } package "(reformulation-core)\ninjection" { interface TranslationFactory <<DIF>> { create(Mapping): QueryUnfolder\n... } TranslationFactory ..> QueryUnfolder: <<creates>> } } @enduml