Nhầm lẫn về định nghĩa 'trừu tượng' trong OOP


16

Tôi đang cố gắng hiểu định nghĩa 'trừu tượng' trong OOP.

Tôi đã đi qua một vài định nghĩa chính. Có phải tất cả đều hợp lệ? Là một trong số họ sai? Tôi bối rối. (Tôi viết lại định nghĩa bằng từ của riêng tôi).

Định nghĩa 1:

Trừu tượng là khái niệm lấy một số đối tượng từ thế giới thực và chuyển đổi nó thành các thuật ngữ lập trình. Chẳng hạn như tạo ra một Humanlớp và đem lại cho nó int health, int age, String namevv thuộc tính, và eat()vv phương pháp.

Định nghĩa 2:

Một định nghĩa chung hơn. Trừu tượng là một khái niệm diễn ra ở bất cứ đâu trong một hệ thống phần mềm, trong đó "làm cho mọi thứ trở nên chung chung / đơn giản / trừu tượng hơn" có liên quan. Một vài ví dụ:

  • Một hệ thống phân cấp thừa kế, trong đó các lớp cao hơn đơn giản hơn hoặc tổng quát hơn và định nghĩa việc thực hiện trừu tượng và tổng quát hơn. Trong khi các lớp thấp hơn trong hệ thống phân cấp cụ thể hơn và xác định các triển khai chi tiết hơn.

  • Sử dụng đóng gói để ẩn các chi tiết triển khai của một lớp khỏi các lớp khác, do đó làm cho lớp trở nên 'trừu tượng' hơn (đơn giản hơn) với thế giới phần mềm bên ngoài.

Định nghĩa 3

Một định nghĩa chung khác: Trừu tượng là khái niệm chuyển trọng tâm từ các chi tiết và triển khai cụ thể của mọi thứ, đến các loại sự vật (ví dụ như các lớp), các hoạt động có sẵn (ví dụ phương thức), do đó làm cho việc lập trình đơn giản hơn, tổng quát hơn, và trừu tượng hơn. (Điều này có thể diễn ra ở bất cứ đâu và trong bất kỳ bối cảnh nào trong hệ thống phần mềm). Nó diễn ra ví dụ khi đóng gói, bởi vì đóng gói có nghĩa là ẩn các chi tiết thực hiện và chỉ hiển thị các loại sự vật và các định nghĩa chung và trừu tượng hơn của chúng. Ví dụ Anotehr sẽ sử dụng một Listđối tượng trong Java. đối tượng này thực sự sử dụng các chi tiết triển khai của một ArrayListhoặc một LinkedList, nhưng thông tin này được trừu tượng hóa bằng cách sử dụng tên chung hơn List.

Có bất kỳ định nghĩa trong số này là chính xác? (Tôi đang đề cập đến định nghĩa thông thường nhất và được chấp nhận ).


Trừu tượng hóa đang định nghĩa một "vật" là một LOẠI vật nhất định (Động vật => Chó) để thu hẹp nó hơn nữa (Dog => Poodle).
Christine

Câu trả lời:


22

Trừu tượng là một trong 3 trụ cột của Lập trình hướng đối tượng (OOP). Nó có nghĩa đen là nhận thức một thực thể trong một hệ thống hoặc bối cảnh từ một quan điểm cụ thể. Chúng tôi đưa ra các chi tiết không cần thiết và chỉ tập trung vào các khía cạnh cần thiết cho bối cảnh hoặc hệ thống đó đang được xem xét.

Đây là một số giải thích tốt:

Bạn là một người có các mối quan hệ khác nhau trong các vai trò khác nhau. Khi bạn ở trường, khi đó bạn là "Sinh viên" . Khi bạn đang ở nơi làm việc, bạn là một "Nhân viên" . Khi bạn ở tổ chức chính phủ, bạn có thể được xem là "Công dân" . Vì vậy, nó hiểu rõ những gì chúng ta đang nhìn vào một thực thể / đối tượng. Vì vậy, nếu tôi đang lập mô hình Hệ thống lương , tôi sẽ xem bạn là Nhân viên (PRN, Toàn thời gian / Bán thời gian, Chỉ định) . Nếu đang lập mô hình Hệ thống tuyển sinh khóa học , thì tôi sẽ xem xét các khía cạnh và đặc điểm của bạn với tư cách là một Sinh viên (Số cuộn, Tuổi, Giới tính, Đăng ký khóa học) . Và nếu tôi đang lập mô hình Hệ thống thông tin an sinh xã hộisau đó tôi sẽ xem chi tiết của bạn với tư cách là một Công dân (như DOB, Giới tính, Quốc gia Sinh sản, v.v.)

Hãy nhớ rằng Trừu tượng (tập trung vào các chi tiết cần thiết) khác với Đóng gói (ẩn các chi tiết từ thế giới bên ngoài). Đóng gói có nghĩa là ẩn các chi tiết của đối tượng và cung cấp một giao diện hợp lý để các thực thể ở thế giới bên ngoài tương tác với đối tượng hoặc thực thể đó. Ví dụ, nếu ai đó muốn biết tên tôi thì anh ta không thể truy cập trực tiếp vào các tế bào não của tôi để biết tên tôi là gì. Thay vào đó người đó sẽ hỏi tên tôi. Nếu người lái muốn tăng tốc xe thì có một giao diện (chân ga, bánh răng, v.v.) cho mục đích đó.

Các def 1 không rõ ràng lắm. Def 2 là tốt nhưng nó có xu hướng gây nhầm lẫn cho người mới khi nó cố gắng liên kết Trừu tượng với Đóng gói và Kế thừa. Def 3 là định nghĩa tốt nhất trong số 3 định nghĩa vì nó xác định rõ ràng Trừu tượng chính xác là gì.


3
Vì vậy, bạn sẽ nói rằng nó giống như một khái quát thay vì một đặc điểm kỹ thuật?
Robert Rocha

1
@samyismyhero Chính xác! Chúng tôi tìm kiếm các thuộc tính chung và hành vi của các đối tượng để trừu tượng hóa.
Maxood

[Động vật => Chó] là một sự trừu tượng. Bạn xác định những phần có thể mà "Động vật" có thể có để tạo ra "Chó". (Đuôi, chân, lông, v.v.). Sau đó, bạn có thể sử dụng lớp "Dog" để định nghĩa Poodle, Pit Bull, v.v. Vì vậy, bạn đang khai báo các giống chó dựa trên lớp "Dog" thay vì "Animal".
Christine

3

Định nghĩa 1 chắc chắn không phải là một sự trừu tượng. Đó là mô tả chặt chẽ hơn mô hình .

Định nghĩa 2 và 3 mô tả cùng một điều. Và cả hai đều là những mô tả khá hay về một sự trừu tượng.


Đó là những gì tôi nghĩ! abstract class Shapecười lớn!
Robert Rocha

2

Mỗi định nghĩa này là tốt.

Trừu tượng là nơi bạn chỉ tập trung vào những chi tiết quan trọng cho mục đích của bạn.

Trong trường hợp đầu tiên, bạn (hiện tại) không thể bao gồm người thật trong mã của bạn; bạn tập trung vào các chi tiết cụ thể của một người phục vụ mục đích của bạn. Trong một chương trình khác, bạn có thể cần tập trung vào các chi tiết khác nhau. Đây sẽ là những trừu tượng khác nhau của một người, và mỗi người có thể có giá trị như nhau trong bối cảnh của họ .

Các định nghĩa thứ hai và thứ ba tiếp tục ý tưởng này, áp dụng nó cho các thực thể phần mềm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.