From 8433a2c70616fd53a450317452758dd707e1ce13 Mon Sep 17 00:00:00 2001 From: ffaassaa Date: Tue, 21 Nov 2023 18:34:02 -0800 Subject: [PATCH 01/12] Adding Files to my submission not finished product, but adding files to my submission --- .../oliverzeyen/airbnb/BookingService.java | 5 ++ .../airbnb/BookingServiceImpl.java | 9 +++ .../oliverzeyen/airbnb/DiscountedHotel.java | 7 ++ .../partA/oliverzeyen/airbnb/Hotel.java | 9 +++ .../partA/oliverzeyen/airbnb/Main.java | 15 ++++ .../partA/oliverzeyen/airbnb/README.md | 1 + .../partA/oliverzeyen/doordash/Customer.java | 13 +++ .../oliverzeyen/doordash/DeliveryService.java | 6 ++ .../FoodDeliveryAndTrackingService.java | 13 +++ .../partA/oliverzeyen/doordash/README.md | 1 + .../oliverzeyen/doordash/Restaurant.java | 14 ++++ .../partA/oliverzeyen/facebook/Post1.java | 14 ++++ .../partA/oliverzeyen/facebook/Post2.java | 79 +++++++++++++++++++ .../partA/oliverzeyen/facebook/README.md | 1 + .../partA/oliverzeyen/paypal/Account.java | 13 +++ .../partA/oliverzeyen/paypal/Main.java | 9 +++ .../oliverzeyen/paypal/PayPalGateway.java | 7 ++ .../oliverzeyen/paypal/PaymentProcessor.java | 13 +++ .../partA/oliverzeyen/paypal/README.md | 1 + .../partA/oliverzeyen/uber/Main.java | 15 ++++ .../partA/oliverzeyen/uber/README.md | 1 + .../partA/oliverzeyen/uber/RideManager.java | 70 ++++++++++++++++ .../violations/airbnb/DiscountedHotel.java | 2 +- 23 files changed, 317 insertions(+), 1 deletion(-) create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/airbnb/BookingService.java create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/airbnb/BookingServiceImpl.java create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/airbnb/DiscountedHotel.java create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/airbnb/Hotel.java create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/airbnb/Main.java create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/airbnb/README.md create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/doordash/Customer.java create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/doordash/DeliveryService.java create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/doordash/FoodDeliveryAndTrackingService.java create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/doordash/README.md create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/doordash/Restaurant.java create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/facebook/Post1.java create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/facebook/Post2.java create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/facebook/README.md create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/paypal/Account.java create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/paypal/Main.java create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/paypal/PayPalGateway.java create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/paypal/PaymentProcessor.java create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/paypal/README.md create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/uber/Main.java create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/uber/README.md create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/uber/RideManager.java diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/BookingService.java b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/BookingService.java new file mode 100644 index 0000000..847797e --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/BookingService.java @@ -0,0 +1,5 @@ +package HW1.violations.airbnb; + +public interface BookingService { + int calculateTotalPrice(Hotel hotel, int numberOfNights); +} diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/BookingServiceImpl.java b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/BookingServiceImpl.java new file mode 100644 index 0000000..2e793b5 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/BookingServiceImpl.java @@ -0,0 +1,9 @@ +package HW1.violations.airbnb; + +public class BookingServiceImpl implements BookingService { + @Override + public int calculateTotalPrice(Hotel hotel, int numberOfNights) { + int totalPrice = hotel.calculateTotalPrice(numberOfNights); + return totalPrice; + } +} diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/DiscountedHotel.java b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/DiscountedHotel.java new file mode 100644 index 0000000..67f42a6 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/DiscountedHotel.java @@ -0,0 +1,7 @@ +package HW1.violations.airbnb; + +public class DiscountedHotel extends Hotel { + int calculateTotalPrice(int numberOfNights) { + return super.calculateTotalPrice(numberOfNights) - 50; + } +} \ No newline at end of file diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/Hotel.java b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/Hotel.java new file mode 100644 index 0000000..12db905 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/Hotel.java @@ -0,0 +1,9 @@ +package HW1.violations.airbnb; + +public class Hotel { + int calculateTotalPrice(int numberOfNights) { + return numberOfNights * 100; + } +} + + diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/Main.java b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/Main.java new file mode 100644 index 0000000..07fb449 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/Main.java @@ -0,0 +1,15 @@ +package HW1.violations.airbnb; + +public class Main { + public static void main(String[] args) { + Hotel regularHotel = new Hotel(); + DiscountedHotel discountedHotel = new DiscountedHotel(); + + BookingService bookingService = new BookingServiceImpl(); + int regularHotelTotalPrice = bookingService.calculateTotalPrice(regularHotel, 3); + int discountedHotelTotalPrice = bookingService.calculateTotalPrice(discountedHotel, 3); + + System.out.println("Regular Hotel Total Price: $" + regularHotelTotalPrice); + System.out.println("Discounted Hotel Total Price: $" + discountedHotelTotalPrice); + } +} \ No newline at end of file diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/README.md b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/README.md new file mode 100644 index 0000000..cd40819 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/README.md @@ -0,0 +1 @@ +Add your submissions for part A of the homework here. \ No newline at end of file diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/doordash/Customer.java b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/Customer.java new file mode 100644 index 0000000..e573ac3 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/Customer.java @@ -0,0 +1,13 @@ +package HW1.violations.doordash; + +public class Customer { + private String name; + + public Customer(String name) { + this.name = name; + } + + public String getName() { + return name; + } +} diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/doordash/DeliveryService.java b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/DeliveryService.java new file mode 100644 index 0000000..0841b6f --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/DeliveryService.java @@ -0,0 +1,6 @@ +package HW1.violations.doordash; + +public interface DeliveryService { + void deliverFood(Restaurant restaurant, Customer customer); + void trackPackage(String trackingNumber); +} diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/doordash/FoodDeliveryAndTrackingService.java b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/FoodDeliveryAndTrackingService.java new file mode 100644 index 0000000..c5bc66d --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/FoodDeliveryAndTrackingService.java @@ -0,0 +1,13 @@ +package HW1.violations.doordash; + +public class FoodDeliveryAndTrackingService implements DeliveryService { + @Override + public void deliverFood(Restaurant restaurant, Customer customer) { + System.out.println("Food delivered from " + restaurant.getName() + " to " + customer.getName()); + } + + @Override + public void trackPackage(String trackingNumber) { + System.out.println("Package with tracking number " + trackingNumber + " is being tracked."); + } +} \ No newline at end of file diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/doordash/README.md b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/README.md new file mode 100644 index 0000000..cd40819 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/README.md @@ -0,0 +1 @@ +Add your submissions for part A of the homework here. \ No newline at end of file diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/doordash/Restaurant.java b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/Restaurant.java new file mode 100644 index 0000000..a19ee1d --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/Restaurant.java @@ -0,0 +1,14 @@ +package HW1.violations.doordash; + +public class Restaurant { + private String name; + + public Restaurant(String name) { + this.name = name; + } + + public String getName() { + return name; + } +} + diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/facebook/Post1.java b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/Post1.java new file mode 100644 index 0000000..bdfcfb6 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/Post1.java @@ -0,0 +1,14 @@ +package HW1.violations.facebook; + +//This was the original post class, that was implemented for our "Facebook". + +class Post1 { + private String text; + + // Constructor, getters, and setters for text + + void display() { + System.out.println(text); + // Code for displaying text post + } +} diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/facebook/Post2.java b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/Post2.java new file mode 100644 index 0000000..814a498 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/Post2.java @@ -0,0 +1,79 @@ +package HW1.violations.facebook; + + +//This is the new post class, that was implemented for our "Facebook" to help support images and videos. + +public class Post2 { + + private String text; + private String imageUrl; + + private String videoUrl; + private boolean isImage; + + private boolean isVideo; + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public String getImageUrl() { + return imageUrl; + } + + public void setImageUrl(String imageUrl) { + this.imageUrl = imageUrl; + } + + public String getVideoUrl() { + return videoUrl; + } + + public void setVideoUrl(String videoUrl) { + this.videoUrl = videoUrl; + } + + public boolean isImage() { + return isImage; + } + + public void setImage(boolean image) { + isImage = image; + } + + public boolean isVideo() { + return isVideo; + } + + public void setVideo(boolean video) { + isVideo = video; + } + + public Post2(String text) { + this.text = text; + } + + public Post2(String imageUrl, boolean isImage) { + if(isImage) { + this.imageUrl = imageUrl; + this.isImage = true; + } + } + + public Post2(String videoUrl, boolean isImage, boolean isVideo){ + if(isVideo && !isImage) { + this.videoUrl = videoUrl; + this.isImage = false; + this.isVideo = true; + } + } + + + void displayText() { + System.out.println(text); + } +} diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/facebook/README.md b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/README.md new file mode 100644 index 0000000..cd40819 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/README.md @@ -0,0 +1 @@ +Add your submissions for part A of the homework here. \ No newline at end of file diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/paypal/Account.java b/homework/src/HW1/submissions/partA/oliverzeyen/paypal/Account.java new file mode 100644 index 0000000..5bec1c2 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/paypal/Account.java @@ -0,0 +1,13 @@ +package HW1.violations.paypal; + +public class Account { + private String accountID; + + public Account(String accountID) { + this.accountID = accountID; + } + + public String getAccountID() { + return accountID; + } +} diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/paypal/Main.java b/homework/src/HW1/submissions/partA/oliverzeyen/paypal/Main.java new file mode 100644 index 0000000..a8dd547 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/paypal/Main.java @@ -0,0 +1,9 @@ +package HW1.violations.paypal; + +public class Main { + public static void main(String[] args) { + PaymentProcessor paymentProcessor = new PaymentProcessor(); + Account account = new Account("1"); + paymentProcessor.processPayment(account,100.0); + } +} diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/paypal/PayPalGateway.java b/homework/src/HW1/submissions/partA/oliverzeyen/paypal/PayPalGateway.java new file mode 100644 index 0000000..60f4e52 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/paypal/PayPalGateway.java @@ -0,0 +1,7 @@ +package HW1.violations.paypal; + +public class PayPalGateway { + void processPayment(Account account, double amount) { + System.out.println("Processing payment of $" + amount + " for acocunt " + account.getAccountID() + " using PayPal."); + } +} diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/paypal/PaymentProcessor.java b/homework/src/HW1/submissions/partA/oliverzeyen/paypal/PaymentProcessor.java new file mode 100644 index 0000000..8104207 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/paypal/PaymentProcessor.java @@ -0,0 +1,13 @@ +package HW1.violations.paypal; + +public class PaymentProcessor { + private PayPalGateway payPalGateway; + + PaymentProcessor() { + this.payPalGateway = new PayPalGateway(); + } + + void processPayment(Account account, double amount) { + payPalGateway.processPayment(account,amount); + } +} \ No newline at end of file diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/paypal/README.md b/homework/src/HW1/submissions/partA/oliverzeyen/paypal/README.md new file mode 100644 index 0000000..cd40819 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/paypal/README.md @@ -0,0 +1 @@ +Add your submissions for part A of the homework here. \ No newline at end of file diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/uber/Main.java b/homework/src/HW1/submissions/partA/oliverzeyen/uber/Main.java new file mode 100644 index 0000000..ea948b6 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/uber/Main.java @@ -0,0 +1,15 @@ +package HW1.violations.uber; + +public class Main { + public static void main(String[] args) { + Ride ride = new Ride(1,1); + User user = new User(); + user.setUsername("john_doe"); + + RideManager rideManager = new RideManager(); + + double fare = rideManager.calculateRideFare(ride); + + rideManager.sendNotification(user, "Your ride fare is: $" + fare); + } +} \ No newline at end of file diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/uber/README.md b/homework/src/HW1/submissions/partA/oliverzeyen/uber/README.md new file mode 100644 index 0000000..cd40819 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/uber/README.md @@ -0,0 +1 @@ +Add your submissions for part A of the homework here. \ No newline at end of file diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/uber/RideManager.java b/homework/src/HW1/submissions/partA/oliverzeyen/uber/RideManager.java new file mode 100644 index 0000000..85e2678 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/uber/RideManager.java @@ -0,0 +1,70 @@ +package HW1.violations.uber; + +class RideManager { + private final double BASE_FARE = 5.0; // Base fare in dollars + private final double PER_MILE_RATE = 2.0; // Fare per mile in dollars + private final double PER_MINUTE_RATE = 0.5; // Fare per minute in dollars + + double calculateRideFare(Ride ride) { + double distanceInMiles = ride.getDistanceInMiles(); + int durationInMinutes = ride.getDurationInMinutes(); + + // Calculate fare based on distance and time + double distanceFare = distanceInMiles * PER_MILE_RATE; + double timeFare = durationInMinutes * PER_MINUTE_RATE; + + // Calculate total fare including base fare + double totalFare = BASE_FARE + distanceFare + timeFare; + + return totalFare; + } + + void sendNotification(User user, String message) { + // Code for sending notifications to the user + System.out.println("Notification sent to user: " + user.getUsername() + " - " + message); + } +} + +class Ride { + private double distanceInMiles; + private int durationInMinutes; + + public Ride(double distanceInMiles, int durationInMinutes) { + this.distanceInMiles = distanceInMiles; + this.durationInMinutes = durationInMinutes; + } + + public double getDistanceInMiles() { + return distanceInMiles; + } + + public void setDistanceInMiles(double distanceInMiles) { + this.distanceInMiles = distanceInMiles; + } + + public int getDurationInMinutes() { + return durationInMinutes; + } + + public void setDurationInMinutes(int durationInMinutes) { + this.durationInMinutes = durationInMinutes; + } + +} + +class User { + // User details + private String username; + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + +} + + diff --git a/homework/src/HW1/violations/airbnb/DiscountedHotel.java b/homework/src/HW1/violations/airbnb/DiscountedHotel.java index b86846a..67f42a6 100644 --- a/homework/src/HW1/violations/airbnb/DiscountedHotel.java +++ b/homework/src/HW1/violations/airbnb/DiscountedHotel.java @@ -4,4 +4,4 @@ public class DiscountedHotel extends Hotel { int calculateTotalPrice(int numberOfNights) { return super.calculateTotalPrice(numberOfNights) - 50; } -} +} \ No newline at end of file From 3ed4880e29a9da2acf8de533f738b95ca6e87545 Mon Sep 17 00:00:00 2001 From: ffaassaa Date: Tue, 21 Nov 2023 18:48:14 -0800 Subject: [PATCH 02/12] Create FancyHotel.java --- .../submissions/partA/oliverzeyen/airbnb/FancyHotel.java | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/airbnb/FancyHotel.java diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/FancyHotel.java b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/FancyHotel.java new file mode 100644 index 0000000..56c9d1c --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/FancyHotel.java @@ -0,0 +1,7 @@ +package HW1.violations.airbnb; + +public class FancyHotel { + int pricePerNight = 150; +} + + From badde5de3a98d62e295e30e52144cbb15922f920 Mon Sep 17 00:00:00 2001 From: ffaassaa Date: Tue, 21 Nov 2023 19:21:10 -0800 Subject: [PATCH 03/12] fixing SRP violations by changing the functionality of how the program gets the price of hotels, we can achieve a very uniform and consistent way of getting hotel prices. --- .../partA/oliverzeyen/airbnb/BookingServiceImpl.java | 2 +- .../partA/oliverzeyen/airbnb/DiscountedHotel.java | 7 ++++--- .../partA/oliverzeyen/airbnb/FancyHotel.java | 11 ++++++----- .../submissions/partA/oliverzeyen/airbnb/Hotel.java | 9 ++++----- .../submissions/partA/oliverzeyen/airbnb/Main.java | 3 +++ .../submissions/partA/oliverzeyen/airbnb/README.md | 5 ++++- 6 files changed, 22 insertions(+), 15 deletions(-) diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/BookingServiceImpl.java b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/BookingServiceImpl.java index 2e793b5..7ebdd6b 100644 --- a/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/BookingServiceImpl.java +++ b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/BookingServiceImpl.java @@ -3,7 +3,7 @@ public class BookingServiceImpl implements BookingService { @Override public int calculateTotalPrice(Hotel hotel, int numberOfNights) { - int totalPrice = hotel.calculateTotalPrice(numberOfNights); + int totalPrice = hotel.pricePerNight * numberOfNights; return totalPrice; } } diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/DiscountedHotel.java b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/DiscountedHotel.java index 67f42a6..fac2853 100644 --- a/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/DiscountedHotel.java +++ b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/DiscountedHotel.java @@ -1,7 +1,8 @@ package HW1.violations.airbnb; public class DiscountedHotel extends Hotel { - int calculateTotalPrice(int numberOfNights) { - return super.calculateTotalPrice(numberOfNights) - 50; - } + public int pricePerNight = super.pricePerNight/2; + @Override public int getPricePerNight() { + return this.pricePerNight; + } } \ No newline at end of file diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/FancyHotel.java b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/FancyHotel.java index 56c9d1c..74d55ea 100644 --- a/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/FancyHotel.java +++ b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/FancyHotel.java @@ -1,7 +1,8 @@ package HW1.violations.airbnb; -public class FancyHotel { - int pricePerNight = 150; -} - - +public class FancyHotel extends Hotel { + public int pricePerNight = super.getPricePerNight()*2; + @Override public int getPricePerNight() { + return this.pricePerNight; + } +} \ No newline at end of file diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/Hotel.java b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/Hotel.java index 12db905..811e2b5 100644 --- a/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/Hotel.java +++ b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/Hotel.java @@ -1,9 +1,8 @@ package HW1.violations.airbnb; public class Hotel { - int calculateTotalPrice(int numberOfNights) { - return numberOfNights * 100; - } + public int pricePerNight = 100; + public int getPricePerNight() { + return this.pricePerNight; + } } - - diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/Main.java b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/Main.java index 07fb449..12f1231 100644 --- a/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/Main.java +++ b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/Main.java @@ -4,12 +4,15 @@ public class Main { public static void main(String[] args) { Hotel regularHotel = new Hotel(); DiscountedHotel discountedHotel = new DiscountedHotel(); + FancyHotel fancyHotel = new FancyHotel(); BookingService bookingService = new BookingServiceImpl(); int regularHotelTotalPrice = bookingService.calculateTotalPrice(regularHotel, 3); int discountedHotelTotalPrice = bookingService.calculateTotalPrice(discountedHotel, 3); + int fancyHotelPrice = bookingService.calculateTotalPrice(fancyHotel, 3); System.out.println("Regular Hotel Total Price: $" + regularHotelTotalPrice); System.out.println("Discounted Hotel Total Price: $" + discountedHotelTotalPrice); + System.out.println("Fancy Hotel Total Price: $" + fancyHotelPrice); } } \ No newline at end of file diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/README.md b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/README.md index cd40819..920b870 100644 --- a/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/README.md +++ b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/README.md @@ -1 +1,4 @@ -Add your submissions for part A of the homework here. \ No newline at end of file +airbnb + +violates SRP (S) +How? To me, it seems like Hotels and DiscountedHotels should not be able to calculate the price depending on their stay. I think having a total amount is fine per night, but the actual calculation should be left to the BookingSerivce, as BookingService serves as a useless middleman in this case. From b681959166228682740b1352869e8750c339e5d5 Mon Sep 17 00:00:00 2001 From: ffaassaa Date: Tue, 21 Nov 2023 20:05:29 -0800 Subject: [PATCH 04/12] updated readme for hotel --- .../partA/oliverzeyen/airbnb/FancyHotel.java | 6 ++++-- .../partA/oliverzeyen/airbnb/README.md | 18 +++++++++++++++++- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/FancyHotel.java b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/FancyHotel.java index 74d55ea..e3e6a91 100644 --- a/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/FancyHotel.java +++ b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/FancyHotel.java @@ -1,8 +1,10 @@ package HW1.violations.airbnb; public class FancyHotel extends Hotel { - public int pricePerNight = super.getPricePerNight()*2; + public int pricePerNight = super.pricePerNight*2; @Override public int getPricePerNight() { return this.pricePerNight; } -} \ No newline at end of file +} + + diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/README.md b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/README.md index 920b870..b6a2db6 100644 --- a/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/README.md +++ b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/README.md @@ -1,4 +1,20 @@ airbnb violates SRP (S) -How? To me, it seems like Hotels and DiscountedHotels should not be able to calculate the price depending on their stay. I think having a total amount is fine per night, but the actual calculation should be left to the BookingSerivce, as BookingService serves as a useless middleman in this case. +How? To me, it seems like Hotels and DiscountedHotels should not be able to calculate the price depending on their stay. I think having a total amount is fine per night, but the actual calculation should be left to the BookingSerivce, as BookingService serves as a useless middleman in this case. Assuming that this is a specific cut out of a much larger, fully fleshed out class, it can be very apparent why this could be a bad thing. Essentially, a Hotel's job would/should be more on the lines of the information about the Hotel, rather than calculating your exact stay. While a price per night is useful and important to a hotel, we can use bookingservice to calculate the number of days we would spend in combination with the price point grabbed from each hotel. + +violates OCP (O) +How? Any changes + made to hotel's pricing, directly changes the pricing of other hotels. So, if you made the hotel $50 for the stay, and you tried to use the discountedhotel, you could potentially get a free stay. Assuming that these are two completely different hotels, unless they are somehow connected, it makes much less sense for a discountedhotel to be directly connected with a hotel. + + approach: + +first, separate their responsibilities. + 1. Make hotel not have the specific ability to calculate your exact stay. Instead, it has the responsibility of imagining one night at the hotel. + 2. BookingService now has the sole responsibility of calculating your entire stay. +second, ensure cohesion in the event of price changes + 1. While this still seems a bit weird to have hotel prices deeply connected, their prices can be connected in a less hard-wired way. + 1a. Make a sort of formula for accounting for discounts or pricey hotels + 1b. Give each hotel a version of the original hotel's price that will maintain consistency + +Added a new hotel, FancyHotel, to represent a more pricey point. In this case, I doubled the price of a normal hotel, while the discountedhotel received a price change of half the price of a normal hotel. \ No newline at end of file From 7ff60d2fa0dd2c96ed56b8fa72b91209d4a72e85 Mon Sep 17 00:00:00 2001 From: ffaassaa Date: Tue, 21 Nov 2023 20:32:37 -0800 Subject: [PATCH 05/12] doordash changes --- .../oliverzeyen/doordash/DeliveryService.java | 1 - .../doordash/FoodDeliveryAndTrackingService.java | 13 ------------- .../oliverzeyen/doordash/FoodDeliveryService.java | 11 +++++++++++ .../oliverzeyen/doordash/FoodTrackingService.java | 9 +++++++++ .../partA/oliverzeyen/doordash/OrderManager.java | 15 +++++++++++++++ .../partA/oliverzeyen/doordash/README.md | 15 ++++++++++++++- .../oliverzeyen/doordash/TrackingService.java | 5 +++++ 7 files changed, 54 insertions(+), 15 deletions(-) delete mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/doordash/FoodDeliveryAndTrackingService.java create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/doordash/FoodDeliveryService.java create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/doordash/FoodTrackingService.java create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/doordash/OrderManager.java create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/doordash/TrackingService.java diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/doordash/DeliveryService.java b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/DeliveryService.java index 0841b6f..c98ee0b 100644 --- a/homework/src/HW1/submissions/partA/oliverzeyen/doordash/DeliveryService.java +++ b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/DeliveryService.java @@ -2,5 +2,4 @@ public interface DeliveryService { void deliverFood(Restaurant restaurant, Customer customer); - void trackPackage(String trackingNumber); } diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/doordash/FoodDeliveryAndTrackingService.java b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/FoodDeliveryAndTrackingService.java deleted file mode 100644 index c5bc66d..0000000 --- a/homework/src/HW1/submissions/partA/oliverzeyen/doordash/FoodDeliveryAndTrackingService.java +++ /dev/null @@ -1,13 +0,0 @@ -package HW1.violations.doordash; - -public class FoodDeliveryAndTrackingService implements DeliveryService { - @Override - public void deliverFood(Restaurant restaurant, Customer customer) { - System.out.println("Food delivered from " + restaurant.getName() + " to " + customer.getName()); - } - - @Override - public void trackPackage(String trackingNumber) { - System.out.println("Package with tracking number " + trackingNumber + " is being tracked."); - } -} \ No newline at end of file diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/doordash/FoodDeliveryService.java b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/FoodDeliveryService.java new file mode 100644 index 0000000..b01a7a3 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/FoodDeliveryService.java @@ -0,0 +1,11 @@ +package HW1.violations.doordash; + +public class FoodDeliveryService implements DeliveryService { + + @Override + public void deliverFood(Restaurant restaurant, Customer customer) { + System.out.println("Food delivered from " + restaurant.getName() + " to " + customer.getName()); + } + + +} \ No newline at end of file diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/doordash/FoodTrackingService.java b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/FoodTrackingService.java new file mode 100644 index 0000000..dda5065 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/FoodTrackingService.java @@ -0,0 +1,9 @@ +package HW1.violations.doordash; + +public class FoodTrackingService implements TrackingService { + public String trackingNumber; + @Override + public void trackPackage(String trackingNumber) { + System.out.println("Package with tracking number " + trackingNumber + " is being tracked."); + } +} \ No newline at end of file diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/doordash/OrderManager.java b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/OrderManager.java new file mode 100644 index 0000000..6de1534 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/OrderManager.java @@ -0,0 +1,15 @@ +package HW1.violations.doordash; + +public class OrderManager { + private FoodDeliveryService FDS; + private FoodTrackingService FTS; + + public void processOrder(Restaurant r, Customer c) { + FoodDeliveryService.deliverFood(Restaurant r, Customer c); + } + + public void trackOrder(String trackingNumber) { + FTS.trackPackage(String trackingNumber); + } +} + diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/doordash/README.md b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/README.md index cd40819..4775fd4 100644 --- a/homework/src/HW1/submissions/partA/oliverzeyen/doordash/README.md +++ b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/README.md @@ -1 +1,14 @@ -Add your submissions for part A of the homework here. \ No newline at end of file +doordash + +violates SRP (S) +Clear reasoning is the "and" in the fooddeliveryandtrackingservice class. One class is responsible for both delivering the food, as well as tracking the food. Those are two very complex jobs that in a high level implementation things would get extremely messy. It is best to separate things, and we can do so simply and allow for better implementation. + +violates ISP (I) +When we separate things, we also have to change our interface, as the interface as it was, had given the class too many responsibilities. This is more of the effects of solving a part of SOLID, rather than a clear intial violation. + +changed: + +Not the best implementation but it definitely gets the idea across. + 1. Separate both the interface and class that handles delivery and tracking into two + 2. Create a OrderManager class that can now combine the two. + \ No newline at end of file diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/doordash/TrackingService.java b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/TrackingService.java new file mode 100644 index 0000000..78efac2 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/TrackingService.java @@ -0,0 +1,5 @@ +package HW1.violations.doordash; + +public interface TrackingService { + void trackPackage(String trackingNumber); +} \ No newline at end of file From e4b9c2268d31142cef2e2cc3e9e9ed045aa260d1 Mon Sep 17 00:00:00 2001 From: ffaassaa Date: Tue, 21 Nov 2023 20:52:41 -0800 Subject: [PATCH 06/12] facebook changes --- .../partA/oliverzeyen/facebook/ImagePost.java | 36 +++++++++ .../partA/oliverzeyen/facebook/Post.java | 10 +++ .../partA/oliverzeyen/facebook/Post1.java | 14 ---- .../partA/oliverzeyen/facebook/Post2.java | 79 ------------------- .../partA/oliverzeyen/facebook/README.md | 15 +++- .../partA/oliverzeyen/facebook/TextPost.java | 24 ++++++ .../partA/oliverzeyen/facebook/VideoPost.java | 37 +++++++++ .../partA/oliverzeyen/facebook/VotePost.java | 33 ++++++++ 8 files changed, 154 insertions(+), 94 deletions(-) create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/facebook/ImagePost.java create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/facebook/Post.java delete mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/facebook/Post1.java delete mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/facebook/Post2.java create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/facebook/TextPost.java create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/facebook/VideoPost.java create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/facebook/VotePost.java diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/facebook/ImagePost.java b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/ImagePost.java new file mode 100644 index 0000000..5658ffc --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/ImagePost.java @@ -0,0 +1,36 @@ +package HW1.violations.facebook; + +//This was the original post class, that was implemented for our "Facebook". + +class ImagePost extends TextPost { + private String imageUrl; + private boolean isImage; + + void display() { + System.out.println(text); + // Code for displaying text post + } + // Constructor, getters, and setters for text + + public ImagePost(String text, String imageUrl, boolean isImage) { + super(text); + this.imageUrl = imageUrl; + this.isImage = isImage; + } + + public String getImageUrl() { + return imageUrl; + } + + public void setImageUrl(String imageUrl) { + this.imageUrl = imageUrl; + } + + public boolean isImage() { + return isImage; + } + + public void setImage(boolean image) { + isImage = image; + } +} diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/facebook/Post.java b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/Post.java new file mode 100644 index 0000000..a0855f6 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/Post.java @@ -0,0 +1,10 @@ +package HW1.violations.facebook; + +public interface Post { + private String text; //there should always be the option to add some sort of text to your post, so this is the bare minimum + + void display() { + System.out.println(text); + // Code for displaying text post + } +} diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/facebook/Post1.java b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/Post1.java deleted file mode 100644 index bdfcfb6..0000000 --- a/homework/src/HW1/submissions/partA/oliverzeyen/facebook/Post1.java +++ /dev/null @@ -1,14 +0,0 @@ -package HW1.violations.facebook; - -//This was the original post class, that was implemented for our "Facebook". - -class Post1 { - private String text; - - // Constructor, getters, and setters for text - - void display() { - System.out.println(text); - // Code for displaying text post - } -} diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/facebook/Post2.java b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/Post2.java deleted file mode 100644 index 814a498..0000000 --- a/homework/src/HW1/submissions/partA/oliverzeyen/facebook/Post2.java +++ /dev/null @@ -1,79 +0,0 @@ -package HW1.violations.facebook; - - -//This is the new post class, that was implemented for our "Facebook" to help support images and videos. - -public class Post2 { - - private String text; - private String imageUrl; - - private String videoUrl; - private boolean isImage; - - private boolean isVideo; - - public String getText() { - return text; - } - - public void setText(String text) { - this.text = text; - } - - public String getImageUrl() { - return imageUrl; - } - - public void setImageUrl(String imageUrl) { - this.imageUrl = imageUrl; - } - - public String getVideoUrl() { - return videoUrl; - } - - public void setVideoUrl(String videoUrl) { - this.videoUrl = videoUrl; - } - - public boolean isImage() { - return isImage; - } - - public void setImage(boolean image) { - isImage = image; - } - - public boolean isVideo() { - return isVideo; - } - - public void setVideo(boolean video) { - isVideo = video; - } - - public Post2(String text) { - this.text = text; - } - - public Post2(String imageUrl, boolean isImage) { - if(isImage) { - this.imageUrl = imageUrl; - this.isImage = true; - } - } - - public Post2(String videoUrl, boolean isImage, boolean isVideo){ - if(isVideo && !isImage) { - this.videoUrl = videoUrl; - this.isImage = false; - this.isVideo = true; - } - } - - - void displayText() { - System.out.println(text); - } -} diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/facebook/README.md b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/README.md index cd40819..60002fb 100644 --- a/homework/src/HW1/submissions/partA/oliverzeyen/facebook/README.md +++ b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/README.md @@ -1 +1,14 @@ -Add your submissions for part A of the homework here. \ No newline at end of file +facebook + +post 1 violates the open closed principle (O) +It has such limited functionality that it makes modifying it very difficult. + +post 2 vioaltes the single responsibility principle (S) +In complete contrast, post2 has way too many things that it needs to handle, which ends up making things a mess. + +The two posts, are either bone dry and like a rock which makes it hard to modify, or is a complete mess and tangled which makes it harder to manage. They are both weirdly named which im sure was for the sake of the homework. + +changes: + +1. Very simply, we can separate each post into it's own type. This makes it so a text post wouldn't have to deal with video urls. +2. Add a post for each type of post that can be made. diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/facebook/TextPost.java b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/TextPost.java new file mode 100644 index 0000000..8b7b0ec --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/TextPost.java @@ -0,0 +1,24 @@ +package HW1.violations.facebook; + + +//This is the new post class, that was implemented for our "Facebook" to help support images and videos. + +public class TextPost { + private String text; + + public TextPost(String text) { + this.text = text; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + void displayText() { + System.out.println(text); + } +} diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/facebook/VideoPost.java b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/VideoPost.java new file mode 100644 index 0000000..6d4d0df --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/VideoPost.java @@ -0,0 +1,37 @@ +package HW1.violations.facebook; + +//This was the original post class, that was implemented for our "Facebook". + +class VideoPost extends TextPost{ + private boolean isVideo; + private String videoUrl; + + void display() { + System.out.println(text); + // Code for displaying text post + } + + // Constructor, getters, and setters for text + + public VideoPost(text, isVideo, videoUrl) { + super(text); + this.isVideo = isVideo; + this.videoUrl = videoUrl; + } + + public String getVideoUrl() { + return videoUrl; + } + + public void setVideoUrl(String videoUrl) { + this.videoUrl = videoUrl; + } + public boolean isVideo() { + return isVideo; + } + public void setVideo(boolean video) { + isVideo = video; + } + + +} diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/facebook/VotePost.java b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/VotePost.java new file mode 100644 index 0000000..e23ceed --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/VotePost.java @@ -0,0 +1,33 @@ +package HW1.violations.facebook; + +//This was the original post class, that was implemented for our "Facebook". + +class VotePost extends TextPost { + private String text; + private String prompt; + private int voteYes; + private int voteNo; + + + // Constructor, getters, and setters for text + + public VotePost(String text, String prompt) { + super(text); + this.prompt = prompt; + voteYes = 0; + voteNo = 0; + } + + public void votedYes() { + voteYes++; + } + + public void votedNo() { + votedNo++; + } + + void display() { + System.out.println(text); + // Code for displaying text post + } +} From 681628bfd7a52afa0254201e7d69701f9c6a4c3e Mon Sep 17 00:00:00 2001 From: ffaassaa Date: Tue, 21 Nov 2023 21:52:47 -0800 Subject: [PATCH 07/12] paypal changes --- .../partA/oliverzeyen/doordash/OrderManager.java | 5 +++++ .../submissions/partA/oliverzeyen/paypal/Main.java | 1 + .../submissions/partA/oliverzeyen/paypal/PayPal.java | 6 ++++++ .../partA/oliverzeyen/paypal/PayPalGateway.java | 10 ++++++++-- .../partA/oliverzeyen/paypal/PaymentProcessor.java | 6 +++++- .../submissions/partA/oliverzeyen/paypal/README.md | 11 ++++++++++- 6 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/paypal/PayPal.java diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/doordash/OrderManager.java b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/OrderManager.java index 6de1534..2ec5270 100644 --- a/homework/src/HW1/submissions/partA/oliverzeyen/doordash/OrderManager.java +++ b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/OrderManager.java @@ -4,6 +4,11 @@ public class OrderManager { private FoodDeliveryService FDS; private FoodTrackingService FTS; + public OrderManager() { + FDS = new FoodDeliveryService(); + FTS = new FoodTrackingService(); + } + public void processOrder(Restaurant r, Customer c) { FoodDeliveryService.deliverFood(Restaurant r, Customer c); } diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/paypal/Main.java b/homework/src/HW1/submissions/partA/oliverzeyen/paypal/Main.java index a8dd547..3d45f1d 100644 --- a/homework/src/HW1/submissions/partA/oliverzeyen/paypal/Main.java +++ b/homework/src/HW1/submissions/partA/oliverzeyen/paypal/Main.java @@ -5,5 +5,6 @@ public static void main(String[] args) { PaymentProcessor paymentProcessor = new PaymentProcessor(); Account account = new Account("1"); paymentProcessor.processPayment(account,100.0); + paymentProcessor.processRequest(account, 50.0); } } diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/paypal/PayPal.java b/homework/src/HW1/submissions/partA/oliverzeyen/paypal/PayPal.java new file mode 100644 index 0000000..ed3123a --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/paypal/PayPal.java @@ -0,0 +1,6 @@ +package HW1.violations.paypal; + +public interface PayPal { + void processPayment(Account account, double amount); + void processRequest(Account account, double amount); +} diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/paypal/PayPalGateway.java b/homework/src/HW1/submissions/partA/oliverzeyen/paypal/PayPalGateway.java index 60f4e52..4118617 100644 --- a/homework/src/HW1/submissions/partA/oliverzeyen/paypal/PayPalGateway.java +++ b/homework/src/HW1/submissions/partA/oliverzeyen/paypal/PayPalGateway.java @@ -1,7 +1,13 @@ package HW1.violations.paypal; -public class PayPalGateway { - void processPayment(Account account, double amount) { +public class PayPalGateway implements PayPal { + @Override + void processPayment(Account account, double amount) { System.out.println("Processing payment of $" + amount + " for acocunt " + account.getAccountID() + " using PayPal."); } + + @Override + void processRequest(Account account, double amount) { + System.out.println("Processing request of $" + amount + " for account " + account.getAccountID() + " using PayPal."); + } } diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/paypal/PaymentProcessor.java b/homework/src/HW1/submissions/partA/oliverzeyen/paypal/PaymentProcessor.java index 8104207..79c5716 100644 --- a/homework/src/HW1/submissions/partA/oliverzeyen/paypal/PaymentProcessor.java +++ b/homework/src/HW1/submissions/partA/oliverzeyen/paypal/PaymentProcessor.java @@ -8,6 +8,10 @@ public class PaymentProcessor { } void processPayment(Account account, double amount) { - payPalGateway.processPayment(account,amount); + payPalGateway.processPayment(account, amount); + } + + void processRequest(Account account, double amount) { + payPalGateway.processRquest(account, amount); } } \ No newline at end of file diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/paypal/README.md b/homework/src/HW1/submissions/partA/oliverzeyen/paypal/README.md index cd40819..f491ab1 100644 --- a/homework/src/HW1/submissions/partA/oliverzeyen/paypal/README.md +++ b/homework/src/HW1/submissions/partA/oliverzeyen/paypal/README.md @@ -1 +1,10 @@ -Add your submissions for part A of the homework here. \ No newline at end of file +paypal + +violates DIP (D) +PaymentProcessor has a direct dependency on the PayPalGateway class. This violates DIP because high-level modules like PaymentProcessor should not depend on low-level modules like PayPalGateway. Both should depend on abstractions. + + +changes: + +PaymentProcessor now depends on the interface of PayPalGateway to define the functionality. +Added a feature to request money, since you will typically want to also have some sort of communication feature between two accounts. \ No newline at end of file From fdd9eadc6449ed2ae16cbf9daed796b5298f17be Mon Sep 17 00:00:00 2001 From: ffaassaa Date: Tue, 21 Nov 2023 22:49:35 -0800 Subject: [PATCH 08/12] Changes/Updates --- .../oliverzeyen/doordash/DeliveryService.java | 1 + .../doordash/FoodDeliveryService.java | 5 +- .../doordash/FoodTrackingService.java | 1 - .../oliverzeyen/doordash/OrderManager.java | 4 +- .../partA/oliverzeyen/facebook/ImagePost.java | 11 ++- .../partA/oliverzeyen/facebook/Post.java | 9 +-- .../partA/oliverzeyen/facebook/TextPost.java | 7 +- .../partA/oliverzeyen/facebook/VideoPost.java | 15 ++-- .../partA/oliverzeyen/facebook/VotePost.java | 11 ++- .../oliverzeyen/paypal/PayPalGateway.java | 6 +- .../oliverzeyen/paypal/PaymentProcessor.java | 2 +- .../partA/oliverzeyen/uber/Main.java | 10 +-- .../partA/oliverzeyen/uber/Notification.java | 5 ++ .../oliverzeyen/uber/NotificationManager.java | 8 +++ .../partA/oliverzeyen/uber/README.md | 8 ++- .../partA/oliverzeyen/uber/Ride.java | 8 +++ .../partA/oliverzeyen/uber/RideFare.java | 5 ++ .../oliverzeyen/uber/RideFareCalculator.java | 22 ++++++ .../oliverzeyen/uber/RideInformation.java | 28 ++++++++ .../partA/oliverzeyen/uber/RideManager.java | 70 ------------------- .../partA/oliverzeyen/uber/User.java | 7 ++ .../partA/oliverzeyen/uber/UserAccount.java | 16 +++++ 22 files changed, 139 insertions(+), 120 deletions(-) create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/uber/Notification.java create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/uber/NotificationManager.java create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/uber/Ride.java create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/uber/RideFare.java create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/uber/RideFareCalculator.java create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/uber/RideInformation.java delete mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/uber/RideManager.java create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/uber/User.java create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/uber/UserAccount.java diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/doordash/DeliveryService.java b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/DeliveryService.java index c98ee0b..3bfd493 100644 --- a/homework/src/HW1/submissions/partA/oliverzeyen/doordash/DeliveryService.java +++ b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/DeliveryService.java @@ -3,3 +3,4 @@ public interface DeliveryService { void deliverFood(Restaurant restaurant, Customer customer); } + diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/doordash/FoodDeliveryService.java b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/FoodDeliveryService.java index b01a7a3..9d6286d 100644 --- a/homework/src/HW1/submissions/partA/oliverzeyen/doordash/FoodDeliveryService.java +++ b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/FoodDeliveryService.java @@ -1,11 +1,8 @@ package HW1.violations.doordash; public class FoodDeliveryService implements DeliveryService { - @Override public void deliverFood(Restaurant restaurant, Customer customer) { System.out.println("Food delivered from " + restaurant.getName() + " to " + customer.getName()); - } - - + } } \ No newline at end of file diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/doordash/FoodTrackingService.java b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/FoodTrackingService.java index dda5065..3c9327c 100644 --- a/homework/src/HW1/submissions/partA/oliverzeyen/doordash/FoodTrackingService.java +++ b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/FoodTrackingService.java @@ -1,7 +1,6 @@ package HW1.violations.doordash; public class FoodTrackingService implements TrackingService { - public String trackingNumber; @Override public void trackPackage(String trackingNumber) { System.out.println("Package with tracking number " + trackingNumber + " is being tracked."); diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/doordash/OrderManager.java b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/OrderManager.java index 2ec5270..07dbb79 100644 --- a/homework/src/HW1/submissions/partA/oliverzeyen/doordash/OrderManager.java +++ b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/OrderManager.java @@ -10,11 +10,11 @@ public OrderManager() { } public void processOrder(Restaurant r, Customer c) { - FoodDeliveryService.deliverFood(Restaurant r, Customer c); + FDS.deliverFood(r, c); } public void trackOrder(String trackingNumber) { - FTS.trackPackage(String trackingNumber); + FTS.trackPackage(trackingNumber); } } diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/facebook/ImagePost.java b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/ImagePost.java index 5658ffc..e0466f3 100644 --- a/homework/src/HW1/submissions/partA/oliverzeyen/facebook/ImagePost.java +++ b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/ImagePost.java @@ -1,14 +1,13 @@ package HW1.violations.facebook; -//This was the original post class, that was implemented for our "Facebook". - class ImagePost extends TextPost { private String imageUrl; private boolean isImage; - - void display() { - System.out.println(text); - // Code for displaying text post + + @Override + public void display() { + super.display(); + System.out.println("Now displaying image: " + this.getImageUrl()); } // Constructor, getters, and setters for text diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/facebook/Post.java b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/Post.java index a0855f6..71b314c 100644 --- a/homework/src/HW1/submissions/partA/oliverzeyen/facebook/Post.java +++ b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/Post.java @@ -1,10 +1,5 @@ package HW1.violations.facebook; -public interface Post { - private String text; //there should always be the option to add some sort of text to your post, so this is the bare minimum - - void display() { - System.out.println(text); - // Code for displaying text post - } +public interface Post { + public void display(); } diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/facebook/TextPost.java b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/TextPost.java index 8b7b0ec..43ec749 100644 --- a/homework/src/HW1/submissions/partA/oliverzeyen/facebook/TextPost.java +++ b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/TextPost.java @@ -1,9 +1,6 @@ package HW1.violations.facebook; - -//This is the new post class, that was implemented for our "Facebook" to help support images and videos. - -public class TextPost { +public class TextPost implements Post{ private String text; public TextPost(String text) { @@ -18,7 +15,7 @@ public void setText(String text) { this.text = text; } - void displayText() { + public void display() { System.out.println(text); } } diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/facebook/VideoPost.java b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/VideoPost.java index 6d4d0df..cb52a01 100644 --- a/homework/src/HW1/submissions/partA/oliverzeyen/facebook/VideoPost.java +++ b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/VideoPost.java @@ -1,19 +1,18 @@ package HW1.violations.facebook; -//This was the original post class, that was implemented for our "Facebook". - class VideoPost extends TextPost{ private boolean isVideo; private String videoUrl; - void display() { - System.out.println(text); - // Code for displaying text post + @Override + public void display() { + super.display(); + System.out.println("Now watching: " + this.getVideoUrl()); } // Constructor, getters, and setters for text - public VideoPost(text, isVideo, videoUrl) { + public VideoPost(String text, boolean isVideo, String videoUrl) { super(text); this.isVideo = isVideo; this.videoUrl = videoUrl; @@ -31,7 +30,5 @@ public boolean isVideo() { } public void setVideo(boolean video) { isVideo = video; - } - - + } } diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/facebook/VotePost.java b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/VotePost.java index e23ceed..32bd0f1 100644 --- a/homework/src/HW1/submissions/partA/oliverzeyen/facebook/VotePost.java +++ b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/VotePost.java @@ -1,7 +1,5 @@ package HW1.violations.facebook; -//This was the original post class, that was implemented for our "Facebook". - class VotePost extends TextPost { private String text; private String prompt; @@ -23,11 +21,12 @@ public void votedYes() { } public void votedNo() { - votedNo++; + voteNo++; } - void display() { - System.out.println(text); - // Code for displaying text post + @Override + public void display() { + super.display(); + System.out.println("Prompt: " + this.prompt + "\nYes votes: " + voteYes + "\nNo votes:" + voteNo); } } diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/paypal/PayPalGateway.java b/homework/src/HW1/submissions/partA/oliverzeyen/paypal/PayPalGateway.java index 4118617..0d6f337 100644 --- a/homework/src/HW1/submissions/partA/oliverzeyen/paypal/PayPalGateway.java +++ b/homework/src/HW1/submissions/partA/oliverzeyen/paypal/PayPalGateway.java @@ -2,12 +2,12 @@ public class PayPalGateway implements PayPal { @Override - void processPayment(Account account, double amount) { + public void processPayment(Account account, double amount) { System.out.println("Processing payment of $" + amount + " for acocunt " + account.getAccountID() + " using PayPal."); } @Override - void processRequest(Account account, double amount) { + public void processRequest(Account account, double amount) { System.out.println("Processing request of $" + amount + " for account " + account.getAccountID() + " using PayPal."); } -} +} \ No newline at end of file diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/paypal/PaymentProcessor.java b/homework/src/HW1/submissions/partA/oliverzeyen/paypal/PaymentProcessor.java index 79c5716..438ccdf 100644 --- a/homework/src/HW1/submissions/partA/oliverzeyen/paypal/PaymentProcessor.java +++ b/homework/src/HW1/submissions/partA/oliverzeyen/paypal/PaymentProcessor.java @@ -12,6 +12,6 @@ void processPayment(Account account, double amount) { } void processRequest(Account account, double amount) { - payPalGateway.processRquest(account, amount); + payPalGateway.processRequest(account, amount); } } \ No newline at end of file diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/uber/Main.java b/homework/src/HW1/submissions/partA/oliverzeyen/uber/Main.java index ea948b6..eaca9ed 100644 --- a/homework/src/HW1/submissions/partA/oliverzeyen/uber/Main.java +++ b/homework/src/HW1/submissions/partA/oliverzeyen/uber/Main.java @@ -2,14 +2,14 @@ public class Main { public static void main(String[] args) { - Ride ride = new Ride(1,1); - User user = new User(); + RideInformation ride = new RideInformation(1,1); + UserAccount user = new UserAccount(); user.setUsername("john_doe"); - RideManager rideManager = new RideManager(); - + RideFareCalculator rideManager = new RideFareCalculator(); + NotificationManager notificationManager = new NotificationManager(); double fare = rideManager.calculateRideFare(ride); - rideManager.sendNotification(user, "Your ride fare is: $" + fare); + notificationManager.sendNotification(user, "Your ride fare is: $" + fare); } } \ No newline at end of file diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/uber/Notification.java b/homework/src/HW1/submissions/partA/oliverzeyen/uber/Notification.java new file mode 100644 index 0000000..89aa96e --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/uber/Notification.java @@ -0,0 +1,5 @@ +package HW1.violations.uber; + +public interface Notification { + public void sendNotification(UserAccount user, String message); +} \ No newline at end of file diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/uber/NotificationManager.java b/homework/src/HW1/submissions/partA/oliverzeyen/uber/NotificationManager.java new file mode 100644 index 0000000..21228d2 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/uber/NotificationManager.java @@ -0,0 +1,8 @@ +package HW1.violations.uber; + +public class NotificationManager { + void sendNotification(User user, String message) { + // Code for sending notifications to the user + System.out.println("Notification sent to user: " + user.getUsername() + " - " + message); + } +} \ No newline at end of file diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/uber/README.md b/homework/src/HW1/submissions/partA/oliverzeyen/uber/README.md index cd40819..1f6319b 100644 --- a/homework/src/HW1/submissions/partA/oliverzeyen/uber/README.md +++ b/homework/src/HW1/submissions/partA/oliverzeyen/uber/README.md @@ -1 +1,7 @@ -Add your submissions for part A of the homework here. \ No newline at end of file +uber + +violates SRP (S) +Ride manager has so much to keep track of and handle (i.e. send notifications and calculate rides) that it's a big spaghetti mess. We need to separate each into their own purpose. + +violate DIP (D) +When \ No newline at end of file diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/uber/Ride.java b/homework/src/HW1/submissions/partA/oliverzeyen/uber/Ride.java new file mode 100644 index 0000000..abc7515 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/uber/Ride.java @@ -0,0 +1,8 @@ +package HW1.violations.uber; + +public interface Ride { + public double getDistanceInMiles(); + public void setDistanceInMiles(double distanceInMiles); + public int getDurationInMinutes(); + public void setDurationInMinutes(int durationInMinutes); +} \ No newline at end of file diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/uber/RideFare.java b/homework/src/HW1/submissions/partA/oliverzeyen/uber/RideFare.java new file mode 100644 index 0000000..a018eb7 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/uber/RideFare.java @@ -0,0 +1,5 @@ +package HW1.violations.uber; + +public interface RideFare { + public double calculateRideFare(RideInformation ride); +} \ No newline at end of file diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/uber/RideFareCalculator.java b/homework/src/HW1/submissions/partA/oliverzeyen/uber/RideFareCalculator.java new file mode 100644 index 0000000..b9b5698 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/uber/RideFareCalculator.java @@ -0,0 +1,22 @@ +package HW1.violations.uber; + +public class RideFareCalculator implements RideFare { + private final double BASE_FARE = 5.0; // Base fare in dollars + private final double PER_MILE_RATE = 2.0; // Fare per mile in dollars + private final double PER_MINUTE_RATE = 0.5; // Fare per minute in dollars + + @Override + public double calculateRideFare(RideInformation ride) { + double distanceInMiles = ride.getDistanceInMiles(); + int durationInMinutes = ride.getDurationInMinutes(); + + // Calculate fare based on distance and time + double distanceFare = distanceInMiles * PER_MILE_RATE; + double timeFare = durationInMinutes * PER_MINUTE_RATE; + + // Calculate total fare including base fare + double totalFare = BASE_FARE + distanceFare + timeFare; + + return totalFare; + } +} \ No newline at end of file diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/uber/RideInformation.java b/homework/src/HW1/submissions/partA/oliverzeyen/uber/RideInformation.java new file mode 100644 index 0000000..fd84e84 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/uber/RideInformation.java @@ -0,0 +1,28 @@ +package HW1.violations.uber; + +public class RideInformation implements Ride { + private double distanceInMiles; + private int durationInMinutes; + + public RideInformation(double distanceInMiles, int durationInMinutes) { + this.distanceInMiles = distanceInMiles; + this.durationInMinutes = durationInMinutes; + } + + public double getDistanceInMiles() { + return distanceInMiles; + } + + public void setDistanceInMiles(double distanceInMiles) { + this.distanceInMiles = distanceInMiles; + } + + public int getDurationInMinutes() { + return durationInMinutes; + } + + public void setDurationInMinutes(int durationInMinutes) { + this.durationInMinutes = durationInMinutes; + } + +} \ No newline at end of file diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/uber/RideManager.java b/homework/src/HW1/submissions/partA/oliverzeyen/uber/RideManager.java deleted file mode 100644 index 85e2678..0000000 --- a/homework/src/HW1/submissions/partA/oliverzeyen/uber/RideManager.java +++ /dev/null @@ -1,70 +0,0 @@ -package HW1.violations.uber; - -class RideManager { - private final double BASE_FARE = 5.0; // Base fare in dollars - private final double PER_MILE_RATE = 2.0; // Fare per mile in dollars - private final double PER_MINUTE_RATE = 0.5; // Fare per minute in dollars - - double calculateRideFare(Ride ride) { - double distanceInMiles = ride.getDistanceInMiles(); - int durationInMinutes = ride.getDurationInMinutes(); - - // Calculate fare based on distance and time - double distanceFare = distanceInMiles * PER_MILE_RATE; - double timeFare = durationInMinutes * PER_MINUTE_RATE; - - // Calculate total fare including base fare - double totalFare = BASE_FARE + distanceFare + timeFare; - - return totalFare; - } - - void sendNotification(User user, String message) { - // Code for sending notifications to the user - System.out.println("Notification sent to user: " + user.getUsername() + " - " + message); - } -} - -class Ride { - private double distanceInMiles; - private int durationInMinutes; - - public Ride(double distanceInMiles, int durationInMinutes) { - this.distanceInMiles = distanceInMiles; - this.durationInMinutes = durationInMinutes; - } - - public double getDistanceInMiles() { - return distanceInMiles; - } - - public void setDistanceInMiles(double distanceInMiles) { - this.distanceInMiles = distanceInMiles; - } - - public int getDurationInMinutes() { - return durationInMinutes; - } - - public void setDurationInMinutes(int durationInMinutes) { - this.durationInMinutes = durationInMinutes; - } - -} - -class User { - // User details - private String username; - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - - -} - - diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/uber/User.java b/homework/src/HW1/submissions/partA/oliverzeyen/uber/User.java new file mode 100644 index 0000000..867867f --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/uber/User.java @@ -0,0 +1,7 @@ +package HW1.violations.uber; + +public interface User { + public String getUsername(); + public void setUsername(String username); + +} \ No newline at end of file diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/uber/UserAccount.java b/homework/src/HW1/submissions/partA/oliverzeyen/uber/UserAccount.java new file mode 100644 index 0000000..3dd14fc --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/uber/UserAccount.java @@ -0,0 +1,16 @@ +package HW1.violations.uber; + +public class UserAccount implements User{ + // User details + private String username; + + @Override + public String getUsername() { + return username; + } + + @Override + public void setUsername(String username) { + this.username = username; + } +} \ No newline at end of file From deb68d660d5bab20377593cf88b889e98629bebd Mon Sep 17 00:00:00 2001 From: ffaassaa Date: Tue, 21 Nov 2023 22:54:58 -0800 Subject: [PATCH 09/12] Fixed missing piece on Hotel readMe --- .../src/HW1/submissions/partA/oliverzeyen/airbnb/README.md | 6 ++++-- .../src/HW1/submissions/partA/oliverzeyen/uber/README.md | 5 +++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/README.md b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/README.md index b6a2db6..7cec67d 100644 --- a/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/README.md +++ b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/README.md @@ -4,8 +4,10 @@ violates SRP (S) How? To me, it seems like Hotels and DiscountedHotels should not be able to calculate the price depending on their stay. I think having a total amount is fine per night, but the actual calculation should be left to the BookingSerivce, as BookingService serves as a useless middleman in this case. Assuming that this is a specific cut out of a much larger, fully fleshed out class, it can be very apparent why this could be a bad thing. Essentially, a Hotel's job would/should be more on the lines of the information about the Hotel, rather than calculating your exact stay. While a price per night is useful and important to a hotel, we can use bookingservice to calculate the number of days we would spend in combination with the price point grabbed from each hotel. violates OCP (O) -How? Any changes - made to hotel's pricing, directly changes the pricing of other hotels. So, if you made the hotel $50 for the stay, and you tried to use the discountedhotel, you could potentially get a free stay. Assuming that these are two completely different hotels, unless they are somehow connected, it makes much less sense for a discountedhotel to be directly connected with a hotel. +How? Any changes made to hotel's pricing, directly changes the pricing of other hotels. So, if you made the hotel $50 for the stay, and you tried to use the discountedhotel, you could potentially get a free stay. Assuming that these are two completely different hotels, unless they are somehow connected, it makes much less sense for a discountedhotel to be directly connected with a hotel. + +violates LSP (L) +How? A DiscountedHotel cannot be substituted for Hotel without there being the possibility for drastic changes. It could easily result in expected behavior especially with such a simple change. Even though said simple change seems "simple", the actual calculations are done behind the scenes, and this makesway for many possiblities for error. approach: diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/uber/README.md b/homework/src/HW1/submissions/partA/oliverzeyen/uber/README.md index 1f6319b..7a9ad74 100644 --- a/homework/src/HW1/submissions/partA/oliverzeyen/uber/README.md +++ b/homework/src/HW1/submissions/partA/oliverzeyen/uber/README.md @@ -3,5 +3,6 @@ uber violates SRP (S) Ride manager has so much to keep track of and handle (i.e. send notifications and calculate rides) that it's a big spaghetti mess. We need to separate each into their own purpose. -violate DIP (D) -When \ No newline at end of file +Changes: + +Separated each purpose into it's own class, added interfaces for said important classes, and added a new feature of UberHelicopter as a possible option. \ No newline at end of file From 423aa80c8342a2dc6dd9ed035a5300c7ae441dd7 Mon Sep 17 00:00:00 2001 From: ffaassaa Date: Tue, 21 Nov 2023 22:59:04 -0800 Subject: [PATCH 10/12] Added missing uber helicopter functionality --- .../partA/oliverzeyen/uber/Main.java | 4 ++++ .../UberHelicopterRideFareCalculator.java | 22 +++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 homework/src/HW1/submissions/partA/oliverzeyen/uber/UberHelicopterRideFareCalculator.java diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/uber/Main.java b/homework/src/HW1/submissions/partA/oliverzeyen/uber/Main.java index eaca9ed..bd99219 100644 --- a/homework/src/HW1/submissions/partA/oliverzeyen/uber/Main.java +++ b/homework/src/HW1/submissions/partA/oliverzeyen/uber/Main.java @@ -7,9 +7,13 @@ public static void main(String[] args) { user.setUsername("john_doe"); RideFareCalculator rideManager = new RideFareCalculator(); + UberHelicopterRideFareCalculator UHRFC = new UberHelicopterRideFareCalculator(); NotificationManager notificationManager = new NotificationManager(); double fare = rideManager.calculateRideFare(ride); + double hFare = UHRFC.calculateRideFare(ride); notificationManager.sendNotification(user, "Your ride fare is: $" + fare); + + notificationManager.sendNotification(user, "Your ride fare for the Uber Helicopter is: $" + hFare); } } \ No newline at end of file diff --git a/homework/src/HW1/submissions/partA/oliverzeyen/uber/UberHelicopterRideFareCalculator.java b/homework/src/HW1/submissions/partA/oliverzeyen/uber/UberHelicopterRideFareCalculator.java new file mode 100644 index 0000000..d9a8d18 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/uber/UberHelicopterRideFareCalculator.java @@ -0,0 +1,22 @@ +package HW1.violations.uber; + +public class UberHelicopterRideFareCalculator implements RideFare { + private final double BASE_FARE = 50.0; // Base fare in dollars + private final double PER_MILE_RATE = 100.0; // Fare per mile in dollars + private final double PER_MINUTE_RATE = 5.0; // Fare per minute in dollars + + @Override + public double calculateRideFare(RideInformation ride) { + double distanceInMiles = ride.getDistanceInMiles(); + int durationInMinutes = ride.getDurationInMinutes(); + + // Calculate fare based on distance and time + double distanceFare = distanceInMiles * PER_MILE_RATE; + double timeFare = durationInMinutes * PER_MINUTE_RATE; + + // Calculate total fare including base fare + double totalFare = BASE_FARE + distanceFare + timeFare; + + return totalFare; + } +} \ No newline at end of file From aa1afefa13147338460e368cdf013721315e861e Mon Sep 17 00:00:00 2001 From: ffaassaa <107076427+ffaassaa@users.noreply.github.com> Date: Tue, 21 Nov 2023 23:20:39 -0800 Subject: [PATCH 11/12] Update README for partB.md --- homework/src/HW1/submissions/partB/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homework/src/HW1/submissions/partB/README.md b/homework/src/HW1/submissions/partB/README.md index e4aa9c2..612706c 100644 --- a/homework/src/HW1/submissions/partB/README.md +++ b/homework/src/HW1/submissions/partB/README.md @@ -1 +1 @@ -Add your submissions for part B of the homework here. \ No newline at end of file +https://github.com/ffaassaa/partBJavaFX From 6f7b9b88fc2ec3f5a5be0f92f0e84716691940e4 Mon Sep 17 00:00:00 2001 From: ffaassaa Date: Tue, 21 Nov 2023 23:41:55 -0800 Subject: [PATCH 12/12] Moved partB into folder --- homework/src/HW1/submissions/partB/{ => oliverzeyen}/README.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename homework/src/HW1/submissions/partB/{ => oliverzeyen}/README.md (100%) diff --git a/homework/src/HW1/submissions/partB/README.md b/homework/src/HW1/submissions/partB/oliverzeyen/README.md similarity index 100% rename from homework/src/HW1/submissions/partB/README.md rename to homework/src/HW1/submissions/partB/oliverzeyen/README.md