객체지향설계와패턴 Lecture #4: 정적모델링 Eun Man Choi emchoi@dgu.ac.kr
학습목표 객체지향 구조적모델 클래스와속성 관계와오퍼레이션 클래스다이어그램 2
Old Way 프로그램은데이터와함수로구성 함수는데이터를조작 프로그램을조직화하기위해 기능적분할 자료흐름도 모듈 Main program global lbldt data call call call return return return function1 function2 function3 3
New Way Main object data message message object3 data 어떤객체가있어야하고어떤오퍼레이션이수행되어야하는지, 어떻게서로인터랙션하는지분석 1990 중반부터사용 message message object2 data message 대부분의최신프로그래밍언어는객체기반 (C++, Java, Ada 95, C#, ) object1 data 4
Data Abstraction 방법 1: 데이터와함수를별도로파악 방법 2: 데이터타입과오퍼레이션을함께파악 예 ) Point 방법 1 방법2 struct Point { // 0< x, y < 1000 class Point float x; { float x; float y; float y; public: }; Point(float, float); typedef struct Point Point; float dist(const Point&); float Point_dist(Point*); }; 5
String 처리프로그램 class String { char* str; int len; public: String(const char*); String(const String&); char charat(int) const; int length() const; int search(const String&) const; }; Data abstraction 소프트웨어구조와설계방법에변화 6
클래스 클래스에서외부에제공하는서비스를 public 메소드로정의 내부사용함수는 private 으로정의 인트턴스변수는외부접근금지의미로 private 선언 public class BankAccount { 7 BankAccount public void BankAccount { } - accountnumber - accountowner public void deposit(int amount) { - balance balance += amount; + deposit + withdrawal + printstatement Multiple constructors may be provided } // additional methods such as withdrawal Method definition private String accountnumber; private String accountowner; private int balance = 0; instance... variables / } attributes
객체지향설계과정 도메인을보고객체와클래스를식별 맨처음찾아야할것은객체 객체를그루핑하여클래스를발견 객체및클래스사이의관계파악 구조관계 협력관계 책임 (responsibility) 을할당 파악한협력관계를기초로 반복, 반복, 8
객체, 클래스찾기가중요한이유 프로그램의구조를결정 실행속도를좌우 메모리 메소드호출 변경작업 범위를결정 난이도를결정 9
객체란? 자료와관련된오퍼레이션을가지고있는작은모듈 자료는상태를가지며오퍼레이션은객체의동작을결정 객체는 OOP 의개념정립 (abstraction) 의단위 10
객체란? 객체는 Real World 의엔티티를나타냄 사람, 자동차, 은행구좌, 주문 11
물리적, 개념적객체 물리적객체 눈에보이는실체 예 : My car, Kim s computer 개념적객체 논리적인개념 잘정의된범위와의미를가진개념 예 : Purchase order, Bank transaction Purchase Order, 001 12
객체가되려면? 상태를가져야한다. 객체가가지는자료값이상태를결정 시간이흐르면서변할수있음 예 : 강좌 (course) 의상태 open, close 객체는잘정의된오퍼레이션이있어야함 객체의오퍼레이션은동작을결정 객체외부에서요구할때오퍼레이션을호출 예 : 강좌시간결정, 수강생추가, 수강생삭제 13
객체가되려면? 고유한 Identity 가있어야 객체를구별할수있는수단 Identification 의타입 메인메모리에서는객체이름 영구적인고유번호가필요 예 : 강좌 course1, course2 OOAD-2008, OOAD-2009 14
Exercise #2: 객체찾기 부록 : Exercise 워크북참조 다음애플리케이션에서객체가될수있는것들을찾으시오. 도서관시스템 휴대폰소프트웨어 네비게이션소프트웨어 15
구조적단계의작업 요구를만족시키는내부적구조를클래스관점에서표현 클래스 ( 속성, 오퍼레이션 ) 찾기 관계찾기 클래스다이어그램그리기 16
클래스다이어그램 프로그램의구조를잘나타내고있어코딩작업에근간이됨 클래스내부의정의 오퍼레이션의정의 클래스사이의인터렉션에사용되는인터페이스정의 17
4.2 구조적모델 시스템내부의관점 특히구조라는관점의뷰 어떤구성요소가있고이들이이어떤관계를맺고있는지표현 시간이흐르더라도변하지않는정적구조 새로운문제도메인의중요한클래스발견 18
구조적관점 시스템을구성하는빌딩블록을보여줌 건축물설계도면의단면도평면도 관점에따라나타내는대상이다름 19
구조적모델의층 규모가크면여러계층구조로정리할필요가있음 예 ) 자동차 엔진, 바퀴, 조향장치, 바디, 충격흡수장치, 계기판 20
클래스다이어그램을작성하는목적 시스템을구성하는요소를문서화 클래스사이의연관, 일반화, 집합관계를표시 클래스의기능, 특히속성과오퍼레이션을나타냄 문제영역의클래스명세로부터구현을위한자세한설계까지시스템 의클래스구조를나타냄 시스템의클래스들이클래스라이브러리와어떻게협력하는지를나타 냄 클래스들의인터페이스를나타냄 시스템안에어떤객체가존재할수있는지를나타냄 21
4.3 클래스와속성 클래스 시스템이처리해야할자료와그자료와관련된오퍼레이션을정의한작은모듈 클래스가될수있는것 사물 항공기, 책, 엔진, 핵반응기, 애완견, 국립공원, 경마, 운송수단, 역할 의사, 배송직원, 고객, 부서, 환자, 입주자, 사원, 납세자, 사건 항공편, 사고, 공연, 이벤트, 시스템장애, 서비스호출 인터랙션 구매, 신용카드결재, 간선 명세 보험상품, 서적상품, 신용카드종류 22
명세클래스와실제클래스 명세는구체적인인스턴스의공유하는특성 예 ) 서적 ( 명세 ) 제목, 저자, ISBN, 출판사, 년도책 ( 카피 ) 구체적인책한권 명세클래스 실제클래스 보험상품 보험증권 서적상품 책 신용카드종류 신용카드계정 23
속성 클래스로추상화된모든개체들에의하여소유된특성하나하나 만족하여야할목적 완전성 - 클래스가갖는모든정보를소유 완전분할 - 각속성이클래스각각의측면을나타냄 배타적독립 - 속성들이각각독립적인값을보관 속성찾기 서술적속성 주문의총액, 고객의주소 명명속성 항공기고유번호 지칭속성 관련된클래스를지칭 24
클래스와속성의검토 대상검토 도메인의임무에비추어검토 추상화 OR 검토 혼합되어있는개념은별도의클래스로분리 단순한리스트인지검토 여러개의객체를의미없이모아놓은것이아닌지 복합속성값 예 ) 우편주소 ( 우편번호, 주소 ) 속성, 연락처 ( 우편주소, 전화번호 ) X 의미없는속성, 통일되지않는클래스 25
4.4 관계와연관 UML 관계 연관 (association) 일반화 (generalization) i 연관 의존 (dependency) 저자는책을쓴다. 출판사는책을만들고판매한다. 고객은책을구입한다. 26
다중도 27
연관 연관클래스 연관에참여하는두클래스의추가데이터를갖는클래스 회귀연산 같은클래스의인스턴스사이에존재하는연관 28
연관의검사 조건 무조건적인것인지, 관련되지않아도되는것인지검토 예 ) 국회의원 지역구, 기관장 행정조직 정확한클래스와역할 출판사는책을만들고판매한다. 고객은책을구매한다. 29
일반화 클래스의속성과동작을공유하는점과다른점이동시에있을때 30
집합과합성연관 집합연관 다른클래스의인스턴스를자신의속성으로가짐 합성연관 집합연관과같으나전체개념의클래스의인스턴스가삭제될때부분개념도삭제 ( 공동운명체 ) 31
4.5 오퍼레이션 오퍼레이션 객체를생성하고소멸시키고 속성을접근하고 링크시키고 조건에의하여선택, 반복처리하고자료를변환시킴 다른객체와협력하에이루어지는경우가많음 32
객체생성과속성접근 기본적인오퍼레이션 정보은닉때문에감추어진것을접근할수있도록도와줌. 오퍼레이션타입 오퍼레이션정의 객체생성자 Customer(InternetAddress i, PersonalName p, MailingAddre ss m, TelephoneNumber t) 속성쓰기 putshippingaddress(mailingaddress m) 속성읽기 객체소멸자 getshippingaddress(); MailingAddress ~Customer()
조건체크와탐색, 조작 조건체크 객체가가지는속성값이특정한값인지체크하는작업 오퍼레이션타입 오퍼레이션정의 속성값체크 IsPurchaseMade(int p) 속성값체크 IsNullPhone() 속성값체크 IsNullShippingAddress() i 탐색과조작 오퍼레이션타입 오퍼레이션정의 탐색 getallorders() 탐색 getorders(date d) 조작 makeorder() 34
입출력 객체안에값을외부에서입력받아저장 객체안의값을화면이나프린터에보내야하는경우 오퍼레이션타입 오퍼레이션정의 입력 setcustomer(internetaddress t t tadd i, PersonalName p, MailingAddress m, TelephoneNumber t) 출력 showcustomer() 출력 showpurchasemade() 35
4.6 클래스다이어그램 클래스다이어그램의요소 그림요소이름설명 시스템이추출하여보관하여야할사람, 장소, 사물등을 나타냄 클래스 맨위칸에클래스이름, 중간칸에속성, 아래칸에오퍼 속성이름 : 타입 = 초기값 속성 레이션 모든클래스에있는오퍼레이션은표시하지않음 객체의상태를나타내는자료를저장 다른속성에의하여파생된속성은앞에 / 표시 operation(type n ame): return 오퍼레이션 클래스가실행할수있는액션이나함수를표시 생성자, 조건질의, 변경 / 조작오퍼레이션으로분류 괄호안에매개변수의타입과이름을나열함 연관 여러클래스사이에관계를표현 관계를상세히표현하기위해역할이름을양쪽에표시 36 연관에참여하는객체의개수, 즉다중도를표시
클래스다이어그램의요소 연관에참여하는객체의개수 다중도 1 은한개, 0..* 은 0 이상다수, 1..* 은 1 이상다수, 2..4 는최소 2 개에서최대 4 개 상속 클래스의속성과오퍼레이션의정의를중복정의 하지않고서브클래스에서쓸수있는관계 집합연관 전제개념과부분개념의객체를포함하고있는 관계 합성연관 전제개념과부분개념의객체를포함하고있으 며객체의운명을같이하는관계 37
클래스다이어그램작성법 반복적인과정 개념적모델링 간단히중요한클래스의존재와관계만표현 명세적모델링 구현에필요한자료구조, UI, 데이터베이스, 통신에필요한클래스포함 클래스찾기 인터넷서점시스템은고객이시스템에로그인하여상호작용하면서서점에서판매하는책을찾아보고구매한다. 구매자가구매이력을확인하기위하여시스템은구매기록을보관하고보안을제공할필요가있다. 고객은구매한책을신용카드나온라인송금등여러가지방법으로결재할수있다. 고객은구매하고싶은책을저자색인으로찾을수있고책을구매하고읽은사람들의리뷰를볼수있다. 시스템은고객이구매한이력을바탕으로고객의취향을찾아내어보관한다. 38
사용사례점수와프로젝트규모 클래스로적당하지않는것배제 중보클래스 고객, 구매자 관계없는클래스 시스템구축비용 불확실한클래스 보안 인터넷서점의클래스후보 39
연관찾기 문제정의에있는것 고객은책을구매한다. 사용자는로그인한다. 사용자는구매이력을확인한다. 주문을위하여결재한다. 결재에는신용카드와온라인송금이있다. 책을저자색인으로찾는다. 고객은취향을가진다. 문제정의에없는것 사용자는계정을갖는다. 주문은주문상세로구성된다. 검색결과는책으로구성된다. 출판사는책을출간한다. 40
속성찾기및클래스다이어그램그리기 41
사례 - AcuaLush 42
4.7 CRC 카드 클래스가어떤책임을가져야하는지를찾아내는데사용하는카드 Order 주문할책의재고가있는가체크 배송방법체크 Order Detail Customer 상세주문탐색주문상태체크배송주소확인 장점 개발자와사용자와의대화유도 클래스검토에유용 적용대상 개발초기 43
실습 #3: 마이크로웨이브오븐클래스다이어그램 문제정의 마이크로웨이브오븐은마이크로웨이브로음식의분자를진동시켜음식을가열한다. 사용자는키패드를사용하여오븐이얼마동안, 어떤파워수준으로음식을가열할것인지알린다. 타이머가멈추면오븐을중지시키고종을울린다. 문이열려도마이크로웨이브오븐이멈춘다. 마이크로파발생기는클라이스트론을제어하여작동한다. 작업목표 오븐소프트웨어에필요한클래스를찾고클래스다이어그램을그리기 작업방법 CRC 카드사용, StarUML 사용 44
Questions?