Lập trình hướng đối tượng
Lịch sử

Khái niệm về các đối tượng và thực thể trong khoa học máy tính được nhiều người biết đến từ hệ thống PDP-1 của MIT. Đây có lẽ là Ví dụ sớm nhất của kiến trúc cơ sở có khả năng thực. Một bằng chứng sớm khác của OOP được tìm thấy qua Sketchpad viết bởi Ivan Sutherland trong năm 1963, tuy nhiên, đây chỉ là một ứng dụng chứ không là một mẫu hình lập trình.
Ngôn ngữ lập trình hướng đối tượng đầu tiên là Simula, ngôn ngữ này được thiết kế để dùng trong các việc mô phỏng, được sáng tạo bởi Ole-Johan Dahl và Kristen Nygaard thuộc Trung tâm Máy tính Na Uy ở Oslo. Các kiến thức trong ngôn ngữ này sau đó đã được dùng trong nhiều ngôn ngữ khác, bắt đầu từ Lisp và Pascal cho đến họ ngôn ngữ Smalltalk.
Lập trình hướng đối tượng đã được phát triển như là phương pháp lập trình chủ đạo từ giữa thập niên 1990 nguyên do đáng kể là việc ảnh hưởng của C++, một ngôn ngữ mở rộng của C. Địa vị thống trị của OOP đã được củng cố vững chắc bởi sự phổ biến của các GUI dành cho ngôn ngữ lập trình hướng đối tượng ngày càng tiện lợi. Một Ví dụ về quan hệ gần gũi của thư viện GUI động và ngôn ngữ OOP là phần mềm Cocoa, nó là khung cơ sở của Mac OS X dược viết bằng Objective C (Objective C là một loại ngôn ngữ hướng đối tượng mở rộng của C với việc thông báo động). Công cụ cho OOP cũng được nâng cao phần "lập trình điều khiển theo sự kiện" (mặc dù khái niệm này không chỉ dành cho OOP).
Tại Zürich, Niklaus Wirth và những cộng sự đã theo dõi các đề tài như là dữ liệu trừu tượng và lập trình mô đun. Modula-2 bao gồm cả hai đặc tính đó. Thiết kế liền tiếp theo là Oberon bao gồm sự tiếp cận riêng biệt với việc định hướng đối tượng, các lớp,... Sự tiếp cận này không như Smalltalk, và cũng khác hẳn C++.
Các chức năng của hướng đối tượng cũng đã đang được thêm vào nhiều ngôn ngữ trong suốt thời gian đó kể cả Ada, BASIC, Lisp, Fortran, Pascal và nhiều nữa. Việc cộng thêm các chức năng đó cho các ngôn ngữ mà được trước đó không chủ định thiết kế cho chúng ngay từ đầu cũng thường dẫn tới nhiều khó khăn trong khả năng tương thích (với mã nguồn viết cho các phiên bản cũ) và khả năng bảo trì mã. Điển hình của trường hợp này là Pascal và Visual Basic. Các ngôn ngữ thuần túy hướng đối tượng, ở phía khác, lại thiếu các đặc tính mà nhiều người lập trình phụ thuộc vào. Để bắc cầu cho khoảng trống này, nhiều nỗ lực đã được xúc tiến để tạo ra các ngôn ngữ đặt cơ sở trên các phương pháp hướng đối tượng nhưng lại cho phép dùng nhiều đặc tính lập trình cấu trúc theo những phương cách "an toàn". Ngôn ngữ Eiffel của Bertrand Meyer đã sớm thành công với các mục tiêu này.
Trong thập niên đã qua, Java được dùng rộng rãi một phần là do sự tương tự với C và C++, nhưng có lẽ do phần khác quan trọng hơn là việc lắp đặt sử dụng máy ảo mà chủ ý là thực thi cùng một mã nguồn cho nhiều nền tảng khác nhau. .NET của Microsoft cũng mở đầu với các chủ ý tương tự và cộng thêm việc hỗ trợ nhiều ngôn ngữ hay các sự biến thể của các ngôn ngữ cũ (như trường hợp C# và Visual Basic).
Gần đây, một số ngôn ngữ xuất hiện với chức năng chính là định hướng đối tượng nhưng lại tương thích được với phương pháp thủ tục như là Python và Ruby. Bên cạnh Java, C# và Visual Basic.NET là hai ngôn ngữ OOP quan trọng hiện tại thiết kế bởi Microsoft.
Giống như lập trình thủ tục đã dẫn tới việc tinh lọc các kỹ thuật như là lập trình cấu trúc, phần mềm hướng đối tượng hiện đại thiết kế các phương pháp bao gồm các sự tinh lọc. Chẳng hạn như là việc ứng dụng các dạng thức thiết kế, thiết kế bởi hợp đồng và các ngôn ngữ mô hình trong đó có UML.