تبلیغات
آموزش برنامه نویسی سی شارپ - مقدمه‌ای بر تکنولوژی شیء

تصاویر منتخب

مقدمه‌ای بر تکنولوژی شیء

1.9 مقدمه‌ای بر تکنولوژی شیء

هنگامی که برنامه‌نویسی شیء‌گرا به شکل گسترده‌ای در دهه‌ها‌ی 1980 و 1990به کار برده شد، به طور چشمگیری فرایند توسعه‌ی نرم‌افزار را بهبود بخشید. اشیاء چیستند و چرا آنها استثنائی هستند؟ تکنولوژی شیء الگویی برای ایجاد واحدهای نرم‌افزاری معنادار است. اشیاء تاریخ، اشیاء زمان، اشیاء پرداخت چک، اشیاء فایل، اشیاء رکورد و غیره، اینها همگی شیء هسند. بر روی صفحه‌ی نمایش کامپیوترتان اشیاء دکمه، اشیاء جعبه‌ی متنی، اشیاء منو و بسیاری اشیاء دیگر وجود دارند. در حقیقت، هر اسمی می‌تواند به شکل قابل قبولی به صورت یک شیء نرم‌افزاری بیان شود. اشیاء دارای مشخصه‌هایی (که خصوصیات نیز نامیده می‌شوند) مانند رنگ، اندازه، وزن و سرعت هستند؛ و اعمالی (که متدها یا رفتارها نیز خوانده می‌شوند) مانند حرکت، لغزش یا ترسیم را انجام می‌دهند.
کلاس‌ها انواعی از اشیاء وابسته هستند. برای نمونه، تمامی ماشین‌ها به کلاس «ماشین» تعلق دارند، حتی اگر ماشین‌های اختصاصی در ساخت، مدل، رنگ و بسته‌های با گزینه‌های مختلف با یک دیگر فرق داشته باشند. یک کلاس تعیین کننده‌ی مشخصه‌ها و اعمال در دسترس برای شیئی از کلاس آن شیء است. یک شیء به کلاس خود به همان اندازه‌ای وابسته است که یک بنا با طرح و نقشه اولیه‌ای که از آن ساخته می‌شود ارتباط دارد. پیمانکاران ساختمانی می‌توانند بناهای بسیاری را از یک طرح و نقشه اولیه ایجاد کنند؛ برنامه‌نویسان می‌توانند اشیاء بسیاری را از کلاس یکسانی نمونه‌سازی (ایجاد) کنند. با تکنولوژی شیء، کلاس‌هایی که به شکل صحیحی طراحی شده‌ باشند مجدداً می‌توانند در پروژه‌های بعدی نیز به کار برده شوند. برخی از سازمان‌ها گزارش داده‌اند که منفعت کلیدی دیگری که آنها از برنامه‌نویسی شیء‌گرا عایدشان شده است تولید نرم‌افزارهایی است که به شکل بهتری سازماندهی شده و دارای هزینه‌های نگهداری کمتری از نرم‌افزارهای تولید شده با تکنولوژی‌های پیشین هستند. شیء‌گرایی به شما اجازه می‌دهد تا بر روی «تصویر بزرگ» تمرکز کنید. به جای نگرانی درباره‌ی جزئیات چگونگی پیاده‌سازی اشیاء با قابلیت استفاده مجدد، بر روی رفتارها و برهم کنش‌های اشیاء متمرکز شوید. نقشه راهی که همه‌ی درختان، خانه‌ها و در جلوی خانه‌ها را نشان دهد خواندنش مشکل خواهد بود. هرگاه چنین جزئیاتی حذف شده و تنها اطلاعات حیاتی باقی بمانند، درک نقشه راحت‌تر خواهد شد. به همین طریق، برنامه‌ای که به اشیاء تقسیم می‌شود درک، اصلاح و بروزرسانی‌اش آسان خواهد بود زیرا اغلب جزئیات را پنهان می‌کند. واضح است که برنامه‌نویسی شیء‌گرا متدولوژی برنامه‌نویسی کلیدی چند دهه‌ی آینده خواهد بود. C# یکی از زبان‌های شیء‌گرایی جهانی است که به شکل گسترده‌ای به کار برده می‌شود، به خصوص در جامعه‌ی توسعه نرم‌افزاری مایکروسافت.
مفاهیم مقدماتی تکنولوژی شیء
طراحی شیء‌گرا (Object-oriented design (OOD)) نرم‌افزارها را با ضوابطی مشابه با آن چه که مردم از آنها استفاده می‌کنند تا اشیاء دنیای واقعی را توصیف کنند مدل‌سازی می‌کنند. OOD از مزایای روابط کلاسی سود می‌برد جایی که در آن اشیاء یک کلاس بخصوص، مانند کلاسی از وسیله‌های نقلیه، دارای مشخصه‌های یکسانی هستند؛ برای نمونه ماشین‌ها، کامیون‌ها، واگن‌های قرمز کوچک و اسکیت چرخدار موارد اشتراکی زیادی دارند. OOD از مزایای روابط ارث‌بری (Inheritance) سود می‌برد جایی که در آن کلاس‌های جدیدی از اشیاء با جذب مشخصه‌های کلاس‌های موجود و افزودن مشخصه‌های سفارشی متعلق به خودشان، مشتق می‌شوند. یک شیء از کلاس «convertible» مطمئناً دارای ویژگی‌های کلاس عمومی‌تر «automobile» است، اما به طور خاص، سقفش بالا و پائین می‌شود. طراحی شیء‌گرا روش طبیعی و شهودی را برای مشاهده‌ی فرایند طراحی نرم‌افزار در اختیار می‌گذارد؛ برای نمونه، مدلسازی اشیاء از طریق صفات، رفتارها و روابط متقابل‌شان، درست همان طور که اشیاء دنیای واقعی را توصیف می‌کنیم. OOD ارتباطات مابین اشیاء را هم مدلسازی می‌کند. درست همانند افرادی که پیام‌هایی را به یک دیگر ارسال می‌کنند (برای نمونه، یک گروهبان به یک سرباز دستور خبردار می‌دهد) اشیاء نیز از طریق پیغام‌ها با یکدیگر ارتباط برقرار می‌کنند. یک شیء حساب بانکی می‌تواند پیغامی را برای کاهش موجودی خود تا یک اندازه مشخص دریافت کند زیرا مشتری در حال برداشت آن اندازه از پول است. OOD صفات و اعمال (رفتارها) را در اشیاء کپسوله (پنهان) می‌کند؛ صفات و رفتارهای یک شیء به شکل صمیمانه‌ای با یکدیگر گره خورده‌اند. اشیاء دارای خاصیت پنهان‌سازی اطلاعات هستند. اشیاء می‌توانند از چگونگی ارتباط با یکدیگر از طریق واسط‌هایی که به خوبی تعریف شده‌اند آگاهی یابند، اما آنها معمولاً مجاز به آگاهی از چگونگی پیاده‌سازی اشیاء دیگر نیستند؛ چنین جزئیاتی در میان خود اشیاء پنهان شده‌اند. برای مثال، شما می‌توانید بدون این که از چگونگی کار موتور، سیستم انتقال قدرت موتور، ترمزها و سیستم اگزوز چیزی بدانید یک ماشین را به خوبی رانده و هدایت کنید؛ به شرطی که چگونگی استفاده از پدال گاز، پدال ترمز، فرمان اتومبیل و غیره را بدانید. پنهان‌سازی اطلاعات همان طور که خواهید دید برای مهندسی نرم‌افزار خوب تعیین کننده است.

