ASP.NET2005
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

برنامه ها از کجا آغاز می شوند؟

اذهب الى الأسفل

برنامه ها از کجا آغاز می شوند؟ Empty برنامه ها از کجا آغاز می شوند؟

پست  bigdeli السبت نوفمبر 21, 2009 12:19 am

این سوالی است که برنامه نویسان مبتدی زیاد با خود تکرار می کنند: «برنامه ها از کجا آغاز می شوند؟» بیشتر دیده شده که پاسخی اصولی به این سوال داده نمی شود و این موضوع بعدا موجب سردرگمی برنامه نویسان می شود. در ادامه، نقطه آغازین در برنامه نویسی و نقاط شروع زبان های مختلف برنامه نویسی را بررسی می کنیم.هر برنامه ای که اجرا می شود، به یک نقطه ورود1 نیاز دارد، به طور خلاصه سیستم عامل باید بداند که برنامه از کجا آغاز می شود؟ این نقطه در واقع یک آدرس حافظه ، مربوط به یک نقطه در کد برنامه است و سیستم عامل بعد از بارگذاری برنامه در حافظه به آن آدرس مراجعه می کند. در اکثر زبان های برنامه نویسی تابعی به نام main وجود دارد که در واقع همان نقطه شروع برنامه است. این تابع با توجه به ساختار سیستم عامل و دید برنامه نویس، چندین بازنویسی2 دارد. برای مثال در زبان c# برخی از بازنویسی ها به شکل زیر است: static void main(); static void main(string[] args); static int main(); static int main(string[] args); اکنون تک تک این بازنویسی ها را بررسی می کنیم. نکته ایی که باید دقت داشته باشید این است که این تابع با کلیدواژه static نشانه گذاری شده است، این امر در زبان جاوا نیز وجود دارد و دلیل کاربردش این است که زبان هایی مانند جاوا و سی شارپ زبان هایی مبتنی بر کلاس3 هستند و در آنها شما فقط با کلاس ها سروکار دارید. امکان تعریف تابعی در خارج کلاس ندارید، بر خلاف c++ که زبانی شی گرا و تابع گرا است، که این امر بخاطر سازگار بودن با برنامه های نوشته شده به زبان c است.(در مورد تعریف تابع main در این زبان در آخر توضیحاتی داده خواهد شد)، به همین دلیل که در جاوا و c# شما با کلاس سر و کار دارید تابع main یا بهتر بگوییم متد main شما باید static باشد. (static بودن یعنی بدون ساختن نمونه از کلاس می توانید از یک عضو کلاس استفاده کنید) معرفی شود. حال مقادیر ورودی و خروجی تابع main را بررسی می کنیم. برای این کار کامل ترین بازنویسی این متد رو بررسی می کنیم، یعنی: static int main(string[] args); این بازنویسی یک آرایه از رشته های متنی و یک مقدار عددی از نوع عدد صحیح برمی گرداند، خوب این مقادیر چه استفاده هایی دارند؟ رشته های ورودی در واقع مقادیر هستند که هنگام اجرای برنامه از طریق خط فرمان به برنامه فرستاده می شوند. تابع main مقداری عددی را برمی گرداند، این مقدار وضعیت پایان برنامه را مشخص می کند. برای مثال در کتابخانه استاندارد c دو متغیر ثابت برای این کار وجود دارد: یکی exit_success که در واقع مقدار عددی صفر است و نشان می دهد که برنامه با موفقیت به کار خود پایان داده است و دیگری exit_failure که نشان دهنده این است که برنامه با خطا پاین یافته. نکته ای که باید به آن توجه داشت، این است که تابع main در جاوا مقدار را برنمی گرداند ولی مقادیر ورودی آن مانند سی شارپ است، در زبان سی شارپ مقدار args نام برنامه را شامل نمی شود. حال که با بازنویسی های متد main آشنا شدیم این متد را در زبان های برنامه نویسی دیگر بررسی می کنیم. روش کار در زبان c و c++ مانند زبان c# است، اما با تفاوت هایی که آن هم به خاطر ماهیت زبان برنامه نویسی است، که به صورت زیر تعریف می شود: int main(void)int main(int argc, char *argv[])تابع main می تواند مقداری را برنگرداند، مقدار argv شامل نام برنامه است به همین خاطر همیشه مقدار argc برابر 1 است. در نگارشی از زبان c که در سیستم عامل apple استفاده می شود، تعریف این متد به صورت زیر است: int main(int argc, char *argv[], char *envp[])همان طور که مشاهده می کنید، تفاوت هایی بین فراخوانی تابع main در یک زبان و پلتفورم متفاوت، وجود دارد. در زبان pascal برای این تابع نامی وجود ندارد و در واقع بلاک کدی که به . (نقطه) ختم شود، نشان دهنده تابع main است. به این صورت: program click begin {نقطه شروع} end. با توجه به تعریف این متد شاید این پرسش پیش بیاید که این متد پارمتر ورودی ندارد، پس چگونه به پارمترهای پاس داده شده به آن باید دسترسی داشته باشیم؟ برای این کار در زبان پاسکال دو متغیر به نام های paramcount و paramstr تعریف شده اند، اولی تعداد پارامترهای ورودی و دیگری آرایه رشته ای که حاوی پارامترهای ورودی است را مشخص می کند. در پاسکال مانند c و c++ مقدار paramstr نام برنامه را نیز شامل می شود. همان طور که گفته شد، در زبان جاوا تابع main مقداری را برنمی گرداند و تعریف آن به صورت زیر است: public static void main(string[] args)public static void main(string... args)در جاوا نیز مانند c# args شامل نام برنامه نمی شود. در زبان perl تابعی به نام main وجود ندارد، کد این برنامه از بالا به پایین اجرا می شود و مقادیر فرستاده شده توسط خط فرمان توسط متغیرهای @argv قابل بازیابی است و برخلاف c، نام برنامه در @argv موجود نیست. نحوه استفاده از پارامترهای تابع main در برنامه ها در برنامه های خود با چک کردن تعداد آرگومان های ورودی و خواندن آنها می توانید کارهایی را انجام دهید، که این کارها بستگی به دید شما به برنامه تان دارد. در اکثر برنامه ها با پارامتر -? یا /? می توان به دستوراتی که برنامه به عنوان پارمتر به برنامه داده می دهد، درسترسی داشت و با مقادیر آنها آشنا شد. به طور مثال دستور regsvr32 که یک شیء com را در ویندوز ثبت می کند، چند مقدار برای انجام کارهای خود از کاربر می گیرد. در همین مثال regsvr32 به طور پیش فرض باید نام شیء com که آدرس یک فایل dll است را به آن پاس دهید. این پارامتر اجباری است و باید مقدار داشته باشد ولی پارامترهای دیگر، پارامترهای اختیاری هستند که بود و نبود آنها تاثیری در کار اصلی برنامه ندارد ولی با مقداردهی آنها می توان امکانات بیشتری داشت. برای نمونه همان regsvr32 را بررسی می کنیم: برای اجرای این دستور باید آدرس فایل dll را به آن داد و پس از ثبت، یک پیغام برای شما ظاهر می شود که نشان می دهد، عملیات با موفقیت پایان یافته است. اگر پارامتر اختیاری /s را پیش از نشانی فایل وارد کنیم، دیگر این پیغام ظاهر نخواهد شد و اگر قبل از آدرس فایل /u را بنویسیم شی com را از لیست اشیا com ویندوز حذف می کند و اگر بعد از آن /s بگزاریم دیگر پیغام را مشاهده نمی کنیم بطور مثال regsvr32 /u /s c:\clickcom.dll شما نیز به عنوان برنامه نویس می توانید با پیاده سازی درست تابع main خود از این مقادیر استفاده کنید. بطور مثال کد زیر که به زبان سی شارپ نوشته شده است مقادیر پاس داده شده از طریق خط فرمان را چاپ می کند: static void main(string[] args) { if (args.length == 0) return; else { for (int i = 0; i < args.length; i++) { console.writeline(string.format ("command {0} : {1}",i, args[i])); } } } شما می توانید با چک کردن مقادیر پارامترها برای هر کدام، یک عمل خاص را انجام دهید.

bigdeli
کاربر متوسط
کاربر متوسط

تعداد پستها : 41
تاريخ التسجيل : 2009-10-26

بازگشت به بالاي صفحه اذهب الى الأسفل

بازگشت به بالاي صفحه

- مواضيع مماثلة

 
صلاحيات هذا المنتدى:
شما نمي توانيد در اين بخش به موضوعها پاسخ دهيد