This repository contains my full set of lab exercises and coursework from the Further Object-Oriented Programming module.
The project was originally developed in IntelliJ during my degree. After graduation, I no longer had access to my university Git server so I restored the project from my local files and uploaded it here. All source code is intact, although the original commit history is not available.
The labs cover a range of Java fundamentals, OOP concepts and applied programming tasks.
Each package focuses on a specific theme, with both main code and corresponding unit-style tests.
Below is a short description of what each package contains.
-
blocks/: Basic Algorithms & Control Flow
Contains small standalone classes implementing introductory algorithmic problems:- Counting and max values
- Fibonacci generation
- First non-repeating character
- String reversal
- Working with multiples
Each file typically has a companionMainclass demonstrating program execution.
-
geometry/: Shape Modelling & Calculations
Implements 2D and 3D geometric objects:- Circle, Rectangle, Square, Triangle
- Cube, Cuboid, Cylinder, Sphere
These classes include constructors, fields, getters and logic for computing areas, perimeters or volumes.
-
graphics/: Simple Drawing / Visual Representation
Contains small graphical demos (House, Tree) used to practise composition, object modelling and basic drawing logic. -
hello/: Introductory Java Programs
Simple starter classes dealing with:- Basic print statements
- Personalised messages
- Console output fundamentals
-
javapy/: Java & Python Style Exercise
Includes a small integration or style-focused exercise (JavaPythonIntegration.java) used for mixed-language concepts during the module. -
lists/: Collections & Generics
Exercises working with Java lists:- Reversing lists
- Removing duplicates
- Merging lists
- Calculating statistics from list contents
Introduces iteration, generics and collection operations.
-
metrics/: Unit Conversions
Small programs converting:- Temperatures
- Distances
Focuses on method design, constants and clean data transformations.
-
reflection/: Exploring Java Reflection
Implements utilities to:- Inspect classes
- List methods
- Demonstrate runtime type discovery
These labs introduce more advanced Java features.
-
shapes/: Abstract Classes & Interfaces
A more OOP-focused modelling package containing:Shapeabstract classDrawableinterfaceShapeFactoryShapeAreaCalculator
Demonstrates polymorphism, abstraction and separation of interfaces vs implementations.
-
stats/: Statistics & Data Processing
Implements:- Average calculations
- Frequency counting
- Histogram generation
Exercises combining loops, collections and basic data analysis.
-
src/test/java/: Tests
The test structure mirrors the layout ofsrc/main/java.
Used to verify correct behaviour and support iterative debugging throughout the labs.
- Open IntelliJ
- Select
File β Openβ¦and choose the project root - Let IntelliJ index the project
- Open any class containing a
mainmethod - Click the green Run icon
- Install the Java Extension Pack
- Open the project folder in VS Code
- Let it auto-detect/build the Java project
- Open a class with a
mainmethod - Click Run
- Java Development Kit (JDK 8 or higher)
- IntelliJ IDEA or Visual Studio Code with Java support
This project serves as a record of my core Java/OOP training.
It demonstrates:
- Strong foundations in object-oriented programming
- Clean class design and modular code
- Understanding of inheritance, interfaces and abstraction
- Experience with collections, algorithms and reflection
- Ability to write and maintain structured Java applications