کلاس‌ها، فیلدها و متدها
شما به عنوان یک برنامه‌نویس C# بر روی ایجاد کلاس‌های سفارشی خودتان متمرکز خواهید شد. هر کلاسی حاوی داده و نیز مجموعه‌ای از متدهاست که آن داده را دستکاری کرده و سرویس‌هایی را در اختیار سرویس گیرنده می‌گذارد (سرویس گیرنده کلاس‌های دیگری هستند که از این کلاس استفاده می‌کنند). مؤلفه‌های داده‌ی یک کلاس صفات یا فیلد نیز نامیده می‌شوند. برای نمونه، یک کلاس حساب بانکی می‌تواند شامل یک شماره حساب و یک موجودی باشد. مؤلفه‌های عملیاتی یک کلاس متد نامیده می‌شوند. برای نمونه، یک کلاس حساب بانکی می‌تواند حاوی متدهایی برای ایجاد یک سپرده (افزایش موجودی)، ایجاد یک برداشت (کاهش حساب) و رسیدگی به میزان موجودی حساب باشد. رابطه‌ی کلاس‌ها با اشیاء همانند رابطه‌ی نقشه‌ی اولیه با خانه است؛ یک کلاس نقشه‌ای برای ساخت اشیای کلاس است. همان طور که می‌توانیم از یک نقشه اولیه خانه‌های بسیاری را ایجاد کنیم، می‌توانیم از یک کلاس اشیاء بسیاری را نمونه‌سازی (ایجاد) کنیم. شما نمی‌توانید در آشپزخانه‌ی یک نقشه‌ی اولیه آشپزی کنید اما در آشپزخانه یک خانه می‌توانید! بسته‌بندی نرم‌افزار به صورت کلاس، استفاده مجدد از کلاس را در سیستم‌های نرم‌افزاری آینده امکان‌پذیر می‌سازد.

