"> اموزش c++ مفاهیم شی گرایی (قسمت چهارم) | ام اس پی سافت

اموزش c++ مفاهیم شی گرایی (قسمت چهارم)

مفاهیم پایه تکنولوژی شی
مقدمه بحث شی‌گرا را با برخی اصطلاحات کلیدی آغاز می‌کنیم. به هر کجا در دنیای واقعی نگاه کنید. شاهد شی‌ها خواهید بود. مردم، حیوانات، گیاهان، اتومبیل‌ها، هواپیماها، ساختمان‌ها، کامپیوترها و بسیاری از چیزهای دیگر. تفکر انسان براساس شی است. تلفن‌ها، خانه‌ها، چراغ‌های ترافیک، اجاق‌های میکروویو و کولرهای آبی تعدادی کمی از بی‌شمار شی‌ها هستند که در زندگی روزمره خود شاهد آنها هستیم.
گاهی اوقات مبادرت به تقسیم شی‌ها به دو طبقه می‌کنیم: متحرک و غیرمتحرک. شی‌های متحرک، زنده هستند و می‌توانند حرکت کرده و کاری انجام ‌دهند. از سوی دیگر، شی‌های غیرمتحرک، در محیط خود حرکت نمی‌کنند. با این همه، شی‌ها از هر دو نوع، در برخی چیزها مشترک هستند. همه آنها دارای صفات (همانند سایز، شکل، رنگ و وزن) بوده و از خود رفتارهای نشان می‌دهند (مثلاً توپ می‌غلتد، بالا و پایین می‌پرد، یک بچه گریه می‌کند، می‌خوابد، راه می‌رود، یک اتومبیل شتاب می‌گیرد، ترمز کرده و چرخش می‌کند، یک حوله آب را جذب می‌کند).
انسان‌ها با بررسی صفات و رفتار اشیاء، مطالبی در ارتباط با آنها یاد می‌گیرند. شی‌های مختلف می‌توانند صفات و رفتار مشابهی داشته باشند. مقایسه را همیشه می‌توان اعمال کرد، مثلاً مابین کودکان و بزرگسالان.

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

OOD مبادرت به کپسوله‌سازی صفات و عملیات (رفتار) در شی‌ها می‌کند. سرانجام صفات و رفتار یک شی با هم گره می‌خورند. شی‌ها از خصیصه پنهان‌سازی اطلاعات برخوردار هستند. به این معنی که شی‌ها از نحوه برقراری ارتباط با یک شی دیگر از طریق یک واسط (رابط) مناسب مطلع هستند، اما معمولاٌ از نحوه پیاده‌سازی شی‌های دیگر اطلاعی ندارند. معمولاٌ جزئیات پیاده‌سازی در درون خود شی‌ها پنهان می‌باشند. می‌توان این امر را با رانندگی اتومبیل مقایسه کرد که در آن برای راندن اتومبیل نیازی نیست تا با جزئیات موتور، جعبه‌دنده و عملکرد ترمز آشنا بود. در ادامه با نحوه پنهان‌سازی اطلاعات و دلایل آن آشنا خواهید شد، که از جمله موارد مناسب در مهندسی نرم‌افزار است.
زبان‌های همانند C++ شی‌گرا هستند. به برنامه‌نویسی در چنین زبان‌های، برنامه‌نویسی شی‌گرا (OOP) گفته می‌شود و به برنامه‌نویسان کامپیوتری امکان می‌دهند تا یک طرح شی‌گرا را بصورت یک سیستم نرم‌افزاری پیاده‌سازی کنند. از سوی دیگر زبان‌های همانند C، زبان‌های روالی هستند و از اینرو برنامه‌نویسان مقید به عمل می‌باشند. در C واحد برنامه‌نویسی تابع است، در حالیکه در C++ این واحد، کلاس می‌باشد. کلاس‌های C++ حاوی توابعی هستند که پیاده‌سازی‌کننده صفات می‌باشند.
برنامه‌نویسان C بر روی نوشتن توابع تمرکز دارند. آنها گروهی از عمل‌ها را که وظایفی انجام می‌دهند در درون یک تابع قرار می‌دهند و سپس گروهی از توابع را به فرم یک برنامه در می‌آورند. بطور مشخص داده‌ها در C بسیار با ارزش هستند، اما از همان ابتدای امر برای پشتیبانی از اعمالی که توابع انجام خواهند داد وجود دارند.

