Computers/SW Engineering

day 4. 객체지향 S/W 공학

emzei 2016. 3. 21. 23:27


객체지향 소프트웨어 공학
  • 개요
    • 현실 세계의 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