Quá trình suy nghĩ hướng đối tượng là gì? [đóng cửa]


9

Tôi đã nghiên cứu OOP kết hợp với triển khai MVC của Zend trong vài tháng qua. Nói chung, tôi khá mới đối với lập trình, nhưng tôi cảm thấy mạnh mẽ rằng tôi nên học mọi thứ theo cách 'đúng', điều này đối với tôi có nghĩa là đảm bảo tôi hiểu tại sao mọi thứ được thực hiện theo cách của chúng. Tức là, tôi đã thấy rằng trong việc học cách làm một cái gì đó (bất cứ điều gì, nói âm nhạc), cách tốt nhất để học cách làm một cái gì đó là để biết tại sao nó lại được thực hiện theo cách đó ngay từ đầu.

Dù sao, tôi đã rất vất vả tìm hiểu cách phát triển các mô hình kinh doanh của riêng mình (ví dụ: M của MVC) và tôi đã quyết định không phải vì tôi không hiểu OOP nói chung, vì tôi đã nghiên cứu nó cho nhiều người nhiều tháng và tôi không nghĩ các khái niệm này rất khó nắm bắt. Tôi tìm thấy những ví dụ tôi đã nghiên cứu rất trực quan, thực sự. Vấn đề đối với tôi, tôi nghĩ, nằm ở quá trình dịch các vấn đề của riêng tôi thành các giải pháp hướng đối tượng. Các ví dụ trong sách (mà tôi đã đọc cho đến nay) quá rõ ràng, vì vậy quá trình dịch vấn đề sang các đối tượng không quá khó khăn. Những gì tôi nghĩ rằng tôi có thể thiếu là một quá trình trừu tượng hóa cấp cao. Một số loại danh sách các bước hoặc câu hỏi mà mọi giải pháp hướng đối tượng phải trả lời ở mức cao nhất.

Nếu bạn phải mô tả một quá trình như vậy trong không quá năm bước, chúng sẽ là gì và tại sao? Quá trình hiệu quả nhất trong việc chuyển bất kỳ vấn đề thành một giải pháp hướng đối tượng là gì?


1
OOP không phải lúc nào cũng như vậy ...
Công việc

Trong nghiên cứu về OOP bạn đã đọc gì về các mẫu thiết kế chưa?
Zoredache

1
Tôi khuyên bạn nên đọc cuốn sách của Eric Evan về Thiết kế hướng miền khi bạn gặp khó khăn trong việc tạo mô hình. Xem thêm @Simon Stellings trả lời. Cuốn sách bao gồm quá trình này khá chi tiết.
Falcon

@Zoredache Tôi đã bắt gặp khái niệm về các mẫu thiết kế, cũng như một vài ví dụ về một số, như singleton, nhà máy và chính MVC (trong đó, trong triển khai của Zend cũng là bộ điều khiển phía trước). Tuy nhiên, đó là động thái tiếp theo của tôi, có thể nói như vậy. Tôi đã chọn cuốn sách của Martin Fowler về các mẫu doanh nghiệp và cho đến nay tôi chỉ đọc một phần giới thiệu. Là một giới thiệu rõ ràng, dễ đọc mà bạn muốn giới thiệu?

@Falcon Tôi đã có một câu hỏi về php / MySQL và định dạng ngày trên SO vào ngày khác và tôi đã chọn câu trả lời của bạn nhưng đó chỉ là một nhận xét, vì nó đáng giá.

Câu trả lời:


10

Tìm kiếm một mô hình phù hợp không phải lúc nào cũng thẳng tiến. Đây là một trong những điều đòi hỏi nhiều kinh nghiệm hơn kiến ​​thức đơn giản. Tuy nhiên, công thức đơn giản sau đây có thể giúp bạn vượt qua khối tâm thần ban đầu.

Nó được mô tả ban đầu trong bài viết này của Abbott và thường được gọi là "phân tích văn bản của Abbott".

  1. Viết một đặc tả văn bản đơn giản.
  2. Xác định các lớp: Danh từ là ứng cử viên tốt.
  3. Tìm các thuộc tính: Tính từ / trạng từ là ứng cử viên tốt.
  4. Tìm các hoạt động: Động từ là ứng cử viên tốt.
  5. Tìm sự liên kết giữa các lớp.
  6. Lọc.

Thí dụ:

Danh từ , động từadjectivesđược đánh dấu.

