دانلود جزوه اموزشی درس سیستم عامل و کارگاه سیستم عامل استاد محمد نژاده از کتاب حمید رضا مقسمی
گرد آورنده جزوه :سید میلاد رسولی
برای دانلود به قسمت ادامه مطلب مراجعه کنید.
تعداد صفحات:29 صفحه
فرمت فایل :PDF
حجم فایل :2 مگابایت
برنامه نویسی شی گراء، بدون شک مهمترین تحول در دنیای نرم افزار طی سالیان گذشته بوده که بیشترین تاثیر را در پیشبرد نرم افزار بدنبال داشته و ما امروز در صنعت گسترده نرم افزار از دستاوردهای وسیع آن بهره مند هستیم . در این مقاله قصد داریم ، به بررسی برنامه نویسی شی گراء پرداخته و از این زاویه نگاهی به دات نت داشته باشیم .
بمنظور شناخت برنامه نویسی شی گراء ، کافی است به اطراف خود نگاهی داشته باشیم .جارو برقی ، قهوه جوش ، پنکه سقفی و مجموعه بسیار گسترده ای از سایر اشیاء را پیرامون زندگی خود مشاهده می نمائیم . اشیاء ما را محاصره و یا در محاصره اشیاء می باشیم . برخی از این اشیاء نظیر دوربین ، مستقل عمل نموه و برخی دیگر نظیر تلفن و ماشین های پاسخگو با سایر اشیاء ارتباط دارند . برخی از اشیاء دارای داده ها ئی می باشند که بین کاربران استفاده می گردد(یک دفترچه تلقن) . برخی از اشیاء شامل اشیاء دیگری می باشند، یک دستگاه بستنی ساز درون فریزر ، نمونه ای در این زمینه است .
بسیاری از اشیاء از لحاظ عملکرد با یکدیگر مشابه ولی از لحاظ اهداف با یکدیگر متفاوت می باشند . مثلا" وان حمام و سینک آشبزخانه هر دو امکان استفاده از آب را فراهم می نمایند ،ولی این کار بندرت اتفاق خواهد افتاد که شما در سینک آشبزخانه دوش گرفته و یا ظروف آشبزخانه خود را در وان حمام بشوئید! بهرحال وان حمام و سینک آشبزخانه موجود در منزل ، احتمالا" از یک لوله آب مشترک در ساختمان استفاده و اینترفیس آنها در موارد متعددی مشترک است ( پیچ آب گرم وسرد ، یک شیر آب ، یک فاضلاب ) .
در صورت تامل در ارتباط با اشیاء فوق ، با سوالات متعددی مواجه خواهیم شد . چه تفاوت هائی بین یک وان حمام و سینک آشبزحانه ، وجود دارد ؟ آیا اختلاف موجود به محل آنها ، اندازه لگن و یا گودی آنها از سطح زمین برمی گردد. شباهت موجود بین اشیاء فوق چیست ؟
در برخی موارد انجام عملات یکسان در ارتباط با یک شی ، رفتارهای متفاوتی را بدنبال خواهد داشت . یک شی قادر به انجام عملیات متفاوتی با توجه به ماهیت وضعیت بوجود آمده است . مثلا " زمانیکه دکمه Play یک دستگاه کنترل کننده DVD و یا VCD فعال می گردد ، دستگاه قوق ، یک فیلم را پخش و ما شاهد نمایش آن بر روی صفحه تلویزیون خواهیم بود. اما اگر یک CD در دستگاه Player باشد ، همزمان با فشردن دکمه Play ، دستگاه Player باعث پخش CD صوتی شده و ما شاهد نواختن موسیقی از بلندگوهای مربوطه خواهیم بود. همانگونه که مشاهده می گردد در چنین وضعیتی ، فعال نمودن دکمه ها ی مشابه ، عملیات یکسان ولی با نتایج متفاوت را بدنبال داشته است .
به بسیاری از اشیاء پیرامون خود، می توان بعنوان جعبه های سیاه ( black box ) ، نگاه نمود.در چنین حالتی نسبت به اصول اولیه عملکرد شی مورد نظر و پردازش های اولیه آن شناخت لازم وجود خواهد داشت ولی بسیاری از جزئیات عملیاتی که یک شی انجام می دهد برای ما ناشناخته خواهد بود. اکثرا" در زمان استفاده از یک شی علاقه مند به رویکرد فوق می باشند ( آشنائی با پتانسیل های شی و نحوه بالفعل نمودن آنان و پرهیز از درگیر شدن و آگاهی از جزئیات مربوطه ) . در چنین مواردی برای استفاده از اشیاء موجود در منزل ، ضرورتی به آگاهی از مکانیزم داخلی بعنوان شرط لازم وجود نخواهد داشت و می توان بدون درگیر شدن در جزئیات از شی موجود استفاده نمود.
بمنظور بررسی موضوع اشاره شده ، می توانیم نگاهی به عملکرد یک لامپ 100 وات ، داشته باشیم . سیم پیچ درون لامپ چیزی بیشتر از یک مقاومت ساده نیست . زمانیکه برق فعال ( سوئیج فعال گردد) شده باشد ، حرارت سیم پیچ درون لامپ در حدود 2500 درجه سلسیوس ، خواهد بود.وضعیت فوق ، باعث تشعش گرما ئی متناسب با طول رشته سیم درون لامپ ( قطر خیر ) و حدود 1750 لومن ( واحد پخش نور) می گردد .بدین ترتیب نور مرئی با طول موجی حدود 555 نانومنر را شاهد خواهیم بود. رشته موجود در لامپ از تنگستن تشکیل شده است . آیا به این حجم ازاطلاعات بهمراه جزئیات مربوطه در زمان استفاده از لامپ ، نیاز خواهیم داشت و یا صرفا" می خواهیم زمانیکه سوئیچ فعال می گردد، لامپ روشن و با سایر مسائل و نحوه انجام این کار ، کاری نداریم ؟ در این راستا ، استفاده کنندگان از لامپ آن را بمنزله یک جعبه سیاه در نظر گرفته و صرفا" تمایل به آگاهی از نحوه استفاده از اینترفیس مربوطه برای بخدمت گرفتن پتانسیل موجود را دارند .
هر شی دارای دو خصلت ذاتی است : وضعیت ( state ) و رفتار ( Behavior ) . مثلا" یک لامپ دارای اطلاعاتی نظیر : روشن/خاموش بودن ، نام تجاری ، طول عمر و موارد دیگر است که جملگی وضعیت شی فوق را مشخص می نمایند. رفتار لامپ ، شامل ارائه نور و روشنائی است .
یک شی مسلما" نسبت به خود ، بمنزله یک جزیره است . بسیاری از اشیاء بصورت دسته جمعی و با تشریک مساعی در یک سیستم قرار خواهند گرفت . مثلا" تلویزیون و بلندگوهای آن بخشی از سیستمی می باشند که موسوم به تئاتر خانوادگی است . یخچال و اجاق گاز بخشی از سیستمی با نام آشپزخانه می باشند. این نوع سیستم ها خود متعلق به یک سیستم بزرگتر و با نام آپارتمان و یا خانه می باشند . مجموعه ای از آپارتمانها سیستم دیگری را با نام مجتمع ایجاد می نمایند.
یک نرم افزار را می توان مشتمل بر مجموعه ای از اشیاء در نظر گرفت که هر یک پتانسیل های لازم را ارائه و با بخدمت گرفتن آنان و بهره گیری از پتانسیل های موجود زمینه نیل به اهداف مورد نظر فراهم خواهد شد. بمنظور طراحی و پیاده سازی یک برنامه شی گراء در اولین مرحله می بایست ، اقدام به طراحی و ایجاد اشیاء مورد نظر با توجه به اهداف نرم افزار نمود.مرحله فوق ، اولین گام و بدون شک مهمترین مرحله در فرآیند ایجاد یک سیستم است . در مرحله دوم که ارزش آن شاید بمراتب بالاتر از مرحله قبل باشد ، می بایست نحوه ارتباط اشیاء با یکدیگر بدرستی مشخص گردد. در زمان ایجاد یک سیستم بزرگ که دارای پیچیدگی های خاص خود است ، می بایست نسبت به دو مرحله فوق ، شناخت لازم وجود داشته و بدون آگاهی لازم ، امکان ایچاد اینچنین سیستم های بزرگی با رویکرد شی گراء ، چالش های خاص خود را بدنبال خواهند داشت . در چنین مواردی می توان فرآیند پیاده سازی یک سیستم را شامل دو مرحله مهم طراحی شی گراء و برنامه نویسی شی گراء در نظر گرفت . برنامه نویسی مبتنی بر عنصر ، پایه و اساس این نوع سیستم ها محسوب می گردد . برنامه نویسی اشیاء در نرم افزار ، نیازمند یک زبان برنامه نویسی شی گراء نمی باشد و اگر از یک زبان برنامه نویسی شی گراء استفاده می گردد ، بدین مفهوم نخواهد بود که کد نوشته شده ، شی گراء خواهد بود. زبان ها صرفا" می توانند کمکی در فرآیند فوق را ارائه و هیچگونه تضمینی در این رابطه را ارائه نخواهند داد. با استفاده از ویژوال بیسیک ، امکان نوشتن نرم افزار شی گراء وجود خواهد داشت . البته لازم است به این موضوع اشاره گردد که نوشتن برنامه شی گراء در ویژوال بیسیک همواره بسادگی انجام نخواهد شد ، چراکه ویژوال بیسیک همواره دارای رویکردی شی گراء نمی باشد. پیاده سازی عناصر باینری با قابلیت استفاده مجدد در ویژوال بیسک در حال حاضر میسر و امکان پذیراست ولی استفاده از اینگونه عناصر بین زبان های متفاوت چالش های خود را بدنبال خواهد داشت . با عرضه دات نت که مطابق آخرین دستاوردهای علمی ایجاد شده است ، ویژوال بیسیک دات نت بعنوان یکی از زبانهای حمایت شده ، دارای امکانات قدرتمند وغنی بمنظور استفاده ازمزایای آخرین دستاوردهای پیاده سازی در برنامه نویسی شی گراء است .
ویژوال بیسیک دات نت و برنامه نویسی شی گراء
ویژوال بیسیک دات نت یک زبان برنامه نویسی شی گراء کامل است . این بدان معنی است که زبان فوق از چهار اصل برنامه نویسی شی گراء یعنی : انتزاع (abstraction ) ، کپسوله سازی کد و داده ( encapsulation ) ، وراثت ( inheritance) ، چند ریختی ( polymorphism ) حمایت می نماید. در ادامه با اصول چهار گانه فوق بیشتر آشنا شده و مشاهده خواهیم کرد که هر یک از اصول فوق، چه دستاوردی را برای پیاده کنندگان نرم افزار شی گراء بدنبال خواهند داشت .
انتزاع ( abstraction )
رادیو دارای یک تیونر ، یک آنتن ، یک پیچ صدا و یک سوئیچ روشن و خاموش است . بمنظور استفاده از رادیو، ضرورتی به به آگاهی از نحوه دریافت سیگنال هائی رادیوئی توسط آنتن مربوطه ، تبدیل آنان به سیگنال های الکتریکی ، تقویت قدرت آنان بر اساس یک مدار تقویت کننده فرکانس بالا ، نخواهد بود. در این راستا لازم نیست از نحوه فیلتر نمودن نتایج ، تقویت و تبدیل آنان به صوت ، آگاهی داشت .ما صرفا" رادیو را روشن و پس از تنظیم ایستگاه مورد علاقه خود ، از آن استفاده می نمائیم . بدین ترتیب استفاده کنندگان می توانند بدون آگاهی از جزئیات داخلی از رادیو استفاده نمایند. ویژگی فوق ، بسیار مهم بوده و امکان استفاده از رادیو برای هر شخص فراهم می گردد ( نه فقط افرادیکه دارای اطلاعات فنی در رابطه با نحوه عملکرد آن می باشند). بنابراین می توان این استنباط را داشت که رادیو یک شی است که بگونه ای طراحی شده است که پیچیدگی ها ی مربوط نمایان نباشد ( مخفی شدن پیچیدگی ) .
در نرم افزار شی گراء ، پیچیدگی با استفاده از انتراع ، مدیریت می گردد . انتزاع ، فرآیندی است که بر اساس آن رفتار حیاتی و مهم یک شی مشخص و جزئیات نامرتبط ، حذف می گردد. یک انتزاع خوش فکر ، عموما" ساده بوده و سمت و سوی آن نگریستن به موضوع (شی ) از دیدگاه کاربر است . فرآیند انتزاع ، نسبت به ساختار و ماهیت شی مورد نظر متفاوت بوده و لازم است برای ایجاد یک انتزاع برتر و مناسب ، موضوع بدفعات و از زوایای متفاوت مورد بررسی قرار گیرد.مثلا" در صورتیکه بخواهیم از رادیو با دو هدف متفاوت : گوش دادن به موزیک و یا آمورش اصول الکترونیک ، استفاده نمائیم ، نگرش به انتزاع رادیو در هر یک از موارد فوق با یکدیگر متفاوت خواهد بود .
انتزاع ، یک باید غیر قابل اتتخاب و جزء لاینفک یک شی است . مثلا" شی Button که در فرم های ویندوز و یا وب از آن بدفعات استفاده می گردد ، دارای متدی با نام Click است . متد فوق ، یک انتزاع است و چه بخواهیم و یا نخواهیم وجود خواهد داشت . ( تغییر شکل اولیه Button در زمانیکه بر روی آن کلیک می گردد ). در این رابطه رویداد OnClick یک انتخاب است که پیاده کنندگان می توانند با توجه به سیاست های موجود در نرم افزار نحوه برخورد با رویداد فوق را تبین و مشخص نمایند .
کپسوله سازی کد و داده (encapsulation)
زبانهای برنامه نویسی نظیر C و پاسکال قادر به ایجاد ساختارهائی مشابه شی می باشند. در C ، این ویژگی یک struct و در پاسکال از آن با نام رکورد یاد می گردد . هر دو نمونه، نوع های داده تعریف شده توسط کاربر می باشند . در هر دو زبان ، یک تابع قادر به عمل بر روی بیش از یک نوع است عکس حالت فوق نیز صادق است (بیش از یک نابع قادر به عملیات بر روی یک نوع داده است ). داده بطور کامل ارائه و آسیب پذیری خاص خود را خواهد داشت .
در مقابل وضعیت فوق ، برنامه نویسی شی گراء بر اساس کپسوله سازی است . وضعیت شی و رفتار آن با یکدیگر نگهداری و اصطلاحا" کپسوله می گردند. داده ئی که وضعیت یک شی را ارائه داده بهمراه متدهائی ( توابع و روتین ها ) که بر روی داده ها عملیاتی را انجام خواهند داد ، با یکدیگر و بعنوان یک واحد منسجم ذخیره می گردند. بعبارت دیگر ، استقرار ساختمان داده ها و کدهای مربوطه جهت پردازش داده های فوق ، بمنظور رسیدن به یک هدف مشخص در یک Box و تولید یک شی مشخص با اهداف از قبل تعریف شده ، کپسوله سازی نامیده می گردد.
کپسوله سازی ، اغلب با نام مخفی سازی اطلاعات نیز نامیده می شود. اما با اینکه این دو واژه در برخی حالات بجای یکدیگر استفاده می گردند ، نمی توان آنان را مترادف هم در نظر گرفت . آنان دارای مفاهیمی مجزاء می باشند. کپسوله سازی ، پیاده سازی یک شی را از رفتار آن تفکیک و بنوعی محدودیتی را بمنظور دستیابی به داده داخلی ایجاد می نماید . محدودیت فوق ، باعث می گردد که جزئیات خاصی از رفتار یک شی مخفی گردد . بدین ترتیب ، امکان ایجاد یک جعبه سیاه فراهم که وضعیت داخلی یک شی در مقابل استفاده کنندگان وو آسیب های احتمالی حفاظت خواهد شد .
کپسوله سازی معمولا" با "انتزاع " نیز اشتباه گرفته می شود. با اینکه دو مفهوم فوق تا حدود زیادی با یکدیگر مشابه می باشند ، ولی ایده های متفاوتی را ارائه می نمایند. انتزاع یک فرآیند بوده و شامل عملیات لازم بمنظور مشخص نمودن خصایص و رفتار یک شی برای پردازش است . کپسوله سازی ، مکانیزمی است که توسط "انتزاع " ، پیاده سازی می گردد .مثلا" شی رادیو ، تکنولوژی های متفاوتی را کپسوله نموده است ، تکنولوژی هائی که امکان درک مناسب آنان برای اغلب افراد امکان پذیر نخواهد بود.
در ویژوال بیسیک دات نت ، ساختاری که امکان تعریف یک "انتزاع " را فراهم می نماید ، کلاس ( class ) ، نامیده می شود. واژه کلاس و شی ، اغلب بجای یکدیگر استفاده می گردند ، اما شی در واقع یک نمونه از یک کلاس است . یک عنصر شامل مجموعه ای از یک و یا چندین شی نظیر یک کتابخانه کلاس در یک DLL است .
توارث (inheritance)
توارث ، قابلیت تعریف یک کلاس جدید است که رفتارهای خود ( و کد ) را ااز یک کلاس موجود ، به ارث می برد. کلاس جدید ، کلاس مشتق شده و یا کلاس فرزند ، نامیده می شود . کلاس اولیه بعنوان کلاس پایه و یا مادر نامیده می شود .
توارث بمنظور ارائه ارتباطات از نوع "Is-a " و یا "kind-of" ، است. یک اتومبیل یک وسیله نقلیه است . یک قایق یک وسیله نقلیه است . یک زیردریائی یک وسیله نقلیه است . در برنامه نویسی شی گراء ، کلاس پایه "وسیله نقلیه " ، می تواند رفتارهای عمومی تمامی انواع وسائط نقلیه را مشخص می نماید. یک کلاس زیرمجموعه که از کلاس پایه مشتق می گردد می تواند بگونه ای پیاده سازی گردد که نشاندهنده رفتار نوع خاصی از یک وسیله نقلیه باشد .مهمترین دستاورد توارث ، قابلیت توسعه و استفاده مجدد از کد است . علاوه بر امکان فوق ، یکی دیگر از دستاوردهای توارث ، قابلیت ارتباط بین اشیاء متفاوتی است که از یک شی واحد ، مشتق شده اند .
در مقابل توارث ، نوع خاص دیگری از ازتباط و از نوع "has - a" وجود دارد . این نوع ارتباط با استفاده از ترکیب ( Composition) که در برخی حالات از آن با نام تجمع ( aggregation ) نیز یاد می گردد، ایجاد می گردد. ارتباط فوق، نشاندهنده این موضوع است که یک شی در مقابل توارث خصلت ها و رفتار خود از یک شی دیگر ، خود شامل شی دیگر است ( ترکیب خصلت ها و رفتار در مقابل توارث خصلت ها و رفتار ) . طبیعتا" اتومبیل دارای یک موتور است ، اما نمی توان این ادعا را داشت که اتومبیل نوعی از یک موتور است .
در ++C ، نوع خاصی از توارث و با نام توارت چندگانه ، استفاده می گردد. در سناریوی فوق ، یک کلاس از بیش از یک کلاس پایه مشتق می شود . تعداد زیادی از برنامه نویسان ++C ، استفاده از توارث چندگانه را دارای چالش های خاص خود دانسته و در مواردیکه از کلاس های پایه با اسامی توابع یکسان استفاده می گردد بکارگیری صحیح آنان برای حتی برنامه نویسان با تجربه مسائل خاص خود را بدنبال خواهد د اشت .ویژوال بیسیک دات نت ، نظیر جاوا صرفا" امکان توارث یگانه را حمایت می نماید.
در زمان طراحی شی گراء ، می بایست شناخت لازم و عمیقی از توارث و تاثیرات آن وجود داشته باشد . ایجاد یک شی که از شی دیگر مشتق خواهد شد ، همواره عملیات آسانی نخواهد بود و با مجموعه ای از سوالات روبرو خواهیم شد . مثلا" آیا دایره نوع خاصی از بیضی است ؟ آیا مربع شکل خاصی از مستطیل است ؟ .
چند ریختی ( polymorphism )
چندریختی ، تصور( برداشت ) اشکال متفاوت از یک شی ، است. در برنامه نویسی شی گراء ، این انتظار وجود دارد که پتانسیل های زبان استفاده شده برخوردی مناسب و متفاوت با اشیاء را در زمان اجراء داشته باشند. در مواردیکه اشیاء با یکدیگر ارتباط برقرار می نمایند عملا" پیام هائی را ارسال و یا دریافت می دارند . در این راستا ، فرستنده پیام ضرورتی به آگاهی ازاینکه چه کلاسی از دریافت کننده عضوء است ، نخواهد داشت. (می تواند هر کلاس دلخواهی باشد) . شی فرستنده صرفا"می بایست دارای دانش لازم در ارتباط با توانائی شی دریافت کننده بمنظور انجام یک رفتار خاص باشد. وضعیت فوق ، مهمترین مزیت چندریختی است .
مثلا" فرض کنید ما دارای یک مستطیل ، مربع و یک دایره باشیم . هر کلاس یک shape بوده و هر یک دارای متدی با نام Draw می باشند که مسئولیت تفسیر و رسم شکل بر روی صفحه را بر عهده دارند. با استفاده از چند ریختی ، می توان متدی را ایجاد که یک شی Shape و یا آرایه ای از اشیاء Shape را بعنوان پارامتر دریافت نماید. می توان مربع ، مستیطل و دایره را به این متدها بدون هیچگونه مسئله ای پاس دهیم . (مراجعه به یک کلاس از طریق مادر آن بطور کامل معتبر و قانونی خواهد بود ). در مثال فوق ، گیرنده صرفا" از این موضوع که یک Shape را دریافت که دارای متدی با نام Draw است ، آگاه و اطلاعات خاصی در ارتباط با نوع خاص Shape نخواهد بود. در صورتیکه Shape ، مستطیل باشد ، در ادامه نسخه Draw مربوط به مستطیل فراخوانده خواهد شد. اگر شکل مورد نظر ، مربع باشد ، نسخه Draw مربوط به مربع ، فراخوانده می شود.
مفهوم فوق را می توان از زاویه ای دیگر نیز بررسی نمود . فرض کنید از یک نرم افزار گرافیکی کوچک بمنظور ترسیم اشکال متفاوت استفاده می گردد و بخواهیم در یک لحظه چندین شکل را بر روی صفحه رسم نمائیم . بمنظور پیاده سازی قابلیت فوق ، کلاسی با نام Scene ، ایجاد می گردد. کلاس فوق، دارای متدی با نام Render است که یک آرایه از اشیاء Shape را بعنوان ورودی دریافت می نماید . در چنین حالتی می توان آرایه ای از اشکال متفاوت را ایجاد و آن را برای متد Render پاس نمود . متد فوق ، قادر به تکرار بین آرایه و فراخوانی متد Draw برای رسم هر یک از عناصر آرایه است . در این راستا و متناسب با نوع شکل ، نسخه Draw مربوط به شکل مورد نظر فراخوانده می گردد . متد Render ، دارای ایده و یا اطلاعاتی در ارتباط با نوع شکلی که در حا ل کار با آن است، نخواهد بود.
مهمترین مزیت پیاده سازی کلاس Scene و متد مربوطه آن یعنی Render ، جایگاه آنان در توسعه سیستم است . مثلا" در صورتیکه کلاس جدیدی با نام Ellipse ، اضافه گردد ( کلاسی برای نرم افزار مربوطه ) ، ضرورتی به اعمال تغییرات در کلاس Scene وجودد نخواهد داشت . . متد Render قادر به رسم Ellipse نظیر سایر اشکال خواهد بود چراکه متد فوق با اشیاء مربوط یک ارتباط عمومی دارد . دراین حالت ، کلاس های Shape و Scene بدرستی با یکدیگر جفت وجور شده اند. این نوع از چند ریختی ، عام و یا parametricpolymorphism نامیده می شود. نوع دیگری از چند ریختی ، Overloading نامیده می شود. در مدل فوق ، یک شی دارای دو و یا بیش از دو رفتار است که دارای اسامی یکسان می باشند . متدها صرفا" از طریق پیامهائی که دریافت می نمایند ( توسط پارامترهای متد ) مشخص خواهند شد . ایجاد یک متد مشترک با نام power بمنظور محاسبه توان اعداد صحیح و اعشاری ، نمونه ای مناسب در این زمینه است . با اینکه می دانیم برای محاسبه توان اعداد صحیح و اعشاری از الگوریتم ها ی متفاوتی استفاده می گردد ، می خواهیم با داشتن یک متد از قابلیت های آن بمنظور محاسبه توان اعداد صحیح و یا اعشاری استفاده نمائیم . استفاده کننده از متد Power ، با سناریوی طراحی شده درون متد کاری نداشته و صرفا" پارامتر خود را در اختیار متد قرار خواهد داد . با تمهیداتی که درون متد پیش بینی شده است ، تصمیم لازم در خصوص استفاده از روتین های جانبی ( متدهای جانبی ) بمنظور محاسبه توان اعداد صحیح و یا اعشاری یک عدد ، اتخاذ خواهد شد .
چند ریختی ، یکی از مفاهیم و ویژگی های مهم برنامه نویسی شی گراء بوده که انعطاف شگفت انگیزی را در ارتباط با طراحی برنامه ها بدنبال خواهد داشت .
فریمورک دات نت
اشیائی که با استفاده از ویژوال بیسیک دات نت ایجاد می گردند، تداوم و ادامه حیات خود را مدیون فریمورک دات نت می دانند. پلات فرم فوق، با استفاده از استانداردهای های باز و پروتکل هائی نظیر XML ، HTTP و SOAP ایجاد شده است . فریمورک دات نت ، شامل یک کتابخانه استاندارد غنی است که سرویس های اساسی را در اختیار تمامی زبانهای سازگار با دات نت ، قرار می دهند.هدف از معماری فوق ، ارائه امکانات و تسهیلات لازم برای برای ایجاد ، بکارگیری و اجراء سرویس های مبتنی بر وب است . علیرغم هدف فوق ، فریمورک دات نت ، محلی ایده آل برای پیاده سازی تمامی انواع برنامه ها صرفنظر از طراحی است . برخی از مزایای معماری فوق بشرح زیر می باشد :
- عملیات توزیع شده بر اساس استانداردهای اینترنت و پروتکل هائی نظیر HTTP,XML و SOAP
- ارائه سرویس های جهانی و بزرگ نظیر Object pooling, پیام ، امنیت و تراکنش
- زیرساخت مناسب بمنظور تسهیل در پیاده سازی کدها و عناصر با قابلیت استفاده مجدد
- تسهیل در پیاده سازی تحت وب با استفاده از استانداردهای باز .
- ارتباط کامل بین زبانها که دستاوردهائی نظیر : توارث کلاس ها ، Catch exceptions و اشکال زدائی بین زبان های متفاوت را بدنبال خواهد داشت .
- بکارگیری نرم افزار در دات نت بمراتب ساده ترنسبت به گذشته خواهد بود ، چراکه تنظیمات در فایل های پیکربندی از نوع XML ذخیره و در دایرکتوری مربوط به نرم افزار ذخیره خواهند شد. در این راستا ضرورتی به استفاده از ریجستری نخواهد بود
دو بخش بسیار مهم دات نت که توجه طراحان و پیاده کنندگان نرم افزار را بسرعت بسوی خود جلب می نماید : CLR)Common Language Runtime) و کتابخانه کلاس دات نت است . CLR ، سرویس های لازم برای عناصری را که تحت دات نت اجراء می گردند ، ارائه می نماید .کتابخانه کلاس دات نت ، مجموعه ای گسترده از کلاس ها را برای هر چیزی از دستیابی به داده گرفته تا طراحی رابط کاربر، امنیت ، شبکه و ... ارائه می نماید. کتابخانه همچنین شامل تعاریف مورد نیاز برای تمامی نوع های داده اولیه نظیر : bytes,integers و string است . تمامی این نوع ها ، از یک کلاس پایه با نام System.object مشتق می گردند. محدودیتی بین نوع هائی که توسط سیستم تعریف شده اند با نوع هائی که شما ایجاد می نمائید ،وجود نخواهد داشت . هر چیزبمنزله یک شی خواهد بود.
در گذشته ، پاس دادن یک string از یک عنصر نوشته شده به زبان ویژوال بیسیک به عنصر دیگری که با ++C نوشته شده بود ، ( و یا برعکس ) مسائل و مشکلات خاص خود را بدنبال داشت . رشته ها در ویژوال بیسیک ، مشابه رشته ها در ++C نبودند . در حقیقت،در برخی موارد خاص ، استفاده از یک عنصر نوشته شده با ++C از طریق ویژوال بیسیک ، بدلیل تفاوت در نوع داده آنان ، غیر ممکن بود. هر زبان سازگار با دات نت ، از نوع های یکسان تعریف شده و موجود در کتابخانه کلاس پایه استفاده می نماید. بدین ترتیب ، با مسائل مربوط به ارتباط عملیاتی بین زبانها که در گذشته شاهد آنان بودیم ، برخورد نخواهیم کرد.
CLR و قابلیت های آن
CLR ، موتور اجرائی فریمورک دات نت است . سیستم فوق ، مدیریت تمامی کدهای ترجمه شده را بر عهده خواهد داشت .کد ترجمه شده که در دات نت اجراء می گردد را کد مدیریت یافته (اداره شده) می گویند. علاوه بر مسئولیت لود و اجراء یک برنامه ، CLR سرویس هائی را ارائه که تمامی پیاده کنندگان عناصر می توانند از مزایای آن بهره مند گردند:
- فراخوانی و توقف threads و پردازه ها
- چرخه حیات شی و مدیریت حافظه
- ارتباط و همبستگی بین زبان ها
- کد قابل استفاده در محیط های متفاوت ( Cross-code ) و عملیات مبتنی بر امنیت
- Exception handling ( حتی بین زبانها )
- بکارگیری و مسئله ورژن سازی
- ارتباط بین کد اداره شده ( مدیریت یافته ) و کد غیر اداره شده (غیرمدیریت یافته )
- اشکال زدائی بین تمامی زبانها
Runtime ها چیزی جدیدی نمی باشند . ویژوال بیسیک همواره دارای نوع خاصی از یک runtime بوده است . ویژوال ++C ، دارای یک runtime با نام MSVCRT.DLL است . perl ، Python و SmallTalk نیز از runtime استفاده می نمایند. تفاوت بین این نوع از Runtime ها و CLR در این است که CLR بمنظور کار با چندین زبان برنامه نویسی طراحی شده است .هر برنامه ای که مقصد کمپایلر آن فریمورک دات نت باشد ، قادر به استفاده از تمامی مزایای CLR است .
دات نت در این رابطه قابل مقایسه با جاوا نیز می باشد . جاوا از یک Runtime با نام JVM)Java Virtual Machine) استفاده و صرفا" قادر به اجراء کد نوشته شده توسط جاوا می باشد . لازم است به این نکته مهم نیز اشاره گردد که JVM یک مفسر است . در دات نت ، تمامی برنامه های نوشته شده با هر یک از زبان های سازگار با دانت نت ،در ایتدا به یک زبان مستقل از پردازنده ترجمه می گردند که IL)Intermediate Language) نامیده می شود( قابل مقایسه با بایت کدهای جاوا ) . IL ، نظیر جاوا در زمان اجراء تفسیر نمی گردد و زمانیکه کد در اولین مرتبه اجراء می گردد ، یک و یا چندین کمپایلر JIT)Just-in-time) مسئولیت ترجمه کدهای IL به کد مختص یک ماشین را برعهده می گیرند.
ارتباط و همبستگی بین زبانها یک از مهمترین مزایای ارائه شده توسط CLR است . اگر برنامه نویسی ، کلاسی را با استفاده از ++C نوشته باشد ، می توان کلاسی در VB.NET را با استفاده از آن ایجاد نمود( توارث بین زبانها ). ویژگی فوق ، توارث بین زبان ها نامیده می گردد. اشیاء نوشته شده با زبان متفاوت دیگر قادر به ارتباط عملیاتی با یکدیگر می باشند . دو بخش مهم CLR که امکان فوق را فراهم می نمایند CTS)Common Type System) و CLS) Common Language Specification)، می باشند .
سیستم CTS
سیستم CTS ، قوانین لازم بمنظورتبعیت یک زبان در جهت بهره گیری از مزایای فریمورک دات نت را تعریف می نماید. سیستم فوق، همچنین مجموعه ای از نوع های متداول و عملیاتی که در بین زبان های برنامه نویسی متفاوت موجود است را تعریف و مشخص می نماید که چگونه این نوع ها استفاده و توسط CLR مدیریت گردند ، چگونه اشیاء قابلیت های خود را عرضه و چگونه با یکدیگر ارتباط برقرار نمایند . CTS ، فونداسیون لازم بمنظور ارتباط متقابل بین زبانها در دات نت را ایجاد می نماید.
سیستم CLS)Common Language Specification)
CLS ، زیر مجموعه ای از CTS بوده که مسئول تشریح پارامترهای پایه و مهم استفاده شده توسط مجموعه ای گسترده از زبان های برنامه نویسی است . عناصری که از ویژگی های CLS ، استفاده می نمایند ، سازگار با CLS بوده و امکان استفاده و دستیابی به عناصر فوق ، از طریق سایر زبانهای برنامه نویسی سازگار با دات نت ، وجود خواهد داشت . VB.NET یک زبان سازگار با CLS است . بنابراین ، هر کلاس ، شی و یا عنصری که ایجاد می گردد ، توسط سایر زبا ن های سازگار با CLS در دا ت نت ، قابل استفاده خواهد بود.