The Future of Object-Oriented Programming

COMP2511

OOP: A Mixed Perspective 

  • A widely used paradigm of development
  • It's great in theory (as we've learned!)
    • Abstraction & Encapsulationncapsulation
    • Inheritance & Polymorphism
  • But what about in the real world?
  • OOP: The Trillion Dollar Disaster and Why We Need to Move on 

https://betterprogramming.pub/object-oriented-programming-the-trillion-dollar-disaster-92a4b666c7c7

Software Complexity Revisited

  • No Silver Bullet
    • Essential Complexity: Essential to the problem
    • Accidental Complexity: Not essential to the problem
  • Aim of OOP: Reduce software complexity through delegation of responsibility and abstraction
    • But does it?

Problem 1: Shared Mutable State

  • Multiple objects 'haggling'  over control of state
  • Encapsulations aren't a sure way of ensuring safety of data - anyone can still mutate it.
    • All objects are just pointers 
    • Example: Getters for ArrayLists
  • Parallelism and concurrency is very difficult with shared mutable state

Problem 2: Not everything is an object

  • "Everything is an object" - but is it?
  • Sometimes behaviours are just behaviours
    • Multiply - we don't need a class to multiply two numbers, just a function

Problem 3: Boilerplate Code

  • How much of our code is just overhead rather than the actual problem logic?
    • Example: Blackout Assignment
    • Is this overhead accidental or essential?
  • A lot of our code is 'glue' that liaises between objects
  • How much time do we spend on boilerplate rather than actually solving problems?

In a Nutshell

Design Patterns and Complexity

  • "Design Patterns are just a cover-up for missing language features"
    • Decorator Pattern - why doesn't Java just have decorators?
  • Mis-application of design patterns increases software complexity
  • But can we use patterns in a way that makes our software better?
    • Some problems are essential (e.g. Composite Pattern)

OOP Languages

  • Java
    • Easier to work with than C
    • Built-in garbage collection
    • Friendly-named APIs
    • GUI Programming & JavaFX
    • Portability
    • Exception Handling
  • C# - Microsoft's "Better Java"
  • Non OO Languages with Objects
    • C++ 
    • Python

Why 2511 at all then?

  • Practical
  • OOP is widespread (good or bad)
  • Design Thinking
    • How do we realise and model a problem domain in software?
    • How do we make our software beautiful and intuitive?
    • How do we make our software adaptable and extensible to evolutions in requirements?
    • How do we use the wisdom of the past to solve problems? (Design Patterns)

Where next?

  • Courses with this as a prerequisite
    • COMP3131: Programming Languages & Compilers
    • COMP6771: Advanced C++ Programming
    • COMP3421: Computer Graphics
    • COMP4511: User Interface Design & Construction

The Future of Object-Oriented Programming

By npatrikeos

The Future of Object-Oriented Programming

  • 934