مفهوم کلاس wrapper در ++C - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

مفهوم کلاس wrapper در ++C

+4 امتیاز
سلام

من متوجه نمیشم کلاس wrapper چیه و چه کاربردی داره ممنون میشم ساده توضیح بدید
سوال شده مرداد 21, 1393  بوسیله ی Xavi (امتیاز 627)   24 83 110
دوباره تگ گذاری شد مهر 9, 1393 بوسیله ی BlueBlade

1 پاسخ

+6 امتیاز
 
بهترین پاسخ

سلام . معمولا کلاسی که مجموعه ای از توابع یا کارکرد یک کلاس دیگه رو به ریخت و قیافه دیگه ( که معمولا واضحتر از قبلی هست ) ار‌ائه بده یه کلاس Wrapper میگن . در واقع یک کلاس Wrapper همون کارکرد کلاس قبلی رو میده ولی یکم دردسرهاشو کم تر میکنه .

 

مثلا :

int fopen (const char* name,const char* mode);
int fclose (int file_handle);

class CFileEx
{
public:

	enum FILE_MODE { FILE_MODE_READ = 0, FILE_MODE_WRITE , .... , ... };

	static std::string OpenFile (const std::string& name,FILE_MODE mode)
	{
		switch(FILE_MODE)
		{
			case FILE_MODE_READ:
				int r = fopen(name.c_str(),"r");
				if(r == NULL) return std::string("Cant't open file");
				break;
			case FILE_MODE_WRITE:
				int r = fopen(name.c_str(),"w");
				if(r == NULL) return std::string("Cant't open file");
				break;
			case ....
		}
	}

	static std::string CloseFile (............)
	{
		....
		....
		....
	}
};

مثلا ما ۲ تا تابع اصلی داریم fopen و fclose که کار باز کردن و بستن فایل رو انجام میدن . ولی می میخوایم ۲ تا تابع درست کنیم که دقیقا کار همین ۲ تابع رو انجام بده ولی جای اینکه برای باز کردن فایل بصورت برای خوندن از "r" و براش نوشتن از "w" استفاده نشه و ما از روش خودمون استفاده کنیم و Error ها رو از عدد به رشته ای که برای انسان قابل خوندن هست تبدیل کنیم و هر کاری شبیه به همینا . این کلاسی که ما درست میکنیم همون کارکرد رو داره . در واقع OpenFile همون fopen و CloseFile هم همون fclose هست . فقط به شکل دیگه ای.

در ضمن Wrapper Class مبحث خاصی نیست و ویژگی خاص و ثابتی نداره برای تعریف . کاربردش بیشتر برای نظم دادن و قابل فهمتر کردن کد و کلاس ها هست که با اسمهای بهتر و دسته بندی های بهتر بشه از اون تابع استفاده کرد.

پاسخ داده شده مرداد 22, 1393 بوسیله ی Ali Rahbar (امتیاز 4,240)   6 16 46
انتخاب شد مرداد 22, 1393 بوسیله ی Xavi
...