CS3500 (Object Oriented Design) Programming assignment
N.B. - the default password for a new file is password123
1. Why Our Java Journal
2. Features
3. SOLIDly Epic Design
4. Extending Our Program
5. Deploy the Jar
6. Image Attributes
📝Your digital bullet journal of choice... every time
Java Journal, brought to you by the exception handlers is the finest in digital bullet journaling. Pinterest, meets Tumblr, meets that one cute notebook you bought at a store and have yet to open, in this novel new application. With a key eye for maximizing aesthetic
, whilst simultaneously ensuring peek productivity
, this Java Journal is the only acceptable option for your day-to-day journaling needs ✨.
So what are you waiting for? Get journalling now, and see how Java Journal was built exactly with you in mind!
Feel free to check out the full feature list here
It is easy to say we're the best, and even easier to prove it! Java Journal boasts a wide variety of bold, unique, features that gets the job done (fasionably of course). These include:
The exception-handlers
are good students of OOD and hence take the principals of SOLID design very seriously. Here is how they did it:
-
Single-Responsibility
- In planning this project we immediately knew we were going to need several different classes if we wanted to obey this principle. Hence we have different controllers and views for different features/pages, and highly deconstructed model and json classes to make sure we don't overcontaminate any classes. Then, within these classes, we ensured that their methods actually related to themselves and nothing else. -
Open-closed
- Simple! We made abstract classes and interfaces to ensure that we could easily add new features without having to modify existing ones. A key examples of this would be our Controller abstract class with its seven different implementations. There is also our FileReader and FileWriter classes that are purposefully general, so that new implementations can be made outside of the current BujoFileReader and BujoFileWriter. -
Liskov Substitution
- Here we can again look at our FileReader and FileWriter classes where we are able to substitute them in place of our BujoFileReader and BujoFileWriter with no complaint. We can also take the Controller abstract class as an example, because we can technically use it in place of its more concrete implementations--the only side note is that the themes of the pages will not be as cute! -
Interface Segregation
- This project is actually kind of weird for us as it is one of the few times we had little to no use of interfaces! The main interface we utilized was View that, similiar to Controller, had seven implementations. In each of these implementations they all utilized the method from View and hence were not forced to implement any methods they didn't actually need! This is also the same for the FileReader and FileWriter as their implementations also utilized all the methods! -
Dependency Inversion Principle
- Again we can look at our FileReader and FileWriters. Throughout our code we were very careful in ensuring that no one class is too tightly coupled to a specific implementation of something else. So from our very first UML diagram we knew that we needed to keep FileReader and FileWriter as the 'general' interfaces that could be called upon instead. This looser coupling allowed us to easily read and write to files throughout our program without worrying about whether or not in future cases the code would still work with a different type of FileReader/Writer.
Taking into consideration how we managed to follow the SOLID design principles, extending our program, bringing it to greater heights, is as simple as it is to use our bullet journal🤭. Not convinced? Well, here are a couple of different features we could easily implement:
- Mind Changes could be implemented in our MiniViewer as easily as us adding an 'Edit' button and text fields for editing. We could easily copy the logic behind us being able to edit quotes/notes, and apply it to add this feature.
- Taksie Backsies could be implemented similarly to Mind Changes by adding a 'Delete' button to the MiniViewer that, when clicked, will remove the entry from the given day's entry. Nothing else would have to be done e.g. to our json, as when saved it auto-rereads the model and regenerates its json format.
- Week Start could be implemented by creating a copy of our makeDays method and instead turn it into a
makeSortedDays(String startDay)
method where the given startDay represents what day of the week should be the starting day. Our FileWriter and FileReader would not complain as (due to the S in SOLID) they are unconcerned about the logic behind the things they read/write.
And we could go on and on!
build > fat.Jar > pa05-template-1.0-SNAPSHOT.jar > RUN
Hey, and guess what we also have... a .jar
file making our Java Journa a fully deployable application. To use it:
- Build the repository using gradle
- Go to
build/fat.Jar
and you should seepa05-template-1.0-SNAPSHOT.jar
- Right click and Run it!
N.B. Java.png and Privacy.png were made by yours truly <3
🔥Fire Emoji
🔒Lock Emoji
💮Flower Emoji
🏠House Image
🍂Leaf Emoji
📝Memo Emoji
❄️Snowflake Emoji
〰️Water Wave Emoji
☀️Sun Emoji