سايت و انجمن ما با هدف رفع نياز وبمستران و پشتيباني از آن ايجاد شده است و همواره تلاش نموده است تا مانند الماسي در ميان وب هاي پشتيباني از وبمستران بدرخشد و اميد ميرود روزي يکي از درخشنده ترين ها در اين زمينه باشد
يژوال بيسيک دات نت و برنامه نويسی شی گراء تعداد بازدید: 297
|
|||
musicsari
|
يژوال بيسيک دات نت و برنامه نويسی شی گراء
ويژوال بيسيک دات نت يک زبان برنامه نويسی شی گراء کامل است . اين بدان معنی است که زبان فوق از چهار اصل برنامه نويسی شی گراء يعنی : انتزاع (abstraction ) ، کپسوله سازی کد و داده ( encapsulation ) ، وراثت ( inheritance) ، چند ريختی ( polymorphism ) حمايت می نمايد. در ادامه با اصول چهار گانه فوق بيشتر آشنا شده و مشاهده خواهيم کرد که هر يک از اصول فوق، چه دستاوردی را برای پياده کنندگان نرم افزار شی گراء بدنبال خواهند داشت .
کپسوله سازی کد و داده (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 ايجاد شده است . فريمورک دات نت ، شامل يک کتابخانه استاندارد غنی است که سرويس های اساسی را در اختيار تمامی زبانهای سازگار با دات نت ، قرار می دهند.هدف از معماری فوق ، ارائه امکانات و تسهيلات لازم برای برای ايجاد ، بکارگيری و اجراء سرويس های مبتنی بر وب است . عليرغم هدف فوق ، فريمورک دات نت ، محلی ايده آل برای پياده سازی تمامی انواع برنامه ها صرفنظر از طراحی است . برخی از مزايای معماری فوق بشرح زير می باشد :
در گذشته ، پاس دادن يک string از يک عنصر نوشته شده به زبان ويژوال بيسيک به عنصر ديگری که با ++C نوشته شده بود ، ( و يا برعکس ) مسائل و مشکلات خاص خود را بدنبال داشت . رشته ها در ويژوال بيسيک ، مشابه رشته ها در ++C نبودند . در حقيقت،در برخی موارد خاص ، استفاده از يک عنصر نوشته شده با ++C از طريق ويژوال بيسيک ، بدليل تفاوت در نوع داده آنان ، غير ممکن بود. هر زبان سازگار با دات نت ، از نوع های يکسان تعريف شده و موجود در کتابخانه کلاس پايه استفاده می نمايد. بدين ترتيب ، با مسائل مربوط به ارتباط عملياتی بين زبانها که در گذشته شاهد آنان بوديم ، برخورد نخواهيم کرد. 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 در دا ت نت ، قابل استفاده خواهد بود. |
||
چهارشنبه 20 خرداد 1394 - 15:23 |
|
تمامی حقوق این قالب مربوط به همین انجمن میباشد|طراح قالب : ابزار فارسی -پشتیبانی : رزبلاگ