E D R , A S I H C RSS

Dispatched Interpretation

Dispatched Interpretation

ธฝ”๋”ฉ€ ”„๋กœ๊ทธ๋ž˜๋ฐ— žˆ–ด„œ •„ˆ˜ ด๋‹ค. ๋ฐด„ฐ๊ฐ€ ๊ณ„‚ฐœผ๋กœ๋ถ€„ฐ ๋ถ„๋ฆฌ๋˜–ด žˆ๋˜ ๊ณผ๊—๋Š”, ธฝ”๋”ฉ ž‘—…€ ๋งคšฐ ค‘š”–ˆ๋‹ค. ‚‘‚ฌ๋ฆฌ •œ๋ฒˆ ๋‚ด๋ฉด ๋ˆ ๊ฒ๋‚˜ ๋งŽด ๋“ค—ˆ๋‹ค. •˜ง€๋งŒ ๊ฐฒดง€–ฅ ‹œ๋Œ€—๋Š” ข€ ๋‹ค๋ฅด๋‹ค. ธฝ”๋”ฉ€ ๋‘๋ฒˆงธ๋กœ ๋ฐ€๋ ค๋‚˜๊ณ  ๊ฐฒด๋“ค ‚ฌด˜ …ž„„ ๋ถ„๋ฐฐ•˜๋Š” ๊ฒƒด ๊ฐ€žฅ ค‘š”•˜๊ฒŒ ๋œ ๊ฒƒด๋‹ค. ž˜งœ—ฌ„ OO ”„๋กœ๊ทธ๋žจ—๋Š”, –ด๋– •œ  •๋ณด— ๊ด€‹ฌ„ ๊ฐ€ง€๋Š” ๊ฐฒด๊ฐ€ •˜๋‚˜๋ฐ–— —†–ด•ผ •œ๋‹ค. ๊ทธ ๊ฐฒด๋Š” ž‹ ˜  •๋ณด— ง ‘  ‘๊ทผ•˜๊ณ , €๋ฐ€•˜๊ฒŒ ธฝ”๋”ฉ๊ณผ ๋””ฝ”๋”ฉ„ ˆ˜–‰•œ๋‹ค.

๊ทธ.๋Ÿฌ.๋‚˜. ๊ฐฒด˜  •๋ณด๊ฐ€ ๋‹ค๋ฅธ ๊ฐฒด— ˜–ฅ„ ๋ฏธณ•ผ๋งŒ • ๋•Œ๊ฐ€ žˆ๋‹ค. ๊ฐ„๋‹จ• ๋•Œ๋Š”, ๊ทธ๋ƒฅ ธฝ”๋”ฉ๋œ ˜ค๋ธŒ Šธ— ๋ฉ”„ง€๋ฅผ ๋ณด๋‚ด๋ฉด ˆ˜›”•˜๊ฒŒ •ด๊ฒฐด ๊ฐ€๋Šฅ•˜๋‹ค. •˜ง€๋งŒ ๋ณตžก•œ ๊ฒฝšฐ—๋Š” ž˜๋“ค๋‹ค. ๋ฌธ œ๋Š” ˆ˜๋ฐ˜ ด๋ผด–ธŠธ๋“ค—๊ฒŒ ๋ชจ๋“  ƒ€ž…˜  •๋ณด— ๋Œ€•ด ๋ช…‹œ œผ๋กœ case ˜•ƒœ˜ ๊ตฌกฐ๋ฅผ ๋งŒ๋“ค๊ธฐ๋ฅผ ›•˜ง€ •Š๋Š”๋‹ค๋Š” ๊ฒƒด๋‹ค.(??)

