Bài đăng này xem xét tính trừu tượng trong Java, nó là gì, cách triển khai nó trong các dự án của bạn, nó khác với đóng gói như thế nào và mã mẫu bổ sung.

Bạn đang xem : khái niệm trừu tượng trong java

Giới thiệu

Khi bắt đầu tất cả các dự án phát triển phần mềm, bầu trời có màu xanh lam. Tuy nhiên, có rất nhiều kết nối và bất ngờ khi thời gian trôi qua và các tính năng được thêm vào và sửa đổi. Các nhà phát triển trở nên vướng víu bởi mã riêng của họ. Các khái niệm, trong đó rất nhiều thời gian đã được đầu tư, trở nên lộn xộn, và các ý định về phương pháp và dịch vụ trở nên mơ hồ. Cuối cùng, ứng dụng sẽ phát triển thành một hệ thống phức tạp.

Lý tưởng nhất là chúng ta có thể nhận ra nguồn gốc của sự phức tạp và phân tách các mối quan tâm khác nhau bằng cách chia nhỏ chương trình thành các mô-đun; đây là một cách tiếp cận “chia để trị”. Mỗi mô-đun có thể bao gồm logic nghiệp vụ, lớp cơ sở dữ liệu hoặc GUI và được phát triển hoặc thử nghiệm bởi các nhà phát triển, nhóm hoặc máy chủ khác nhau. Ngoài ra, chúng tôi đạt được rất nhiều lợi thế khác – chúng chỉ phụ thuộc vào một giao diện của nhau và một hợp đồng được xác định rõ ràng, trong đó chi tiết về cách chúng được triển khai không phải là điều mà người dùng nên tin tưởng. Vì vậy, nó phân biệt rõ ràng những gì tôi có thể tin tưởng và cách các chi tiết khác sẽ được triển khai. Miễn là những phân tách và hợp đồng này vẫn còn, mã sẽ không có bất kỳ tác dụng phụ nào. Động lực chính cho cách tiếp cận này là sự trừu tượng.

Trừu tượng là gì?

Tôi tin rằng hầu hết các khái niệm liên quan đến trừu tượng đều là bỏ qua các chi tiết không cần thiết; như Ross và cộng sự đã nói:

Bản chất của trừu tượng là trích xuất các thuộc tính thiết yếu trong khi bỏ qua các chi tiết không cần thiết.

Nhưng tại sao chúng ta nên bỏ qua các chi tiết không cần thiết? Lý do là để ngăn ngừa rủi ro thay đổi bằng cách gác lại một số chi tiết nhất định để đối xử với nhiều trường hợp thực tế cùng một lúc. Chúng ta có hai cơ chế trừu tượng: trừu tượng hóa bằng tham số hóa và trừu tượng hóa theo đặc tả. Trong tham số hóa, chúng tôi tìm kiếm tính tổng quát bằng cách cho phép cùng một cơ chế được điều chỉnh cho phù hợp với nhiều ngữ cảnh khác nhau bằng cách cung cấp cho nó thông tin về ngữ cảnh đó dưới dạng tham số. Tuy nhiên, về đặc điểm kỹ thuật, chúng tôi bỏ qua chi tiết triển khai và đồng ý coi bất kỳ cách triển khai nào tuân theo đặc điểm kỹ thuật hoặc một địa chỉ liên hệ nhất định là có thể chấp nhận được.

Để tách giao diện khỏi việc triển khai tạo điều kiện thuận lợi cho mô-đun, các chi tiết được ẩn ở đây, đó là sự khác biệt giữa việc triển khai. Chúng khác nhau, nhưng chúng có thể tạo ra cùng một giao diện. Giao diện là một hợp đồng riêng biệt đưa ra lời hứa giữa các triển khai khác nhau. Vì vậy, bất kể nó được triển khai như thế nào, nó hứa hẹn sẽ làm được gì mới là điểm mấu chốt.

Có một số lợi thế của việc trừu tượng hóa theo đặc tả. Ưu điểm của việc phân tách bao gồm việc thực hiện. Ý tôi là khả năng xây dựng một tác phẩm mà không cần lo lắng về các chi tiết của tác phẩm khác. Ví dụ: nếu một khách hàng (phương thức hoặc lớp) gọi một hành động đặt phòng, thì khách hàng không được biết mọi chi tiết về việc đặt phòng. Tất cả những gì nó cần biết là giao diện. Các ưu điểm khác của việc trừu tượng hóa theo đặc tả là thay đổi các đoạn mã mà không làm hỏng phần khác của mã và cũng có một số lợi ích khác của việc sử dụng lại mã.

