Penser hors de la boîte, je ne pense pas que les exemples que vous avez fourni un naturel « a un » ou « possède une » relation, et il y a plus de relations que « a un » ou « propriétaire d'un ". À mon avis, je voudrais utiliser une relation faiblement couplée pour vos exemples, dans la perspective de la mise en œuvre, j'utiliserais une carte pour décrire et maintenir cette relation, ce qui signifie, pour un parking et une voiture, je mettrais une carte dans la classe Parking, et mappez ses emplacements aux voitures, si nous trouvons un emplacement existant sur la carte, nous savons que la fente est occupée, sinon, c'est une fente libre, pour moi, ça n'a pas beaucoup de sens non plus de dire voiture possède la fente ou la fente possède la voiture; pour l'exemple de la bibliothèque, la même chose, le livre et son emprunteur sont dans une relation très lâche, je mettrais une carte dans la classe de la bibliothèque, et mapper le livre à son emprunteur. Et qui est le gars fait vraiment l'action de caisse? c'est soit le personnel de la bibliothèque ou la machine automatique ou simplement la bibliothèque, donc nous pouvons avoir une bibliothèque.checkout (utilisateur, livres), et à l'intérieur de la méthode, mettre des livres et des utilisateurs dans la carte.
Pour le bonus, qu'est-ce qu'un scénario relationnel "a un"? pas un homme a une voiture, ce n'est pas vraiment un "a un", même nous avons "a un" dans la phrase (ne laissez pas le langage humain vous tromper), cela signifie simplement, à l'intérieur de la classe de la voiture, il y a un champ String appelé ownerName ou ownerId, c'est tout. Un exemple pour un vrai scénario de relation «a un» est que l'homme a un cœur ou une voiture a un moteur, ce qui signifie que dans l'implémentation, il y a vraiment un champ de classe Coeur à l'intérieur de la classe humaine.
Comme c'est beau le design orienté objet!
Sûrement: librarian.checkout (livre, utilisateur)? –
@WW, vous voulez dire Bibliothèque contient une liste de bibliothécaire, et idéalement, l'opération doit être effectuée au niveau de la bibliothèque, Library.checkout (Livre, Utilisateur) peut appeler Libarian.checkout (Livre, Utilisateur); – Lily