Các thư viện chứa sáchtạp chí . Nó có thể có một vài bản sao của một cuốn sách nhất định . Một số cuốn sách chỉ cho short-term vay . Tất cả các cuốn sách khác có thể được mượn bởi bất kỳ thành viên thư viện trong ba tuần. Các thành viên của thư viện thường có thể mượn tối đa sáu mặt hàng cùng một lúc, nhưng các thành viên của nhân viên có thể mượn tối đa 12 mặt hàng cùng một lúc. Chỉ các thành viên của nhân viên có thể mượn các tạp chí .

Một lần lặp phân tích đầu tiên sẽ mang lại:

Các lớp học:

  • Thư viện
  • Sách, tạp chí
  • Sao chép
  • Tiền vay
  • Thành viên thư viện
  • Mục
  • Thành viên đội ngũ nhân viên

Từ đây trở đi, bạn có thể nghĩ về lớp nào cần các thuộc tính và phương thức nào để thực hiện hành vi và sau đó tinh chỉnh mô hình đó ngày càng cao.


1
Câu trả lời tốt. Ngoài bài viết của Abbott, tôi giới thiệu cuốn sách của Eric Evan về Thiết kế hướng tên miền . Nó dạy làm thế nào để tạo ra một ngôn ngữ phổ biến cho dự án và làm thế nào để chắt lọc một mô hình mạnh mẽ từ nó.
Falcon

Tôi bị cuốn hút bởi câu trả lời này bởi vì tôi đã học ngôn ngữ học một chút và nó có ý nghĩa trực quan tốt đối với tôi mà không cần nỗ lực nhiều, tuy nhiên tôi sợ nó vì những lý do tương tự vì tôi thấy rằng quá nhiều sự tương tự có thể khiến tôi lạc lối .

@Falcon +1 để giới thiệu một cuốn sách với ảnh bìa Kandinsky.

@ tbj1982: Bạn hoàn toàn đúng. Đó là một heuristic đơn giản, và kết quả nên được điều trị với ý nghĩ đó. Đó không phải là viên đạn vàng, nhưng nó có thể là một khởi đầu hữu ích.
blubb

4

Theo tôi, thực hiện phương pháp TDD là tự nhiên và hiệu quả:

  1. Viết ra các yêu cầu cụ thể (Cho, Khi, Sau đó)
  2. Dịch từng yêu cầu (quan trọng nhất trước tiên) thành một bài kiểm tra đơn vị.
  3. Viết số lượng mã ít nhất để vượt qua bài kiểm tra viết ở # 2.
  4. Sau khi vượt qua bài kiểm tra, hãy cấu trúc lại mã của bạn theo các nguyên tắc thiết kế của SOLIDD.
  5. Sau # 4, đảm bảo mã của bạn vẫn vượt qua tất cả các bài kiểm tra được viết.
  6. Lặp lại 2-5.

Với quy trình này, bạn có thể dần dần tạo ra mã thử nghiệm với thiết kế âm thanh. Ban đầu bạn có thể nghĩ rằng kiểm tra viết là không cần thiết nhưng hoạt động đó thực sự giúp bạn xây dựng kiến ​​trúc âm thanh.


3

Đây là các bước tôi sử dụng trong mã c ++:

  1. quyết định tên lớp
  2. quyết định tham số constructor và dữ liệu thành viên.
  3. quyết định tên hàm nguyên mẫu và nguyên mẫu
  4. làm cho nó độc lập với các lớp khác
  5. Thiết kế được thực hiện, và mọi thứ khác chỉ là việc thực hiện.

Lý do cho (1) là nó xác định phạm vi chức năng thuộc về lớp nào. Lý do cho (2) là nó định nghĩa cách lớp giao tiếp với thế giới bên ngoài. Lý do cho (3) là nó xác định cách chọn chức năng nào của lớp là cần thiết trong mỗi tình huống. Lý do cho (4) là nó cho phép lớp được sử dụng trong nhiều tình huống khác nhau. Lý do cho (5) là nó xác định ranh giới giữa thiết kế và thực hiện.


+1 để đặt tên. Thật đáng ngạc nhiên khi chỉ cần thêm tên có thể tổ chức các quá trình suy nghĩ, vì bạn hoàn toàn mang theo tất cả kiến ​​thức về "thế giới thực" với nó.
Mark Brackett
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.