2014-11-26 32 views
10

Tôi có câu hỏi liên quan đến UML. Tôi có một lớp chỉ đơn giản chứa một lớp bên trong với công cụ sửa đổi truy cập riêng - không thể truy cập từ bất cứ nơi nào khác ... Thông thường để trình bày một quan hệ lớp bên trong, tôi có thể sử dụng một (+) quan hệ như ở đây (InnerOddIterator):Lớp Java lồng nhau riêng trong sơ đồ UML

enter image description here

(lấy từ http://www.uml-diagrams.org/nested-classifier.html)

tôi đã không tìm thấy bất cứ nơi nào bất cứ thông tin về làm thế nào có thể nhấn mạnh rõ ràng rằng lớp này là tư nhân. Bạn có biết nếu một phương pháp như vậy tồn tại? Nếu có tôi sẽ biết ơn bạn cho tôi một số liên kết ở đây hoặc một cái gì đó?

Chỉ cần để giữ cho mọi thứ rõ ràng, một mẫu mã:

public class DataStrucure { 
    // fields, methods, etc 
    private class InnerOddIterator{ 
      // ... 
    }; 
} 
+0

Xem thêm "nhập riêng" trong http://www.uml-diagrams.org/package-diagrams.html#package-import – xmojmr

+0

Nếu bạn cảm thấy rằng điều quan trọng là phải nhấn mạnh rõ ràng rằng lớp học này là riêng tư, hãy cân nhắc sử dụng bản mẫu như <>. Bạn chỉ đơn giản là tài liệu những gì khuôn mẫu của bạn có nghĩa là, và có bạn đang có. Các khuôn mẫu là cách "chính thức" để mở rộng đặc tả UML và điểm về chúng đôi khi bị bỏ sót là bất cứ ai cũng có thể sử dụng chúng để mở rộng UML theo bất kỳ cách nào họ muốn. Thực tế là một số khuôn mẫu ("<>" ví dụ) đã tìm thấy cách của họ vào sử dụng chung không thay đổi điều này. – BobRodes

+1

Xem [bài đăng này] (http://stackoverflow.com/questions/27797531/how-to-represent-the-nested-class-of-c-in-uml/27810986#27810986) để biết thêm thông tin hiện tại. – BobRodes

Trả lời

2

Trước hết: Bạn có một cái gì đó trong mã của bạn và yêu cầu một đại diện UML. Nhưng, IMHO, bạn nên xem xét nó theo cách khác vòng: Làm thế nào mà ý tưởng UML đó có thể được biểu diễn trong mã. (Một số ngôn ngữ lập trình thậm chí không cung cấp các lớp lồng nhau riêng ...).

Đối với các lớp lồng nhau riêng tư: Tôi khuyên bạn nên sử dụng Thành phần. Nó mạnh hơn như Hiệp hội nhưng không mạnh như thừa kế. Và lớp học sáng tác không thể tồn tại mà không có nhà soạn nhạc của nó. Khá chính xác là một lớp lồng nhau riêng.

Bản vẽ được lấy từ http://www.uml-diagrams.org/association.html: enter image description here

+0

"Một số ngôn ngữ lập trình thậm chí không cung cấp các lớp lồng nhau riêng" - điểm tốt, đúng ...Tôi đã thêm thẻ Java vào cụ thể hơn –

+0

Trong Java trong một thể hiện nếu lớp bên trong lồng nhau bạn có thể sử dụng 'this' để truy cập cá thể bên ngoài - chúng cuối cùng bị ràng buộc cùng nhau - nó không thể tồn tại mà không có cá thể bên ngoài. Như đã nói, IMHO chính xác là một sáng tác. –

+0

Bằng cách đó không phải là cách đó trong C# - không có ràng buộc tự động với một thể hiện bên ngoài ... –

0

Để chỉ ra rằng lớp bên trong của bạn là privete là tốt nhất, đối với tôi, là sử dụng - nhân vật như mô tả dưới đây nhưng tất nhiên trong trường hợp này bạn bỏ lỡ cấu trúc bên trong của lớp bên trong của bạn .. enter image description here

4

Từ quan điểm UML. Nếu classifier (Class cũng) được lồng trong lớp khác, lồng vào vai đóng vai trò của namespace. Trong trường hợp này, các lớp lồng nhau được ẩn (riêng) trong không gian tên ngữ cảnh. nó có nghĩa là, sơ đồ của bạn ngầm định nghĩa định nghĩa lớp bên trong riêng tư.

đây là một phần của định nghĩa từ UML Superstructure phần structred phân loại:.

"Một lớp học hoạt động như không gian tên cho các loại phân loại được xác định trong phạm vi của nó, bao gồm các lớp lồng nhau của phân loại hạn chế tầm nhìn của classifier nằm trong phạm vi không gian tên của lớp chứa và được sử dụng cho lý do ẩn thông tin. Các trình phân loại lồng nhau được sử dụng giống như bất kỳ trình phân loại nào khác trong lớp chứa. "

+0

Thông tin thú vị. – BobRodes

+0

Tôi đã nghiên cứu thêm một chút. Ký hiệu "neo" trong sơ đồ OP được xác định bằng 1.4 nhưng không phải trong 2.x. Tôi đã làm một chút phân tích các siêu mẫu Namespace và có vẻ như cách để đi là đặt một thuộc tính không gian tên trên lớp chứa, đặt một viên kim cương thành phần vào đầu kết thúc của lớp chứa và đặt thuộc tính {subsets namespace} trên kết thúc lớp lồng nhau. Thuộc tính subsets thực hiện khả năng hiển thị báo giá này mô tả. Xem [this] (http://stackoverflow.com/questions/27797531/how-to-represent-the-nested-class-of-c-in-uml/27810986#27810986) để biết thêm. – BobRodes

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