void buy(ObjectType type, int count);
남편이 인식한 프로그램 :
buy(TYPE_MILK, is_egg_exist() ? 6 : 1)
부인이 의도한 프로그램 :
buy(TYPE_MILK, 1);
if (is_egg_exist()) buy(TYPE_EGG, 6);
여자의 의도:
People *husband = Husband->getInstance();
Product *milk = new Milk(1);
Product *egg = new Egg(6);
husband->moveTo(village->supermarket);
husband->buy(milk);
if ( husband->check(egg) ) { husband->buy(egg); }
husband->moveTo(village->home);
남자의 구현:
class Husband : public People
{
...
int buy(Product *prdt)
{
...
if ( this->mentalStatus == this->IRRITATION )
{
this->buyRandomProduct();
}
...
}
...
}
멀티쓰레드 상황에서도 잘 동작하도록 설계되었는지 확인이 안됩니다.
고로 남편을 호출하는 여자가(쓰레드) 여러명일때에도 오직 하나의 인스턴스만 반환될지는 실제 코드를 자세히 보기 전에는 모르겠....
아... 하나만 반환될 필요는 없나요..그..그렇다면..나..난교..
여기서 이만 하겠습니다.....
여러분.
절대로 프로그래머는 저 남편처럼 코딩하면 안됩니다.
그러니까 프로그래머(혹은 코더)가 욕먹는 겁니다.
요건 정의가 모호하다고 해서 그걸 곧이 곧대로 구현하는 프로그래머땜에
프로젝트 PM 은 아주아주 당황스러워 오늘도 담배를 연달아 피게됩니다.
인공지능까지는 안바래도 적어도 논리적 체계는 세워서 프로그래밍 해야죠.
아내는 무죄.
와이프의 주문 :
Dim BuyList As New BuyItemListCollection()
BuyList.Add(New Milk())
If Market.FoodCorner.Eggs.Count >= 6 Then
For intCnt As Integer = 0 To 5
BuyList.Add(New Egg())
Next
End If
Dim Buy As New BuyItem()
Buy.Purchase(BuyList)
남편의 장보기 :
If Market.FoodCorner.Eggs.Count >= 6 Then
For intCnt As Integer = 0 To 5
BuyList.Add(New Milk())
Next
End If
Dim Buy As New BuyItem()
Buy.Purchase(BuyList)
Console.WriteLine("Mission Successful"
컴파일 후 :
처리되지 않은 예외: System.Wife.DontUnderStandMyIntentionException:
와이프 말을 제대로 알아듣지 못한 상태에서 장을 보려 했습니다.
;; -*- lisp -*-
(eval-when (:go-shopping)
(buy 'milk
:count (if (find 'egg *stock-list*) 6 1)))
써 놓고 보니 기본은 하나인데 특정한 경우에만 여섯으로 지정하도록 하는 부분을 강조하지 못해서 조금 아쉽네요.
오라클 쿼리는 없길래.. 적어봐용.. ^^
-- 아내의 의도
SELECT DECODE('SHOPPING', 'SHOPPING', 'MILK ONE'||(DECODE('EGG', 'EGG', ' AND EGG SIX', '')), 'NONE') AS RESULT FROM DUAL;
-- 남편의 이해
SELECT DECODE('SHOPPING', 'SHOPPING', DECODE('EGG', 'EGG', 'MILK SIX', 'MILK ONE'), 'NONE') AS RESULT FROM DUAL;
거의 20년전에 배운 이후, 오늘 처음 써보는 Lisp으로다가
* 아내
(or (buy_milk_1) (if (> egg_numbers 0) (buy_egg_6)))
* 남편
(if (> egg_numbers 0) (buy_milk_6) (buy_mik_1) )
맞는지는 모르겠음.
//와이프 추상클래스
public abstract class Wife {
protected int milk = 1;
protected int egg = 6;
public abstract void doErrand();
}
//와이프를 구현한 남편
public class Husband extends Wife {
private static Errand errand;
public Husband(Errand errand){
this.errand = errand;
}
public void doErrand(){
errand.doErrand(super.milk, super.egg);
}
}
//심부름 인터페이스
public interface Errand {
public abstract void doErrand(int milk , int egg);
}
//틀린 심부름
public class FalseErrand implements Errand {
boolean MarketEgg = true;
public void doErrand(int milk , int egg) {
if(MarketEgg){
System.out.println("우유:"+egg);
}
}
}
//맞는 심부름
public class TrueErrand implements Errand {
boolean MarketEgg = true;
public void doErrand(int milk , int egg) {
System.out.print("우유:" +milk);
if(MarketEgg){
System.out.println("계란:" + egg);
}
}
}
//테스트 코드
public class TestErrand {
@Before
public void init(){}
@Test
public void test(){
Errand errand = new FalseErrand();
Wife god = new Husband(errand);
god.doErrand();
}
}
나도....미쳤다....
10년차 숙련 프로그래머 한명 쓰는 것보다 비주얼베이직 어제 뗀 초짜 프로그래머를 더 선호하는 "승리의 IT 강국"이기 때문에 그렇습니다
외국 어디 일본이라던가 암튼 뭐 이상한 이름 쓰는 나라에서는 50대 프로그래머가 최신기술은 잘 못쓰지만 프로그램 버그는 귀신같이 찾아낸다는 말도 있습니다만...
그럴 리 없습니다. 그럴 수 없습니다. 없어야 합니다.
"승리의 IT강국"에서도 40대 프로그래머 찾기가 하늘의 별따기인데 다른 나라에 50대 프로그래머가 있을 리 없지 않습니까.
역시 "승리의 IT 강국 코리아"답습니다.
문과인 내가 볼 때 .....
부인께서는 보통
계란이 필요하니 계란을 사와라
우유가 필요하니 우유를 사와라
이렇게 말씀하시지
부인께서 '계란이 있다면 사오고 없으면 사오지 않아도 좋아'
라는 말씀을 하실 리가 ....
따라서 남편은 부인의 명령을 정확하게 수행한 거임.
아마 추측컨대
"(내가 마실) 우유를 한 통 사와" 그리고
"(집에 계란이 있는지 확인하고) 계란이 있으면 우유 6개를 사와
(그리고 밀가루에 우유 5통과 계란을 넣고 케익을 만들어)" 라는 거였을 듯
푸별 (2011-03-20 04:03)
이해가ㅠㅠㅠㅠㅠveda (2011-03-20 04:03)
ㄴ아내는 우유 1개와 계란 6개를 말한건데 남편은 계란이 있으면 우유를 6개 사오라는 말로 인식