What are the core concepts of object-oriented programming, and why are they useful in data engineering?