Ein Repository ist eine Klasse, von der es genau eine Instanz gibt,
Warum soll es denn nicht möglich sein, mehrere Instanzen gleichzeitig erstellen zu dürfen!? Stell Dir mal vor, mehrere Shopmitarbeiter wollen Artikel bearbeiten. Soll da etwa jeder Mitarbeiter auf den Anderen warten müssen?
Oder Kunden wollen ihre Kundendaten ändern, wäre ja noch schlimmer!
Und wenn Du schon von JAVA schreibst: Ja, Plain Old Java Objects gibt es auch in Perl. Das sind nur Objekte mit Eigenschaften und haben demzufolge auch keine Methoden weil sie keine Instanzen sind.
So kann man sicher eine Funktion mit einem get($poo, 'name')
aufrufen, wird sich jedoch füher oder später mal die Frage stellen in welchem Namespace die ganzen Funktionen zu organisieren wären.
Und genau hier sehen wir nämlich welchen Vorteil OOP bringt: Aus Funktionen werden Methoden und damit einem ganz bestimmten Namespace, nämlich der der Klasse und nur dieser, zugeordnet. So wird aus
$name = get($user, 'name'); # Plain Object
$user->get('name'); # Objekt als Instanz
und das Zumüllen der main-Class mit Funktionen vermieden von denen je nach Anwendung nur eine Handvoll benötigt werden. Mit AUTOLOAD ist es in Perl dann auh möglich, Methoden in dedizierte Dateien auszulagern so daß deren CODE nur bei Bedarf kompiliert wird. Kann das JAVA auch?