Wrapper در برنامه نویسی

در برنامه نویسی Wrapper‌ چیست ؟

گروه فنی مهندسی آرتوان متخصص در طراحی و ساخت سیستم‌های پردازشی-کنترلی ( مبحث رپر Wrapper‌ چیست )

موضوع Wrapper در برنامه نویسی
بخش اول

مفهوم Wrapper‌ چیست ؟

در بخش اول از بحث Wrapper ابتدا سراغ کلیات و مفاهیم می رویم.

Wrapper and Numerical Model در برنامه نویسی

معنای لغوی Wrapper‌ چیست ؟

معنای لغوی Wrapper که از فعل Wrap می آید، پوشنده یا پیچنده می باشد.

یعنی شیئی که شیء دیگری را در خود فرامی گیرد و به دور آن می پیچید.

به طور مثال در زبان انگلیسی به پوسته‌ شکلات و آب نبات Candy Wrapper می‌گویند. 

معنای اصطلاحی Wrapper‌ چیست ؟

وقتی در برنانه نویسی از این اصطلاح استفاده می کنیم منظورمان یک سابروتین است که دربرگیرنده یک سابروتین دیگر یا یک فراخوانی سیستمی درون خود باشد، با این هدف که برنامه ی نوشته شده به کمک Wrapper روان تر و ساده تر باشد. روان تر و ساده تر به چه معنا و با چه متر و معیاری؟

پیش از پاسخ به سوال اخیر، بد نیست معنای “فراخوانی سیستمی” که پیشتر به آن اشاره شد را به اختصار بیان کنیم.

فراخوانی‌ های سیستمی یا همان System Call ها چه می‌باشند؟

هر برنامه ای که در آن درخواست یک سرویس مثلا دسترسی به حافظه،

به کرنل سیستم عامل داده شود، “فراخوانی سیستمی” گفته می شود.

System Call

به طور مثال دستوراتی مانند Open، Read ، Close و … در زمره دستوراتی هستند

که در صورت وجود در یک برنامه نیاز به دسترسی به حافظه رو ضروری می سازد.

دسترسی به حافظه در برنامه در اصل یک سرویس است که از کرنل سیستم عامل درخواست می شود؛

پس Open یک “فرواخوانی سیستمی” است.

عملا در برنامه های بزرگ صدها فرواخوانی سیستمی از سیستم عامل وجود دارد

که به وسیله ابزار مشخصی توسط سیستم عامل هندل می شود.

خوب برگردیم سر بحث قبل؛ چرا گفته می شود استفاده از Wrapper در برنامه نویسی به ساده و روان شدن آن کمک می کند؟

اگر بخواهم خیلی خودمانی جواب این سوال را بدهم، این طور می توانم بگویم

که شما به عنوان برنامه نویس به کمک رپر Wrapper می توانید توابع (فعلا با فرض برنامه نویسی به زبان C) موجود در کتابخانه ها را به نحو مدنظر خود ‘سفارشی سازی’ کنید.

این توصیف خودمانی نیاز به توضیح بیشتری دارد.

تذکر: فعلا پا را از زبان C فراتر نگذاشته ام.

مواردی که در ارتباط با رپر Wrapper در حال بیان آن هستم،

به Wrapper بین دو زبان برنامه نویسی ارتباط نداشته و در سطح توابع در زبان C می باشد؛

هر جا که درباره انواع پیشرفته تر Wrapper خواستم صحبت کنم،

به زبان برنامه نویسی مربوط به آن اشاره خواهم کرد و اگر اصطلاح یا عبارت جدیدی وجود داشته باشد،

اجمالا توضیح خواهم داد.

در نهایت به دسته بندی پایانی و جمع بندی خواهم پرداخت.

در زبان برنامه نویسی C Wrapper‌ چیست ؟

اکنون بحث را با یک مثال ساده پیش می برم.

فرض کنید می خواهیم برنامه ای بنویسیم که در هنگام اجرا، در کامند پرامت،

پیش از هر چیز دیگری، داریکتوری و اسم فایل exe برنامه را نمایش دهد.

مضاف بر این، با بررسی آرگومان های کامند لاین، اگر هیچ آرگومان اضافی وجود نداشت یک پیغام دهد

و اگر آرگومان اضافی وجود داشت، اولی را پرینت کند.

یک کد C‌ برای توصیف مفهوم Wrapper (مبحث رپر Wrapper‌ در برنامه نویسی )

دربرنامه‌ای که در تصویر بالا کد آن را مشاهده می‌کنید، یک تابع کاستومایز شده به اسم myprintf داریم.

این تابع دو رشته (آرایه‌ای از کارکترها که به صورت پوینتر در آرگومان ورودی این تابع تعریف شده‌اند.)

را به عنوان ورودی دریافت کند. یک شرط if را چک می‌کند و بر اساس آن،‌ دو شاخه در برنامه ایجاد می‌کند: 

۱-مقدار ۱ را برمی‌گرداند و یک پیام از نوع رشته (یا آرایه‌ای از کارکترها) با این محتوا Command line argument is empty را داخل آرگومان error کپی می‌کند.
۲-مقدار ۰ را برمی‌گرداند و آرگومان از نوع رشته (یا آرایه‌ای از کارکترها) به اسم str را پرینت می‌کند.

در ادامه خروجی این برنامه را مشاهده می‌کنید.

برای آشنایی با آرگومان‌های به کار رفته در تابع main کد C موجود در تصویر فوق که مربوط به کامند لاین می‌باشند، به این لینک از دانشگاه واترلو مراجعه کنید. 

خروجی برنامه (مبحث رپر Wrapper )

ذکر چند نکته در تکمیل بخش اول از بحث Wrapper در برنامه نویسی

 

