2010-05-08 34 views
10

Là một nhà phát triển cốt lõi trong vài năm, các ứng dụng mã hóa nhìn thấy sơ đồ lớp, sơ đồ trình tự, tôi quyết định cải thiện bản thân, thực hiện bước tiếp theo của thiết kế. Là một nhà phát triển OO, tôi quan tâm đến việc cải thiện kỹ năng thiết kế của mình.Làm thế nào để xây dựng kỹ năng hướng đối tượng?

Ví dụ: tôi đã gặp khó khăn khi thiết kế công cụ chuyển đổi tiền tệ.

Câu hỏi của tôi với SO:

  • là nó bằng kinh nghiệm những kỹ năng thiết kế có thể được mua?
  • Học sách/blog/tài liệu qua internet, v.v. có giúp không?
  • Có phải miền nào cần có tên miền kiến ​​thức về đơn đăng ký là được phát triển?
  • Hiểu các mẫu thiết kế, nguyên tắc?
  • Nghiên cứu sách 'Hoàn thành mã'?
  • Cần phải có kỹ năng giải quyết vấn đề?

Tóm lại, đưa ra một vấn đề, tôi chỉ muốn giải quyết nó theo cách hướng đối tượng ??

+5

Nói tóm lại, câu trả lời của tôi là Yes để tất cả các câu hỏi của bạn –

+1

Anthony Forloney: +1. Có thể ngoại trừ chỉ 'Hoàn thành mã'. – Roman

+2

@Roman, Đồng ý, tuy nhiên tôi nghĩ * Code Complete * là thứ cần đọc nếu bạn muốn nâng cao kỹ năng của mình. Đó là lý do tại sao tôi đã cho nó một 'Có' :) –

Trả lời

0

Để đánh số điểm của bạn - Tôi nghĩ rằng 2 - 6 là tuyệt vời và tôi nghĩ rằng bất kỳ ai viết mã nên đọc mã hoàn chỉnh, ngay cả khi không phải OO của nó. Nhưng tiếc là có vẻ như điểm 1 là quan trọng nhất !!!

Tôi nghĩ đó là vấn đề trong nghề của chúng tôi. Chúng ta học về công việc như trái ngược với việc nghiên cứu mã tuyệt vời. Vì vậy, về cơ bản tất cả mọi người là tái phát minh ra bánh xe về mặt học tập.

2

Tôi nghĩ rằng bạn đang đi về điều này hơi sai, bởi vì một số vấn đề chỉ đơn giản là không cần một giải pháp hướng đối tượng. Các giải pháp phải phù hợp với vấn đề, không phải là cách khác xung quanh.

Tuy nhiên, không có viên đạn bạc nào để trở thành một nhà thiết kế có hướng đối tượng tốt hơn. Cách tốt nhất, theo ý kiến ​​của tôi, là viết một chương trình phức tạp, sau đó duy trì nó vững chắc trong vài năm.

+1

Điều này về cơ bản là sai: các vấn đề không có "nhu cầu". Các giải pháp được tạo ra bằng cách sử dụng các khái niệm, công cụ và ý tưởng. Bạn phải muốn OO, sau đó bạn sẽ tìm thấy CÁCH nó áp dụng cho vấn đề ở bàn tay (rất nặng, đối với một nhóm rất nhỏ của các vấn đề). Đừng lo lắng, mặc dù, bạn đang ở trong công ty tốt ở đây trên SO, nơi mà hầu hết mọi người nghĩ rằng móng tay chỉ là cầu xin cho búa. –

+0

Bạn sẽ đặt móng tay vào cách nào khác? – Puppy

+1

Gót chân của giày của phụ nữ, hầu hết thời gian. Hoặc một khẩu súng bắn đinh. –

1
  • Có phải trải nghiệm kỹ năng thiết kế có thể được mua không?

