Tính đa hình

Tính đa hình (theo tiếng Hy Lạp có nghĩa là “đa dạng”) là một đặc tính cho phép một tên có thể được sử dùng cho hai hay nhiều liên quan nhưng khác nhau về mục đích. Khi nó liên quan đến OOP, tính đa hình cho phép một tên chỉ rõ lớp chung của các hành động. Trong một lớp chung của các hành động, sự đình rõ hành động được áp dụng được quyết định bởi kiểu dữ liệu. Ví dụ trong C, hành động giá trị tuyệt đối cần đến ba hàm riêng biệt tên: abs(), labs(), và fabs(). Những hàm đó tính toán và trả về giá trị tuyệt đối của một số nguyên, số nguyên dài và một giá trị thực, theo thứ tự trên. Tuy nhiên trong C++ có hổ trợ tính đa hình, mỗi hàm có thể được gọi bởi một hàm cùng tên như abs(). (Phương pháp này có thể được trình bày ở cuối chương này). Kiểu dữ liệu sử dụng để quyết định gọi hàm, nó định rõ phiên bản hàm thực sự thi hành. Như bạn sẽ thấy, trong C++ có thể sử dụng một tên hàm cho nhiều mục đích khác nhau. Nó được gọi là nạp chồng hàm (function overloading).
Tổng quát hơn nữa, khái niệm đa hình mô tả ý tưởng” một giao diện nhiều cách thức” có nghĩa là sử dụng một giao diện cho một nhóm các hành động có liên hệ với nhau.Thuận lợi của tính đa hình là nó giúp giảm bớt sự phức tạp bằng cách cho phép một giao diện định rõ một lớp chung của hành động. Công việc của trình biên dịch là lựa chọn hành động cụ thể trong mỗi hoàn cảnh. Bạn, một người lập trình, không cần phải làm việc lựa chọn này. Bạn chỉ cần nhớ và sử dụng giao diện chung. Như ví dụ minh họa ở đoàn trước, có ba tên cho hàm trị tuyệt đối thay vì làm một hành động tổng quát thu được giá trị tuyệt đối của một số phức tạp hơn nó thực sự.
Tính đa hình cũng có thể áp dụng cho các toán tử. Hầu như tất cả ngôn ngữ lập trình có một giới hạn ứng dụng của tính đa hình khi nó liên quan đến toán tử số học . Ví dụ, trong C, dấu + được sử dụng để cộng các số nguyên, các số nguyên lớn, các ký tự và các giá trị nguyên. Trong các trường hợp, trình biên dịch tự động biết loại toán tử số học nào để ứng dụng . Trong C++ bạn có thể mở rộng khái niệm này với những kiểu dữ liệu khác mà bạn định nghĩa. Loại tính đa hình này được gọi là nạp chồng toán tử (operator overloading).
Điểm chốt cần nhớ trong phần tính đa hình, nó cho phép bạn sử dụng vấn đề lớn phức tạp bằng cách cho phép tạo ra giao diện tiêu chuẩn cho các hành động liên quan.