클래스 다이어그램 11

[C++] 74. 최종 실습 – 클래스 추가하기

[C++] 최종 실습 – 클래스 추가하기 이제 클래스를 추가하고 클래스 사이의 관계에 따라 헤더 파일을 포함합시다. 여기에서는 헤더 파일에 포함문을 작성하는 것 까지만 할 거예요. 클래스 다이어그램을 보면서 클래스를 추가하세요. 현재 EhNara, Place, Downtown, School, Village 클래스를 추가한 상태죠. 앞에서 작성한 확장 가능한 순차 배열인 SeqArray 템플릿 클래스를 추가하세요. 그리고 상속과 다형성 최종 실습에서 작성한 프로그램에서 Student, MStudent, SStudent, PStudent 클래스를 이용할게요. 소스 파일과 헤더 파일을 복사하여 프로젝트에 추가하세요. 이 외에 Man, IStudy, IRelax, IPlay를 추가하세요. 그리고 이를 기반으로 ..

[C++] 70. 최종 실습 – 설계1(클래스 다이어그램)

[C++] 최종 실습 – 설계(클래스 다이어그램) 설계 단계에서는 프로그램에 정의할 형식을 정하고 이들 사이에 관계를 정의하는 것과 유즈케이스 별로 수행 흐름을 정의하는 작업이 있습니다. 프로그램에 정의할 형식을 정하고 이들 사이에 관계를 정의한 것은 클래스 다이어그램으로 표현합니다. 유즈케이스 별로 수행 흐름을 정의하는 것은 여러 가지 다이어그램으로 표현할 수 있는데 여기에서는 시퀀스 다이어그램으로 작성할게요. 먼저 프로그램에 정의할 형식을 정하고 이들 사이에 관계를 정의합시다. 제일 먼저 이 에이치 나라와 학생 공장이 있죠. 그리고 학교, 주거지, 다운타운이 있죠. 그런데 이 세 개의 형식은 학생이 올 수 있고 초점을 받아 사용자와 상호작용을 수행하는 등의 공통점이 있습니다. 논리적으로 보았을 때도 ..

[C++] 67. 실현(REALIZATION) 관계

[C++] 실현(REALIZATION) 관계 실현 관계는 기능 구현을 약속한 형식과 이를 구체적으로 구현한 형식 사이에 관계입니다. 기능 구현을 약속한 형식을 인터페이스라고 부릅니다. 따라서 실현 관계는 인터페이스 형식과 약속한 기능을 구체적으로 구현한 형식 사이의 관계입니다. CPP에서는 이 둘 사이의 관계는 파생 문법을 사용합니다. 이에 관한 사항은 이미 앞에서 인터페이스를 소개하면서 다룬 내용입니다. #include using namespace std; #define interface struct interface IStudy { virtual void Study()=0; }; class Student : public IStudy { public: void Study() { cout

[C++] 66. 의존(DEPENDENCY) 관계

[C++] 의존(DEPENDENCY) 관계 의존 관계는 다른 개체의 변화가 발생했을 때 자신에 영향을 받는 개체 사이의 관계입니다. 그리고 특정 개체의 생성을 담당할 때도 의존 관계로 표현합니다. GUI(Graphic User Interface) 프로그램에서 특정 데이터의 정보를 화면에 표시하는 컨트롤과 데이터 사이에는 의존 관계로 표현할 수 있습니다. UI 컨트롤을 통해 사용자가 개체의 속성을 입력하면 의존 관계에 있는 개체의 속성을 변경해야겠죠. 혹은 개체의 속성이 변하면 UI 컨트롤을 통해 변경한 정보를 사용자에 알려주어야 할 것입니다. 이 책에서는 GUI를 다루고 있지 않아 이와 같은 의존 관계는 표현하지 않을 거예요. 소프트웨어 설계에 관한 많은 레퍼런스에서는 UI 컨트롤과 개체 사이의 의존 관..

[C++] 64. 직접 연관(DIRECTED ASSOCIATION) 관계

[C++] 직접 연관(DIRECTED ASSOCIATION) 관계 직접 연관 관계는 프로그램에서 가장 흔하게 볼 수 있는 관계로 명령을 내리는 개체와 명령을 받아 수행하는 개체의 관계입니다. “고용자는 피 고용자에게 일을 시킬 수 있다.” 처럼 프로그램 세계에서는 매우 자연스러운 관계입니다. 목적 집단에서 목적을 달성하기 위해 상하 관계가 존재하는 것처럼 프로그램도 특정 목적을 수행하기 위한 코드 집합이어서 직접 연관 관계가 필요합니다. 특히 직접 연관 관계는 집합 관계나 구성 관계와 혼합 형태일 때도 많습니다. 예를 들어 회사 내부에 사원들이 있고 회사에서 특정 사원에게 일을 시킨다면 회사와 사원은 집합 관계이면서 직접 연관 관계입니다. 다음은 Company와 Worker 사이에 직접 연관 관계와 집합..

[C++] 63. 구성(COMPOSITION) 관계

[C++] 구성(COMPOSITION) 관계 구성 관계는 소유 개체와 피 소유 개체 사이의 관계입니다. 이러한 관계는 집합 관계도 마찬가지입니다. 두 가지 관계 모두 “가지다.”로 표현할 수 있으며 영어로 “Has a”로 표현할 수 있어서 “Has a”관계라고 말합니다. 집합 관계는 소유 개체와 피 소유 개체의 생성과 소멸은 독립적으로 진행합니다. 필통과 연필의 관계처럼 개체의 생성과 소멸은 독립적인 특징을 갖습니다. 구성 관계는 소유 개체를 생성할 때 피 소유 개체를 생성하고 소유 개체를 소멸할 때 피 소유 개체를 함께 소멸합니다. 사람과 눈의 관계처럼 소유 개체를 생성할 때 피 소유 개체도 함께 생성하고 소유 개체를 소멸할 때 피 소유 개체도 함께 소멸합니다. CPP에서 구성 관계를 구현하는 방법은 ..

