Không , một đối tượng không phải đại diện cho một thực thể.
Trên thực tế, tôi sẽ lập luận rằng khi bạn ngừng suy nghĩ về các đối tượng như các thực thể vật lý là khi cuối cùng bạn nhận được những lợi ích mà OOP hứa hẹn.
Đây không phải là ví dụ tốt nhất, nhưng thiết kế Coffee Maker có lẽ là nơi ánh sáng bắt đầu chiếu vào tôi.
Đối tượng là về tin nhắn. Họ là về trách nhiệm. Họ không nói về Ô tô, Người dùng hoặc Đơn hàng.
Tôi biết chúng tôi dạy OO theo cách này, nhưng nó trở nên rõ ràng sau một vài lần thử làm thế nào về cơ bản là làm thế nào để tìm ra mọi thứ khi bạn cố gắng làm MVC, MVVM hoặc MVWhthing. Mô hình của bạn trở nên cồng kềnh hoặc bộ điều khiển của bạn làm. Để điều hướng, thật tuyệt khi biết rằng bất cứ thứ gì chạm vào Phương tiện đều có trong tệp Xe.ext, nhưng khi ứng dụng của bạn là về Phương tiện, chắc chắn bạn sẽ kết thúc với 3000 dòng mì spaghetti trong tệp đó.
Khi bạn có một tin nhắn mới để gửi, bạn có ít nhất một đối tượng mới và có lẽ là một cặp trong số họ. Vì vậy, trong câu hỏi của bạn về một bó phương thức, tôi sẽ tranh luận rằng bạn có khả năng nói về một bó thông điệp. Và mỗi người có thể là đối tượng của riêng mình, với công việc riêng phải làm. Và thế là ổn. Nó sẽ trở nên rõ ràng khi bạn chia tách mọi thứ mà những thứ thực sự, thực sự cần phải được ở bên nhau. Và bạn đặt chúng lại với nhau. Nhưng bạn không bỏ ngay mọi phương pháp vào ngăn kéo thích hợp mơ hồ để thuận tiện nếu bạn muốn thưởng thức OO.
Hãy nói về túi chức năng
Một đối tượng có thể chỉ là một tập hợp các phương pháp và vẫn có OO, nhưng tôi "quy tắc" là khá nghiêm ngặt.
Bộ sưu tập nên có một trách nhiệm duy nhất và trách nhiệm đó không thể chung chung như "Có công cụ cho động cơ". Tôi có thể làm một thứ như mặt tiền của lớp dịch vụ, nhưng tôi nhận thức sâu sắc rằng tôi lười biếng vì lý do điều hướng / khám phá, không phải vì tôi đang cố viết mã OO.
Tất cả các phương pháp nên ở một lớp trừu tượng nhất quán. Nếu một phương thức lấy các đối tượng Motor và một phương thức khác trả về Mã lực, thì có lẽ cách nhau quá xa.
Đối tượng nên làm việc trên cùng một "loại" dữ liệu. Đối tượng này thực hiện công cụ cho động cơ (bắt đầu / dừng), đối tượng này thực hiện mọi việc với chiều dài tay quay, đối tượng này xử lý trình tự đánh lửa, điều này có dạng html. Dữ liệu này có thể hình dung là các trường trên đối tượng và nó có vẻ gắn kết.
Tôi thường xây dựng các đối tượng thuộc loại này khi tôi thực hiện các phép biến đổi, bố cục hoặc chỉ không muốn lo lắng về tính biến đổi.
Tôi thấy tập trung vào trách nhiệm đối tượng dẫn tôi đến sự gắn kết. Phải có một sự gắn kết để trở thành một đối tượng, nhưng không cần phải có bất kỳ trường nào cũng như không có nhiều hành vi để nó trở thành một đối tượng. Nếu tôi đang xây dựng một hệ thống cần 5 phương thức động cơ đó, tôi sẽ bắt đầu với 5 đối tượng khác nhau thực hiện những điều đó. Khi tôi tìm thấy điểm chung, tôi sẽ bắt đầu hợp nhất mọi thứ lại với nhau hoặc sử dụng các đối tượng "người trợ giúp" chung. Điều đó chuyển tôi vào các mối quan tâm mở / đóng - làm cách nào tôi có thể trích xuất một chút chức năng này để tôi không bao giờ phải sửa đổi tệp cụ thể đó một lần nữa mà vẫn sử dụng nó khi cần thiết?
Đối tượng là về tin nhắn
Các lĩnh vực hầu như không quan trọng đối với một đối tượng - nhận và thiết lập các thanh ghi không làm thay đổi thế giới bên ngoài chương trình. Phối hợp với các đối tượng khác sẽ hoàn thành công việc. Tuy nhiên, điểm mạnh của OO là chúng ta có thể tạo ra sự trừu tượng để chúng ta không phải suy nghĩ về tất cả các chi tiết riêng lẻ cùng một lúc. Trừu tượng mà rò rỉ hoặc không có ý nghĩa là có vấn đề, vì vậy chúng tôi suy nghĩ sâu sắc (quá nhiều, có thể) về việc tạo ra các đối tượng phù hợp với mô hình tinh thần của chúng tôi.
Câu hỏi chính: Tại sao hai đối tượng này cần nói chuyện với nhau?
Hãy nghĩ về đối tượng như một cơ quan trong một người - nó có mục đích mặc định và chỉ thay đổi hành vi khi nhận được một thông điệp cụ thể mà nó quan tâm.
Hãy tưởng tượng một kịch bản khi bạn đang băng qua đường và một chiếc ô tô đang đến rất nhanh. Là đối tượng não, tôi phát hiện ra một yếu tố gây căng thẳng. Tôi nói với vùng dưới đồi gửi hormone giải phóng corticotrophin. Tuyến yên nhận được thông điệp đó và giải phóng hormone corticotrophic tuyến thượng thận. Các tuyến thượng thận nhận được thông điệp đó và tạo ra adrenaline. Khi đối tượng cơ nhận được thông điệp adrenaline đó, nó co lại. Khi trái tim nhận được thông điệp tương tự, nó sẽ đập nhanh hơn. Có cả một chuỗi những người chơi tham gia vào việc bắt đầu hành vi phức tạp của việc chạy nước rút trên đường phố và đó là những thông điệp quan trọng. Đối tượng não biết làm thế nào để vùng dưới đồi phát ra cảnh báo, nhưng nó không biết chuỗi đối tượng cuối cùng sẽ khiến hành vi xảy ra. Tương tự như vậy, trái tim không biết adrenaline đến từ đâu,
Vì vậy, trong ví dụ ( đơn giản hóa ) này, đối tượng tuyến thượng thận chỉ cần biết cách lấy ACTH và tạo ra adrenaline. Nó không cần bất kỳ lĩnh vực nào để làm điều đó, nhưng nó vẫn có vẻ như là một đối tượng với tôi.
Bây giờ nếu ứng dụng của chúng tôi được thiết kế chỉ để chạy nước rút trên đường phố, tôi có thể không cần tuyến yên và các đối tượng tuyến thượng thận. Hoặc tôi chỉ cần một đối tượng tuyến yên chỉ thực hiện một phần nhỏ của những gì chúng ta có thể xem là "mô hình tuyến yên". Tất cả các khái niệm này tồn tại dưới dạng các thực thể khái niệm, nhưng đó là phần mềm và chúng tôi có thể tạo AdrenalineSender hoặc MuscleContractor hoặc bất cứ điều gì và không phải lo lắng nhiều về "tính không hoàn chỉnh" của mô hình của chúng tôi.