Trải nghiệm và khả năng bẩm sinh - một số người không thể làm được.

  • Sách học/blog/tài liệu qua internet, v.v. có giúp được không?

Tất nhiên. Nhưng họ sẽ không biến bạn thành một vị thần OO.

  • Có phải người dùng cần kiến ​​thức về miền của ứng dụng đang được phát triển không?

Hoặc bạn cần có hoặc bạn cần quyền truy cập vào người nào đó.

  • Hiểu các mẫu thiết kế, nguyên tắc?

Biết mẫu thiết kế nào sẽ là khởi đầu tốt - chúng chỉ là những cách phổ biến để làm mọi thứ - không có gì kỳ diệu.

  • Nghiên cứu 'Hoàn thành mã'?

Tôi đã lướt qua cửa hàng sách một lần.

  • Cần phải có kỹ năng giải quyết vấn đề?

Rõ ràng là có, tôi đã nghĩ.

+0

"khả năng [sic]" - bạn có nghĩ nó giống như một thứ di truyền không? Gen hướng đối tượng? –

+0

@yar Tôi không biết. Tôi biết rằng một số người có thể và một số người (dường như không kém phần sáng sủa) không thể. –

+0

Âm thanh hợp lý. Tôi muốn viết lên đam mê (quan tâm) nhiều hơn bất cứ điều gì, nhưng quan sát của bạn là chính xác. –

3

Rõ ràng là nếu bạn muốn học điều gì đó, bạn phải thực hành. Nếu bạn muốn tìm hiểu làm thế nào để trở thành một lập trình viên tốt hơn, lập trình thực hành sẽ giúp bạn. Và nếu bạn muốn tìm hiểu làm thế nào để trở thành một lập trình viên OO tốt hơn, thực hành OOP rõ ràng sẽ giúp bạn nhiều nhất. Kỹ năng giải quyết vấn đề và kiến ​​thức của miền là những thứ mà mọi lập trình viên giỏi cần có, không chỉ cho OOP. Và có rất nhiều sách hay ở ngoài đó, chúng sẽ giúp ích cho bạn, nếu bạn không phải là loại người "ít tập trung để có được thứ gì đó".

Here là danh sách sách lập trình. Từ danh sách này, "Design Patterns" và "Refactoring" dường như rất tập trung vào OOP (tôi không đọc "Head head patterns patterns", có lẽ nó cũng vậy). Và cuốn sách tôi học được nhiều nhất từ ​​(OOP, chức năng và các khái niệm khác), tôi nghĩ, là "Cấu trúc và giải thích các chương trình máy tính".

7

Bạn phải làm thiết kế OO kém trước khi bạn có thể thiết kế OO tốt.

Một dự án tuyệt vời sẽ lấy công cụ chuyển đổi tiền tệ của bạn và từ từ di chuyển mã để sử dụng các khái niệm OO. OO là một quá trình sáng tạo: không có câu trả lời sai, nhưng tồi tệ hơn và tốt hơn làm tồn tại. Về cơ bản, khi mã của bạn giữ lại chức năng và trở nên ngắn hơn/dễ đọc hơn, thì tốt hơn. Khi nó đạt được tính linh hoạt mà không cần thêm mã, điều đó cũng tốt hơn. Nhưng đó là một quá trình sáng tạo. Sử dụng hệ thống kiểm soát phiên bản như GIT để có thể "hoàn tác" dễ dàng, thử công cụ và MAKE MISTAKES. Thiết kế OO là một quá trình.

  • là nó bằng kinh nghiệm những kỹ năng thiết kế có thể được mua?

Có.

  • Will học sách/blog/tài liệu trên internet vv giúp đỡ?

Có.

  • Là nó mà người ta cần những kiến ​​thức miền của ứng dụng là được phát triển?

