2010-05-11 66 views
9

Tôi đã học đủ để bắt đầu viết chương trình từ đầu, nhưng tôi đang gặp sự cố không biết cách thiết kế bố cục và triển khai chương trình. Để chính xác hơn, tôi gặp khó khăn trong việc tìm kiếm một cách tốt để đưa ra một kế hoạch hành động trước khi tôi đi sâu vào phần lập trình. Tôi thực sự muốn biết những gì lớp học, phương pháp, và các đối tượng tôi sẽ cần trước thay vì chỉ cần thêm chúng trên đường đi.Đề xuất bố cục thiết kế chương trình Java?

Trực giác của tôi đang dẫn tôi sử dụng một số loại phần mềm biểu đồ cung cấp chế độ xem phân cấp của tất cả các lớp và phương thức. Tôi đã sử dụng OmniGraffle Pro và trong khi nó dường như làm việc một chút, tôi vẫn gặp khó khăn trong việc lập kế hoạch ra toàn bộ chương trình. Tôi nên tiếp cận vấn đề này như thế nào? Phần mềm nào có sẵn để trợ giúp về vấn đề này? Bất kỳ tốt đọc ra có vấn đề này?

Cảm ơn bạn rất nhiều!

Chỉnh sửa: Ồ đúng rồi, tôi đang sử dụng Eclipse và tôi viết mã chủ yếu bằng Java ngay bây giờ.

Trả lời

12

Tôi sẽ không lo lắng về khía cạnh biểu đồ. Tôi sẽ thử và ghi lại tất cả các thực thể bạn cần, và mọi thứ họ sẽ làm. Trong trường hợp đơn giản nhất, mỗi danh từ sẽ là một lớpmọi động từ sẽ là phương thức.

Đây là một cách tiếp cận rất cơ bản và những gì bạn đang yêu cầu là một số phương pháp phân tích. Toàn bộ sách đã được viết về điều này và nó là một chủ đề quan trọng.

Bạn có thể thực hiện một phương pháp thay thế và áp dụng một phương pháp nhanh nhẹn. Trong này, bạn giải quyết một vấn đề cụ thể (một vấn đề phụ của mục tiêu cuối cùng của bạn), và sau đó refactor (có lẽ rất nhiều) khi bạn giải quyết vấn đề hơn nữa. Khi bạn mã, bạn viết và duy trì các bài kiểm tra đơn vị sao cho việc tái cấu trúc của bạn không phá vỡ mã hiện tại của bạn. Bạn phải chuẩn bị để vứt bỏ công việc mà bạn đã làm nhưng đó là một kỹ thuật mạnh mẽ có nghĩa là bạn có được một cái gì đó và chạy sớm, thay vì dựa vào một cách tiếp cận lớn-bang.

+0

Tôi vừa tham dự bài giảng và đoán xem, giáo sư của tôi đã nói về chính xác điều này! Ông thậm chí còn đề cập đến từ "nhanh nhẹn" khi nói về TDD và cách sử dụng J-Unit. Cảm ơn Brian rất nhiều điều này thực sự chỉ làm cho ngày của tôi. Tôi không thể chờ đợi để bắt đầu điều này. –

+0

Đó là tin tốt. May mắn nhất! –

2

Có các công cụ dành riêng cho loại sự cố này (ví dụ: Rational Rose). Thật không may, trong khi họ đang lightyears tốt hơn so với Omnigraffle, hầu hết trong số họ là khá tốn kém. Có một vài công cụ miễn phí mà bạn có thể muốn xem xét, chẳng hạn như ArgoUMLUMLet - mặc dù sau này là một plugin Eclipse, vì vậy nó có thể không thú vị trừ khi bạn đang sử dụng (hoặc sẵn sàng sử dụng) Eclipse.

+0

Trong khi bạn đã trả lời câu hỏi cụ thể, tôi nghĩ câu trả lời của Brian hữu ích hơn trong việc chỉ ra OP theo hướng tiếp cận tốt hơn. – SteveD

+0

@stevendick: vâng, thường có một chút thú vị khi quyết định trả lời câu hỏi đã được hỏi và câu hỏi mà bạn nghĩ có lẽ nên được hỏi. Câu trả lời của Brian là khá nhiều tiêu chuẩn 30 giây mô tả phân tích hướng đối tượng, nhưng tôi phải nói rằng tôi hiếm khi thấy nó rất hữu ích. Hầu hết mọi người bắt đầu với một cái nhìn đơn giản rằng "chương trình nên làm X, Y và Z", cho "chương trình" là đối tượng duy nhất.Nó thường mất khá một vài nỗ lực tại sơ đồ trước khi bạn có thể chỉ vào bất cứ điều gì mà hợp lý có thể là một đối tượng trong mã thực. –