Xem Thêm  Still Walking: A Death in the Family - still walking

Mặc dù có những ưu điểm, như tôi đã đề cập trước đó, mục tiêu chính của tính trừu tượng là bảo vệ khỏi những thay đổi không mong muốn. Bằng cách bảo vệ, tôi muốn nói đến khả năng thay đổi một cách riêng lẻ mà không phá vỡ phần còn lại của chương trình. Tất nhiên, trong mọi hệ thống, có rất nhiều thay đổi không lường trước và được dự đoán trước, chẳng hạn như dữ liệu chúng tôi đưa vào tệp cấu hình hoặc sử dụng các phương pháp. Hãy tưởng tượng chúng ta cần tính thuế ở các phần khác nhau trong hệ thống của mình. Vì vậy, nếu công thức thay đổi, chúng ta nên đi và tìm kiếm thông qua mã tìm và thay thế nó. Làm thế nào chúng tôi có thể đảm bảo rằng chúng tôi đã tìm thấy một kết quả khớp chính xác và đảm bảo rằng sự thay thế là chính xác? Trong trường hợp này, giải pháp tốt nhất sẽ là trừu tượng hóa bằng tham số hóa. Có, chúng tôi tạo một hàm riêng biệt và lấy giá trị từ các tham số; chúng ta chỉ cần thay đổi chức năng thay vì tìm kiếm trên toàn bộ hệ thống.

Thoạt nghe, có vẻ là một ý tưởng hay, nhưng nếu chúng ta cần có một công thức khác trong các tình huống khác nhau thì sao? Như chúng ta có trong sách thiết kế, chúng ta nên lập trình cho một giao diện, không phải một triển khai. Nhưng câu hỏi đặt ra là: chúng ta nên xác định các giao diện của mình như thế nào? Tất cả các giao diện có phải là trừu tượng không?

Biết tên hoặc loại thứ gì đó chúng ta sử dụng là cần thiết, nhưng vẫn chưa đủ. Chúng tôi đang tìm kiếm một hợp đồng, một lời hứa. Chúng tôi cần một cái gì đó như điều kiện tiên quyết hoặc điều kiện đăng bài. Chúng ta cần biết chính xác những gì được mong đợi. Định nghĩa rõ ràng về những điều kiện này buộc nhà thiết kế phải suy nghĩ sâu sắc về yêu cầu của đặc điểm kỹ thuật là gì và đâu là thành phần của một triển khai cụ thể.

Ngoài ra, có những cách khác mà giao diện có thể trở thành một thứ trừu tượng kém. Vi phạm kiểu phụ là một dấu hiệu khá rõ ràng cho thấy giao diện đang được sử dụng là một giao diện trừu tượng kém. Kiểu phụ đề cập đến khả năng tương thích của các giao diện. Theo tính tương thích, ý tôi là hành vi, hành vi phải có khả năng. Các kiểu phụ phải duy trì sự đảm bảo rằng ai đó có thể suy ra một cách hợp lý từ kiểu siêu. Ý tưởng chính của kiểu phụ xuất phát từ vấn đề an toàn kiểu, được đưa ra lần đầu tiên bởi Barbara Liskov. Các kiểu phụ phải tuân theo nguyên tắc thay thế Liskov.

Trong trường hợp vi phạm định dạng phụ, chúng tôi cần thực hiện các thao tác bổ sung, chẳng hạn như đưa ra một ngoại lệ hoặc xác thực dữ liệu trước khi nhập. Vấn đề bắt nguồn từ thực tế là các hoạt động có tác dụng phụ. Việc gọi một thao tác sẽ thay đổi trạng thái của một phần dữ liệu dường như không liên quan. Vì số lượng thành viên cao hơn làm tăng nguy cơ xảy ra các tác dụng phụ không mong muốn và khớp nối thời gian, nên không có gì ngạc nhiên khi các giao diện được trích xuất một cách máy móc từ tất cả các thành viên của một lớp cụ thể là những giao diện trừu tượng kém. Nhân tiện, trong hầu hết các trường hợp, các đối tượng giá trị cung cấp phản hồi dễ dàng hơn để chứng minh kiểu con an toàn; vì chúng thuần túy và không thay đổi, nên sẽ thiếu mối quan tâm về sự phụ thuộc do tác dụng phụ giữa các phương pháp. Tất nhiên, chúng là phụ thuộc của cuộc gọi phương thức, nhưng chúng rõ ràng hơn.

