1. 객체지향 소프트웨어 공학
: 객체지향 기법은 구조적 기법의 문제점으로 인한 소프트웨어 위기의 해결책으로 채택되어 사용되어지고 있다
: 소프트웨어의 재사용 및 확장을 용이하게 함으로써 고품질의 소프트웨어를 빠르게 개발할 수 있으며 유지보수가 쉽다
: 자연적인 모델링이 가능하다, 실행속도가 빨라지는 건 아니다
- 객체지향 기법의 구성요소
1. 객체(Object)
: 데이터와 데이터를 처리하는 함수를 묶어 놓은 하나의 소프트웨어 모듈
* 데이터
: 객체가 가지고 있는 정보, 속성, 상태, 분류 등을 나타냄
* 함수
: 객체가 수행하는 기능, 객체의 상태를 참조하거나 변경하는 수단이 되는 것으로
: 메소드, 서비스, 동작연산이라고 함
2. 클래스(Class)
: 공통된 속성과 연산을 갖는 객체의 집합으로 객체의 일반적인 타입을 의미
: 동일 클래스에 속한 각각의 객체를 인스턴스라 하며, 클래스로부터 새로운 객체를 생성하는 것을 인스턴스화라고 한다.
: 하나 이상의 유사한 객체들을 묶어 공통된 특성을 표현한 데이터 추상화를 의미
3. 메세지(Message)
: 객체들 간에 상호작용하는데 사용되는 수단, 객체에게 어떤 행위를 하도록 지시하는 명령 또는 요구사항
* 오퍼레이션(operation)은 속성(attribute)를 변화시킴
2. 객체지향 기법의 기본 원칙 - 중요
1. 캡슐화(Encapsulation)
: 데이터와 데이터를 처리하는 함수를 하나로 묶는 것을 의미, 캡슐화된 객체들은 재사용o
: 객체의 세부 내용을 알 필요가 없으므로 인터페이스가 단순해지고, 객체간의 결합도 감소
: 자료부분과 연산 부분 등 정보처리에 필요한 기능을 한 테두리로 묶는 것
2. 정보은닉(Information Hiding)
: 다른 객체에게 자신의 정보를 숨기고 자신의 연산만을 통하여 접근을 허용하는 것
: 유지보수와 소프트웨어 확장시 오류를 최소화할 수 있다
: 고려되지 않은 영향들을 최소화하는 것이 근본적인 목적
3. 추상화(Abstraction)
: 불필요한 부분을 생략하고 객체의 속성 중 가장 중요한 것에만 중점을 두어 모델화
4. 상속성(Inheritance)
: 이미 정의된 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것
: 상위 클래스의 속성과 연산을 하위클래스가 공유할 수 있기 때문에 객체와 클래스의 재사용, 즉 소프트웨어의 재사용을 증대시키는 개념
5. 다형성(Polymorphism)
: 메시지에 의해 객체가 연산을 수행하게 될 때 하나의 메세지에 대해 각 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 능력을 의미
: 많은 상이한 클래스들이 동일한 메소드 명을 이용하는 능력
3. 객체지향 기법의 생명 주기와 분석
- 객체지향 기법의 생명주기
: 개발 과정 사이에서 같은 용어와 개념을 사용하여 분석, 설계, 구현 단계 사이의 전환이 쉬우므로 각 과정이 명확하게 순차적으로 이루어지지 않는다
- 객체지향 분석(OOA; Object Oriented Analysis)
: 사용자의 요구사항을 분석하여 요구된 문제와 관련된 모든 클래스, 이와 연관된 속성과 연산, 그들 간의 관계 등을 정의하여 모델링하는 작업
- 객체지향 분석의 방법론 **
1. Rumbaugh(럼바우) 방법
: 가장 일반적으로 사용되는 방법
: 객체 모델, 동적 모델, 기능 모델로 나누어 수행하는 방법
: 모든 소프트웨어 구성 요소를 그래픽 표기법을 이용하여 모델링하는 기법으로
: 객체 모델링 기법(OMT; Object-Modeling Technique)라고도 한다
**1) 객체 모델링(Object Modeling) - 정보 모델링
: 정보 모델링이라고도 하며, 시스템에서 요구되는 객체를 찾아내어 속성과 연산 식별 및 객체들 간의 관계를 규정하여 객체 다이어그램으로 표시하는것
* 순서 = 객체와 클래스를 식별 -> 클래스에 대한 자료사전 작성 -> 클래스 간의 관계를 정의 -> 객체 속성 및 연결 관계를 정의 -> 클래스를 계층화하고 모듈로 정의 -> 생성된 모형을 반복적으로 검증
**2) 동적 모델링(Dynamic Modeling)
: 상태 다이어그램을 이용하여 시간의 흐름에 따른 객체들 간의 제어 흐름, 상호 작용, 동작 순서 등이 동적인 행위를 표현하는 모델링
* 순서 = 사건의 상호 작용 순서에 대한 시나리오 작성 -> 시나리오를 역할과 시간에 따라 표기한 후 사건 추적도 작성 -> 사건 추적도를 사건 발생자의 관계로 설명하는 사건 흐름도를 작성 -> 사건과 상태를 연결시킨 상태도를 작성
**3) 기능 모델링(Functional Modeling)
: 자료 흐름도를 이용하여 다수의 프로세스들 간의 자료 흐름을 중심으로 처리 과정을 표현
: 어떤 데이터를 입력하여 어떤 결과를 구할 것인 지 표현
* 순서 = 외부와 시스템 간의 입, 출력 자료를 정의 -> 자료 흐름도 상세화 -> 프로세스 기능에 대한 정의를 기능 명세서로 작성 -> 제약 조건을 파악 -> 최적화 기준 명세화
2. Booch(부치) 방법
: 미시적(Micro) 개발 프로세스와 거시적(Macro) 개발 프로세스를 모두 사용하는 분석방법
: 클래스와 객체들을 분석 및 식별하고 클래스의 속성과 연산을 정의
3. Jacobson 방법
: Use Case(사용 사례)를 강조하여 사용하는 분석 방법
4. Coad와 Yourdon 방법
: E-R 다이어그램을 사용하여 객체의 행위를 모델링하여, 객체 식별, 구조 식별, 주제 정의,
속성과 인스턴스 연결 정의, 연산과 메세지 연결 정의 등의 과정으로 구성하는 기법
4. 객체지향 설계, 구현, 테스트
- 객체지향 설계(OOD; Object Oriented Design)
: 객체지향 분석을 사용해서 생성한 여러 가지 분석 모델을 설계 모델로 변환하는 작업
: 시스템 설계와 객체 설계를 수행
: 럼바우, 부치, 윌리엄 로렌스의 객체지향 설계 방법 제안 - 럼바우 가장 많이 사용
- 설계 단계의 순서
: 문제정의 -> 요구 명세화 -> 객체 연산자 정의 -> 객체 인터페이스 결정 -> 객체구현
- 럼바우의 객체지향 설계
* 시스템 설계
: 전체적인 시스템 구조를 설계하는 것으로 분석 단계의 분석 모델을 서브시스템으로 분할하고, 시스템의 계층을 정의하며 분할 과정 중에서 성능의 최적 방안, 문제 해결 전략, 자원 분해 등을 확정하는 것
- 절차
: 서브 시스템으로 분할 -> 동적 모델을 분석하여 객체들의 병행수행 가능성 파악 -> 서브시스템을 하드웨어와 태스크에 할당 -> 자원 관리 방법 및 공동 자원의 접근 방법을 결정
-> 시스템의 제어 방식을 결정 -> 경계 조건의 처리 방법을 결정 -> 우선순위를 결정
* 객체 설계
: 분석 단계에서 만들어진 클래스, 속성, 관계, 메세지를 이용한 통신들을 설계 모델로 제작하고 상세화하여 구체적인 자료 구조와 알고리즘을 정의
- 절차
: 객체 모델링, 동적 모델링을 통합하고 연산을 파악 -> 연산을 구현하기 위해 알고리즘을 설계 -> 자료에 대한 접근 경로 최적화 -> 외부와 상호작용하기 위한 제어 방식을 구현 ->
클래스 구조를 조정하여 상속성 향상 -> 관계를 설계하고, 객체의 표현 방법을 결정 -> 클래스의 관계를 단일 모듈로 생성 -> 문서화
- 부치의 객체지향 설계
: 자료 흐름도를 사용해서 객체를 분해하고, 객체들 간의 인터페이스를 찾아 Ada 프로그램으로 변환시키는 방법
- 윌리엄 로렌스의 객체지향 설계
: 추상화, 상속성, 메세지, 그리고 다른 OOD 개념들을 직접 지원해 주는 기능을 갖추고 있는 Smalltalk와 같은 프로그래밍 언어로 소프트웨어 개발하기 위한 기법
---------------------------------------------------------------------------------------------------
- 객체지향 구현
: 설계 단계에서 생성된 설계 모델과 명세서를 근거로 하여 코딩하는 단계
: 객체는 순차적으로 또는 동시적으로 구현될 수 있다
- 객체지향 프로그래밍(OOP; Object Oriented Programming)
: 새로운 개념의 모듈 단위, 즉 객체라는 단위를 중심으로 프로그램을 개발하는 기법
: 현실에 가까운 방식을 사용하여 이해하기 쉽고 조작하기 쉬운 프로그램을 개발가능
: 유지보수가 쉽고 재사용이 가능하고, 이미 개발된 프로그램을 이용해 빠르게 확장 프로그램을 개발할 수 있음
: 객체 기반 언어 - Ada, Actor와 같이 객체의 개념만을 지원하는 언어
: 클래스 기반언어 - Clu와 같이 객체와 클래스의 개념을 지원하는 언어
: 객체 지향성 언어 - 객체, 클래스, 상속의 개념을 모두 지원 Smalltalk, C++, Objective C
---------------------------------------------------------------------------------------------------
- 객체지향 테스트
1. 클래스 테스트
: 구조적 기법에서의 단위 테스트와 같은 개념으로 가장 작은 단위
: 즉 캡슐화된 클래스나 객체를 검사
2. 통합 테스트
: 객체를 몇 개 결합하여 하나의 시스템으로 완성시키는 과정에서의 검사로
: 스레드 기반 테스트와 사용 기반 테스트로 분류
3. 확인 테스트
: 사용자 요구사항에 대한 만족 여부를 검사
4. 시스템 테스트
: 모든 요소들이 적합하게 통합되고 올바른 기능을 수행하는 검사
- UML(Unified Modeling Language)
: 객체지향 방법론의 장점을 통합한 객체지향 모델의 표준 표현 방법
: 시스템 요구사항을 명세하고, 설계 의사 결정을 파악하는 데 도움이 되며, 객체지향 분석 및 설계 모델을 그래픽 형태로 표현하는데 우용
: UML은 어플리케이션을 개발할 때 이해를 도와주는 사용 사례 다이어그램
: 클래스, 순서, 상태, 활동 다이어그램등을 제공
- 사용사례(Use Case) 다이어그램
: 사용자의 요구를 분석하는 것으로 기능 모델링 작업에 사용, 사용자와 사용사례로 구성되며, 사용 사례 간의 여러 형태의 관계로 이루어짐
Popular Posts
-
1. 불 대수(G.Boole) : 0는 off, 1는 on // Switch 1) 기본적인 논리함수 2) 불 대수의 기본 공식 * 0과 1을 대입해서 옳고 그름을 판단하면 된다 3) 불 대수의 간소화 : ...
-
1. 데이터베이스 개념 : 업무 처리를 위해 사용자들이 공용으로 사용하기 위해 통합, 저장된 운영 데이터의 집합 : DBMS = DataBase Management System (데이터베이스 관리 시스템) -> crud : 사용자와 DBMS...
-
1. 다중 처리기(Multi-Processor) : 하나의 시스템에 여러 개의 처리기를 두어 하나의 작업을 각 처리기에게 할당하여 처리하는 것을 의미 : 프로세스간 상호작용이 밀접한 강결합 시스템 : 여러 작업을 동시에 처리하여 실행 시간이 감소...
Agapang. Powered by Blogger.
댓글 없음:
댓글 쓰기