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..7ebdd6b --- /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.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 new file mode 100644 index 0000000..fac2853 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/DiscountedHotel.java @@ -0,0 +1,8 @@ +package HW1.violations.airbnb; + +public class DiscountedHotel extends Hotel { + 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 new file mode 100644 index 0000000..e3e6a91 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/FancyHotel.java @@ -0,0 +1,10 @@ +package HW1.violations.airbnb; + +public class FancyHotel extends Hotel { + public int pricePerNight = super.pricePerNight*2; + @Override public int getPricePerNight() { + return this.pricePerNight; + } +} + + 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..811e2b5 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/Hotel.java @@ -0,0 +1,8 @@ +package HW1.violations.airbnb; + +public class Hotel { + 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 new file mode 100644 index 0000000..12f1231 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/Main.java @@ -0,0 +1,18 @@ +package HW1.violations.airbnb; + +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 new file mode 100644 index 0000000..7cec67d --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/airbnb/README.md @@ -0,0 +1,22 @@ +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. 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. + +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: + +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 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..3bfd493 --- /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); +} + 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..9d6286d --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/FoodDeliveryService.java @@ -0,0 +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 new file mode 100644 index 0000000..3c9327c --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/FoodTrackingService.java @@ -0,0 +1,8 @@ +package HW1.violations.doordash; + +public class FoodTrackingService implements TrackingService { + @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..07dbb79 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/OrderManager.java @@ -0,0 +1,20 @@ +package HW1.violations.doordash; + +public class OrderManager { + private FoodDeliveryService FDS; + private FoodTrackingService FTS; + + public OrderManager() { + FDS = new FoodDeliveryService(); + FTS = new FoodTrackingService(); + } + + public void processOrder(Restaurant r, Customer c) { + FDS.deliverFood(r, c); + } + + public void trackOrder(String trackingNumber) { + FTS.trackPackage(trackingNumber); + } +} + 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..4775fd4 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/doordash/README.md @@ -0,0 +1,14 @@ +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/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/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 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..e0466f3 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/ImagePost.java @@ -0,0 +1,35 @@ +package HW1.violations.facebook; + +class ImagePost extends TextPost { + private String imageUrl; + private boolean isImage; + + @Override + public void display() { + super.display(); + System.out.println("Now displaying image: " + this.getImageUrl()); + } + // 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..71b314c --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/Post.java @@ -0,0 +1,5 @@ +package HW1.violations.facebook; + +public interface Post { + public void display(); +} 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..60002fb --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/README.md @@ -0,0 +1,14 @@ +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..43ec749 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/TextPost.java @@ -0,0 +1,21 @@ +package HW1.violations.facebook; + +public class TextPost implements Post{ + private String text; + + public TextPost(String text) { + this.text = text; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + 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 new file mode 100644 index 0000000..cb52a01 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/VideoPost.java @@ -0,0 +1,34 @@ +package HW1.violations.facebook; + +class VideoPost extends TextPost{ + private boolean isVideo; + private String videoUrl; + + @Override + public void display() { + super.display(); + System.out.println("Now watching: " + this.getVideoUrl()); + } + + // Constructor, getters, and setters for text + + public VideoPost(String text, boolean isVideo, String 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..32bd0f1 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/facebook/VotePost.java @@ -0,0 +1,32 @@ +package HW1.violations.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() { + voteNo++; + } + + @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/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..3d45f1d --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/paypal/Main.java @@ -0,0 +1,10 @@ +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); + 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 new file mode 100644 index 0000000..0d6f337 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/paypal/PayPalGateway.java @@ -0,0 +1,13 @@ +package HW1.violations.paypal; + +public class PayPalGateway implements PayPal { + @Override + public void processPayment(Account account, double amount) { + System.out.println("Processing payment of $" + amount + " for acocunt " + account.getAccountID() + " using PayPal."); + } + + @Override + 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 new file mode 100644 index 0000000..438ccdf --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/paypal/PaymentProcessor.java @@ -0,0 +1,17 @@ +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); + } + + void processRequest(Account account, double amount) { + payPalGateway.processRequest(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..f491ab1 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/paypal/README.md @@ -0,0 +1,10 @@ +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 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..bd99219 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/uber/Main.java @@ -0,0 +1,19 @@ +package HW1.violations.uber; + +public class Main { + public static void main(String[] args) { + RideInformation ride = new RideInformation(1,1); + UserAccount user = new UserAccount(); + 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/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 new file mode 100644 index 0000000..7a9ad74 --- /dev/null +++ b/homework/src/HW1/submissions/partA/oliverzeyen/uber/README.md @@ -0,0 +1,8 @@ +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. + +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 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/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 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 diff --git a/homework/src/HW1/submissions/partB/README.md b/homework/src/HW1/submissions/partB/README.md deleted file mode 100644 index e4aa9c2..0000000 --- a/homework/src/HW1/submissions/partB/README.md +++ /dev/null @@ -1 +0,0 @@ -Add your submissions for part B of the homework here. \ No newline at end of file diff --git a/homework/src/HW1/submissions/partB/oliverzeyen/README.md b/homework/src/HW1/submissions/partB/oliverzeyen/README.md new file mode 100644 index 0000000..612706c --- /dev/null +++ b/homework/src/HW1/submissions/partB/oliverzeyen/README.md @@ -0,0 +1 @@ +https://github.com/ffaassaa/partBJavaFX 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