Suy tư về code – các cấp độ trừu tượng là gì?

Ngôn ngữ lập trình cho phép bạn diễn đạt mã ở nhiều cấp độ trừu tượng khác nhau.Vậy mức độ trừu tượng là gì?
Bài đăng này dành cho người học lập trình và đặc biệt là những người đang tự hỏi tại sao họ nên tìm hiểu về các lớp trừu tượng và giao diện có sẵn trong ngôn ngữ lập trình hướng đối tượng.
Để giúp hiểu thêm khái niệm về mức độ trừu tượng, hãy xem xét tình huống này:
Bạn tới một nhà hàng và đặt một order. Làm thế nào để bạn giao tiếp với một người phục vụ? Bạn có thể nói bạn muốn một món ăn nhất định, một thức uống nhất định. Sẽ chẳng ai nói với người phục vụ cách chế biến món ăn hoặc sử dụng nguyên liệu gì phải không? Bạn chỉ cần chuyển một vài lời nhắn và mong đợi điều đó được xử lý. Sự giao tiếp này có thể nói là xảy ra ở mức độ trừu tượng cao. Nó chỉ vừa đủ chi tiết để người phục vụ hiểu bạn muốn làm gì.
Người phục vụ quay trở lại bếp và chuyển thông tin này cho bếp trưởng chế biến món ăn. Người bếp trưởng có một vài người đầu bếp dưới trướng. Đầu bếp đưa ra hướng dẫn cho những người đầu bếp khác có thể tiến hành như sau – cắt nhỏ rau củ, nhào bột, nướng ở 250F trong 15 phút, v.v.. Đây là một mức độ trừu tượng khác – một mức độ phù hợp để giao tiếp giữa đầu bếp và những người trợ giúp. Một lần nữa, với các chi tiết vừa đủ để người trợ giúp hiểu được những gì người đầu bếp muốn thực hiện. Tuy nhiên, theo quan điểm của bạn, tương tác này xảy ra ở mức độ trừu tượng thấp hơn.
Chúng ta có thể đi sâu hơn vào quá trình này và tưởng tượng rằng mỗi người trợ giúp bây giờ thực hiện các công việc như dùng dao cắt rau, đặt món ăn vào lò, bật lò và hẹn giờ. Điều này chỉ bao gồm các chi tiết cụ thể và đủ để họ hoàn thành nhiệm vụ tương ứng. Theo quan điểm của bạn, tương tác này xảy ra ở mức độ trừu tượng thậm chí còn thấp hơn.

Hình ảnh cho bài đăng

Những người trợ giúp lần lượt giao tiếp với bộ não của họ và bộ não với cơ thể của họ ở mức độ trừu tượng thậm chí còn thấp hơn. Bộ não làm cho nó xuất hiện tự động. Chúng ta không biết và không cần biết làm thế nào bộ não truyền những thông điệp đến các bộ phận khác nhau của cơ thể để thực hiện những nhiệm vụ đó. Mức độ trừu tượng này quá thấp để chúng ta có thể hiểu hoặc quan tâm đến.
Bạn có thể chỉ quan tâm đến mức độ trừu tượng cao nhất trong toàn bộ những tương tác này (Nơi bạn chọn đồ) mà vẫn hoàn thành mục đích của mình (được phục vụ một bữa ăn). Ở mỗi lớp tương tác, nhân viên phụ trách chỉ cần hiểu một thông điệp cấp cao và chia nhỏ nó thành các chi tiết liên quan đến họ và cuối cùng bạn sẽ có bữa ăn của mình mà không cần biết bất kỳ chi tiết cấp thấp hơn nào.

Các ngôn ngữ lập trình hướng đối tượng như Java cho phép bạn viết phần mềm của mình theo cách giống với cấu trúc tương tác này. Một đối tượng thường gọi một phương thức trên một giao diện mô tả thông báo cấp cao đang được truyền. Trong trường hợp này, khách hàng đang (bạn) đang gọi phương thức orderMeal trên bất kỳ người nào có thể xử lý giao diện Người phục vụ (Người phục vụ W chẳng hạn). Bạn cũng đã chuyển các thông tin liên quan như tên món ăn và tên đồ uống. Đây là các tham số của phương thức. Người phục vụ lần lượt nhận món, thực hiện một số công việc như ghi lại thông tin đó trong hệ thống quản lý đơn hàng và sau đó gọi một phương pháp như readyMeal trên một người có thể xử lý giao diện Đầu bếp (Chef C chẳng hạn). Đầu bếp lần lượt chuyển các thông báo bằng cách gọi các phương thức như chopVegetable đến một người đang xử lý (triển khai) giao diện Người trợ giúp (người trợ giúp H), v.v.. Tôi nghĩ là bạn nắm được ý tưởng ở đây rồi.

Về phần mềm và hệ thống máy tính, mỗi đối tượng khách hàng (muốn thực hiện điều gì đó) gọi một phương thức trên một đối tượng có thể thực hiện công việc. Tại thời điểm này, mức độ trừu tượng thay đổi và nhiệm vụ trở nên chi tiết hơn một chút. Nhiệm vụ này được chia nhỏ hơn nữa cho các cấu trúc cấp thấp hơn. Quá trình này tiếp tục cho đến khi một lệnh trừu tượng ở mức rất thấp chẳng hạn như một lệnh mà CPU có thể thực thi nó.

Tương tác theo cách này xảy ra xung quanh chúng ta mọi lúc, không chỉ trong phần mềm máy tính. Điều này tự nhiên đến mức chúng ta thậm chí không nghĩ về chúng khi chúng xảy ra. Tuy nhiên, chúng ta cần phải suy nghĩ theo cách này khi chúng ta tìm cách viết code theo hướng đối tượng hiệu quả, có thể mở rộng và có thể thay đổi đại diện cho các tương tác như vậy một cách tự nhiên nhất.

Chính vì những mức độ trừu tượng này, mà rất nhiều quy trình có thể chạy hiệu quả. Doanh nghiệp có thể tập trung vào năng lực cốt lõi của mình và ủy thác các nhiệm vụ khác cho các doanh nghiệp khác (những người có thể là chuyên gia xử lý các nhiệm vụ khác đó). Điều này cũng thể hiện tính linh hoạt của hệ thống mà bạn có thể xây dựng dựa trên ý tưởng trên. 
Ví dụ: một nhà hàng có thể làm việc với một đội vệ sinh từ công ty A trong năm nay và thay đổi với công ty B vào năm sau mà không ảnh hưởng đến hoạt động kinh doanh còn lại của họ. Theo thuật ngữ hướng đối tượng, bạn có thể thay đổi một triển khai bằng một triển khai khác miễn là chúng triển khai cùng và phát triển cùng một giao diện.
Có một nguyên tắc thiết kế hướng đối tượng nổi tiếng được gọi là SLAP (Single Level of Abstraction Principle) nói rằng bạn phải giữ các chỉ thị trong một phương thức ở mức trừu tượng duy nhất. Tôi hy vọng bây giờ bạn có thể hiểu nguyên tắc này hơn có nghĩa là gì. Tôi hy vọng điều này sẽ giúp bạn xem xét và triển khai các mức trừu tượng phù hợp với thiết kế và phát triển code của bạn để chúng ngày một tốt hơn.

1 comments On Suy tư về code – các cấp độ trừu tượng là gì?

Leave a reply:

Your email address will not be published.

Site Footer

Sliding Sidebar

Facebook