|
^^ 내용이 무지 잼있네요^^
저도 배우고 싶어여 밥솥만드는거요^^
우선 저의 소견은 이러합니다.
enum 밥종류
{
죽밥,
꼬두밥,
보통밥
};
struct 밥짓기파라미터
{
int 가열시간;
float 쌀용량;
float 물용량;
//기타 각종 파라미터^^
}
//밥솥 인터페이스(추상클래스)-------------------------------------
class 밥솥
{
public:
//true 밥짓기 성공 false 실패
virtual bool 밥짓기(밥종류 밥=죽밥,밥짓기파라미터* 파라미터=NULL) = 0;//순수가상함수
}
//구형 밥솥-------------------------------------------------------
//인터페이스
class 구형밥솥 : public 밥솥
{
protected:
void Make죽밥(float 쌀용량, float 물용량, int 가열시간...각종 조건 파라미터들...);
void Make꼬두밥(float 쌀용량, float 물용량, int 가열시간...각종 조건 파라미터들...);
void Make보통밥(float 쌀용량, float 물용량, int 가열시간...각종 조건 파라미터들...);
public:
bool 밥짓기(밥종류 밥=죽밥,밥짓기파라미터* 파라미터=NULL);
}
//구현
bool 구형밥솥::밥짓기(밥종류 밥,밥짓기파라미터* 파라미터)
{
//1.파라미터값검증 ^^ 제대로된 값들인지 확인
if(파라미터 == NULL) return false;//반드시 파리미터가 들어와야 한다.
//2.밥 종류에 따라 밥을 짓는다.^^
switch(밥)
{
죽밥:Make죽밥(파라미터->쌀용량,파라미터->물용량,파라미터->가열시간,..);
return true;
break;
꼬두밥:Make꼬두밥(파라미터->쌀용량,파라미터->물용량,파라미터->가열시간,..);
return true;
break;
보통밥:Make보통밥(파라미터->쌀용량,파라미터->물용량,파라미터->가열시간,..);
return true;
break;
}
return false;
}
//일반형밥솥-------------------------------------------------------
//인터페이스
class 일반형밥솥 : public 밥솥
{
protected:
void Make죽밥(int 가열시간);
void Make꼬두밥(int 가열시간);
void Make보통밥(int 가열시간);
public:
bool 밥짓기(밥종류 밥=죽밥,밥짓기파라미터* 파라미터=NULL);
}
//구현
bool 일반형밥솥::밥짓기(밥종류 밥,밥짓기파라미터* 파라미터)
{
//1.파라미터값검증 ^^ 제대로된 값들인지 확인
if(파라미터 == NULL) return false;//반드시 파리미터가 들어와야 한다.
//2.밥 종류에 따라 밥을 짓는다.^^
switch(밥)
{
죽밥:Make죽밥(파라미터->가열시간);
return true;
break;
꼬두밥:Make꼬두밥(파라미터->가열시간);
return true;
break;
보통밥:Make보통밥(파라미터->가열시간);
return true;
break;
}
return false;
}
//최신형밥솥-------------------------------------------------------
//인터페이스
class 일반형밥솥 : public 밥솥
{
protected:
void Make죽밥();
void Make꼬두밥();
void Make보통밥();
public:
bool 밥짓기(밥종류 밥=죽밥,밥짓기파라미터* 파라미터=NULL);
}
//구현
bool 최신형밥솥::밥짓기(밥종류 밥,밥짓기파라미터* 파라미터)
{
//1.파라미터값검증 ^^ 최신형은 파라미터가 필요없다
//2.밥 종류에 따라 밥을 짓는다.^^
switch(밥)
{
죽밥:Make죽밥();
return true;
break;
꼬두밥:Make꼬두밥();
return true;
break;
보통밥:Make보통밥();
return true;
break;
}
return false;
}
---------------------------이상 ----------------------------------
위의 설계를 이용하여 밥솥 만드는예^^
// 아래와 같은 가정하에^^
enum 밥솥종류
{
구형,
일반,
신형
}
밥솥종류 Get밥솥종류();//밥솥의 종류를 알려주는 함수가 밥솥에 존재한다.
//여기부터 예제임당^^
void main()
{
밥솥* p밥솥=NULL;
밥짓기파라미터 파라미터;
cout<<"어떤 밥을 원하시오?"<<endl<<"0 죽밥"<<endl<<"1 꼬두밥"<<endl<<"1 보통밥"<<endl;
int 짓고싶은밥=0;
cin>>짓고싶은밥;
switch(Get밥솥종류())
{
case 구형:
//파라미터 값을 채운다. - 함수로 따로 빼내어도 좋습니다.
cout<<"물용량?";
cin>>파라미터.물용량;
cout<<"쌀용량?";
cin>>파라미터.쌀용량;
cout<<"가열시간?";
cin>>파라미터.가열시간;
p밥솥 = new 구형밥솥;
break;
case 일반:
//파라미터 값을 채운다. - 함수로 따로 빼내어도 좋습니다.
cout<<"가열시간?";
cin>>파라미터.가열시간;
p밥솥 = new 일반형밥솥;
break;
case 신형:
//신형은 파라미터 값을 채울필요가 없다.
p밥솥 = new 신형밥솥;
break;
}
if(p밥솥 != NULL)
p밥솥->밥짓기(짓고싶은밥,&파라미터);
}
------ 그러면 여기서 좀더 발전^^된 생각을 하자면
Make죽밥(....각종파라미터) 이 부분을
Make죽밥(밥짓기파라미터* 파라미터); 이런식으로 바꿀수도 있겠죠^^
헤헷, 글이 생각보다 길어졌네요^^ 지송..
하여간 제 생각은 이러합니다.^^
다른님들의 의견기다리겠습니다.
|