OOP Pay Management System
This project demonstrates the use of object-oriented programming principles, including interfaces, abstract classes, and polymorphism, to calculate payments for various types of objects (invoices and programmers) in a polymorphic manner.
Key Concepts:
Abstract Classes:
The Programmer class is abstract and provides common attributes (name, social security number, etc.) and an abstract method getPaymentAmount() that each subclass overrides.
Interfaces:
The Payme interface defines a contract that all implementing classes must fulfill by providing their own implementation of getPaymentAmount().
Inheritance:
Subclasses (SalariedProgrammer, HourlyProgrammer, CommissionProgrammer, and BasePlusCommissionProgrammer) extend the abstract Programmer class, inheriting its fields and methods.
Polymorphism:
Objects of various types (Invoice, Programmer subclasses) are processed using the common Payme interface reference.
Encapsulation:
Each class uses private fields and provides public getters and setters to manage them, ensuring data integrity.
Dynamic Behavior:
In the PaymeInterfaceTest class:
An array of Payme references stores objects of both unrelated (Invoice) and related (Programmer subclasses) types.
During runtime, the program:
Iterates over the array.
Dynamically calls the appropriate getPaymentAmount() implementation for each object.
Processes a special case for BasePlusCommissionProgrammer by increasing its base salary by 5% before calculating the payment.
Objective:
Create a hierarchy of programmer classes using inheritance and polymorphism.
Use the Payme interface to standardize the calculation of payment amounts for all classes implementing the interface.
Process different objects polymorphically using a common interface and dynamically determine their payment amounts.
Demonstrate polymorphic behavior by processing both unrelated classes (Invoice) and related subclasses (Programmer hierarchy).