OOP vẫn còn là một đề tài của nhiều tranh cãi về định nghĩa chuẩn xác hay về các nguyên lý của nó.
Trong dạng tổng quát nhất, OOP được hiểu theo cách là một loại thực nghiệm viết chương trình văn bản được phân cấp ra thành nhiều mô đun (module), mà mỗi mô đun đóng vai như một lớp vỏ che đại diện cho mỗi kiểu dữ liệu.
Những khái niệm liên hệ đã được góp nhặt lại để tạo thành một khuôn khổ cho việc lập trình. Các triết lý đằng sau việc định hướng đối tượng đã trở nên mạnh mẽ để tạo thành một sự chuyển đổi mẫu hình trong ngành lập trình.
Những mẫu hình khác như lập trình chức năng và lập trình thủ tục tập trung chủ yếu trên các hành động, còn lập trình lô gíc lại tập trung vào những khẳng định hợp lý để kích hoạt sự thực thi của mã chương trình.
OOP đã phát triển một cách độc lập từ việc nghiên cứu về các ngôn ngữ định hướng của hệ thống mô phỏng, đó là SIMULA 67, và từ việc nghiên cứu các kiến trúc của hệ thống có độ tin cậy cao, đó là các kiến trúc CPU và khả năng cơ bản của các hệ điều hành.
Một chức năng đặc sắc của OOP là việc xử lý các kiểu con của các kiểu dữ liệu.
Dữ liệu của các đối tượng, một cách tổng quát, được đòi hỏi trong thiết kế để thỏa mãn các yêu cầu của người lập trình (tức là các lớp).
Các kiểu dữ liệu bị giới hạn thêm các điều kiện mặc dù có cùng kiểu dữ liệu với loại không bị ràng buộc bởi các điều kiện đó, gọi là kiểu dữ liệu con. Cả hai loại kiểu dữ liệu này đều dựa vào và đều được điều tiết bởi các hành xử (tức là các phương thức) đã được định nghĩa. Các điều kiện hay yêu cầu này có thể được khai báo rõ ràng hay được giả thiết công nhận ngầm bởi người lập trình. Các ngôn ngữ định hướng đối tượng cung cấp nhiều cơ chế cho việc khẳng định rằng các giả thiết đó có tính địa phương cho một phần của chương trình. Các cơ chế này này có thể đọc thấy trong các tài liệu về các chương trình định hướng đối tượng.
OOP tự nó đã đang được dùng để khuyến mãi cho nhiều sản phẩm và dịch vụ. Các định nghĩa hiện tại và ích lợi của các đặc tính của OOP thường được màu mè hóa bởi các mục đích của thị trường thương mại. Tương tự, nhiều ngôn ngữ lập trình có những quan điểm đặc biệt về OOP mà nó ít tổng quát trong một số khía cạnh.
Các định nghĩa chính xác của OOP sẽ có sự khác biệt tùy theo quan điểm. Đặc biệt, các ngôn ngữ có kiểu tĩnh thường có cái nhìn hơi khác với các ngôn ngữ có kiểu động về OOP, nguyên do là vì chúng tập trung trên thời gian dịch hay tập trung vào thời gian thi hành của các chương trình.
OOP thường được xem là một mẫu hình hơn là một kiểu hay một phong cách lập trình nhằm nhấn mạnh vào điểm quan trọng là OOP có thể thay đổi phương thức phát triển phần mềm bằng cách thay đổi tư duy của những người lập trình và những kỹ sư phần mềm về phần mềm.
Mẫu hình của OOP chủ yếu không phải là kiểu lập trình mà là kiểu thiết kế. Một hệ thống được thiết kế bởi định nghĩa của các đối tượng mà các đối tượng này sẽ tồn tại trong hệ thống đó, trong mã mà hiện làm việc chưa tương thích với đối tượng, hay là trong người dùng đối tượng do ảnh hưởng của tính chất đóng của đối tượng.
Cũng nên lưu ý rằng có sự khác biệt giữa mẫu hình định hướng đối tượng và lý thuyết các hệ thống. OOP tập trung trên các đối tượng như là các đơn vị của một hệ thống, trong khi đó, lý thuyết các hệ thống lại tự nó chỉ tập trung vào hệ thống. Như là phần trung gian, người ta có thể tìm thấy các dạng thức thiết kế phần mềm hay các kỹ thuật khác dùng các lớp và các đối tượng như là các viên gạch trong những thành phần lớn hơn. Những thành phần này có thể được xem như là bước trung gian từ mẫu hình định hướng đối tượng đến các mô hình “định hướng sống thực” hơn của lý thuyết các hệ thống.