Xem Thêm  C++ while and do...while Loop (With Examples) - while true

Về sau, phân lớp là rủi ro cho một sự trừu tượng hóa tốt. Bởi vì nó ngụ ý nhập phụ, trước tiên, chúng ta nên quan tâm đến những lời hứa mà chúng ta thực hiện; một cách chính xác. Điều này bao gồm lớp con hoặc cách chúng tôi sử dụng lớp con hoặc những gì có thể vô tình làm sai lệch so với lời hứa của chúng tôi. Chúng ta phải đảm bảo không phá vỡ các phương thức của lớp cha mà chúng ta kế thừa và không phụ thuộc vào một thứ gì đó có thể thay đổi ngoài tầm kiểm soát của chúng ta. Thật vậy, nếu nó thay đổi, (các) đối tượng khác có thể bị tác động (vì có những vật bất biến). Ngoài ra, sự ghép nối giữa các đối tượng đo lường mức độ phụ thuộc của chúng. Phân lớp là liên kết chặt chẽ và là lý do chính cho hiệu ứng gợn sóng. Chúng ta cần một sự đảm bảo, một thứ gì đó tạo nên một kiểu an toàn cho phân lớp. Cách tốt nhất để triển khai kiểu phụ an toàn là tránh nó. Bằng cách tránh phân lớp, chúng tôi làm cho rủi ro trừu tượng của chúng tôi không bị ảnh hưởng. Thay vào đó, chúng tôi có thể sử dụng ủy quyền hoặc thành phần.

Sự trừu tượng có giống với sự đóng gói không?

Bạn có thể coi trừu tượng giống như đóng gói hoặc thậm chí giống như ẩn dữ liệu (thông tin). Trên thực tế, chúng không giống nhau, nhưng có liên quan đến các khái niệm trong lập trình hướng đối tượng. Như tôi đã đề cập trước đó, trừu tượng hóa là một kỹ thuật giúp chúng ta xác định thông tin nào là cần thiết và thông tin nào nên được ẩn. Sau đó, đóng gói là kỹ thuật để bao bọc thông tin theo cách để ẩn các chi tiết và chi tiết triển khai của một đối tượng.

Hãy để tôi mô tả kỹ hơn một chút với một ví dụ về hàm md5 (hoặc lớp tương đương). Nó chịu trách nhiệm băm một chuỗi. Từ bên ngoài, mã máy khách chỉ biết tên chức năng và hành vi của nó. Đây thực sự là những nguyên tắc trừu tượng. Tóm tắt nói rằng máy khách nên chuyển một chuỗi đến md5 và kết quả phải là một chuỗi được băm. Nội dung bên trong của hàm và cách thức thực hiện nó không phải là một phần của hoạt động trừu tượng. Nói cách khác, đóng gói là khi bạn bắt đầu triển khai mã thực tế. Bạn viết hàm md5 và khai báo những thứ như vậy ở chế độ riêng tư, v.v. Đây thực sự là sự đóng gói – hiện thực hóa sự trừu tượng mong muốn của bạn. Ngoài ra, đóng gói không giống như ẩn dữ liệu, bởi vì mặc dù dữ liệu có thể được đóng gói (trong cấu trúc và mảng), dữ liệu này thường không bị ẩn.

Sau đây sẽ là một ví dụ điển hình về cách phân tách nhưng phụ thuộc lẫn nhau:

  class Restaurant {

    public const int STATUS_OPEN = 0;

    public const int STATUS_CLOSED = 1;

    public int status = STATUS_OPEN;

 }  

Trong đoạn mã trên, không có ví dụ nào về đóng gói hoặc ẩn dữ liệu. Mọi thứ đều có thể tiếp cận và rõ ràng từ bên ngoài.

  class Restaurant {

    public const int STATUS_OPEN = 0;

    public const int STATUS_CLOSED = 1;

    private int status = STATUS_OPEN;

    public int getStatus () {

        tình trạng trở lại;

    }

 }  

