2010-01-11 5 views
25

UML은 C++을 사용하여 모델링 시스템에 가장 일반적으로 사용됩니다. 내 프로젝트에서 C는 구현 언어이다. C에 적용 할 수있는 UML 전략에 대한 자료를 찾고 있습니다. 설계 중에 UML을 사용하고 시스템의 여러 측면을 표현하고자합니다.C 프로그래밍 언어 용 UML

+1

제 질문은 C에서 OOP을 수행하는 방법에 관한 것이 아닙니다.이를 위해 www.state-machine.com/devzone/cplus_3.0_manual.pdf와 www.planetpdf.com/codecuts/pdfs/ooc와 같은 여러 가지 방법이 있습니다. .pdf. 언급 된 스티븐 (steven)이 말했듯이 C에서는 시퀀스 다이어그램과 컴포넌트 다이어그램 만 사용할 수 있습니다. 이 전략을 설명하는 자료를 찾고 있습니다. 나는 파일이 모듈을 나타내며 시퀀스 다이어그램에서 객체 대신 사용될 수 있다는 생각을 가지고 있습니다. 그리고이 전략을 사용하여 여러 모듈 간의 흐름을 보여줍니다. – Andy

+0

링크를 제공해 주셔서 감사합니다, Andy. –

답변

29

특히 C에 대해 UML을 사용하는 것에 대해 논의하는 기존 리소스에 대해서는 잘 모릅니다. 다른 사람들이 언급했듯이 UML은 언어에 구애받지 않습니다.

UML을 사용하면 문제 도메인에 대한 모델과 구현에 대한 모델을 가질 수 있습니다. 문제 도메인을 C로 모델링하지 말고, 고차원 OO로 모델링하십시오. 문제 도메인을 충분히 이해하면 구현 모델링을 시작할 수 있습니다.

절차 스타일의 C 구현을 모델링를 들어, 다음 다이어그램은 유용 할 수 :

  • 클래스 다이어그램 :
    • 쇼 C 모듈 API를
    • 쇼 C 모듈 관계 (주로 비 종속성 OO)
    • 구조 및 열거 형 표시 (< < 스테레오 타입>>)
  • 패키지 다이어그램 : 라이브러리의 내용 표시 (모듈) 및 라이브러리 사이의 종속 관계
  • 활동 다이어그램 : 설명하는 흐름도 적지 않은 알고리즘
  • 시퀀스/협력 다이어그램 : 표시 방법 모듈/개체 간의 이벤트/메시지/입력/출력은 시간에 발생합니다.
  • 상태 차트 다이어그램 : 물론 상태 시스템의 경우!

, 클래스 다이어그램에 확장 할 수 있습니다 "학대"그 절차 스타일의 C에 대한 다음과 같은 방법으로 :

  • 글로벌 통근 기능 -> 공공 방법
  • 지역 정적 함수 -> 개인 방법
  • 글로벌 통근 변수 -> public 멤버
  • 지역 정적 변수 -> 개인 회원
  • 구조체 -> "구조체"stereotyp와 클래스 전자
  • #define 상수 -> "열거"고정 관념

실험, 당신은 UML을 남용에 대한 자신의 규칙을 찾을 수와 클래스입니다.

6

C의 문제점은 절차 적 프로그래밍 언어에 더 가깝다는 것입니다. C 애플리케이션으로 세분화 된 디자인을 얻는 것이 어렵습니다. C로 작업하는 경우 시퀀스 다이어그램 및 구성 요소 다이어그램을 종속성 및 상호 작용의 그래프가 아닌 진행중인 작업의 개요 및 개요와 함께 유지할 수 있습니다.

+0

C는 "기능적"프로그래밍 언어가 아닙니다. 내가 찾은 용어는 "절차 적"이라고 생각합니다. – coobird

+0

당신은 그것에 대해 옳았어요, 생각하고 있었는데 ... 기능은 아니지만 클래스 = 기능적 ...하지만 가장 엄격한 정의에 따르면 기능적입니다 ... 작동합니다 : P – monksy

+1

UML이 C에 적합하지 않다는 것에 동의합니다. UML이 객체 지향적 인 사고 체계에서 파생되었다는 점을 감안할 때. 하지만 상속과 다형성은 단순하지는 않지만 함수 포인터를 포함하는 구조체를 사용하여 C에서 최소한의 관계 기반의 객체 지향 구조를 해킹 할 수 있습니다. 어느 쪽이든, UML은 C 언어에서 그다지 유용하지 않습니다. –

5

객체 지향 디자인은 언어와 독립적이며, 물론 UML을 사용하여 시스템을 디자인 할 수 있습니다. 랩소디와 같은 일부 도구는 코드 생성 및 라운드 트립을 허용 할 것이며 C++가 옵션이 아닌 몇 가지 특수 프로젝트에 사용합니다. 직접 코드를 작성하려면 Subsystem_Module_Class_Method와 같은 명명 규칙을 사용하여 객체 지향 방식으로 함수의 이름을 지정하고 클래스 당 .c 파일을 사용하십시오. C를 사용하면 깨끗한 디자인에 대한 장애물이되지 않습니다.

+0

깨끗한 디자인을위한 장애물이 아니지만 OOP 언어에서와 마찬가지로 추상화 수준과 구성 요소 디자인을 사용하지 않을 것입니다. 그것이 OOP가 만들어진 이유입니다. – monksy

+0

OOP는 C로도 수행 할 수 있습니다. GTK가 좋은 예입니다. 그것은 매크로를 많이 사용하지만, 구문 론적으로는 꽤 깨끗합니다. 다른 언어가 구문에 더 잘 통합되어 있으며 코드가 조금 더 깨끗해 보이지만 C를 사용하면 같은 목표를 달성 할 수 있다는 것에 동의합니다. 추상화는 디자인에 있으며, 코드는이를 잘 반영합니다. – jdehaan