[C++] 62. 집합(AGGREGATION) 관계

[C++] 집합(AGGREGATION) 관계 집합 관계는 개체를 보관하는 컬렉션과 개체 사이의 관계입니다. “필통은 연필을 보관할 수 있다.” 처럼 컬렉션 필통과 보관할 연필 사이의 관계입니다. 전산에서 자료구조라고 말하는 컬렉션과 컬렉션에 보관할 개체 사이의 관계입니다. 집합 관계와 구성 관계는 “가지고 있다.” 혹은 “가질 수 있다.”로 표현할 수 있고 영어로 “Has a”로 표현할 수 있어서 “Has a”관계라고도 부릅니다. 집합 관계는 컬렉션과 보관할 개체의 생성과 소멸은 독립적입니다. 참고로 구성 관계는 사람과 눈처럼 소유 개체를 생성할 때 피 소유 개체가 만들어지고 소유 개체가 소멸할 때 피 소유 개체도 같이 해제하는 특징을 갖습니다. 다음은 집합 관계에 있는 Pencil과 PencilCase..

[C++] 61. 클래스 간의 관계

[C++] 클래스 간의 관계 이번에는 프로그래밍할 때 개발자가 정의하는 형식과 형식 사이에 관계를 알아보기로 합시다. 여기에서는 UML에서의 클래스 다이어그램에 표현할 수 있는 관계를 기준으로 표현할게요. UML에서 클래스 사이의 관계는 7 가지로 표현할 수 있습니다. 일반화(Generalization) 관계: “피아니스트는 음악가이다.” 집합(Aggregation) 관계: “필통은 연필들과 지우개 등을 보관할 수 있다.” 구성(Composition) 관계: “사람은 눈과 귀 등을 가지고 태어난다.” 직접 연관(Directed Association) 관계: “고용주는 피고용주에게 일을 시킨다.” 연관(Association) 관계: “의사와 약사는 환자 치료에 상호 연관이 있다.” 의존(Dependency..

[C++] 21. 캡슐화 실습2 – 학생

[C++] 캡슐화 실습 – 학생 클래스 이번 실습은 학생 클래스를 캡슐화하는 실습입니다. 이번에는 시나리오를 보고 클래스 다이어그램을 작성한 후에 이를 구현해 보기로 해요. 1. 시나리오 학생은 생성할 때 학생 이름을 전달받습니다. 그리고 학생 번호는 순차적으로 부여합니다. 이 외에 학생의 국어, 영어, 수학 성적을 -1로 설정합니다. 학생을 생성한 후에는 학생의 국어, 영어, 수학 성적을 입력할 수 있습니다. 만약 학생 성적이 0에서 100을 벗어나면 -1로 설정합니다. 학생 이름과 번호, 각 과목의 성적과 총점 및 평균을 확인할 수 있습니다. 그리고 전체 학생 수를 확인할 수 있습니다. 그리고 학생 정보를 출력하는 기능을 제공합니다. 2. 클래스 다이어그램으로 나타내기 먼저 클래스 이름을 결정해야겠죠..

[C++] 20. 캡슐화 실습1 – 복소수

[C++] 캡슐화 실습 – 복소수 캡슐화 실습을 해 보기로 해요. 이번에는 복소수 클래스 캡슐화예요. OOP 프로그래밍 할 때 구현 이전의 작업과 이후의 많은 작업을 CASE 도구로 UML로 표현할 때가 많아요. CASE 도구에는 Rose, Together, StarUML 등이 있습니다. 이 책에서는 CASE 도구를 사용하는 방법을 구체적으로 다루지는 않지만 많은 곳에서 UML로 작성한 다이어그램으로 실습할 내용 등을 소개할 거예요. UML로 클래스를 표현할 때는 세 칸으로 구성한 사각형으로 나타내요. 맨 위는 클래스 이름, 두 번째는 멤버 필드, 마지막 칸은 멤버 메서드를 표현합니다. 멤버 앞에 +(public), -(private), #(protected)은 접근 지정자를 나타내죠. 그리고 멤버 필드..

Part 30. 도서 관리 프로그램 II - 장르 추가, 전체 장르 보기

Part 30. 도서 관리 프로그램 II - 장르 추가, 전체 장르 보기 C언어, 도서 관리 프로그램 104.도서관리프로그램 – 클래스다이어그램 도서 관리 프로그램에서는 장르별로 도서를 관리하게 할거예요. 따라서 사용자 정의 형식으로 프로그램, 장르, 도서로 역할을 구분하여 정의하기로 해요. 클래스 다이어그램에서는 프로그램에 정의할 형식을 클래스로 표시하고 클래스 간의 관계를 추가로 표시해요. 프로그램은 장르들의 집합체이고 장르는 도서의 집합체죠. 이와 같은 관계를 집합 관계(실선과 빈 다이아몬드)라 불러요. 이 외에도 클래스 간의 관계는 직접 연관 관계, 연관 관계, 집합 관계, 일반화 관계, 의존 관계, 실현 관계가 있어요. C++, Java, C# 처럼 OOP 프로그램에서는 이와 같은 관계에 어울리..