Bây giờ, trạng thái lớp Restaurant được đóng gói nhưng không bị ẩn. Hãy xem nó nên được ẩn như thế nào:

 class Restaurant {

    private const int STATUS_OPEN = 0;

    private const int STATUS_CLOSED = 1;

    private int status = STATUS_OPEN;

    private int getStatus () {

        tình trạng trở lại;

    }

    public boolean isOpen () {

        trả về getStatus () == STATUS_OPEN;

    }

 }  

Cuối cùng, trạng thái Nhà hàng được đóng gói và ẩn. Xét rằng chúng ta không thể ẩn dữ liệu mà không có tính năng đóng gói, như bạn thấy trong các ví dụ mã ở trên, tính năng đóng gói cho phép bạn kiểm tra quyền truy cập vào các phần tử bên trong của riêng bạn và cung cấp các phương pháp thực hiện truy cập cụ thể. Nó không giải quyết cụ thể chi tiết triển khai bị rò rỉ. Tuy nhiên, với tính năng ẩn dữ liệu, nó cho phép bạn ngăn không cho người dùng của lớp biết quá nhiều về các phần bên trong của lớp, như khi bạn sử dụng các giao diện.

Xem Thêm  SQL XÓA tất cả các hàng - xóa tất cả các hàng khỏi bảng sql

Hy vọng điều này sẽ hữu ích! Chúc bạn viết mã vui vẻ!


Xem thêm những thông tin liên quan đến chủ đề khái niệm trừu tượng trong java

Java – Bài 45: Lớp trừu tượng

  • Tác giả: thân triệu
  • Ngày đăng: 2020-02-07
  • Đánh giá: 4 ⭐ ( 5303 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Hướng dẫn học lập trình Java cơ bản và nâng cao. Lớp trừu tượng trong ngôn ngữ lập trình Java. Học lập trình Java cơ bản và nâng cao. Học lập trình đầy đủ và cập nhật trên kênh thân triệu. thân triệu channel-let’s grow together!

155 bài học Java miễn phí hay nhất

  • Tác giả: vietjack.com
  • Đánh giá: 3 ⭐ ( 6605 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Lớp trừu tượng – Abstract Class trong Java – Học Java cơ bản và nâng cao cho người mới học về Ngôn ngữ hướng đối tượng, Ví dụ Java, Phương thức, Ghi đè, Tính kế thừa, Tính trừu tượng, Tính đa hình, Overriding, Inheritance, Polymorphism, Interfaces, Packages, Collections, Lập trình mạng, Đa luồng, Tuần tự hóa, Networking, Multithreading, Generics, Multimedia, Serialization, GUI.

Lớp trừu tượng trong Java – Nắm vững khái niệm về abstract trong Java

  • Tác giả: t3h.com.vn
  • Đánh giá: 5 ⭐ ( 1402 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Lớp trừu tượng trong Java là lớp đại diện cho một khái niệm và không thể tạo đối tượng của nó.Tìm hiểu khái niệm cơ bản về Lớp trừu tượng Java ngay sau đây

Lớp và đối tượng trong Java

  • Tác giả: thuthuat.taimienphi.vn
  • Đánh giá: 3 ⭐ ( 6310 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Lop va doi tuong trong Java, Lớp và đối tượng trong Java

Trừu tượng (Abstraction) trong java

  • Tác giả: shareprogramming.net
  • Đánh giá: 3 ⭐ ( 1287 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Trừu tượng trong OOP cho phép ẩn đi quá trình thực thi bên trong và chỉ hiển thị những tính năng thiết yếu tới người dùng.

Tính trừu tượng trong Java

  • Tác giả: hoclaptrinh.vn
  • Đánh giá: 5 ⭐ ( 9914 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Tính trừu tượng (Abstraction) trong Java hướng đến khả năng tạo một đối tượng trừu tượng trong lập trình hướng đối tượng.

[Java Core] Trừu tượng trong OOP là gì?

  • Tác giả: www.codelean.vn
  • Đánh giá: 4 ⭐ ( 3254 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: CodeLean.vn là nơi chia sẻ kiến thức của những người học, làm và dạy trong lĩnh vực công nghệ thông tin.

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

By ads_php