Có, nhưng tôi nghĩ rằng việc biết tên miền quá tốt có thể làm hỏng thiết kế tốt.Khi làm việc với các lập trình viên của hãng hàng không, tôi nhận thấy rằng các trừu tượng được biết đến, không bị nghi ngờ ("vé", "đặt chỗ") đã ngăn cản thiết kế OO tốt. Mô hình OO của bạn là không phải là mô hình thế giới thực. Đó là một mô hình cho chương trình của bạn.

  • Hiểu các mẫu thiết kế, nguyên tắc?

Vâng, luôn luôn tốt hơn.

  • Nghiên cứu 'Hoàn tất mã' sách?

Rất nhiều người nói đây là một cuốn sách hay. Nhưng, bạn đã đọc Italo Calvino chưa? Hay Jorge Luis Borges? Tất cả các loại sách có thể hữu ích.

  • Cần phải giải quyết vấn đề kỹ năng?

No. Bạn có kỹ năng giải quyết vấn đề bằng cách áp dụng OO (hoặc bất kỳ mô hình nào khác).

0

Ngoài ra, bạn có thể sử dụng thử nghiệm đơn vị , làm công cụ để cải thiện thiết kế lớp học.

1

Tôi khuyên bạn nên học Smalltalk. CÓ .. Tôi biết nó hơi lỗi thời nhưng tôi nghĩ đây là môi trường duy nhất để thử nghiệm, đánh giá cao và 'vui chơi' với Object Orientation.

Trong Smalltalk mọi thứ từ IDE là một đối tượng. Bạn có thể suy nghĩ về các đối tượng mà không lãng phí thời gian với các chi tiết như tệp tiêu đề/nguồn, biên dịch và vv.

Tải về một bản sao của Squeak Smalltalk (http://www.squeak.org/) và bắt đầu tập luyện

2

Thách thức lớn nhất trong thiết kế hướng đối tượng không được học các kỹ thuật thực hiện, mà đến một cách tự nhiên với thời gian và kinh nghiệm. Thách thức lớn nhất là hiểu rõ vấn đề miền đầy đủ mà bạn có thể tóm tắt rõ ràng nó với một mô hình đối tượng. Đây là một trong những điểm bạn nhấn vào trong câu hỏi của bạn và tôi nghĩ rằng đó chắc chắn là một trong những điểm quan trọng nhất. Nếu vấn đề không được hiểu rõ, thì bạn có nguy cơ thực hiện một giải pháp cho vấn đề sai. Hơn nữa, thật dễ dàng để bị cuốn vào vẻ đẹp trừu tượng và kiến ​​trúc vì lợi ích riêng của nó, mất đi tầm nhìn của nhiệm vụ ban đầu.

1

Cố gắng tìm hiểu và thực sự hiểu ý nghĩa của "trừu tượng". Tôi có nghĩa là trừu tượng như một khái niệm chung, ít nhất là nó áp dụng cho khoa học máy tính và kỹ nghệ phần mềm. Từ trừu tượng theo hướng đối tượng. Vì, trừu tượng là về việc tách các khái niệm trong một hệ thống khỏi việc thực hiện, ví dụ, bất kỳ sự biểu diễn logic nào của một hệ thống hoặc ứng dụng là một trừu tượng. Bất kỳ mô hình của một ứng dụng/hệ thống là một trừu tượng. Vì vậy, trong nhiều cách mô hình hóa một ứng dụng/hệ thống/vấn đề, một cách được gọi là cách hướng đối tượng. Vì vậy, trừu tượng đầu tiên. Một khi bạn có được điểm trừu tượng, thì bạn sẽ thấy rằng trong nhiều cách mô hình hoá mọi thứ, mô hình hướng đối tượng là ưu việt, trong hầu hết các trường hợp. Đó là cách bạn có được điểm của OO.

Sau đó, từ trừu tượng sau các nguyên tắc cơ bản của đối tượng định hướng: các kiểu dữ liệu trừu tượng, ẩn thông tin vv, và các cơ chế để đạt được chúng như đóng gói, thừa kế, vv

Các vấn đề liên quan