—ญ‹œ ฝ”๋“œ๋กœ ด•ด•˜๋Š” ๊ฒƒด ๋น ๋ฅด๋‹ค. Shape ๊ฐฒด๋Š” line, curve, stroke, fill ปค๋งจ๋“œ๋“ค˜ ˆœฐจ ธ กฐ•ฉœผ๋กœ ด๋ฃจ–ด ธ žˆ๋‹ค. ด๊ฒƒ€ commandAt(int)๋ผ๋Š” n๋ฒˆงธ ปค๋งจ๋“œ๋ฅผ ๋ฆฌ„•ดฃผ๋Š” ๋ฉ”„ง€™€, argumentsAt(int)๋ผ๋Š” ปค๋งจ๋“œ— ๋„˜๊ฒจ„ ธž๋“ค˜ ๋ฐฐ—ด„ ๋ฆฌ„•ดฃผ๋Š” ๋ฉ”„ง€๋ฅผ  œ๊ณต•ดค€๋‹ค.
~cpp 
class PostScriptShapePrinter
{
public:
	void display(Shape& aShape)
	{
		for(int i = 0 ; i < aShape.size() ; ++i)
		{	
			void* command = aShape.commandAt(i); // ๋ฌธ๋ฒ• ๋งž๋‚˜?--;
			Arguments& argument = aShape.argumentsAt(i);
			if(command == lineFunc)
			{
				printPoint(argument.at(1));
				space();
				printPoint(argument.at(2));
				space();
				nextPutAll("line");
			}
			else if(command == curveFunc)
			/*	...	*/
		}
	}
};
œ„˜ ฝ”๋“œ๋ฅผ ๋ณด๋ฉด •Œ๊ฒ ง€๋งŒ, CURVE ๋‹คŒ—๋Š” STROKE, FILL ๋“ด ๊ณ„† ๋‚˜˜ฌ ๊ฒƒด๋‹ค. ฆ‰, case ๊ตฌกฐ๋ฅผ ”€œผ๋กœจ, OAOO˜ ›น™„ œ„๋ฐ˜•˜๊ณ  žˆ๋‹ค. ด— šฐ๋ฆฌ๋Š” case ๊ตฌกฐ๊ฐ€ ธฝ”๋”ฉ๋œ ๊ฐฒด •ˆ— ˆจ๊ฒจง€๋„๋ก •˜๋Š” •ด๊ฒฐ…ด •„š”•˜๋‹ค.

๋ชจ๋“  ปค๋งจ๋“œ๋ฅผ œ„•œ case ๊ตฌ๋ฌธ„ “ฐง€ ๋ง๊ณ , PostScriptShapePrinter— ๋ชจ๋“  ปค๋งจ๋“œ๋ฅผ ๋‘ž.
~cpp 
void PostScriptShapePrinter::line(Point& from, Point& to)
{
	printPoint(from);
	space();
	printPoint(to);
	space();
	nextPutAll("line");	
}
void PostScriptShapePrinter::curve(/* ... */) { /* ... */ }
/* ... */

๋˜•œ, commantAtด๋‚˜ argumentAt๊ฐ™€ ๋ฉ”„ง€ ๋ง๊ณ , sendCommand(at,to) ๊ฐ™€ ๋ฉ”„ง€๋ฅผ  œ๊ณต•˜ž. œ„˜ line,curve๋„ ด๊ผดด๋ฏ€๋กœ ๊ฐ™ด ๋‹ค๋ฃฐˆ˜ žˆ๋‹ค.
~cpp 
void PostScriptShapePrinter::display(Shape& aShape)
{
	for(int i = 0 ; i < aShape.size() ; ++i)
	{
		aShape.sendCommand(i,this);
	}
}
 € ๋ฉ”†Œ๋“œ๋Š” Shape๋กœ ๊ฐ€๋Š”๊ฒŒ ข‹„ ๋“ฏ•˜๋‹ค.
~cpp 
void Shape::sendCommandTo(Object& anObject)
{
	for(int i = 0 ; i < size() ; ++i)
	{
		sendCommand(i,object);
	}
}
๊ทธ๋Ÿฌ๋ฉด ด๋ ‡๊ฒŒ ๊ฐ„๋‹จ•ด„๋‹ค.
~cpp 
void PostScriptShapePrinter::display(Shape& aShape)
{
	aShape.sendCommandTo(this);
}

 •๋ฆฌ•ด๋†“๊ณ  ๋ณด๋‹ˆ... ๋ฌดŠจ ๋งธง€ ๋ชจ๋ฅด๊ฒ ๋‹ค.--; •žด๋ž‘ ๋’ค˜ —ฐ๊ด€๊ด€๊ณ„๊ฐ€ ƒ๋‹นžˆ ๋–จ–ด„๋‹ค. ๋ณธธ˜ •ด„ด ๋ถ€•œ ƒ“ด๋‹ค. ๋น ๋ฅธ ‹œผ ๋‚ด— ๋ณด๊ฐ••ด„œ ˜ฌ๋ฆฌ๊ฒ ๋‹ค.

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:08
Processing time 0.0211 sec