객체 지향 개발: 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.hprivate:
ITemperatureAccessor* temperatureAccessor_;
TemperatureController
로부터 하면, 취득한 온도 데이터가 이동 평균을 곱한 것인지 어떤지 모릅니다.
온도 센서로부터 취득한 온도에 3도(3℃) 더한 데이터를 TemperatureController
가 모르게 취득하고 있을지도 모릅니다.
사양의 변화가 이 정도라면, 생성되는 인스턴스의 클래스가 바뀔 뿐입니다.I/Fクラス
의 파생 클래스로서는, 이하가 존재하고 있어, new
하는 개소만 변경하면 좋네요.TemperatureAccessor
TemperatureSimpleMovingAverage
TemperatureKatteniHosei
인스턴스 생성시, 어느 클래스의 인스턴스인가 configuration
파일로 설정할 수 있도록(듯이) 하면, 코드의 변경조차 없습니다.
아니, 고마워.
그래서 변화에 강한 소프트웨어를 개발하기 위해 オブジェクト指向
가 유효하네요.
아직 責務
가 어쩐지 말을 할 수 없기 때문에, 구체적인 케이스를 바탕으로 또 집필합니다.
※「이런 생각이야, 실수하지 않아」라든가 「클래스도 이케하지 않아」라든지 코멘트 대환영!
Reference
이 문제에 관하여(객체 지향 개발: C++ 프로그래밍 케이스 1: 사양 변경), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Chomolungma/items/2a8ab0bb42aeee40bc88
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
사양은 항상 변화하는 것입니다.
그에 따라 소프트웨어도 변화합니다.
예를 들면 「온도 센서로부터 취득하는 데이터는, 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
하는 개소만 변경하면 좋네요.TemperatureAccessor
TemperatureSimpleMovingAverage
TemperatureKatteniHosei
인스턴스 생성시, 어느 클래스의 인스턴스인가
configuration
파일로 설정할 수 있도록(듯이) 하면, 코드의 변경조차 없습니다.아니, 고마워.
그래서 변화에 강한 소프트웨어를 개발하기 위해
オブジェクト指向
가 유효하네요.아직
責務
가 어쩐지 말을 할 수 없기 때문에, 구체적인 케이스를 바탕으로 또 집필합니다.※「이런 생각이야, 실수하지 않아」라든가 「클래스도 이케하지 않아」라든지 코멘트 대환영!
Reference
이 문제에 관하여(객체 지향 개발: C++ 프로그래밍 케이스 1: 사양 변경), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Chomolungma/items/2a8ab0bb42aeee40bc88텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)