ملاحظه‌ای در باب مهندسی نرم‌افزار 1.1
هنگام ایجاد کلاس‌ها و برنامه‌های جدید استفاده مجدد از کلاس‌های موجود باعث صرفه‌جویی در زمان، هزینه شده و زحمت ما را می‌کند. در ضمن استفاده مجدد به شما کمک می‌کند تا سیستم‌های بهتری را ایجاد کنید زیرا کلاس‌ها و اجزای موجود اغلب اوقات از فاز تست، اشکالزدایی و سنجش میزان کارایی عبور کرده‌اند.

در سرتاسر این کتاب شما از کلاس‌های موجود استفاده کرده و اشیائی را از آن کلاس‌ها ایجاد خواهید کرد. در فصل 4، شروع به ایجاد کلاس‌های سفارشی متعلق به خودتان خواهید کرد. با تکنولوژی شیء، شما می‌توانید بوسیله‌ی ترکیب کلاس‌های موجود اغلب نرم‌افزارهای جدیدی را که نیاز خواهید داشت ایجاد کنید، درست مانند سازندگان اتومبیل که بخش‌های قابل معاوضه‌ی استاندارد شده را با هم ترکیب می‌کنند. هر کلاسی که ایجاد کنید دارای پتانسیل تبدیل شدن به یک دارائی نرم‌افزاری باارزش است که شما و برنامه‌نویسان دیگر می‌توانید مجدداً از آن استفاده کنید تا به تلاش‌های توسعه‌ی نرم‌افزاری بعدی‌تان سرعت ببخشید.

مقدمه‌ای بر آنالیز و طراحی شیء‌گرا (OOAD)
برای ایجاد راه‌حل‌های بهتر، لازم است تا فرایند جزئیاتی را در پیش بگیرید تا نیازمندی‌های پروژه‌ی خود (یعنی آن چیزهایی که سیستم شما فرض بر انجامشان دارد) را مشخص کرده و طرحی را توسعه دهید که آنها را ارضا کند (یعنی تصمیم بگیرید که سیستم شما چگونه بایستی آن را  انجام دهد). با نگاه ایده‌آل به قضیه، قبل از هرگونه کدنویسی باید به سراغ این فرایند رفته و طرح را به دقت بازبینی کنید (و طرح خود را توسط متخصصین نرم‌افزار دیگر مورد بازبینی قرار دهید).
چنان چه این فرایند درگیر آنالیز و طراحی سیستم شما از یک نقطه نظر شیء‌گرا باشد، این کار آنالیز و طراحی شیء‌گرا (object-oriented analysis and design (OOAD)) نامیده می‌شود. تحلیل‌ها و طرح‌های صحیح می‌تواند به اجتناب از رویکرد توسعه‌ی سیستمی با طراحی معیوب کمک کند که این رویکرد غلط می‌بایست بواسطه‌ی پیاده‌سازی‌اش که احتمالاً باعث تلف شدن زمان، هزینه و تلاش‌های انجام شده می‌شود کنار گذاشته شود. با وجود این که فرایندهای OOAD مختلف بسیاری وجود دارند، یک زبان گرافیکی منحصر به فرد که با عنوان UML (Unified Modeling Language) شناخته می‌شود برای نمایش نتایج هرگونه فرایند OOAD به طور گسترده وارد عرصه شده و به کار برده می‌شود.


نظرات

ارسال نظر

 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر
نظرات پس از تایید نشان داده خواهند شد.