Các nguyên tắc cơ bản của OOP: Trừu tượng hóa
Chúng ta thường sử dụng các khái niệm khái quát trong cuộc sống hàng ngày để truyền tải bản chất của thông tin mà không đi vào chi tiết. Ví dụ, để trả lời câu hỏi "bạn đến đây bằng cách nào", một người có thể chỉ cần nói "bằng xe hơi". Và mọi người sẽ hiểu rằng chúng ta đang nói về một phương tiện có 4 bánh, có động cơ và thân xe dành cho hành khách. Thương hiệu cụ thể, màu sắc hay năm sản xuất của chiếc xe không quan trọng đối với chúng ta.
Khi làm việc với chương trình, người dùng cũng không thực sự quan tâm đến thuật toán bên trong được triển khai như thế nào, miễn là chương trình thực hiện đúng nhiệm vụ của nó. Ví dụ, việc sắp xếp một danh sách có thể được thực hiện theo hàng chục cách khác nhau.
Do đó, trừu tượng hóa có nghĩa là cung cấp một giao diện lập trình đơn giản, che giấu tất cả sự phức tạp và chi tiết của việc triển khai.
Giao diện lập trình là tập hợp các hàm được định nghĩa trong bối cảnh của một lớp và thực hiện một tập hợp các hành động theo mục đích của các đối tượng. Ngoài các hàm giao diện này, có thể có các hàm phụ trợ nhỏ hơn, nhưng chúng chỉ khả dụng bên trong lớp. Tương tự như các cấu trúc, có một tên gọi đặc biệt cho tất cả các hàm của một lớp: chúng được gọi là phương thức.
Việc triển khai, theo quy tắc, sử dụng các biến hoặc mảng thuộc về đối tượng (theo mô tả của lớp) để lưu trữ thông tin. Chúng được gọi là fields
(thuật ngữ này xuất phát từ việc các thuộc tính của đối tượng thường được liên kết theo quan hệ 1:1 với các trường nhập liệu trong giao diện người dùng, hoặc với các trường trong cơ sở dữ liệu, nơi trạng thái hiện tại của đối tượng có thể được lưu lại để khôi phục vào lần chạy chương trình tiếp theo).
Các fields
và phương thức, mặc dù được mô tả trong lớp, nhưng liên quan đến một đối tượng cụ thể: mỗi thực thể có một tập hợp biến được cấp phát riêng, chúng có giá trị độc lập với trạng thái của các đối tượng khác, và các phương thức hoạt động với các fields
của thực thể của chúng.
Giao diện và triển khai phải độc lập với nhau. Nếu muốn, một phương pháp triển khai nên dễ dàng được thay thế bằng một phương pháp khác mà không gây ảnh hưởng đến giao diện lập trình. Việc thiết kế giao diện dựa trên yêu cầu của một nhiệm vụ cụ thể cũng rất quan trọng, thay vì tùy chỉnh nó đặc biệt cho việc triển khai. Người phát triển lớp phải có khả năng nhìn nhận sáng tạo của mình từ hai góc độ khác nhau: (1) như là tác giả của các thuật toán và cấu trúc dữ liệu bên trong; (2) như một khách hàng tiềm năng khó tính, người sử dụng lớp như một "hộp đen" và bảng điều khiển của nó là giao diện. Nên bắt đầu phát triển một lớp từ việc suy nghĩ về giao diện lập trình đến việc tìm kiếm và lựa chọn các phương pháp triển khai.