객체 지향 개발: C++ 프로그래밍 케이스 1: 사양 변경

개인 개발을 하고 있어도, 좀처럼 C++オブジェクト指向 패러다임으로부터 혜택을 얻고 있는 감각이 솟아 오지 않을지도 모릅니다.
그런 당신에게 하나의 구체적인 케이스를 소개합시다.

소개



시스템에 무언가를 제어하는 ​​기능이 있다고 가정 해 봅시다.
클래스도로 표현하면 다음과 같은 이미지입니다.



수업의 책임은 각각 노트에 설명되어 있습니다.
A: 제어 지시를 내거나 제어 정보를 관리하거나
 B:대상물을 제어하고 있다
 C:대상물의 상태를 취득한다
 D:제어 대상에 출력을 지시한다
 E:제어 정보를 유저에게 공개한다(GUI나 그 근처)

대부분 추상화되어 버리고 있으므로 이미지가 솟지 않을지도 모릅니다.
전기 주전자를 이미지 해 봅시다.
아, 네이밍이 이마이치・・・TemperatureOperator : 온도 정보 관리TemperatureController : 물의 온도를 제어한다TemperatureAccessor : 온도 센서로부터 물의 온도를 취득한다Heater : 히터에 걸리는 전압을 지시한다TemperatureInformation : 물의 온도를 몇 번으로 하고 있는지 디스플레이에 표시



사양 변경



사양은 항상 변화하는 것입니다.
그에 따라 소프트웨어도 변화합니다.

예를 들면 「온도 센서로부터 취득하는 데이터는, 10sec의 단순 이동 평균으로 해 주었으면 한다」라고 요구되었다고 합시다.
이 경우 어떤 대응이 요구됩니까?



그렇네요, 온도 센서로부터 취득해 TemperatureController 에 온도 데이터를 건네주기 전에, 내부에서 10sec의 단순 이동 평균을 가하는 것 같은 클래스가 있으면 좋네요.
이미 TemperatureController가 온도 데이터를 얻기위한 I/Fクラス가 존재하기 때문입니다.
, 그 파생 클래스(실현 클래스, 구상 클래스)로서 new 하면 좋게 됩니다.

TemperatureController.cpp
    // Instantiate. 
    temperatureAccessor_ = new TemperatureSimpleMovingAverage;

    // get temperature data. 
    if(NULL != temperatureAccessor_)
    {
        currentTemperature_ = temperatureAccessor_->getTemperature();
    }

TemperatureController.h
private:
    ITemperatureAccessor* temperatureAccessor_;
TemperatureController 로부터 하면, 취득한 온도 데이터가 이동 평균을 곱한 것인지 어떤지 모릅니다.
온도 센서로부터 취득한 온도에 3도(3℃) 더한 데이터를 TemperatureController가 모르게 취득하고 있을지도 모릅니다.



사양의 변화가 이 정도라면, 생성되는 인스턴스의 클래스가 바뀔 뿐입니다.I/Fクラス 의 파생 클래스로서는, 이하가 존재하고 있어, new 하는 개소만 변경하면 좋네요.TemperatureAccessorTemperatureSimpleMovingAverageTemperatureKatteniHosei
인스턴스 생성시, 어느 클래스의 인스턴스인가 configuration 파일로 설정할 수 있도록(듯이) 하면, 코드의 변경조차 없습니다.
아니, 고마워.

그래서 변화에 강한 소프트웨어를 개발하기 위해 オブジェクト指向가 유효하네요.
아직 責務 가 어쩐지 말을 할 수 없기 때문에, 구체적인 케이스를 바탕으로 또 집필합니다.

※「이런 생각이야, 실수하지 않아」라든가 「클래스도 이케하지 않아」라든지 코멘트 대환영!

좋은 웹페이지 즐겨찾기