객체지향 소프트웨어 공학
- 개요
- 현실 세계의 entitiy를 하나의 object로 만들어, 소프트웨어를 작성할 때에도 객체를 조립하듯이 하는 기법
- 구조적 기법의 문제점으로 인한 소프트웨어 위기의 해결책으로 제시
- 소프트웨어의 재사용 및 확장성을 높임 --> 고품질의 빠른 개발. 유지보수 용이
- 복잡한 구조를 단계적(계층적)으로 표현. 멀티미디어 데이터 및 병렬 처리 지원
- 구성 요소
- 객체 (object)
- 데이터 + 데이터를 처리하는 함수 ==> 두 가지를 하나로 모은 모듈
- 데이터 : 객체가 가지고 있는 정보. 속성. 상태. 분류
- 데이터 처리 함수 : 객체가 처리하는 기능. 객체의 상태를 참조하거나 변경. (=메소드.서비스.동작.연산)
- 클래스 (class)
- 공통된 속성과 연산을 갖는 객체의 집합
- 객체들이 갖는 속성과 연산을 정의
- Instance (인스턴스) : 클래스에 속한 객체. 인스턴스화: 클래스로 새로운 객체 생성하는 것
- 최상위 클래스는 유일하게 상위 클래스를 갖지 않음.
- 슈퍼클래스 : 특정 클래스의 상위(부모) 클래스.
- 서브클래스 : 특정 클래스의 하위(자식) 클래스
- 메시지 (message)
- 객체 간의 상호작용할 때 사용하는 수단. 외부에서 메소드를 일으키는 요구사항.
- 메시지를 수신받은 객체는 요구된 메소드를 수행하여 결과 반환
- 객체지향 기법의 원칙
- 캡슐화 (encapsulation)
- 데이터와 데이터 함수를 하나로 묶는 것.
- 재사용이 쉬움
- 객체 세부 내용 알필요가 없으므로 인터페이스가 단순해짐
- 객체 간 결합도가 낮아짐
- 정보 은닉 (information hiding)
- 다른 객체에게 자신의 정보를 숨김. 연산을 통하여 접근 허용
- 객체의 수정이 다른 객체에게 주는 영향이 적음 (최소화)
- 유지보수 및 소프트웨어 확장 시 오류 최소화
- 추상화 (abstraction)
- 불필요한 부분 생략. 객체의 중요한 속상에 중점을 두어 모델화
- 상속성 (inheritance)
- 상위 클래스의 모든 속성과 연산을 하위클래스가 물려 받음
- 하위 클래스는 상위 클래스의 속성과 연산을 정의하지 않고서 사용할 수 있음
- 하위 클래스는 상위 클래스의 속성 및 연산 외에 새로운 속성과 연산 추가 가능
- 다형성 (polymorphism)
- 메시지에 의해 객체가 수행될 때, 메시지에 대해 각 객체가 가지고 있는 고유한 방법으로 응답하는 능력
- 객체는 동일한 메소드를 사용하여 같은 의미를 갖는 결과를 내놓음
- 객채지향 기법의 생명주기
- 계획 및 분석 -> 설계 -> 구현 -> 테스트 및 검증
- 각 단계의 전환이 쉬우므로, 각 과정이 명확하게 순차적으로 이루어지지 않음
- 객채지향 분석 (Object Oriented Analysis, OOA)
- 사용자의 요구사항을 분석하여 요구된 문제와 관련된 모든 클래스(객체), 관련 속성 및 연산, 객체 간의 관계등을 정의하여 모델링하는 것
- 객체지향 분석의 방법론
- Rumbaugh(럼바우) 방법
- 가장 일반적으로 사용. 객체 모델, 동적 모델, 기능 모델로 나누어 수행
- Booch(부치) 방법
- 미시적(micro) 및 거시적(macro) 개발 프로세스를 모두 사용
- Jacobson(제이콥슨) 방법
- use case를 강조하여 분석
- Coad와 Yourdon 방법
- e-r 다이어그램을 사용하여 개체 활동을 데이터 모델링하는 데 초점
- Wirfs-Brock 방법
- 분석과 설계 간의 구분이 없음.
- 고객 명세를 평가하여 설계 작업까지 연속적으로 수행
- ** 럼바우의 분석 기법
- = 객체 모델링 기법 (OMT)
- 객체 모델링
- =정보 모델링
- 시스템에서 요구되는 객체를 찾아 속성과 연산 식별 및 객체 간 관계 규정하여 객체 다이어그램으로 표현
- 순서
- 객체/클래스 식별 --> 클래스 자료사전 작성 --> 클래스 간 관계 정의 --> 객체 속성 및 연결 관계 정의 --> 클래스 계층화, 모듈 정의 --> 생성된 모형을 반복적으로 검증
- 동적 모델링
- 상태 다이어그램을 이용하여 시간의 흐름에 따른 객체 간 제어 흐름, 동작 순서 등 동적 행위 표현
- 객체나 클래스의 사건, 상태를 중심으로 다룸
- 순서
- 상호 작용 순서에 대한 시나리오 작성 --> 시나리오를 역할과 시간에 따라 표기하여 사건 추적도 작성 --> 추적도를 바탕으로 사건 흐름도 작성 --> 사건과 상태를 연결시킨 상태도 작성
- 기능 모델링
- 자료 흐름도(DFD)를 이용하여 다수의 프로세스 간의 자료 흐름을 중심으로 처리 과정을 표현한 모델링
- 입력에 따른 어떤 결과를 구할지 표현
- 순서
- 외부와 시스템 간 입출력 자료 정의 --> 자료 흐름도 상세화 --> 프로세스의 기능에 대한 정의를 기능명세서로 작성 -->제약조건 파악 --> 최적화 기준 명세화
- 객채지향 설계 (Object Oriented Design, OOD)
- 분석 모델을 설계 모델로 변환
- 시스템 설계 및 객체 설계 수행
- 설개 개념 : 추상화, 정보은닉, 기능 독립성, 모듈화⭐️ , 상속성
- 일반적인 설계 순서
- 문제 정의 -> 요구 명세화 -> 객체 연산자 정의 -> 객체 인터페이스 결정 -> 객체 구현
- 럼바우(rumbaugh)의 설계
- 시스템설계
- 전체적인 시스템 구조 설계
- 분석 단계의 분석 모델을 서브 시스템으로 분할하여 시스템 계층을 정의
- 분할 과정 중에서 성능 최적화 방안, 문제 해결 전략 등을 확정
- 객체설계
- 분석 단계에서 만들어진 객체와 요소들을 이용한 통신을 설계모델로 제작
- 부치(Booch)의 설계
- 자료 흐름도(DFD)를 사용하여 객체를 분해하고, 객체 간 인터페이스를 찾아 ADA 프로그램으로 변환
- 윌리엄 로렌슨(William Lorensen)의 설계
- 추상화, 상속성, 메시지 등의 OOD 개념을 직접 지원해주는 기능을 갖고 있는 프로그래밍 언어 (예,smalltalk)로 개발하기 위한 기법
- 객채지향 구현
- 객체는 순차적으로(sequentially) 또는 동시적으로(concurrently) 구현 될 수 있다
- 객체지향 프로그래밍 (OOP)
- 새로운 개념의 모듈 단위(객체)를 중심으로 하여 프로그램 개발
- 개발 언어
- 객체 기반 (객체만 지원) - ada, actor
- 클래스 기반 (객체와 클래스 지원)- clu
- 객체 지향성 (객체, 클래스, 상속 지원)- simula, smalltalk, c++, object C 등
- 객채지향 테스트
- 클래스 테스트
- 구조적 기법에서의 단위테스트와 같은 개념. 최소 단위의 객체 검사
- 통합 테스트
- 객체를 결합하여 하나의 시스템으로 완성 시키는 과정에서 검사
- 스레드 기반 테스트 - 각각 스레드가 통합되고 개별적으로 테스트
- 사용 기반 테스트 - 독립 테스트 후 종속 테스트
- 확인 테스트
- 요구사항 만족 여부 검사
- 시스템 테스트
- 모든 요소들이 적합하게 통합되고 올바르게 수행하는지 테스트
- cf. UML
- 객체지향 분석과 설계를 위한 모델링 언어
- Use Case Diagram
- Class Diagram
- Sequence Diagram
- State Diagram
- Activity Diagram
'Computers > SW Engineering' 카테고리의 다른 글
day 5. 소프트웨어 공학의 추세 (0) | 2016.03.22 |
---|---|
day 3. 전통적 S/W 개발방법 - 구현, 검사, 유지보수 (0) | 2016.03.21 |
day 3. 전통적 S/W 개발방법 - 요구사항 분석, 자동화 도구, 설계 (0) | 2016.03.21 |
day 2. 프로젝트 관리 - 위험 관리, 형상 관리 (0) | 2016.03.17 |
day 2. 프로젝트 관리 - 조직 구성, 품질 보증, 신뢰성/가용성 (0) | 2016.03.17 |