کلاس‌ها، اعضا داده و توابع عضو
تمرکز برنامه‌نویسان C++ بر روی ایجاد «نوع‌های تعریف شده از سوی کاربر» که کلاس نامیده می‌شوند است. هر کلاس حاوی داده و هم مجموعه‌ای از متدها است که بر روی داده‌ها کار می‌کنند و سرویس‌های برای سرویس‌گیرنده‌ها (کلاس‌ها و توابع دیگری که از کلاس استفاده می‌کنند) تدارک می‌بیند، به کامپونت‌های داده از یک کلاس اعضای داده گفته می‌شود. برای مثال، یک کلاس حساب بانکی می‌تواند شامل یک شماره حساب و یک موجودی باشد. به کامپونت‌های داده از یک کلاس، توابع عضو گفته می‌شود (معمولاٌ در سایر زبان‌های برنامه‌نویسی شی‌گرا همانند جاوا، به توابع عضو، متد گفته می‌شود). برای مثال، یک کلاس حساب بانکی می‌تواند دارای توابع عضوی برای ایجاد یک پس‌انداز (افزایش‌دهنده موجودی)، برداشت (کاهش‌دهنده موجودی) و نمایش موجودی فعلی باشد. برنامه‌نویس از نوع‌های توکار (و سایر نوع‌های تعریف شده توسط کاربر) بعنوان «بلوک‌های سازنده» در ایجاد نوع‌های جدید (کلاس‌ها) استفاده می‌کند. اسامی در ساختار یک سیستم به برنامه‌نویس C++ در تعیین اینکه کدام شی‌ها برای کار با یکدیگر طراحی شده‌آند کمک می‌کنند.
کلاس‌ها همانند نقشه‌ ترسیمی خانه‌ها هستند. یک کلاس، نقشه ایجاد یک شی از کلاس است. همانطوری که می‌توانیم خانه‌های متعددی از روی یک نقشه بسازیم، می‌توانیم تعدادی شی از روی یک کلاس، نمونه‌سازی کنیم. نمی‌توان در نقشه آشپزخانه مبادرت به آشپزی کرد، آشپزی فقط در آشپزخانه خانه امکان‌پذیر است.
کلاس‌ها می‌توانند با کلاس‌های دیگر ارتباط داشته باشند. برای مثال در یک طرح شی‌گرا از بانک، کلاس “bank teller” نیاز به برقراری ارتباط با کلاس‌های دیگر همانند کلاس «مشتری»، کلاس «پرداخت نقدی»، کلاس «پس‌انداز» و غیره دارد. به این روابط، وابستگی گفته می‌شود.
بسته کردن (package) نرم‌افزار بصورت کلاس‌ها می‌تواند ویژگی استفاده مجدد از نرم‌افزار را عرضه کند. غالباً کلاس‌های مرتبط با یکدیگر را بصورت کامپونت‌های با قابلیت استفاده مجدد بسته‌بندی می‌کنند.
طراحی نرم‌افزار مدل‌های شی‌گرا OOD (Object-oriented design) شبیه به روشی است که افراد برای توصیف شی‌ها در دنیای واقعی بکار می‌برند. می‌توان از رابطه موجود مابین کلاس‌ استفاده کرد، آنجا که شی‌هایی از یک کلاس همانند کلاس وسیله نقلیه دارای ویژگی‌های یکسان هستند، اتومبیل‌ها، تریلی‌ها دارای صفات مشترک می‌باشند. OOD از مزیت ارث‌بری (یا توارث) سود می‌برد، که در آن کلاس‌های جدید، صفاتی را از کلاس‌های موجود جذب می‌کنند و به صفات خاص خود اضافه می‌نمایند.

