classdiagram

This commit is contained in:
2025-09-24 18:38:07 -04:00
parent f3aa17931c
commit d7f813e60f
6 changed files with 129 additions and 1012 deletions

129
uml/classdiagram3.dot Executable file
View File

@@ -0,0 +1,129 @@
digraph G {
fontname = "Bitstream Vera Sans"
fontsize = 8
node [
fontname = "Bitstream Vera Sans"
fontsize = 8
shape = "record"
]
edge [
fontname = "Bitstream Vera Sans"
fontsize = 8
]
rankdir = BT
// Interfaces
IReservation [
label = "{<<interface>>\nIReservation|+ ReservationType()\l+ checkValid()\l+ calculatePrice()\l+ getReservation_number()\l+ getAccountNumber()\l+ getPhysical_address()\l}"
style=filled, fillcolor=lightblue
];
// Abstract Classes
Reservation [
label = "{<<abstract>>\nReservation|- type: char\l- reservation_number: String\l- physical_address: Address\l- mailing_address: Address\l- reservation_start_date: ZonedDateTime\l- reservation_end_date: ZonedDateTime\l- reservation_status: ReservationStatusEnum\l- kitchen: KitchenTypeEnum\l- numberOfBeds: Integer\l- ...\l- price: Float\l- accountNumber: String\l|+ getReservation_number()\l+ setReservation_number()\l+ ...\l+ Write()\l+ Change()\l+ update()\l# ReservationType()\l}"
style=filled, fillcolor=lightgrey
];
// Concrete Classes
HotelReservation [
label = "{HotelReservation|+ calculatePrice()\l+ checkValid()\l+ ReservationType()\l}"
];
HouseReservation [
label = "{HouseReservation|+ calculatePrice()\l+ checkValid()\l+ ReservationType()\l}"
];
CabinReservation [
label = "{CabinReservation|+ calculatePrice()\l+ checkValid()\l+ ReservationType()\l}"
];
Account [
label = "{Account|- account_number: String\l- phone_number: String\l- mailing_address: Address\l- email_address: EmailAddress\l- reservations: AccountReservationList\l|+ add(Reservation)\l+ Write(Account)\l+ findReservation(String)\l+ ...\l}"
];
AccountList [
label = "{AccountList|+ add(Account)\l+ save(Account)\l+ find(String)\l+ getListOfReservations()\l}"
];
AccountReservationList [
label = "{AccountReservationList|+ add(IReservation)\l+ find(String)\l+ update(...)\l}"
];
AccomodationManager [
label = "{AccomodationManager|- accounts: AccountList\l|+ loadAll()\l+ retrieveAccount(String)\l+ AddAccount(Account)\l+ addReservation(Account, Reservation)\l+ findReservation(String)\l}"
];
DataRepository [
label = "{<<static>>\nDataRepository|- instance: DataRepository\l- directoryPath: String\l|+ getInstance()\l+ setDataStoreRoot(String)\l+ getPath()\l+ Reservation(String)\l+ WalkFileSystemTree(...)\l+ LoadAccount(Path)\l}"
];
TestReservations [
label = "{TestReservations|+ main(String[])\l}"
];
// Data/Value Objects
Address [
label = "{Address|- street: String\l- city: String\l- state: String\l- zip: String\l}"
shape=box, style=filled, fillcolor=beige
];
EmailAddress [
label = "{EmailAddress|- email: String\l}"
shape=box, style=filled, fillcolor=beige
];
// Enums
KitchenTypeEnum [
label = "{<<enum>>\nKitchenTypeEnum|None\l|Kitchenette\l|FullKitchen\l}"
shape=box, style=filled, fillcolor=lightyellow
];
ReservationStatusEnum [
label = "{<<enum>>\nReservationStatusEnum|Draft\l|Completed\l|Canceled\l}"
shape=box, style=filled, fillcolor=lightyellow
];
// Relationships
// Inheritance
edge [arrowhead=empty, style=solid];
HotelReservation -> Reservation;
HouseReservation -> Reservation;
CabinReservation -> Reservation;
AccountList -> "java.util.ArrayList<Account>" [style=dashed, label="extends"];
AccountReservationList -> "java.util.ArrayList<IReservation>" [style=dashed, label="extends"];
// Implementation
edge [arrowhead=empty, style=dashed];
Reservation -> IReservation;
// Composition
edge [arrowhead=diamond, style=solid];
AccomodationManager -> AccountList [label="1..1 accounts"];
Account -> AccountReservationList [label="1..1 reservations"];
Account -> Address [label="1..1 mailing_address"];
Account -> EmailAddress [label="1..1 email_address"];
// Aggregation
edge [arrowhead=odiamond, style=solid];
AccountReservationList -> IReservation [label="0..*"];
AccountList -> Account [label="0..*"];
Reservation -> Address [label="0..2\n(physical, mailing)"];
// Dependency
edge [arrowhead=vee, style=dashed];
AccomodationManager -> DataRepository [label="uses"];
AccomodationManager -> Account;
TestReservations -> AccomodationManager [label="uses"];
TestReservations -> HotelReservation [label="creates"];
TestReservations -> HouseReservation [label="creates"];
TestReservations -> CabinReservation [label="creates"];
DataRepository -> AccomodationManager [label="uses"];
DataRepository -> Account [label="creates"];
DataRepository -> HotelReservation [label="creates"];
DataRepository -> HouseReservation [label="creates"];
DataRepository -> CabinReservation [label="creates"];
Account -> DataRepository [label="uses"];
Reservation -> DataRepository [label="uses"];
Reservation -> KitchenTypeEnum [label="uses"];
Reservation -> ReservationStatusEnum [label="uses"];
}