2014-11-26 16 views
10

Mam pytanie dotyczące UML. Mam klasę, która po prostu zawiera klasę wewnętrzną z prywatnym modyfikatorem dostępu - nie można uzyskać do niej dostępu z dowolnego miejsca ... Zazwyczaj w celu przedstawienia relacji wewnętrznej klasy mogę użyć relacji (+) takiej jak tutaj (InnerOddIterator):Prywatna zagnieżdżona klasa Java w diagramie UML

enter image description here

(zaczerpnięte z http://www.uml-diagrams.org/nested-classifier.html)

nie znalazłem nigdzie żadnych informacji o tym, jak można wyraźnie podkreślić, że ta klasa jest prywatny. Czy wiesz, czy taka metoda istnieje w ogóle? Jeśli tak, będę wdzięczny za przekazanie mi jakiegoś linku?

Wystarczy, aby utrzymać wszystko jasne, przykładowy kod:

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

Zobacz także "prywatny import" na stronie http://www.uml-diagrams.org/package-diagrams.html#package-import – xmojmr

+0

Jeśli uważasz, że ważne jest, aby wyraźnie podkreślić, że ta klasa jest prywatna, rozważ użycie stereotyp, taki jak <>. Po prostu dokumentujesz, co oznacza twój stereotyp, i tam jesteś. Stereotypy są "oficjalnym" sposobem rozszerzania specyfikacji UML, a punktem na ich temat, który czasami jest pomijany, jest to, że każdy może je wykorzystać do rozszerzenia UML w dowolny sposób. Fakt, że niektóre stereotypy (na przykład "<>") trafiły do ​​powszechnego użytku, nie zmienia tego. – BobRodes

+1

Zobacz [ten post] (http://stackoverflow.com/questions/27797531/how-to-represent-the-nested-class-of-in-uml/27810986#27810986), aby uzyskać więcej aktualnych informacji. – BobRodes

Odpowiedz

2

przede wszystkim: Masz coś w kodzie i prośbą o przedstawienie UML. Ale, IMHO, powinieneś spojrzeć na to na odwrót: jak ten pomysł UML może być reprezentowany w kodzie. (Niektóre języki programowania nawet nie oferują prywatnych klas zagnieżdżonych ...).

Co do prywatnych klas zagnieżdżonych: sugeruję użycie kompozycji. Jest silniejszy jak Stowarzyszenie, ale nie tak silny, jak dziedzictwo. A skomponowana klasa nie może istnieć bez jej kompozytora. Prawie dokładnie prywatna klasa zagnieżdżona.

Rysunek pochodzi z http://www.uml-diagrams.org/association.html: enter image description here

+0

"Niektóre języki programowania nie oferują nawet prywatnych klas zagnieżdżonych" - dobra uwaga, prawda ...Dodałem tag Java, aby był bardziej specyficzny –

+0

W Javie wewnątrz instancji, jeśli zagnieżdżona klasa wewnętrzna można użyć "this", aby uzyskać dostęp do zewnętrznej instancji - są one ostatecznie powiązane ze sobą - nie może istnieć bez zewnętrznej instancji. Jak powiedział IMHO, jest to dokładnie kompozycja. –

+0

Nawiasem mówiąc, nie jest to w C# - nie ma automatycznego powiązania z zewnętrzną instancją ... –

0

w celu wskazania, że ​​wewnętrzna klasa jest privete najlepszy dla mnie jest w użyciu - znak, jak pokazano poniżej, ale oczywiście w tym przypadku pominięcia wewnętrzna struktura twojej wewnętrznej klasy .. enter image description here

4

Z punktu widzenia UML. Jeśli klasyfikator (także klasa) jest zagnieżdżony w innej klasie, klasa zagnieżdżania odgrywa rolę obszaru nazw. W tym przypadku klasy zagnieżdżone są ukryte (prywatne) w przestrzeni nazw kontekstu. Oznacza to, że twój diagram niejawnie definiuje prywatną definicję klasy wewnętrznej.

tutaj jest częścią definicji z UML Nadbudowa sekcji structred klasyfikatorów.

„klasa działa jako nazw dla różnych rodzajów klasyfikatorów określonych w jej zakres, w tym klas Kaskadowanie klasyfikatorów ogranicza widoczność klasyfikator w zakresie przestrzeni nazw klasy zawierającej i jest używany dla powodów ukrywania informacji. Zagnieżdżone klasyfikatory są używane tak jak każdy inny klasyfikator w klasie zawierającej. "

+0

Interesująca informacja. – BobRodes

+0

Studiuję to trochę dłużej. Zapis "kotwicy" na schemacie OP jest określony w 1.4, ale nie w 2.x. Zrobiłem trochę analizy Metamodelu przestrzeni nazw i wygląda na to, że najlepszym sposobem jest umieszczenie właściwości namespace na klasie zawierającej, nałożenie diamentu kompozycji na koniec skojarzenia klasy zawierającej i umieszczenie właściwości {subsets namespace} na zagnieżdżony koniec klasy. Właściwość podzbiorów implementuje widoczność opisaną w tym cytacie. Aby uzyskać więcej informacji, zobacz [to] (http://stackoverflow.com/questions/27797531/how-to-represent-the-nested-class-of-in-uml/27810986#27810986). – BobRodes