In this project, I created a podcast network that is designed to hold Podcasts, each of which contains multiple Episodes. This podcast network also implements a search object capable of identifying episodes that meet specific criteria and compile them into a playlist. One of the key features of this project is the ability to play Episodes (as an ASCII art) where users have the option to experience the content with or without a video element, which is again represented by unique ASCII art. The creation of Podcasts, Episodes, and Search objects is handled by a PodcastFactory (controll class).
This assignment takes uses
- [Operator overloading] (with polymorphism).
- [Templates] to achieve data abstraction
- [Multiple inheritance] in a diamond hierarchy.
- [Factories] to separate object creation from application logic
- [A strategy pattern] to change behaviour at runtime.
This application includes 10 base classes and 5 derived classes (of the Search and PodcastPlayer classes).
- Podcast (Entity / Container object): (a) Contains Podcast meta-data as well as a collection of Episodes.
- Episode (Entity): (a) Contains Episode meta-data and content
- Search (Behaviour object): Virtual base or Abstract class of all Search objects. (a) H_Search (Behaviour object): Matches Episodes by the Podcast host. (b) C_Search (Behaviour object): Matches Episodes by the Podcast category. (c) HorC_Search (Behaviour object): Matches Episodes by the Podcast host or category.
- Array (Container object): (a) A simple (templated) data structure.
- Podify (Control object): (a) Stores Podcasts along with their Episodes, allows them to be queried.
- PodcastPlayer (Behaviour object): Determines how to play an Episode (either "audio" only, or "audio and video", both of which are simply text). (a) AudioPlayer: Displays the audio of an Episode. (b) VideoPlayer: Displays the audio of an Episode and some ASCII art which is loaded from a �le at runtime
- View (View object): (a) Collects user input and displays Podcasts, Episodes and other information.
- Control (Control object): (a) Manages the interactions of Podify, PodcastFactory, and View. Stores the Episode playlist.
- TestControl (Control object): (a) Test framework for Podify.
- Tester: (a) Provides some common test functionality
-
Clone the repository: First, you need to clone the repository to your local machine. You can do this with the following command:
git clone https://github.com/Jonathan03ant/Podify.git
-
Navigate to the project directory and make sure the make file is updated.
-
Clear any previous buildup to make sure correctness of the code.
make clean
-
Build the project using a "Make" command which will create a "test" executable.
-
Run the ./test executable.