Object-oriented programming (OOP) presents all its advantages when working on large-scale projects that can be broken down into multiple modules and developed by multiple developers at the same time. However, for small projects, with few developers and modules, OOP may increase complexity, development time and maintenance costs. Programming in OOP requires care in order not to make projects too abstract, which would lead to unnecessarily large and complex programs.
Many times you will have to create many small classes, even for things that might seem trivial. A small program will need to be broken up into small parts that it needs to, adding unnecessary complexity to the long-term maintainability.
Because Objects hold data, there are many times where its hard to keep track of what object current holds what data. As you connect objects together, a change in one object’s data will affect a different object, making it very hard to debug and know where the initial error is coming from.