OOP có thành phần và thay thế.
C ++ có nhiều kế thừa, chuyên môn hóa mẫu, nhúng và ngữ nghĩa giá trị / di chuyển / con trỏ.
Java có sự kế thừa và giao diện đơn, ngữ nghĩa nhúng và tham chiếu.
Cách phổ biến mà trường OOP sử dụng các ngôn ngữ này là sử dụng tính kế thừa để thay thế đối tượng và nhúng cho thành phần. Nhưng bạn cũng cần một tổ tiên chung và một cách để tạo thời gian chạy (trong C ++ được gọi dynamic_cast
, trong Java chỉ là yêu cầu một giao diện từ một giao diện khác).
Java thực hiện tất cả điều này bằng java.lang.Object
hierachy bắt nguồn từ chính nó . C ++ không có gốc chung được xác định trước, do đó, ít nhất bạn nên xác định nó, để đi đến cùng một "bức tranh" (nhưng điều này hạn chế một số khả năng của C ++ ...).
Sau đó, khả năng có đa hình thời gian biên dịch (nghĩ theo CRTP) và giá trị ngữ nghĩa cũng có thể đưa ra các lựa chọn thay thế khác cho cách khái niệm "đối tượng OOP" có thể được chuyển vào chương trình C ++.
Bạn thậm chí có thể tưởng tượng dị giáo để sử dụng nhúng và chuyển đổi ngầm định để quản lý thay thế và thừa kế riêng để quản lý thành phần, trong thực tế đảo ngược mô hình trường học truyền thống. (Tất nhiên, cách này trẻ hơn 20 tuổi so với cách khác, vì vậy đừng mong đợi sự hỗ trợ cộng đồng rộng rãi trong việc đó)
Hoặc bạn có thể tưởng tượng một cơ sở chung ảo cho tất cả các lớp, giao diện biểu mẫu (không triển khai) đến các lớp cuối cùng (được thực hiện đầy đủ) đi qua các giao diện được triển khai một phần, một cụm giao diện chẵn, sử dụng "sự thống trị" khi gửi từ giao diện đến các triển khai thông qua một "nhiều ngăn xếp Sơ đồ thừa kế ".
So sánh OOP với java với C ++ giả sử chỉ có một và chỉ có cách OOP là giới hạn khả năng của cả hai ngôn ngữ.
Việc buộc C ++ phải tuân thủ nghiêm ngặt các thành ngữ mã hóa Java đang làm mất màu C ++ khi buộc Java phải hành xử như một ngôn ngữ giống như C ++ đang làm mất màu Java.
Không phải là vấn đề "nhạy cảm" mà là "cơ chế tổng hợp" khác nhau, hai ngôn ngữ có và cách kết hợp chúng khác nhau làm cho một số thành ngữ có lợi hơn trong một ngôn ngữ so với ngôn ngữ kia và ngược lại.