Sự khác biệt giữa ảo và trừu tượng

Anonim

Ảo và Tóm tắt

Ảo và Tóm lược là hai từ khóa được sử dụng trong hầu hết các ngôn ngữ lập trình hướng đối tượng (OO) như Java và C #. Mặc dù có sự khác biệt nhỏ trong ý nghĩa của nó trong các ngôn ngữ khác nhau, cả từ khoá Ảo và Tóm tắt đều cung cấp ý thức thực hiện một phần đối với các thực thể mà nó phụ thuộc.

Tóm tắt

-1->

Thông thường, các lớp Tóm tắt, còn được gọi là Lớp Tóm tắt Cơ sở (ABC), không thể được khởi tạo (một thể hiện của lớp đó không thể được tạo ra). Vì vậy, Tóm tắt các lớp học chỉ có ý nghĩa nếu có ngôn ngữ lập trình hỗ trợ thừa kế (khả năng tạo lớp con từ mở rộng một lớp học). Các lớp trừu tượng thường biểu diễn một khái niệm trừu tượng hoặc thực thể với việc thực hiện một phần hoặc không. Do đó, các lớp trừu tượng hoạt động như các lớp cha mẹ từ đó các lớp con được sinh ra, do đó lớp con sẽ chia sẻ các tính năng không đầy đủ của lớp cha mẹ và chức năng có thể được thêm vào để hoàn thành chúng. Các lớp trừu tượng có thể chứa các phương pháp Tóm tắt. Các lớp con mở rộng một lớp trừu tượng có thể thực hiện các phương thức Tóm tắt này (thừa kế). Nếu lớp con thực hiện tất cả các phương pháp Tóm tắt như vậy, nó là một lớp cụ thể. Nhưng nếu không, lớp con cũng trở thành lớp Tóm tắt. Tất cả những điều này có nghĩa là khi lập trình viên chỉ định một lớp như một Tóm tắt, cô ấy nói rằng lớp sẽ không đầy đủ và nó sẽ có các phần tử cần được hoàn thành bởi các lớp con thừa kế. Đây là một cách tốt đẹp để tạo ra một hợp đồng giữa hai lập trình, đơn giản hóa nhiệm vụ trong phát triển phần mềm. Người lập trình, người viết mã để kế thừa, cần phải thực hiện theo các định nghĩa phương pháp chính xác (nhưng tất nhiên có thể có việc thực hiện của riêng mình). Trong Java và C #, các lớp trừu tượng và các phương pháp được khai báo bằng cách sử dụng từ khoá Tóm tắt.

Các phương thức / chức năng ảo cung cấp khả năng ghi đè lên hành vi của một lớp thừa kế (sử dụng một hàm có cùng một chữ ký). Khái niệm chức năng ảo là quan trọng trong kịch bản sau đây Giả sử một lớp được tạo ra bởi một lớp con, sau đó bất cứ khi nào một đối tượng của lớp nguồn gốc được sử dụng, nó có thể tham khảo một đối tượng của lớp cơ sở hoặc lớp nguồn. Tuy nhiên, hành vi gọi phương thức có thể mơ hồ nếu các phương thức lớp cơ sở bị ghi đè. Vì vậy, để giải quyết sự mơ hồ này, từ khoá ảo được sử dụng. Nếu phương pháp này được đánh dấu Virtual, thì hàm của lớp gốc được gọi là (nếu có) hoặc hàm lớp cơ sở được gọi. Ví dụ, trong C + +, từ khoá ảo được sử dụng chính xác cho mục đích này. Trong C #, từ khoá ảo được sử dụng theo cách tương tự, nhưng ngoài ra, việc ghi đè từ khoá nên được sử dụng để sửa đổi tất cả các phương pháp đã ghi đè.Nhưng trong Java, không có từ khóa ảo rõ ràng. Tất cả các phương pháp không tĩnh được coi là ảo. Các chức năng ảo không có cơ thể được gọi là Pure Virtual functions. Trong Java và C #, các phương pháp trừu tượng thực chất là Pure Virtual.

Mặc dù Tóm tắt và Ảo là hai từ khóa / khái niệm cung cấp một ý nghĩa cho việc thực hiện không đầy đủ đối với các thực thể liên quan của nó nhưng chúng có sự khác biệt. Các phương pháp trừu tượng (phải được xác định bên trong các lớp trừu tượng) không thực hiện ở tất cả, trong khi các phương pháp ảo có thể thực hiện. Nếu các phương thức Tóm tắt được mở rộng bởi một lớp bê tông, tất cả các phương pháp Tóm tắt kế thừa phải được thực hiện, trong khi các phương pháp ảo được kế thừa có thể hoặc không được ghi đè.