مقدمه‌ای بر تحلیل و طراحی شی‌گرا (OOAD)
بزودی شروع به برنامه‌نویسی در C++ خواهید کرد. چگونه می‌خواهید کد برنامه‌های خود را ایجاد کنید؟ شاید، می‌خواهید همانند هر برنامه‌نویس تازه‌کاری، فقط کامپیوتر را روشن کرده و شروع به تایپ برنامه ‌کنید. این روش می‌تواند در ارتباط با برنامه‌های کوچک کاربرد داشته باشد، اما اگر از شما خواسته شود تا یک سیستم نرم‌افزاری برای کنترل صدها دستگاه ماشین پرداخت اتوماتیک یک بانک ایجاد کنید، چه خواهید کرد؟ یا اگر از شما خواسته شود تا با یک تیم هزار نفری در ارتباط با تولید نسل بعدی سیستم کنترل ترافیک هوایی ایالات متحده کار کنید، چه خواهید کرد؟ برای پروژه‌های به این بزرگی و پیچیدگی، نمی‌توانید به راحتی پشت کامپیوتر نشسته و شروع به برنامه‌نویسی کنید.
برای دستیابی به بهترین راه حل، بایستی بدقت نیازمندیهای پروژه را تجزیه و تحلیل کنید (تعیین کنید که سیستم چه کار می‌خواهد انجام دهد) و طرحی را توسعه دهید که آنها را برآورده سازد (سیستم قادر به تصمیم‌گیری صحیح برای انجام وظایف خود باشد). در حالت ایده‌آل، قبل از هرگونه کدنویسی، باید به سراغ فرآیند رفته و به دقت طراحی را انجام دهید. اگر این فرآیند مستلزم تحلیل و طراحی سیستم از نقطه ‌نظر شی‌گرا باشد، آن را object-orientend analysis and design (OOAD) یا تحلیل و طراحی شی‌گرا می‌گویند. برنامه‌نویسان با تجربه مطلع هستند که تحلیل و طراحی می‌تواند در زمان و هزینه ایجاد برنامه بسیار صرفه‌جویی کند، با اجتناب از اعمال طرح‌های ضعیف که در هر بار برنامه را به شکست کشانده و باعث می‌شوند کار از ابتدا آغاز گردد که همان تحمیل هزینه و زمان است.
OOAD یک کلمه کلی برای بیان فرآیند تجزیه و تحلیل یک مسئله و توسعه روش حل آن مسئله است. مسائل کوچکی همانند مسائلی که در چند فصل اولیه با آنها برخورد خواهیم داشت، نیازی به فرآیند OOAD ندارند. برای ایجاد این برنامه‌ها، می‌توان ابتدا مبادرت به نوشتن شبه کد آنها کرد و سپس کد C++ آنها را نوشت. در فصل ۴ به معرفی شبه کد خواهیم پرداخت.
با بزرگتر و پیچیده‌تر شدن مسئله، برتری روش OOAD به روش شبه کد کاملاٌ مشخص می‌شود. اگر چه پردازش‌های مختلفی از OOAD وجود دارد، اما یک زبان گرافیکی برای نمایش نتایج هر فرآیند OOAD بیشتر از همه بکار گرفته شده است. این زبان UML (Unified Modeling Language) نام دارد که اواسط دهه ۱۹۹۰ تحت نظر سه نظریه‌پرداز نرم‌افزار بنام‌های Grady Booch، James Rumbaugh و Ivar Jacobson توسعه پیدا کرده است.
تاریخچه UML
در دهه ۱۹۸۰، تعداد سازمان‌هایی که شروع به استفاده از OOP برای ایجاد برنامه‌های کاربردی خود کردند بسیار افزایش یافت و از اینرو نیاز به یک استاندارد OOAD احساس کردید. تعدادی از نظریه‌‌پردازان شامل Booch، Rumbaugh و Jacobson، بطور جداگانه مبادرت به ایجاد و عرضه فرآیندهای برای برطرف کردن این نیاز کردند. هر فرآیند یا پردازه دارای نمادها یا «زبان» (به فرم دیاگرام‌های گرافیکی) متعلق بخود بود، تا حاصل نتایج تجزیه و تحلیل و طراحی‌ها باشد.
در اوایل دهه ۱۹۹۰، سازمان‌های مختلف و حتی قسمتهای‌ موجود در درون یک سازمان، در حال استفاده از فرآیندهای منحصر بفرد با نمادهای متعلق بخود بودند. همزمان، این سازمان‌ها مایل به استفاده از ابزارهای نرم‌افزاری بودند که از فرآیندهای خاص آنها پشتیبانی کند. سازندگان نرم‌افزار متوجه مشکل تهیه ابزارهایی برای کار با این همه فرآیند متفاوت شدند. واضح بود که نیاز به یک نماد و فرآیند استاندارد بوجود آمده است.
در سال ۱۹۹۴، James Rumbaugh با همکاری Grady Booch در شرکت Rational Softwave (که اکنون بخشی از IBM است)، شروع به متحدالشکل کردن فرآیندهای خود کرد. بلافاصله Ivar Jacobson نیز به آنها پیوست. در سال ۱۹۹۶، گروه مبادرت به عرضه نسخه اولیه از UML به جامعه مهندسین نرم‌افزار کرد و پاسخ آنها را خواستار شدند. در همان زمان، سازمانی که بعنوان OMG (Object Management Group) شناخته می‌شود، دعوت به یک زبان مدل‌سازی مشترک از گروه‌های مختلف کرد. OMG (به آدرس www.omg.org) یک سازمان غیرتجاری است که مبادرت به نشر تکنولوژی‌های استاندارد شی‌گرا همانند UML می‌کند. چندین شرکت، از جمله HP، IBM، Microsoft، Oracle و Rational Software تشخیص داده بودند که نیاز به یک زبان مدل‌سازی مشترک است. در پاسخ به تقاضای OMG، این شرکت‌ها، همکاری UML خود را آغاز کردند، کنسرسیوم UML نسخه ۱.۱ را عرضه و تحویل OMG داد. OMG آن را پذیرفته و در۱۹۹۷، مسئولیت ادامه و نگهداری UML را قبول کرد. در مارس ۲۰۰۳، OMG مبادرت به عرضه UML نسخه ۱.۵ کرد. UML نسخه ۲ که در زمان نشر این کتاب مراحل پایانی خود را می‌گذارند، اصلی‌ترین نسخه از سال ۱۹۹۷ است. از اینرو بحث ما بر روی UML نسخه ۲ خواهد بود.
UML چیست؟
در حال حاضر زبان UML یکی از پرکاربردترین طرح‌های نمایش گرافیکی برای مدل کردن سیستم‌های شی‌گرا است. این زبان انواع فرآیندهای موجود را متحد کرده است. برای مدل کردن سیستم‌ها از این زبان در سراسر کتاب استفاده کرده‌ایم.
یکی از ویژگی‌های جذاب UML در انعطاف‌پذیری آن است. UML بسط‌پذیر بوده (ویژگی‌های جدید را می‌پذیرد) و از هر فرآیند یا طریقه خاص OOAD مستقل است. مدل‌کننده‌های UML برای استفاده در طراحی سیستم‌ها مجانی هستند.
UML یک زبان مرکب با ویژگی‌های گرافیکی مناسب است. در بخش‌های «مبحث آموزشی مهندسی نرم‌افزار» در توسعه نرم‌افزار ماشین پرداخت اتوماتیک (ATM) نمایش ساده و زیرمجموعه‌ای از ویژگیت‌های UML عرضه خواهیم کرد. این مباحث آموزشی به دقت و تحت نظر اساتید دانشگاه و افراد حرفه‌ای طراحی شده‌اند. امیدواریم که از مطالعه و کار کردن با این مباحث لذت ببرید.

  • پسورد: www.mspsoft.com
مسعود شریفی پور

از سال 88 که با برنامه نویسی آشنا شدم خیلی علاقه مند بودم یک بستر آموزشی بسازم در فضای وب و به انتشار آموزش های در این زمینه بپردازم.حالا یک تیم داریم و با قدرت رو به جلو حرکت میکنیم.

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.

کدیشن ! مارکت پروژه های برنامه نویسی راه اندازی شدیه توکه پا بریم ببینم