۱-آن چه در این پست در ارتباط با Wrapper در زبان C مطرح شد،‌

مستقیماً ابزاری برای تعریف Wrapper نیست.

به کمک این مثال بیشتر “مفهوم” Wrapper در زبان C بیان گردید.

 

۲-از یک منظر کاربردی در برنامه‌نویسی، توابع کتابخانه‌ای C را،

می‌توان به نوعی یک جور Wrapper برای “فراخوانی‌های سیستمی” در نظر گرفت.

در اصل این توابع با ایجاد یک واسط ابسترکشن، توابعی را در اختیار برنامه‌نویسان قرار می‌دهند.

در دل‌ توابع بالادستی، توابع سطح پایین‌تر و “فراخوانی‌های سیستمی” وجود دارد.

پس با این رویکرد می‌توان این‌ چنین نتیجه گرفت..

لایه‌ های سخت افزار تا کتابخانه های توابع (مبحث رپر Wrapper ) 

مفهوم Wrapper‌ بدون آن‌که ما به عنوان برنامه‌نویس به آن توجه کامل و دقیق داشته باشیم، در کل کار ما وجود دارد.

ما برنامه‌نویس‌ها در عمل در حال استفاده از کانسپت Wrapper در برنامه‌های خود هستیم. البته این رویکرد خیلی مفهومی است.

 

۳-یکی از موارد بسیار مهم Wrapper آن‌ جایی است

که طراح برنامه می‌خواهد از API های C در قلب برنامه‌ی ++C خود استفاده کند.

می‌دانیم زبان C یک زبان شی‌ء‌گرا نمی‌باشد اما زبان ++C یک زبان شیء‌گرا است.

فرض کنید برنامه‌ی اصلی که قرار است به زبان ++C نوشته شود.

می‌توان به کمک چند کلاس‌ بخش‌هایی از برنامه که قرار است به زبان C باشد (سابروتین‌هایی نوشته شده به زبان‌ C) را در اصطلاح Wrap نمود.

 

۴-در این پست اصلاً بحثی از Wrap کردن یک سابروتین از یک زبان برنامه‌نویسی در یک برنامه‌ به زبان برنامه‌نویسی دیگر صحبت نکرده‌ایم. 

در پست های بعد در این ارتباط صحبت خواهیم نمود.

جمع بندی بحث های اولیه درباره ی Wrapper

خوب تا این جا با مفاهیم اولیه درباره ی رپر Wrapper آشنا شدیم. 

احساسی که باید در ما به عنوان برنامه نویس از رپر Wrapper ایجاد شود، مهم‌تر از نگاه ابزاری به آن است.

اگر بخواهیم برای جمع بندی موارد مطرح شده در این پست، به دسته بندی انواع Wrapper در برنامه نویسی بپردازیم، به موارد زیر باید اشاره کنیم.

  • همان طور که در بالا اشاره شد، Wrapper یک مفهوم برنامه نویسی است. در مثال ما یک سابروتین در دل برنامه ی اصلی به صورت Wrapped یعنی پوشیده شده مورد استفاده قرار گرفته است.
  • یکی از موارد کاربرد رپر Wrapper که در بالا هم به آن اشاره شده است؛ توابع کتابخانه‌ای استاندارد زبان C هستند. چنان‌چه طرح گردید، این توابع بین توابع سطح پایین‌تر و فراخوانی‌های سیستمی که التزام به دسترسی به کرنل سیستم عامل را ایجاب می‌کنند، با بدنه‌ی برنامه، یک ابسترکشن ایجاد می‌کنند.
  • یکی دیگر از کاربردهای رپر Wrapper، استفاده از API های C در برنامه‌های ++C‌ است. این موضوع به این دلیل اهمیت دارد که C‌ شیء‌گرا نیست اما ++C‌ شیء‌گرا می‌باشد.
  • کابرد دیگر رپر Wrapper در زبان‌های برنامه نویسی شیء‌گرا مثل JAVA است. البته در این مورد قرار نیست بخشی از سابروتین Wrap‌ شده در دل برنامه‌ی اصلی که مثلاً به زبان JAVA نوشته شده است، از یک زبان دیگر باشد. در این مورد منظور ما از سابروتین Wrap شده بخشی از برنامه است که به کمک Class های  موسوم به Wrapper پوشیده شده است. در این باره در پست های آتی بیشتر صحبت می‌کنیم.
  • موارد حرفه‌ای تری که….

برای دریافت فایل برنامه به زبان C عضو کانال تلگرام ما به نشانی آی دی LabVIEW_Workshop@ شوید.

در صورت علاقه به مشاهده‌ ی آموزش های تصویری لب ویو در این سایت ، عضو سایت شوید تا از ده‌‌ها آموزش استفاده کنید.

کانال تلگرام

درباره ی حسین فروزانی

حسین

همچنین ببینید

بازشناسی گفتار (تشخیص گفتار) و مشکلات آن چیست

بازشناسی گفتار و مشکلات آن در بسیاری از متون از کلمه تشخیص گفتار به جای …

عضویت
اطلاع رسانی کن از
guest

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.

4 نظرات
جدیدترین
قدیمی‌ترین بیشترین رای
بازخورد درون خطی
مشاهده همه نظرات
انسیه
انسیه
4 years ago

سلام چطور میتونم یه کد که به زبان پایتون و با کتابخانه هایی مثل numpy نوشته شده را در java فراخوانی کنم؟ با رپر میشه این کار را انجام داد؟ چطور میشه پردازش هاییی را در پایتون انجام داد و نتایج را با جاوا نشان داد؟

nami
nami
4 years ago

مفید بود

ممنون حسین

4
0
سوال یا پیشنهادی دارید؟ لطفاً کلیک کنید.x