مفاهيم پايه متداول ترين رويکرد برنامه نويسي
مفاهيم پايه متداول ترين رويکرد برنامه نويسي
مفاهيم پايه متداول ترين رويکرد برنامه نويسي
برنامه نويسي شيئ گرا، نوعي از برنامه نويسي است که در آن برنامه نويس، نه تنها نوع داده و ساختار داده را تعريف مي نمايد بلکه انواع عمليات(functionها) که به ساختار داده مي توانند اعمال شوند را نيز تعريف مي نمايد. در اين روش ساختار داده، آبجکتي است که هم داده و هم ساختار داده را دربرمي گيرد. بعلاوه برنامه نويس مي تواند روابط بين يک آبجکت و ديگري را تعريف نمايد.
اگر به شيوه انجام کارهايتان در دنياي اطراف خود نگاه کنيد، مي توانيد ببينيد که شما درحال تعامل با يک دنياي شئ گرا هستيد. براي مثال اگر بخواهيد به فروشگاه برويد، با يک آبجکت اتومبيل تعامل مي کنيد. يک آبجکت اتومبيل شامل آبجکتهاي ديگري است که براي انجام وظيفه «رساندن شما به فروشگاه» با يکديگر تعامل دارند.
شما آبجکت کليد را در محل مقتضي قرارمي دهيد و آن را مي چرخانيد. اين آبجکت به نوبه خود پيامي را(ازطريق يک سيگنال الکتريکي)به آبجکت استارت مي فرستد که با آبجکت موتور براي روشن کردن اتومبيل تعامل مي نمايد. بعنوان يک راننده شما ازمنطقي که نحوه کار آبجکتهاي سيستم با يکديگر براي روشن کردن اتومبيل را تعريف
مي کند، دور نگهداشته مي شويد. شما صرفا يک توالي از رويدادها را با اجرايMethod استارت آغاز مي کنيد. سپس بايد منتظر بمانيد تا يک پاسخ (پيام) موفقيت يا عدم موفقيت را دريافت نماييد.
بطور مشابهي، کاربران برنامه هاي نرم افزاري نيز از منطق مورد نياز براي انجام يک وظيفه دورن نگهداشته مي شوند . براي مثال، هنگاميکه شما يک صفحه را در واژه پرداز خود چاپ مي کنيد، يک اقدام را با کليک بر روي کليدPrintآغاز مي نماييد. در اينجا شما از پردازش داخلي مورد نياز براي انجام فرآيند چاپ دور نگهداشته شده ايد. شما صرفا منتظر يک واکنش مي مانيد که مشخص مي کند آيا صفحه مورد نظر چاپ شده است يا خير. بطور داخلي، آبجکت چاپگر تعامل مي نمايد که باعث مي شود چاپگر وظيفه چاپ صفحه مورد نظر شما را انجام دهد.
معرفي مفاهيمOOPدر اواسط دهه1960ميلادي و با يک زبان برنامه نويسي بنامSomulaآغاز شد وسپس در دهه1970با عرضه Smalltalkرشد کرد. با وجود آنکه اين پيشرفتهاي اوليه در زبانهايOOP با پذيرش چشمگيري از سوي برنامه نويسان نرم افزاري مواجه نشدند، اما رشدو نمو شيوه هاي شئ گرا ادامه پيدا کرد. در اواسط دهه 1980 ميلادي، شيوه هاي شئ گرا يکبار ديگر مورد توجه قرار گرفتند. خصوصا ،زبانهاي برنامه نويسيOOP نظيرC++وEifleدر ميان برنامه نويسان کامپيوتري محبوبيت پيدا کردند. رشد محبوبيتOOPدر دهه 1990 ادامه پيدا کرد که قابل توجه ترين رويداد اين سالها، معرفيJavaواستقبال عظيم ازآن بود. در سال2002، مايکروسافت در کنار انتشار چارچوب کاري.NET خود يک زبانOOP جديد با نام #C را معرفي کرده و ويژوال بيسيک را طوري بازنگري قرار داد که به يک زبانOOP واقعي تبديل گردد.
زبانهاي رويه اي، برنامه را در يک ساختار خطي سازماندهي مي کنند(آنها از بالا به پايين اجرا مي شوند)بعبارت ديگر، برنامه مجموعه اي از مراحل است که يکي پس از ديگري اجرا مي شوند. اين نوع برنامه نويسي بخوبي در مورد برنامه هاي کوچکي که حاوي چند صد خط کد هستند کارمي کند. اما هرچه برنامه ها بزرگتر مي شوند، مديريت و ديباگ نمودن آنها نيز دشوارتر مي شود.
در يک تلاش براي مديريت اندازه روزافزون برنامه ها، برنامه نويسي ساخت يافته براي شکستن کد به قسمتهاي قابل مديريتي که توابع(Function)يا رويه(Procedures) ناميده مي شدند، معرفي شد. اين يک بهبود به حساب مي آمد، اما وقتي برنامه ها ،عملکردهاي تجاري پيچيده تري را انجام داده و با ساير سيستم ها به تعامل مي پرداختند، تواقص شيوه برنامه نويسي ساخت يافته نيز به تدريج آشکار شدند:
* نگهداري برنامه ها دشوارتر گرديد.
* تغيير عملکردهاي موجود بدون تاثير منفي بر عملکرد کل سيستم ،بسيار دشوار بود.
*برنامه هاي جديد ،اساسا از نقطه صفر توليد مي شدند در نتيجه بازگشت ناچيزي براي سرمايه گذاريهاي انجام شده در تلاشهاي قبلي وجود داشت.
* توسعه تيمي، براي برنامه نويسان هيچ مزيتي نداشت. برنامه نويسان ناچار بودند از تمام جنبه هاي کار يک برنامه آگاهي داشته باشند و نمي توانستند تلاشهاي خود را بر وري يک جنبه از يک سيستم متمرکز نمايند.
* ترجمه مدل تجاري به مدلهاي برنامه نويسي بسيار دشوار بود.
* اين شيوه، به تنهايي عملکرد خوبي داشت اما با سايرسيستمها بخوبي ادغام نميشد.
علاوه براين نواقص ،بعضي از پيشرفتهاي بدست آمده در سيستمهاي کامپيوتري باعث ايجاد فشار بيشرتي بر شيوه برنامه نويسي ساختار يافته شدند:
* افرادي که برنامه نويس نبودند، خواستار دسترسي مستقيم به برنامه ها از طريق پياده سازي اينترفيسهاي کاربري گرافيکي و کامپيوترهاي دسک تاپ خود بودند(که اين قابليت در اختيارشان قرار گرفت).
* کاربران شيوه Less-Stuctured وشهودي تري را براي تعامل با برنامه ها تقاضا مي کردند.
* سيستمهاي کامپيوتري، به يک مدل توزيع شده تکامل پيدا کردند که درآن منطق تجاري، اينترفيس کاربري و بانک اطلاعاتي Backend به آساني بر روي اينترنت و اينترانتها قابل دسترسي بودند.
در نتيجه، بسياري از برنامه نويسان نرم افزارهاي تجاري به سمت شيوه ها وزبانهاي برنامه نويسي شئ گرا روي آوردند تا اين مشکلات را برطرف نمايند. مزاياي اين روش عبارتند از:
* يک انتقال شهودي تر از مدلهاي آناليز تجاري به مدلهاي پياده سازي نرم افزاري
* توانائي نگهداري و پياده سازي تغييرات در برنامه ها با سرعت و کارآئي بيشتر
* توانايي ايجاد کارآمدتر سيستمهاي نرم افزاري با استفاده از يک فرآيند تيمي که با متخصصين امکان مي داد برروي بخشهاي مختلف سيستم کار کنند.
* توانايي استفاده مجدد از قطعات کد ساير برنامه ها و خريد قطعات(Component)نوشته شده توسط برنامه نويسان طرف ثالث بمنظور افزايش عملکرد برنامه ها با نياز به تلاش کمتر.
* ادغام بهتر با سيستمهاي کامپيوتري توزيع شده
* ادغام بهتربا سيستم عامل مدرن
* توانائي ايجاد اينترفيس کاربري گرافيکي شهودي تر براي کاربران
در اين بخش به بررسي بعضي از مفاهيم زيربنايي و اصطلاحات متداول درتمام زبانهايOOP مي پردازيم. درباره نحوه پياده سازي اين مفاهيم دريک زبان برنامه نويسي بخصوص ،نگران نباشيد. هدف ما صرفا اين است که شما را با مفاهيم ابتدايي آشنا نموده و آنها را طوري با تجربيات روزمره شما مرتبط نماييم که وقتي به بررسي طراحي و پياده سازيOOP مي پردازيم، قابل درک تر باشند.
همانطور که قبلا نيز اشاره کرديم ما در يک دنياي شئ گرا (Object-Oriented)زندگي مي کنيم شما يک آبجکت هستيد شما با ساير آبجکتها تعامل مي کنيد. براي نوشتن اين مقاله، ما با يک آبجکت کامپيوتر تعامل کرده ايم. وقتي صبح از خواب بيدار مي شويد، به يک پيام ارسال شده از آبجکت ساعت زنگدار خود پاسخ داده ايد. در واقع شما يک آبجکت با داده هايي نظير قد، وزن ورنگ مو هستيد. شما همچنينMethodهايي داريد که انجام مي دهيد يا بر روي شما انجام مي شوند(مثل خوردن و راه رفتن).
پس آبجکتها چه چيزي هستند؟
در فرهنگ اصطلاحاتOOP يک آبجکت در واقع يک ساختار براي ترکيب داده ها و رويه هايي براي کار با آن داده ها است. براي مثال اگر بخواهيد داده هاي مربوط به محصولات داخل انبار را پيگيري کنيد ،بايد يک آبجکت محصول را براي نگهداري و کار با داده هاي مربوط به محصولات ايجاد نماييد. اگر مي خواهيد قابليتهاي چاپ را در نرم افزار کاربردي خود داشته باشيد، بايد با يک آبجکت چاپگر کار کنيد تا مسئوليت داده ها وMethodهاي مورد استفاده براي تعامل با چاپگرهاي شما را برعهده دارد.
در نتيجه انتزاع، وقتي دو فرد متفاوت به تعامل با يک آبجکت واحد مي پردازند، غالبا با زيرمجموعه هاي متفاوتي از خصوصيات سروکار دارند براي مثال وقتي شما در حال رانندگي با اتومبيل خود هستيد بايد از سرعت آن ومسيري که طي مي کند آگاهي داشته باشيد اگر اتومبيل شما از نوع گيربکس اتوماتيک باشد نيازي نداريد که نگران دور موتور آن باشيد پس اين اطلاعات را فيلتر مي کنيد. از سوي ديگر اين اطلاعات براي يک راننده مسابقات اتومبيلراني کاملا حياتي است پس نمي تواند آنها را فيلتر نمايد.
هنگام ايجاد آبجکتها در نرم افزارهاي کاربرديOOP پياده سازي اين مفهومAbstraction از اهميت بالايي برخوردار است. اگر در حال تهيه يک نرم افزار کاربردي حمل و نقل باشيد بايد يک آبجکت محصول را با خصوصياتي نظير اندازه و وزن ايجاد نماييد.
رنگ محصول در گروه اطلاعات بي ربط قرار دارد و بايستي فيلتر شود از سوي ديگر در هنگام ايجاد يک نرم افزار کاربردي دريافت سفارش رنگ محصول مي تواند از اهميت بالايي برخوردار باشد و بايد در خصوصيات آبجکت محصول درج گردد.
شما دائماEncapsulation را در زندگي روزمرده خود تجربه مي کنيد بخش منابع انساني سازمان خود را در نظر بگيريد اعضا اين بخش اطلاعات مربوطبه کارکنان راEncapsulation(پنهان) مي کنند. آنها نحوه استفاده و يا دستکاري اين داده ها را تعيين مي کنند. هردرخواستي براي داه هاي کارکنان و يا درخواست براي بروزرساني اين داده ها بايد از طريق آنها پردازش شود امنيت شبکه مثال خوبي ديگري دراين زمينه است. هردرخواستي براي اطلاعات امنيتي با يک تغيير در خط مشي امنيتي بايد از طريق سرپرست امنيت شبکه انجام شود. داده هاي امنيتي از ديد کاربران شبکه پنهان شده اند.
باEncapsulation نمودن داده ها مي توانيد امنيت و اعتمادپذيري بيشتري را براي آنها تامين کنيد. شما مي دانيد که داده ها چگونه مورد دسترسي قرار گرفته و چه عملياتي بر روي آنها انجام مي شوند. اين وضعيت باعث مي گردد که کار نگهداري برنامه بسيار اسانتر شده ودر عين حال، فرآيند ديباگ نمودن آن را بطور چشمگيري تسهيل مي نمايد. شما در عين حال مي توانيدMethodهاي مورد استفاده براي کار با داده ها را ويرايش کنيد واگر نحوه درخواستMethod و نوع پاسخ برگشتي را تغيير نداده باشيد، لازم نيست آبجکتهاي ديگري که از آن Methodاستفاده مي کنند را تغيير دهيد. زماني را درنظر بگيريد که نامه اي را با پست ارسال مي کنيد. شما از دفتر پست مي خواهيد که نامه را برايتان تحويل دهد شما از نحوه انجام اينکار توسط پست اطلاع نداريد. اگر دفتر پستي مسير مورد استفاده خود براي رساندن نامه را تغيير دهد، اين وضعيت بر نحوه آغاز ارسال نامه توسط شما تاثيري نخواهد داشت. شما نيازي نداريد که رويه هاي داخلي مورد استفاده دفتر پست براي تحويل نام را بشناسيد.
اين موضوع چه ارتباطي باOOPدارد؟
شما مي توانيد آبجکتهايي را ايجاد کنيد که به يک پيام واحد درپياده سازيهاي منحصربفرد خودشان پاسخ مي دهند. براي مثال شما مي توانيد يک پيام چاپ را به يک آبجکت چاپگر بفرستيد که متن را بر روي يک چاپگر چاپ خواهد نمود. از سوي ديگر شما مي توانيد همان پيام را براي آبجکت نمايشگر بفرستيد که متن را در يک پنجره بر روي صفحه نمايش کامپيوترتان چاپ خواهد کرد. مثال خوب ديگري ازPolymorphism، استفاده از کلمات در زبان محاوره اي است بعضي از کلمات معناي بسيار متفاوتي دارند اما از طريق مضمون جمله، مي توانيد نتيجه گيري کنيد که چه مفهومي مورد نظر است براي مثال اگر يک انگليسي زبان به شما بگويد«Gove me aBreak» يقينا منظورش اين نخواهد بود که شما پاي او را بشکنيد.
درOOP، شما اين نوعPolymorphism را از طريق فرآيندي تحت عنوانOverloading پياده سازي مي کنيد. شما مي توانيد Methodهاي مختلف يک آبجکت را پياده سازي نماييد که نام مشابهي دارند سپس آبجکت برحسب مضمون(بعبارت ديگر تعداد و نوع شناسه هاي ارائه شده)پيام مي تواند تشخيص دهد که کدامMethodبايستي پياده سازي گردد. براي مثال، شما مي توانيد دوMethodاز يک آبجکت انبار را براي جستجوي قيمت يک محصول ايجاد نماييد. هردوMethodمذکور با نامgetpriceمشخص مي شوند. آبجکت ديگري مي تواند اينMethodرا احضار کرده و نام محصول ياID آن را ارائه نمايد. برحسب مقدار رشته اي يا مقدار عدد صحيحي که در درخواست درج شده است، آبجکت انبار مي تواند تشخيص دهد که بايد کداميک ازMethodهاي getpriceرا اجرا نمايد.
شما درOOPازتوارث(Inheritance)براي طبقه بندي آبجکتهاي برنامه هاي خود براساس توابع و خصوصيات مشترک آنها استفاده مي کنيد. اين شيوه باعث مي شود که کار با آبجکتها بسيار آسانترو شهودي تر گردد. اين روش درعين حال کار برنامه نويسي را نيز تسهيل مي نمايد زيرا به شما امکان مي دهد تا خصوصيات عمومي را در يک آبجکت والد ترکيب نموده وسپس اين خصوصيات را درآبجکتهاي فرزند به ارث ببريد براي مثال شما مي توانيد يک آبجکت کارکنان را تعريف کنيد که تمام خصوصيات کلي کارکنان سازمان شما را تعيين مي نمايد سپس مي توانيد يک آبجکت مدير را تعريف کنيد که خصوصيات آبجکت کارکنان را به ارث مي برد اما درعين حال خصوصيات منحصربفرد مديران سازمان شما را به آن اضافه مي نمايد. آبجکت مدير بطور خودکار هر تغييري در پياده سازي آبجکت کارکنان را منعکس خواهد کرد.
نوآوري ديگري که در Tripodوجود داشت مدل قابل توسعه اي بود که در اختيار برنامه نويسان قرار مي دهد برنامه نويسان مي توانستند کنترلهاي سفارشي را توسعه داده و آنها را در محيط برنامه نويسي Tripodترکيب نمايند. تا آن زمان ابزارهاي برنامه نويسي تا حدود زيادي محيطهاي بسته اي بودند که امکان سفارشي سازي آنها وجود نداشت.
مايکروسافت هزينه توسعه Tripod را بهCooperپرداخت و نام آن را بهRubyتغيير داد. باوجود آنکه مايکروسافت هيچگاهRuby را بعنوان يک کيت توليد پوسته(shell construction kit)عرضه نکرد، اما موتور قالب بندي آن را زبان برنامه نويسيQuickBasicترکيب نمودThunder را توسعه داد که يکي از اولين ابزارهايRAD)
Rapid )Application Devolopment براي برنامه هاي ويندوز به حساب مي آيد.Thunderبعدا به ويژوال بيسيک تغيير نام داد وVisual Basic1.0در بهار سال 1991 معرفي شد.
Visual Basic1.0 بخاطر سهولت استفاده و توانايي آن براي وسعه سريع پيش نمونه نرم افزارهاي کاربردي در بين برنامه نويسان نرم افزارهاي کاربردي تجاري محبوبيت پيدا کرد. با وجود آنکه Visual Basic1.0يک نوآوري در طراحي نرم افزارهاي کاربردي ويندوز به حساب مي آيد فاقد پشتيباني توکار از تعامل با بانک اطلاعاتي بود. مايکروسافت دريافت که اين يک محدوديت شديد به حساب مي آيد و پشتيباني ذاتي از دسترسي به داده ها را در قالب(DAO(Data Access Objects در Visual Basic3.0معرفي کرد. پس از درج پشتيباني ذاتي از داده ها محبوبيت ويژوال بيسيک به سرعت افزايش يافت. در واقع ويژوال بيسيک از يک ابزار تهيه پيش نمونه نرم افزارهاي کاربردي به ابزاري که براي توسعه نرم افزارهاي تجاري با قدرت صنعتي مورد استفاده قرار مي گرفت، تبديل شد.
مايکروسافت هيچگاه توسعه زبان ويژوال بيسيک و(IDE(integrated development environmrntآن را فراموش نکرده است. در واقع خود بيل گيتس توجه و علاقه خاصي به توسعه و رشد ويژوال بيسيک داشت. يکبار تيم طراحي امکان ايجاد کنترلها و اضافه نمودن آنها به جعبه ابزار را فراهم نکرده بودند. هنگاميکه بيل گيتس دموي محصول را مشاهده کرد اصرار نمود که اين توسعه پذيري در محصول پياده سازي گردد. اين توسعه پذيري باعث رشد صنعت کنترلهاي سفارشي گرديد.
فروشندگان طرف ثالث عرضه کنترلهايي که برنامه نويسي يک نرم افزار کاربردي را بيش از پيش براي برنامه نويسان ويژوال بيسيک آسان مي کردند را آغاز نمودند. براي مثال يک فروشنده يک کنترلResizeرا عرضه مي کرد که کد مورد نياز براي تغيير اندازه يک فرم راEncapsulateکرده و محتويات فرم را کمترل مي کرد. يک برنامه نويس مي توانست اين ابزار را خريداري نموده و آن را به جعبه ابزار IDEويژوال بيسيک اضافه نمايد. سپس ،به برنامه نويسي مي توانست به آساني کنترل Resizeرا بر روي فرم خود بکشد تا اندازه فرم و کنترلهاي درج شده در آن بطور متناسب تغيير نمايد.
درنسخه6، ويژوال بيسيک به يک زبان برنامه نويسي قدرتمند در کلاس صنعتي با يک پايگاه فوق العاده بزرگ و اختصاصي از برنامه نويسان تبديل شد. با اينحال عليرغم افزايش ويژوال بيسيک در حد يک زبان برنامه نويسي واقعي بسياري از برنامه نويسان يک نقيصه مهم را در آن مشاهده مي کردند:
آنها ويژوال بيسيک را بعنوان يک زبان برنامه نويسيObject-Likeدرنظر مي گرفتند، نه يک زبان برنامه نويسي Object-Orientedواقعي با وجود آنکه Visual Basic4.0توانايي ايجاد کلاسها وبسته بندي آنها در قطعاتي با قابليت استفاده مجدد را در اختيار برنامه نويسان قرار مي داد اما ويژوال بيسيک فاقد ويژگيهاي ابتداييOOPنظير توارثMethod Overloading بود. بدون اين ويژگيها توانايي برنامه نويسان براي ساخت سيستمهاي نرم افزاري توزيع شده پيچيده، شديدا محدود ميشد. مايکروسافت اين نقيصه را تشخيص داده و با عرضه Visual BasicNET1.0،ويژوال بيسيک را به يک زبان OOPواقعي تبديل کرد.
از زمان عرضه اوليهNET Framework درسال 2002 مايکروسافت به بهبود و نوآوري درآن و زبانهاي هسته اي ايجاد شده در بالاي اين چارچوب کاري(#C,Visual Basic NET) ادامه داده است. مايکروسافت همچنين به تامين ابزارهاي مورد نياز برنامه نويسان براي دستيابي به يک تجربه برنامه نويسي کاملا موثر و شهودي ادامه مي دهد.
منبع:نشريه بزرگراه رايانه- ش133
مفهوم آبجکت
اگر به شيوه انجام کارهايتان در دنياي اطراف خود نگاه کنيد، مي توانيد ببينيد که شما درحال تعامل با يک دنياي شئ گرا هستيد. براي مثال اگر بخواهيد به فروشگاه برويد، با يک آبجکت اتومبيل تعامل مي کنيد. يک آبجکت اتومبيل شامل آبجکتهاي ديگري است که براي انجام وظيفه «رساندن شما به فروشگاه» با يکديگر تعامل دارند.
شما آبجکت کليد را در محل مقتضي قرارمي دهيد و آن را مي چرخانيد. اين آبجکت به نوبه خود پيامي را(ازطريق يک سيگنال الکتريکي)به آبجکت استارت مي فرستد که با آبجکت موتور براي روشن کردن اتومبيل تعامل مي نمايد. بعنوان يک راننده شما ازمنطقي که نحوه کار آبجکتهاي سيستم با يکديگر براي روشن کردن اتومبيل را تعريف
مي کند، دور نگهداشته مي شويد. شما صرفا يک توالي از رويدادها را با اجرايMethod استارت آغاز مي کنيد. سپس بايد منتظر بمانيد تا يک پاسخ (پيام) موفقيت يا عدم موفقيت را دريافت نماييد.
بطور مشابهي، کاربران برنامه هاي نرم افزاري نيز از منطق مورد نياز براي انجام يک وظيفه دورن نگهداشته مي شوند . براي مثال، هنگاميکه شما يک صفحه را در واژه پرداز خود چاپ مي کنيد، يک اقدام را با کليک بر روي کليدPrintآغاز مي نماييد. در اينجا شما از پردازش داخلي مورد نياز براي انجام فرآيند چاپ دور نگهداشته شده ايد. شما صرفا منتظر يک واکنش مي مانيد که مشخص مي کند آيا صفحه مورد نظر چاپ شده است يا خير. بطور داخلي، آبجکت چاپگر تعامل مي نمايد که باعث مي شود چاپگر وظيفه چاپ صفحه مورد نظر شما را انجام دهد.
معرفي مفاهيمOOPدر اواسط دهه1960ميلادي و با يک زبان برنامه نويسي بنامSomulaآغاز شد وسپس در دهه1970با عرضه Smalltalkرشد کرد. با وجود آنکه اين پيشرفتهاي اوليه در زبانهايOOP با پذيرش چشمگيري از سوي برنامه نويسان نرم افزاري مواجه نشدند، اما رشدو نمو شيوه هاي شئ گرا ادامه پيدا کرد. در اواسط دهه 1980 ميلادي، شيوه هاي شئ گرا يکبار ديگر مورد توجه قرار گرفتند. خصوصا ،زبانهاي برنامه نويسيOOP نظيرC++وEifleدر ميان برنامه نويسان کامپيوتري محبوبيت پيدا کردند. رشد محبوبيتOOPدر دهه 1990 ادامه پيدا کرد که قابل توجه ترين رويداد اين سالها، معرفيJavaواستقبال عظيم ازآن بود. در سال2002، مايکروسافت در کنار انتشار چارچوب کاري.NET خود يک زبانOOP جديد با نام #C را معرفي کرده و ويژوال بيسيک را طوري بازنگري قرار داد که به يک زبانOOP واقعي تبديل گردد.
ارزشهاي اين رويکرد برنامه نويسي
زبانهاي رويه اي، برنامه را در يک ساختار خطي سازماندهي مي کنند(آنها از بالا به پايين اجرا مي شوند)بعبارت ديگر، برنامه مجموعه اي از مراحل است که يکي پس از ديگري اجرا مي شوند. اين نوع برنامه نويسي بخوبي در مورد برنامه هاي کوچکي که حاوي چند صد خط کد هستند کارمي کند. اما هرچه برنامه ها بزرگتر مي شوند، مديريت و ديباگ نمودن آنها نيز دشوارتر مي شود.
در يک تلاش براي مديريت اندازه روزافزون برنامه ها، برنامه نويسي ساخت يافته براي شکستن کد به قسمتهاي قابل مديريتي که توابع(Function)يا رويه(Procedures) ناميده مي شدند، معرفي شد. اين يک بهبود به حساب مي آمد، اما وقتي برنامه ها ،عملکردهاي تجاري پيچيده تري را انجام داده و با ساير سيستم ها به تعامل مي پرداختند، تواقص شيوه برنامه نويسي ساخت يافته نيز به تدريج آشکار شدند:
* نگهداري برنامه ها دشوارتر گرديد.
* تغيير عملکردهاي موجود بدون تاثير منفي بر عملکرد کل سيستم ،بسيار دشوار بود.
*برنامه هاي جديد ،اساسا از نقطه صفر توليد مي شدند در نتيجه بازگشت ناچيزي براي سرمايه گذاريهاي انجام شده در تلاشهاي قبلي وجود داشت.
* توسعه تيمي، براي برنامه نويسان هيچ مزيتي نداشت. برنامه نويسان ناچار بودند از تمام جنبه هاي کار يک برنامه آگاهي داشته باشند و نمي توانستند تلاشهاي خود را بر وري يک جنبه از يک سيستم متمرکز نمايند.
* ترجمه مدل تجاري به مدلهاي برنامه نويسي بسيار دشوار بود.
* اين شيوه، به تنهايي عملکرد خوبي داشت اما با سايرسيستمها بخوبي ادغام نميشد.
علاوه براين نواقص ،بعضي از پيشرفتهاي بدست آمده در سيستمهاي کامپيوتري باعث ايجاد فشار بيشرتي بر شيوه برنامه نويسي ساختار يافته شدند:
* افرادي که برنامه نويس نبودند، خواستار دسترسي مستقيم به برنامه ها از طريق پياده سازي اينترفيسهاي کاربري گرافيکي و کامپيوترهاي دسک تاپ خود بودند(که اين قابليت در اختيارشان قرار گرفت).
* کاربران شيوه Less-Stuctured وشهودي تري را براي تعامل با برنامه ها تقاضا مي کردند.
* سيستمهاي کامپيوتري، به يک مدل توزيع شده تکامل پيدا کردند که درآن منطق تجاري، اينترفيس کاربري و بانک اطلاعاتي Backend به آساني بر روي اينترنت و اينترانتها قابل دسترسي بودند.
در نتيجه، بسياري از برنامه نويسان نرم افزارهاي تجاري به سمت شيوه ها وزبانهاي برنامه نويسي شئ گرا روي آوردند تا اين مشکلات را برطرف نمايند. مزاياي اين روش عبارتند از:
* يک انتقال شهودي تر از مدلهاي آناليز تجاري به مدلهاي پياده سازي نرم افزاري
* توانائي نگهداري و پياده سازي تغييرات در برنامه ها با سرعت و کارآئي بيشتر
* توانايي ايجاد کارآمدتر سيستمهاي نرم افزاري با استفاده از يک فرآيند تيمي که با متخصصين امکان مي داد برروي بخشهاي مختلف سيستم کار کنند.
* توانايي استفاده مجدد از قطعات کد ساير برنامه ها و خريد قطعات(Component)نوشته شده توسط برنامه نويسان طرف ثالث بمنظور افزايش عملکرد برنامه ها با نياز به تلاش کمتر.
* ادغام بهتر با سيستمهاي کامپيوتري توزيع شده
* ادغام بهتربا سيستم عامل مدرن
* توانائي ايجاد اينترفيس کاربري گرافيکي شهودي تر براي کاربران
در اين بخش به بررسي بعضي از مفاهيم زيربنايي و اصطلاحات متداول درتمام زبانهايOOP مي پردازيم. درباره نحوه پياده سازي اين مفاهيم دريک زبان برنامه نويسي بخصوص ،نگران نباشيد. هدف ما صرفا اين است که شما را با مفاهيم ابتدايي آشنا نموده و آنها را طوري با تجربيات روزمره شما مرتبط نماييم که وقتي به بررسي طراحي و پياده سازيOOP مي پردازيم، قابل درک تر باشند.
همانطور که قبلا نيز اشاره کرديم ما در يک دنياي شئ گرا (Object-Oriented)زندگي مي کنيم شما يک آبجکت هستيد شما با ساير آبجکتها تعامل مي کنيد. براي نوشتن اين مقاله، ما با يک آبجکت کامپيوتر تعامل کرده ايم. وقتي صبح از خواب بيدار مي شويد، به يک پيام ارسال شده از آبجکت ساعت زنگدار خود پاسخ داده ايد. در واقع شما يک آبجکت با داده هايي نظير قد، وزن ورنگ مو هستيد. شما همچنينMethodهايي داريد که انجام مي دهيد يا بر روي شما انجام مي شوند(مثل خوردن و راه رفتن).
پس آبجکتها چه چيزي هستند؟
در فرهنگ اصطلاحاتOOP يک آبجکت در واقع يک ساختار براي ترکيب داده ها و رويه هايي براي کار با آن داده ها است. براي مثال اگر بخواهيد داده هاي مربوط به محصولات داخل انبار را پيگيري کنيد ،بايد يک آبجکت محصول را براي نگهداري و کار با داده هاي مربوط به محصولات ايجاد نماييد. اگر مي خواهيد قابليتهاي چاپ را در نرم افزار کاربردي خود داشته باشيد، بايد با يک آبجکت چاپگر کار کنيد تا مسئوليت داده ها وMethodهاي مورد استفاده براي تعامل با چاپگرهاي شما را برعهده دارد.
انتزاع
در نتيجه انتزاع، وقتي دو فرد متفاوت به تعامل با يک آبجکت واحد مي پردازند، غالبا با زيرمجموعه هاي متفاوتي از خصوصيات سروکار دارند براي مثال وقتي شما در حال رانندگي با اتومبيل خود هستيد بايد از سرعت آن ومسيري که طي مي کند آگاهي داشته باشيد اگر اتومبيل شما از نوع گيربکس اتوماتيک باشد نيازي نداريد که نگران دور موتور آن باشيد پس اين اطلاعات را فيلتر مي کنيد. از سوي ديگر اين اطلاعات براي يک راننده مسابقات اتومبيلراني کاملا حياتي است پس نمي تواند آنها را فيلتر نمايد.
هنگام ايجاد آبجکتها در نرم افزارهاي کاربرديOOP پياده سازي اين مفهومAbstraction از اهميت بالايي برخوردار است. اگر در حال تهيه يک نرم افزار کاربردي حمل و نقل باشيد بايد يک آبجکت محصول را با خصوصياتي نظير اندازه و وزن ايجاد نماييد.
رنگ محصول در گروه اطلاعات بي ربط قرار دارد و بايستي فيلتر شود از سوي ديگر در هنگام ايجاد يک نرم افزار کاربردي دريافت سفارش رنگ محصول مي تواند از اهميت بالايي برخوردار باشد و بايد در خصوصيات آبجکت محصول درج گردد.
در حفاظ قرار دادن اطلاعات
شما دائماEncapsulation را در زندگي روزمرده خود تجربه مي کنيد بخش منابع انساني سازمان خود را در نظر بگيريد اعضا اين بخش اطلاعات مربوطبه کارکنان راEncapsulation(پنهان) مي کنند. آنها نحوه استفاده و يا دستکاري اين داده ها را تعيين مي کنند. هردرخواستي براي داه هاي کارکنان و يا درخواست براي بروزرساني اين داده ها بايد از طريق آنها پردازش شود امنيت شبکه مثال خوبي ديگري دراين زمينه است. هردرخواستي براي اطلاعات امنيتي با يک تغيير در خط مشي امنيتي بايد از طريق سرپرست امنيت شبکه انجام شود. داده هاي امنيتي از ديد کاربران شبکه پنهان شده اند.
باEncapsulation نمودن داده ها مي توانيد امنيت و اعتمادپذيري بيشتري را براي آنها تامين کنيد. شما مي دانيد که داده ها چگونه مورد دسترسي قرار گرفته و چه عملياتي بر روي آنها انجام مي شوند. اين وضعيت باعث مي گردد که کار نگهداري برنامه بسيار اسانتر شده ودر عين حال، فرآيند ديباگ نمودن آن را بطور چشمگيري تسهيل مي نمايد. شما در عين حال مي توانيدMethodهاي مورد استفاده براي کار با داده ها را ويرايش کنيد واگر نحوه درخواستMethod و نوع پاسخ برگشتي را تغيير نداده باشيد، لازم نيست آبجکتهاي ديگري که از آن Methodاستفاده مي کنند را تغيير دهيد. زماني را درنظر بگيريد که نامه اي را با پست ارسال مي کنيد. شما از دفتر پست مي خواهيد که نامه را برايتان تحويل دهد شما از نحوه انجام اينکار توسط پست اطلاع نداريد. اگر دفتر پستي مسير مورد استفاده خود براي رساندن نامه را تغيير دهد، اين وضعيت بر نحوه آغاز ارسال نامه توسط شما تاثيري نخواهد داشت. شما نيازي نداريد که رويه هاي داخلي مورد استفاده دفتر پست براي تحويل نام را بشناسيد.
خاصيت چند ريختي
اين موضوع چه ارتباطي باOOPدارد؟
شما مي توانيد آبجکتهايي را ايجاد کنيد که به يک پيام واحد درپياده سازيهاي منحصربفرد خودشان پاسخ مي دهند. براي مثال شما مي توانيد يک پيام چاپ را به يک آبجکت چاپگر بفرستيد که متن را بر روي يک چاپگر چاپ خواهد نمود. از سوي ديگر شما مي توانيد همان پيام را براي آبجکت نمايشگر بفرستيد که متن را در يک پنجره بر روي صفحه نمايش کامپيوترتان چاپ خواهد کرد. مثال خوب ديگري ازPolymorphism، استفاده از کلمات در زبان محاوره اي است بعضي از کلمات معناي بسيار متفاوتي دارند اما از طريق مضمون جمله، مي توانيد نتيجه گيري کنيد که چه مفهومي مورد نظر است براي مثال اگر يک انگليسي زبان به شما بگويد«Gove me aBreak» يقينا منظورش اين نخواهد بود که شما پاي او را بشکنيد.
درOOP، شما اين نوعPolymorphism را از طريق فرآيندي تحت عنوانOverloading پياده سازي مي کنيد. شما مي توانيد Methodهاي مختلف يک آبجکت را پياده سازي نماييد که نام مشابهي دارند سپس آبجکت برحسب مضمون(بعبارت ديگر تعداد و نوع شناسه هاي ارائه شده)پيام مي تواند تشخيص دهد که کدامMethodبايستي پياده سازي گردد. براي مثال، شما مي توانيد دوMethodاز يک آبجکت انبار را براي جستجوي قيمت يک محصول ايجاد نماييد. هردوMethodمذکور با نامgetpriceمشخص مي شوند. آبجکت ديگري مي تواند اينMethodرا احضار کرده و نام محصول ياID آن را ارائه نمايد. برحسب مقدار رشته اي يا مقدار عدد صحيحي که در درخواست درج شده است، آبجکت انبار مي تواند تشخيص دهد که بايد کداميک ازMethodهاي getpriceرا اجرا نمايد.
خاصيت ارث بري
شما درOOPازتوارث(Inheritance)براي طبقه بندي آبجکتهاي برنامه هاي خود براساس توابع و خصوصيات مشترک آنها استفاده مي کنيد. اين شيوه باعث مي شود که کار با آبجکتها بسيار آسانترو شهودي تر گردد. اين روش درعين حال کار برنامه نويسي را نيز تسهيل مي نمايد زيرا به شما امکان مي دهد تا خصوصيات عمومي را در يک آبجکت والد ترکيب نموده وسپس اين خصوصيات را درآبجکتهاي فرزند به ارث ببريد براي مثال شما مي توانيد يک آبجکت کارکنان را تعريف کنيد که تمام خصوصيات کلي کارکنان سازمان شما را تعيين مي نمايد سپس مي توانيد يک آبجکت مدير را تعريف کنيد که خصوصيات آبجکت کارکنان را به ارث مي برد اما درعين حال خصوصيات منحصربفرد مديران سازمان شما را به آن اضافه مي نمايد. آبجکت مدير بطور خودکار هر تغييري در پياده سازي آبجکت کارکنان را منعکس خواهد کرد.
خاصيت تجميع
ريشه هاي ويژوال بيسيک
نوآوري ديگري که در Tripodوجود داشت مدل قابل توسعه اي بود که در اختيار برنامه نويسان قرار مي دهد برنامه نويسان مي توانستند کنترلهاي سفارشي را توسعه داده و آنها را در محيط برنامه نويسي Tripodترکيب نمايند. تا آن زمان ابزارهاي برنامه نويسي تا حدود زيادي محيطهاي بسته اي بودند که امکان سفارشي سازي آنها وجود نداشت.
مايکروسافت هزينه توسعه Tripod را بهCooperپرداخت و نام آن را بهRubyتغيير داد. باوجود آنکه مايکروسافت هيچگاهRuby را بعنوان يک کيت توليد پوسته(shell construction kit)عرضه نکرد، اما موتور قالب بندي آن را زبان برنامه نويسيQuickBasicترکيب نمودThunder را توسعه داد که يکي از اولين ابزارهايRAD)
Rapid )Application Devolopment براي برنامه هاي ويندوز به حساب مي آيد.Thunderبعدا به ويژوال بيسيک تغيير نام داد وVisual Basic1.0در بهار سال 1991 معرفي شد.
Visual Basic1.0 بخاطر سهولت استفاده و توانايي آن براي وسعه سريع پيش نمونه نرم افزارهاي کاربردي در بين برنامه نويسان نرم افزارهاي کاربردي تجاري محبوبيت پيدا کرد. با وجود آنکه Visual Basic1.0يک نوآوري در طراحي نرم افزارهاي کاربردي ويندوز به حساب مي آيد فاقد پشتيباني توکار از تعامل با بانک اطلاعاتي بود. مايکروسافت دريافت که اين يک محدوديت شديد به حساب مي آيد و پشتيباني ذاتي از دسترسي به داده ها را در قالب(DAO(Data Access Objects در Visual Basic3.0معرفي کرد. پس از درج پشتيباني ذاتي از داده ها محبوبيت ويژوال بيسيک به سرعت افزايش يافت. در واقع ويژوال بيسيک از يک ابزار تهيه پيش نمونه نرم افزارهاي کاربردي به ابزاري که براي توسعه نرم افزارهاي تجاري با قدرت صنعتي مورد استفاده قرار مي گرفت، تبديل شد.
مايکروسافت هيچگاه توسعه زبان ويژوال بيسيک و(IDE(integrated development environmrntآن را فراموش نکرده است. در واقع خود بيل گيتس توجه و علاقه خاصي به توسعه و رشد ويژوال بيسيک داشت. يکبار تيم طراحي امکان ايجاد کنترلها و اضافه نمودن آنها به جعبه ابزار را فراهم نکرده بودند. هنگاميکه بيل گيتس دموي محصول را مشاهده کرد اصرار نمود که اين توسعه پذيري در محصول پياده سازي گردد. اين توسعه پذيري باعث رشد صنعت کنترلهاي سفارشي گرديد.
فروشندگان طرف ثالث عرضه کنترلهايي که برنامه نويسي يک نرم افزار کاربردي را بيش از پيش براي برنامه نويسان ويژوال بيسيک آسان مي کردند را آغاز نمودند. براي مثال يک فروشنده يک کنترلResizeرا عرضه مي کرد که کد مورد نياز براي تغيير اندازه يک فرم راEncapsulateکرده و محتويات فرم را کمترل مي کرد. يک برنامه نويس مي توانست اين ابزار را خريداري نموده و آن را به جعبه ابزار IDEويژوال بيسيک اضافه نمايد. سپس ،به برنامه نويسي مي توانست به آساني کنترل Resizeرا بر روي فرم خود بکشد تا اندازه فرم و کنترلهاي درج شده در آن بطور متناسب تغيير نمايد.
درنسخه6، ويژوال بيسيک به يک زبان برنامه نويسي قدرتمند در کلاس صنعتي با يک پايگاه فوق العاده بزرگ و اختصاصي از برنامه نويسان تبديل شد. با اينحال عليرغم افزايش ويژوال بيسيک در حد يک زبان برنامه نويسي واقعي بسياري از برنامه نويسان يک نقيصه مهم را در آن مشاهده مي کردند:
آنها ويژوال بيسيک را بعنوان يک زبان برنامه نويسيObject-Likeدرنظر مي گرفتند، نه يک زبان برنامه نويسي Object-Orientedواقعي با وجود آنکه Visual Basic4.0توانايي ايجاد کلاسها وبسته بندي آنها در قطعاتي با قابليت استفاده مجدد را در اختيار برنامه نويسان قرار مي داد اما ويژوال بيسيک فاقد ويژگيهاي ابتداييOOPنظير توارثMethod Overloading بود. بدون اين ويژگيها توانايي برنامه نويسان براي ساخت سيستمهاي نرم افزاري توزيع شده پيچيده، شديدا محدود ميشد. مايکروسافت اين نقيصه را تشخيص داده و با عرضه Visual BasicNET1.0،ويژوال بيسيک را به يک زبان OOPواقعي تبديل کرد.
از زمان عرضه اوليهNET Framework درسال 2002 مايکروسافت به بهبود و نوآوري درآن و زبانهاي هسته اي ايجاد شده در بالاي اين چارچوب کاري(#C,Visual Basic NET) ادامه داده است. مايکروسافت همچنين به تامين ابزارهاي مورد نياز برنامه نويسان براي دستيابي به يک تجربه برنامه نويسي کاملا موثر و شهودي ادامه مي دهد.
منبع:نشريه بزرگراه رايانه- ش133
تازه های مقالات
ارسال نظر
در ارسال نظر شما خطایی رخ داده است
کاربر گرامی، ضمن تشکر از شما نظر شما با موفقیت ثبت گردید. و پس از تائید در فهرست نظرات نمایش داده می شود
نام :
ایمیل :
نظرات کاربران
{{Fullname}} {{Creationdate}}
{{Body}}