Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Ruby

Tầm quan trọng của Class trong lập trình: Tổ chức mã & Nâng cao trừu tượng hóa

Sau bài viết trước về tại sao chúng ta dùng nil, tôi nghĩ rằng sẽ là ý tưởng tốt để đặt câu hỏi này cho những thứ khác mà chúng ta coi là hiển nhiên.

Như…

Tại sao chúng ta dùng class thay vì chỉ có một KHỐI LỚN mã xấu xí?

Ở mức cơ bản, chúng ta dùng class để tổ chức mã & dữ liệu thành các đơn vị logic.

Nhưng còn nhiều hơn thế.

Một class cho phép bạn tạo ra một trừu tượng (abstraction).

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

Bạn sử dụng trừu tượng mỗi ngày, mỗi phút.

Cái bàn phím tôi đang gõ bao gồm:

  • Một cáp
  • Cherry MX black switches
  • Vỏ nhựa giữ mọi thứ lại với nhau
  • Mạch in truyền tín hiệu điện đến máy tính

Bàn phím chỉ là một khái niệm nổi lên từ việc gộp những thứ này lại với nhau theo đúng cách.

Nó là một trừu tượng vì bạn không cần biết nó hoạt động như thế nào bên trong để sử dụng nó. Bạn thậm chí không cần biết nó được làm từ những thành phần gì!

Bạn chỉ cần cắm vào & bắt đầu gõ.

Đó chính xác là những gì class cho phép bạn làm.

Tại sao Trừu tượng quan trọng?

Trừu tượng giúp bạn quản lý độ phức tạp.

Như Steve McConnell nói:

“Lý do quan trọng nhất để tạo một class là để giảm độ phức tạp của chương trình”

Trừu tượng hoàn thành điều này như thế nào?

Bằng cách ẩn chi tiết về cách thức hoạt động của một thứ & chỉ hiển thị dịch vụ của nó qua một giao diện công khai (public interface).

Trong class Ruby, giao diện bao gồm các phương thức công khai (public methods). Trong khi chi tiết bị ẩn bằng phương thức riêng tư (private methods).

Tầm quan trọng của Class trong lập trình: Tổ chức mã & Nâng cao trừu tượng hóa

Với chi tiết tôi muốn nói:

  • biến instance
  • phương thức nội bộ
  • thuật toán & cấu trúc dữ liệu

Khi những thứ này bị ẩn, bạn có thể thay đổi chúng bất cứ khi nào muốn, mà không ảnh hưởng đến người dùng của class bạn.

Ví dụ:

Nếu bạn có class GPS sử dụng mảng để lưu dữ liệu, và bạn phải biết rằng ở chỉ mục 0 của mảng đó bạn sẽ tìm thấy vĩ độ & chỉ mục 1 là kinh độ, đây là những chi tiết bạn không nên phải biết với tư cách là người dùng class.

Cách viết một Class tốt

Bây giờ, đây là chủ đề lớn.

Nhiều điều đi vào việc tạo ra một class tốt, như tuân theo các nguyên tắc SOLID.

Nhưng quan trọng nhất, class của bạn phải có một vai trò nào đó, và không được tạo thành từ các phương thức ngẫu nhiên.

Ví dụ, bạn muốn tách logic nghiệp vụ (tính toán, quy tắc) khỏi logic trình bày (định dạng) vì chúng là những vai trò khác nhau.

Xem mã này:

require 'rest-client'
require 'nokogiri'

class ImageCounter
  def initialize(url)
    @url = url
  end

  def find_images_and_report
    data = RestClient.get(@url).body
    html = Nokogiri::HTML.parse(data)
    images = html.css("img")
    report = ""
    report << "=" * 40 << "\n"
    report << "Found #{images.size} images on #{@url} \n"
    report << "=" * 40 << "\n"
  end
end

reporter = ImageCounter.new("rubyguides.com")
report = reporter.find_images_and_report

Bạn có thể thấy class này quan tâm đến cả tính toán & trình bày. Điều này ổn nếu bạn viết script “nhanh & bẩn”, nhưng cho ứng dụng nghiêm túc hơn bạn muốn tách chúng ra.

Khi bạn tách trách nhiệm, bạn có thể gắn một lớp trình bày khác, hoặc thay đổi quy tắc nghiệp vụ & tái sử dụng cùng trình bày.

Khía cạnh tái sử dụng mã này của class là lý do tốt khác để viết nhiều class hơn.

Có thêm nhiều ý tưởng giúp bạn viết class tốt hơn.

Dưới đây là một số để bạn khám phá thêm:

  • Cohesion & Coupling (Cohesion & Coupling)
  • Tell, don't ask
  • Law of Demeter

Biết tại sao chúng ta viết class là khởi đầu tốt, vì vậy chúc mừng nếu bạn đã đọc hết bài viết!

Tóm tắt

Bạn đã học tại sao chúng ta viết class, trừu tượng là gì & tại sao nó quan trọng. Bạn cũng học các nguyên tắc cơ bản viết class tốt & tôi đã cho bạn một số con trỏ về những gì nên đọc thêm.

Trừ khi bạn muốn mã của mình trở thành Big Ball of Mud, hãy bắt đầu áp dụng một số khái niệm này ngay bây giờ để cải thiện thiết kế class của bạn 🙂

Đừng quên chia sẻ bài viết này trên Twitter nếu bạn thấy nó hữu ích!