How can I replace multiple correlated subqueries in the SELECT clause by LEFT JOINs?
You can aggregate over distinct values as:

array_agg(distinct person.identifier)


However, I'm not sure why you are joining against these sub-selects. You can join directly against the tables like:

select class.identifier, array_agg(distinct person.identifier) as persons
                       , array_agg(distinct room.identifier) as rooms
from class
left join  person
    on class.identifier = person.class_identifier
left join room
    on class.identifier = room.class_identifier
group by   class.identifier
order by   class.identifier;


I would also suggest that you use an alias for your tables:

select c.identifier, array_agg(distinct p.identifier) as persons
                   , array_agg(distinct r.identifier) as rooms
from class c
left join  person p
    on c.identifier = p.class_identifier
left join room r
    on c.identifier = r.class_identifier
group by   c.identifier
order by   c.identifier;


Oh, and welcome to the site. A nice first question with code and sample data, well done.