Applying Object Oriented Programming in Real-World Projects

Basic Real World Implementation of Object Oriented Programming

we will learn how to apply Object Oriented Programming (OOP) principles in a real-world project. We will design and implement a simple payment system using classes, inheritance, and polymorphism. This example will show how to create flexible and maintainable code.

Designing a Payment System

Let’s design a payment system where users can pay using different payment methods such as Credit Card, PayPal, and Bank Transfer. We will use OOP concepts like inheritance and polymorphism to make the system easy to extend and maintain.

Step 1: Define the Base Class

First, we will create a base class called Payment. This class will have a method to process the payment and another method to calculate the transaction fee. We will make calculate_fee an abstract method, so it must be implemented by any subclass.

Example:

from abc import ABC, abstractmethod

class Payment(ABC):
    def process_payment(self, amount):
        print(f"Processing payment of ${amount}")
        fee = self.calculate_fee(amount)
        print(f"Transaction fee: ${fee}")

    @abstractmethod
    def calculate_fee(self, amount):
        pass

Step 2: Create Subclasses for Different Payment Methods

Next, we will create subclasses for different payment methods. Each subclass will implement the calculate_fee method differently.

Example:

class CreditCardPayment(Payment):
    def calculate_fee(self, amount):
        return amount * 0.02  # 2% fee

class PayPalPayment(Payment):
    def calculate_fee(self, amount):
        return amount * 0.03  # 3% fee

class BankTransferPayment(Payment):
    def calculate_fee(self, amount):
        return 5.00  # Flat fee of $5

Step 3: Use the Payment Classes

Now, we can create instances of the different payment classes and process payments. This demonstrates polymorphism, where we can use the same method (process_payment) on different objects (instances of CreditCardPayment, PayPalPayment, and BankTransferPayment).

Example:

def main():
    amount = 100.00  # Payment amount

    credit_card_payment = CreditCardPayment()
    paypal_payment = PayPalPayment()
    bank_transfer_payment = BankTransferPayment()

    print("Credit Card Payment:")
    credit_card_payment.process_payment(amount)
    
    print("\nPayPal Payment:")
    paypal_payment.process_payment(amount)
    
    print("\nBank Transfer Payment:")
    bank_transfer_payment.process_payment(amount)

if __name__ == "__main__":
    main()

Extending the System

One of the main benefits of using OOP is the ease of extending the system. If we want to add a new payment method, we simply create a new subclass of Payment and implement the calculate_fee method.

Example: Adding a New Payment Method

class CryptocurrencyPayment(Payment):
    def calculate_fee(self, amount):
        return amount * 0.01  # 1% fee

def main():
    amount = 100.00  # Payment amount

    credit_card_payment = CreditCardPayment()
    paypal_payment = PayPalPayment()
    bank_transfer_payment = BankTransferPayment()
    crypto_payment = CryptocurrencyPayment()

    print("Credit Card Payment:")
    credit_card_payment.process_payment(amount)
    
    print("\nPayPal Payment:")
    paypal_payment.process_payment(amount)
    
    print("\nBank Transfer Payment:")
    bank_transfer_payment.process_payment(amount)
    
    print("\nCryptocurrency Payment:")
    crypto_payment.process_payment(amount)

if __name__ == "__main__":
    main()

Summary

  • Base Class (Payment): Defines common behavior for all payment methods.
  • Subclasses (CreditCardPayment, PayPalPayment, BankTransferPayment): Implement the specific calculation of transaction fees.
  • Polymorphism: Allows us to use the same method (process_payment) on different payment method objects.
  • Extensibility: Adding new payment methods is easy by creating new subclasses.

Conclusion

We applied OOP principles to design and implement a payment system. We used inheritance and polymorphism to create a flexible and maintainable system. This example shows how OOP helps in structuring real-world projects, making them easier to extend and manage.

Recents