1

Xem xét xem xét triết lý Thiết kế hướng đối tượng để biết phương pháp về cách cấu trúc chương trình. UML hoặc Unified Modeling Language thường được chấp nhận như là một phương pháp để cấu trúc các chương trình OO bằng các ngôn ngữ như Java và Python. Các chương trình tốt cho những người như BoUMLArgoUML. Ngoài ra, hãy xem trang này trên re-factoring, mặc dù đó là về cấu trúc lại mã, nó cũng có thể giúp cấu trúc ban đầu. Cuối cùng, hãy xem xét các hiệu ứng này OO design hiệu trưởng

2

Tốt nhất là nên bắt đầu bằng một số câu chuyện đơn giản hoặc thậm chí là danh sách các yêu cầu về ứng dụng có thể làm. Từ đó bạn có thể nghĩ về những lớp học bạn có thể muốn sử dụng và cách chúng sẽ tương tác với nhau.

Tôi muốn tạo các gói khác nhau mà tôi định sử dụng và đặt các lớp sơ khai trong đó. Bạn thậm chí có thể phân tích các phương thức nếu bạn thích và thêm các chú thích Javadoc.Tôi sẽ không lo lắng quá nhiều về việc cố gắng lên kế hoạch chính xác vì nó rất có thể sẽ thay đổi khi bạn xây dựng nó, vì vậy ngay cả khi bạn hoàn thành nó một cách hoàn hảo vào thời gian thiết kế, yêu cầu dịch chuyển hoặc thứ gì đó không hoạt động như cũng như bạn đã nghĩ ban đầu có thể thay đổi mọi thứ. Điều tốt đẹp về bố cục khung như thế này là khi bạn đã sẵn sàng để mã, bạn chỉ cần đi và bắt đầu điền vào các phương thức của phương thức.

0

Hầu hết các kỹ sư tôi đã biết sử dụng Visio - nó thường có sẵn như là một phần của bộ công ty của bạn.

Ngoài ra còn có một số ứng dụng web miễn phí mà làm người mẫu cho bạn (Object Modeling là "từ khoá" cho những gì bạn đang nói về)

Bạn có thể nhìn vào biểu đồ đối tượng UML - mặc dù nó không quan trọng để làm theo bất kỳ specs chính xác, nếu bạn sử dụng như một cơ sở nhiều người sẽ có một số ý tưởng về những gì bạn đang nói về.

0

Tôi sử dụng bảng trắng có kích thước tốt để lập mô hình. Tôi thấy nó thực sự giúp tôi có thể lùi lại một vài bước và có thể xem toàn bộ thiết kế, và sự linh hoạt để có thể thay đổi thứ gì đó bằng cách vuốt một cục tẩy cho phép tôi tập trung vào nhiệm vụ trong tầm tay.

Khi tôi hoàn thành, tôi chụp ảnh bằng máy ảnh của mình và tải nó lên máy tính để sử dụng lâu dài.

0

tôi sẽ thêm vào ý kiến ​​của Brian rằng trong khi áp dụng một cách tiếp cận nhanh nhẹn bạn cũng áp dụng một cách tiếp cận Test Driven Development (TDD) để viết mã của bạn. Về cơ bản, bạn viết các kiểm tra cho mã của bạn trước bạn viết bất kỳ mã sản xuất thực tế nào. Điều này thực sự buộc bạn phải làm chậm và suy nghĩ kỹ về những gì bạn cần (và không cần) để lập trình, mô hình dữ liệu nào bạn sẽ cần và cách chúng tương tác. Có rất nhiều lợi thế cho TDD, nhưng thiết kế tốt hơn là một lợi thế lớn đối với tôi. Dưới đây là đoạn trích có liên quan từ liên kết ở trên:

Phát triển theo hướng thử nghiệm cung cấp nhiều hơn xác nhận đơn giản về tính chính xác, nhưng cũng có thể thúc đẩy thiết kế chương trình. Bằng cách tập trung vào các trường hợp thử nghiệm đầu tiên, người ta phải hình dung cách thức các chức năng sẽ được sử dụng bởi các máy khách (trong trường hợp đầu tiên, các trường hợp kiểm tra). Vì vậy, lập trình viên có liên quan với giao diện trước khi thực hiện.

Nếu bạn chưa bao giờ làm điều này trước đây, nó có thể thực sự khó khăn, chủ yếu là vì khó có thể không khởi chạy thẳng vào mã hóa. Nhưng kiên trì và bạn sẽ không bao giờ quay lại viết mã theo bất kỳ cách nào khác. Những lợi thế thực sự cũng có giá trị nó. Chúc may mắn!

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