توسعه نرمافزاري با برنامهنویسی درARC GIS
رکن نرمافزار در سیستم اطلاعات جغرافیایی بهصورت چندمنظوره یا چندکاره[1] طراحی میشوند و با این خصوصیت داراي کاربردهاي متنوعی هستند. اما حالتهای ویژه وجود خواهند داشت که برخی از عملیات آن در نرم افزارهاي GIS دیده نشده است و یا نیاز به تکـرار برخی از عملیات ویژه GIS است. که در این حالت , ماکرو نویسی در داخل نرمافزارGIS تا ایجاد یک نرمافزار مستقل کاربردي باقابلیتهای مبتنی برGIS با استفاده از محیط برنامهنویسی ضروري میگردد. در زمان حاضر , ارائه سیستم اطلاعات جغرافیایی شئ گرا و کاربرد مفاهیم شئ گراي طراحی و استفاده از این سیستمها رایج گردیده است. در اصـول برنامهنویسی شئ گرا[2] مدلسازی, دنیاي واقعی شئ ها با استفاده از نرمافزار ثانویـه اسـت, که اصل گرایی و ساده گرایی در مدلسازی , هدف اصلی در این شبیهسازی است. آشنایی هر چه بیشتر با شئ گراي براي کاربران و کارشناسان متخصص درزمینهٔ GIS فرصتی فراهم میکند تا بهصورت شئ گرا به توسعه این سیستمها با استناد بر اصول بنیادین شئ گرایی به توسعه نرمافزارهاي خود براي ارائه به بازار اقدام نمایند .
تعریف شیءگرایی
شئ گراي یکروند طبیعی تفکر در مورد جهان و برنامهنویسی رایانهی است. بهطوریکه انسان همیشه خواهان یافتن مرز بین پدیدههای مختلف جهان هستی , براي تشخیص تا بکار گیري هریک از آنهاست .
مفاهیم شئ ها ، خصوصیات ، کلاسهای کل و جز به همراه اعضا ، از اصول اولیه تحلیلش گرایی است و انسان براي درك دنیاي پیرامون خود ، همواره از سه روش سازماندهی که بر کل افکار او حاکم است ، استفاده میکند:
- تفکیک تجربه خود به اشیاي خاص و ویژگیهای آنها. براي مثال ، وقتی انسان درخت را از طریق اندازهاش و روابط فضایی آن از دیگر اشیا تمیز میدهد.
- تمیز دادن بین شئ کل و دیگر اجزاي آن . براي مثال وقتیکه انسـآنیک درخت و شاخ و برگهای آن را از یکدیگر تمیز میدهد.
- شکلگیری و تفکیک طبقات مختلفی از اشیا . براي مثال وقتی انسان تمامی درختها را در یک کلاس و تمامی سنگها را در یک کلاس طبقهبندی و آنها تمیز میدهد.
مفاهیم شئ و کلاس با تعریف زیر بیان میگردد:
شئ انتزاعی از یکچیز درزمینهٔ (یا حوزه ) یک مسئله یـا درزمینهٔ پیادهسازی آن است که منعکسکننده قابلیتهای یک سیستم براي نگهداري اطلاعات درباره آن, تراکنش با آن یا هر دو آنها باشد.
کلاس شرحی از یک یا چند شئ است که بهوسیله مجموعهای از ویژگیها و خدمات متحدالشکل توصیف میگردد, علاوه بر این ممکن است که چگونگی ایجاد خلق اشیاي جدید در یک کلاس را نیز بیان کند (یوردن ،1378) . خاصیت یک شئ نشاندهنده رفتارها و ویژگیهای شئ در برنامهنویسی است. رنگ هر عارضه یا شئ خصوصیت مشترك اکثر شئ هـا در جهان واقعی و جهان مجازي برنامهنویسی است . درحالیکه برخی خصوصیات خاص یـک شئ هستند. بهطور مثـال در شبکههای گـاز خصوصـیت مسـاحت در عارضـه ساختمان ایستگاههای تقلیل فشار وجود دارد ولی براي عارضه شیر یا سهراهی یا خطی این ویژگی وجود ندارد. در برنامهنویسی شئ گرا دادههای توصیفی[3] و رفتار[4] را در داخل یک بستهای بـه نـام شئ محصور میکند. دادهها و توابع موجود در یک شئ بهصورت درونی به یکدیگر گـره میخورند. اشیاء داراي خاصیت مخفی کردن اطلاعات هستند . این جمله به این معنـی اسـت که اگرچه اشیاء ممکن است بدانند که چگونه با دیگر اشیاء ارتباط برقرار کنند ولی بهطور عـادي نمیتوانند بفهمند که سایر اشیاء چگونه ایجادشدهاند و یا چگونه در درون آنها فعالیتی ایجادشده است. این جزییات از شئ ها مخفی نگهداشته میشود.
مفاهیم شئ گرایی
توسعه شئ گرا داراي چهار مفهوم کلیدي در مورد برنامهنویسی میباشد (فرانکین 1380).
انتزاع
تصویري از شئ , بهعنوان نـوعی از اشـیا کـه داراي برخـی از روشها (methods)و خصوصیات ویژه است و میتواند برخی از اعمال را انجام دهد . بهطور مثال انسـان ( Human) میتواند شئ (کلاسی) در برنامهنویسی محسوب گردد که داراي برخی از خصوصیات رنگ , قد و جنسیت ویژهای است و هر انسانی میتواند روشهای مختلفی را بـراي غـذا خـوردن راه رفتن و احوالپرسی داشته باشد. عوارض مکانی (گرافیکی) محیط GIS هم قابلیـت تعریـف در کلاسهای مختلف را دارا هستند بهطوریکه عوارض چندضلعی مرتبط با کاربري جنگلی میتواند بهعنوآنیک کلاس در سیستم شئ گرا معرفی گردد. زبانهای شـئ گـرا انتـزاع را از طریق کلاسها ارائه میدهند. کلاسها ، خصوصیات و روشهای یک نوع شیء را تعریف میکنند و یک برنامهنویس از طریق هر کلاس ، شئ موردنظر خود را نمونهسازی[9] میکند.
محصورسازی
در محصورسازي , نمایش خصوصیات و روشهای یک شئ بهطوری انجام میگیرد که اجراي عملیات اصلی هر فرایند همانند جعبه سیاه از دنیاي خـارج نهـان گـردد. بـدین ترتیب موارد قابلاجرا نشان داده میشود , ولی نحوه انجام کار مخفی میماند و امکان ایجـاد شیءهای مختلف به برنامهنویس داده میشود, درحالیکه هیچ تأثیری بر کدهاي مورداستفاده نخواهد داشت . این کار با مفهوم واسط[10] هر شئ انجام خواهد گرفت.
چندریختی
اجراي مختلف از شئ هاي گوناگون که یک عمل مشابه انجام میدهند، مفهـوم چنـدریختی است . چندریختی با استفاده از کلاسهای متعـددي کـه داراي واسطهای یکسان هستند کار خود را انجام میدهند این فناوري اجازه ایجاد شئ را به کد برنامهنویسی شده میدهد و با استفاده از واسطها , شکل دیگري از چندریختی را ارائه میدهد. چندریختی این امکان را به وجود میآورد که یک برنامهنویس بهصورت گسترده به انواع متغیرهای موجود و کلاسها مدنظر دسترسی داشته باشد . با استفاده از چندریختی طراحی سیستم بسیار آسـانتر میشود . برنامهها میتوانند بهگونهای پردازش عمومیتری بر روي ابر کلاسها یا شئ هـاي موجود سایر کلاسها در سلسلهمراتب انجام دهند.
وراثت
وراثت نظریهای است که بر اساس آنیک کلاس میتواند برمبناي کلاس دیگـري بـهنام کلاس پایه ایجاد شود , وراثت براي ایجاد سلسلههایی از شئ ها , یک سازوکار (مکانیزم ) ارائه میدهد.
خصوصیات و روشهای شئ
خصوصیات و روشهای شئ بهطور محصورشده در ارتباط با دادهها و روشهای یـک شئ به یکدیگر گره میخورند و شئ ها داراي خصیصه پنهانکاری اطلاعات هستند . به این معنی که اگرچه شئ ها مکن است با یک شئ دیگر ارتباط داشته باشند ، اما شـئ هـا اطلاعی از سایر شئ ها ندارند . جزئیات از دید خود شئ هم مخفی نگهداشته میشود. بهطور مثال یک راننده را در نظر بگیریم که بدون اینکه از نحوه کار موتور و جزییات آن اطلاعی داشته باشد , میتواند هدایت اتومبیل را در دست بگیرد. در محیط شـئ گرایـی ,شـئ هـا از کلاسها تولید میشوند(Burk ,3002) .
با تعیین شئ ها در برنامهنویسی که مرتبط باکلاسهای داراي خصوصیات و روشهای خاص هستند , ارتباط برقرار کردن و کد نویسی شئ با ترکیب کلی زیر انجام میگیرد که اول نام شئ و سپس روش یا خصوصیات آن شئ جهت انجام عملیات انتخاب میگردد :
Object.Method بهطور مثال, روش خوردن (Eat) یک سـیب توسـط شـئ پسـر Boy ) )از کلاس انسان (Human) با ترکیب کلی بالا بهصورت Boy.Eat(An Apple) خواهد بود. که پس از خوردن سیب توسط شئ پسر میتوان خصوصیت گرسنه بودن Is Hungry)) این شـئ را از حالت بلی (Yes) به حالت نه (No ) تغییر داد. این ترکیب کلی دستورنویسی در زبان هـاي برنامهنویسی شئ گرا بود و درArc Objects با استفاده از مفهوم واسط خواهد بود.
واسط به گروهی از خصوصیات و روشهای مرتبط باهم کـه داراي ارتبـاط منطقی هستند , گفته میشود. براي هر کلاس میتوان چندین واسط در نظر گرفـت. بسـیاري از کلاسها میتوانند یک واسط یکسان را اجرا کنند. متغیري که از یک کلاس نمونهسازی میشود , میتواند کلاسهای اجراکننده آن واسط را ارجاع دهد.