2010-05-06 6 views
2

일부 C++ 파일에서 다양한 UML 다이어그램 (시퀀스/공동 작업, 클래스, 패키지 및 시스템 구성 요소)이 필요합니다. 그러나이 파일은 더 큰 프로그래밍 프레임 워크의 플러그인입니다. Rational Rose 7 (2002 버전)에서 UML을 생성 해 보았습니다. 그러나 RR이 단순히 다이어그램을 생성 할 수 없거나 잘못된 작업을하고 있거나 다이어그램이 올바르게 렌더링되지 않으면 소스 파일이 독립 실행 형 프로그램 대신 플러그인. Star Modeler는 거의 성공하지 못했지만이 모델을 생성하는 방법에 대한 자습서는없는 것 같습니다.C++ 플러그인 모듈에 대해 생성 된 UML 다이어그램이 필요합니다.

C++ 파일에 대한 UML 다이어그램을 가져 오는 간단하고 강력한 방법이 있습니까?

답변

0

나는 이것이 질문에 답하고 있지 않다는 것을 알고 있지만, graphviz dot으로 어떤 것을 조롱 할 수있다. 동기를 부여하기 위해, 여기에 자체 헤더 의존성 표현 이미지를 생성하는 데 사용할 수있는 도트 스크립트를 생성하는 루비 스크립트 :

puts "digraph {" 
ARGV.each_index do |i| 
    File.open ARGV[i] do |f| 
    while line = f.gets 
     if line =~ /^#\s*include\s*[<"](.*)[>"]/ 
     puts " \"#{File.basename ARGV[i]}\"->\"#{$1}\";" 
     end 
    end 
    end 
end 
puts "}" 
스크립트가 headers.rb라는 이름의 경우

하고 당신이 배쉬를 사용하는 당신의 쉘 그러면 다음과 같이 사용할 수 있습니다 :

ruby headers.rb *.cc |dot -Tpng >header_deps.png 

이렇게하면 헤더 종속성의 png 이미지가됩니다. 클래스 상속과 비슷한 일을 할 수 있습니다. 더 복잡한 시나리오를 위해 ctags를 이용할 수 있습니다.

최종 결과? 너는 바퀴를 다시 발명하고 재미있게 그렇게했다. : p

+0

약간 도움이 되긴하지만 모형이 아닌 공식 UML 다이어그램이 필요합니다. – user334918

+0

아무도 도와 줄 수 있습니까? 클래스 다이어그램 만하는 무언가 또는 내가 필요한 것을 얻기 위해 프로그램을 사용하는 방법에 관한 튜토리얼은 매우 유용 할 것입니다! – user334918

0

Windows 사용자 인 경우 StarUML을 시도해 볼 수 있습니다. discussion here이 말하길, 프로젝트가 죽은 것처럼 보일지라도 프로그램은 내 Windows 7 컴퓨터에서 정상적으로 실행됩니다.

StarUML은 C++ 소스 코드 파일 세트에서 클래스 및 상속 관계에 대한 훌륭한 클래스 다이어그램을 생성 할 수 있음을 발견했습니다. 그러나 클래스간에 연관 링크를 생성 할 수 없었습니다. 나는 아직도 StarUML을 배우고 있으므로 뭔가 잘못하고있을 수도 있습니다.

또한 클래스 다이어그램이 아닌 리버스 엔지니어링을 수행 할 수 있다고 생각하지 않지만 시작일 수 있습니다.

1

대부분의 UML 도구는 C++의 하위 집합 만 지원합니다. C 전 처리기를 포함하지 않는 모든 UML 도구는 상당한 양의 정보를 놓치고 C++의 복잡성 때문에 혼동하기 쉽습니다.

UML 도구의 리버스 엔지니어링의 주요 사용 사례는 라운드 트립 엔지니어링입니다. 먼저 UML 모델을 만든 다음 코드를 생성 한 다음 조금 작게 조정하지만 변경 사항을 다시 가져옵니다.

C++에는 UML에 직접적인 표현이 전혀없는 많은 구조가 많이 있습니다. C++은 다중 패러다임 언어입니다. UML은 OO 모델링 언어입니다.

그래서 짧은 응답이 (AN auto_ptr 또는 값?를 std::vector<int> 멤버 변수는 매개 변수화 클래스에 연관 또는 유형 int[0..*]의 속성 복합체이다) 같은 UML 구조에 매핑 많은 C++ 숙어있다 아니요. C++에서 UML 다이어그램을 가져 오는 간단하고 방탄적인 방법은 없습니다.

관련 문제