فصل نهم شی گرایی »در «++ C

mo-mah.persianblog.ir

mohsen_mahyar@yahoo.com

فصل نهم

 

C++ در« شی گرایی »

9 مقدمه ‐1

اولین نر م افزار برای نخستین رایانه ها، زنجیره ای از صفر و یک ها بود که فقط عدۀ

اندکی از این توالی سر در می آوردند. به تدریج کاربرد رایانه گسترش یافت و نیاز بود

تا نرم افزارهای بی شتری ایجاد شود. برای این منظور، برنامه نویسان مجبور بودند با

انبوهی از صفر ها و یک ها سر و کله بزنند و این باعث می شد مدت زیادی برای تولید

یک نرم افزار صرف شود. از این گذشته، اگر ایرادی در کار برنامه یافت می شد، پیدا

جهش « زبان اسمبلی 1 » کردن محل ایراد و رفع آن بسیار مشکل و طاقت فرسا بود. ابداع

بزرگی به سوی تولید نرم افزارهای کارآمد بود.

اسمبلی قابل فهم تر بود و دنبال کردن برنامه را سهولت می بخشید. سخت افزار به

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

زبان اسمبلی هم جواب گوی شیوه های نوین تولید نرم افزار نبود. هشت خط کد اسمبلی

1 – Assembly300 برنامه سازی پیشرفته

برای یک جمع ساده به معنای ده ها هزار خط کد برای یک برنامۀ حسابداری روزانه

دروازه های « زبان های سطح بالا » . است. این بار انبوه کدهای اسمبلی مشکل ساز شدند

تمدن جدید در دنیای نرم افزار را به روی برنامه نویسان گشودند.

زبان های سطح بالا دو نشان درخشان از ادبیات و ریاضیات همراه خود آوردند:

اول دستوراتی شبیه زبان محاوره ای که باعث شدند برنامه نویسان از دست کدهای

که سرعت تولید و « تابع » تکراری و طویل اسمبلی خلاص شوند و دوم مفهوم

عیب یابی نرم افزار را چندین برابر کرد. اساس کار این گونه بود که وظیفۀ اصلی

برنامه به وظایف کوچ کتری تقسیم می شد و برای انجام دادن هر وظیفه، تابعی نوشته

می شد. پس این ممکن بود که توابع مورد نیاز یک برنامه به طور هم زمان نوشته و

آزمایش شوند و سپس همگی در کنار هم چیده شوند. دیگر لازم نبود قسمتی از

نرم افزار، منتظر تکمیل شدن قسمت دیگری بماند. همچنین عیب یابی نیز آسان صورت

می گرفت و به سرعت محل خطا یافت شده و اصلاح می شد. علاوه بر این، برای بهبود

دادن نر مافزار موجود یا افزودن امکانات اضافی به آن، دیگر لازم نبود که برنامه از نو

نوشته شود؛ فقط توابع مورد نیاز را تولید کرده یا بهبود می دادند و آن را به برنامۀ

موجود پیوند می زدند. از این به بعد بود که گروه های تولید نرم افزاری برای تولید

نرم افزارهای بزرگ ایجاد شدند و بحث مدیریت پروژ ههای نرم افزاری و شیوه های تولید

نرم افزار و چرخۀ حیات و ... مطرح شد.

نرم افزارهای بزرگ، تجربیات جدیدی به همراه آوردند و برخی از این تجربیات

نشان می داد که توابع چندان هم بی عیب نیستند. برای ایجاد یک نرم افزار، توابع زیادی

نوشته می شد که اغلب این توابع به یکدیگر وابستگی داشتند. اگر قرار می شد ورودی یا

خروجی یک تابع تغییر کند، سایر توابعی که با تابع مذکور در ارتباط بودند نیز باید

شناسایی می شدند و به تناسب تغییر می نمودند. این موضوع، اصلاح نرم افزارها را

مشکل می کرد. علاوه بر این اگر تغییر یک تابع مرتبط فراموش می شد، صحت کل

برنامه به خطر می افتاد. این اشکالات برای مدیران و برنامه نویسان بسیار جدی بود.

بنابراین باز هم متخصصین به فکر راه چاره افتادند. پس از ریاضی و ادبیات، این بار

نوبت فلسفه بود.

 

mohsen_mahyar@yahoo.com

mo-mah.persianblog.ir

 

 

فصلم / شی گرایی 301

رهیافت جدیدی بود که برای مشکلات بالا راه حل داشت. این « شی گرایی 1 »

مضمون از دنیای فلسفه به جهان برنامه نویسی آمد و کمک کرد تا معضلات تولید و

پشتیبانی نرم افزار کم تر شود. در دنیای واقعی، یک شی چیزی است که مشخصاتی دارد

مثل اسم، رنگ، وزن، حجم و ... . همچنین هر شی رفتارهای شناخته شده ای نیز دارد

مثلا در برابر نیروی جاذبه یا تابش نور یا وارد کردن فشار واکنش نشان می دهد. اشیا را

می توان با توجه به مشخصات و رفتار آن ها دسته بندی کرد. برای نمونه، می توانیم همۀ

قرار دهیم و همۀ « جانداران » هستند را در دست های به نام « تنفس » اشیایی که دارای رفتار

بگذاریم. بدیهی « جامدات » اشیایی که چنین رفتاری را ندارند در دستۀ دیگری به نام

است که اعضای هر دسته را می توانیم با توجه به جزییات بیشتر و دقیق تر به زیر

و « گیاهان » دسته هایی تقسیم کنیم. مثلا دستۀ جانداران را می توانیم به زیر دسته های

بخش بندی کنیم. البته هر عضو از این دسته ها، علاوه بر این که « انسان ها » و « جانوران »

مشخصاتی مشابه سایر اعضا دارد، مشخصات منحصر به فردی نیز دارد که این تفاوت

باعث می شود بتوانیم اشیای همگون را از یکدیگر تفکیک کنیم. مثلا هر انسان دارای

نام، سن، وزن، رنگ مو، رنگ چشم و مشخصات فردی دیگر است که باعث می شود

انسان ها را از یکدیگر تفکیک کنیم و هر فرد را بشناسیم.

می گویند و به نمونه های هر کلاس « کلاس 2 » در بحث شی گرایی به دست هها

می نامند و به رفتارهای هر شی « صفت 4 » گفته می شود. مشخصات هر شی را « شی 3 »

می گویند. درخت سرو یک شی از کلاس درختان است که برخی از صف تهای « متد 5 »

آن عبارت است از: نام، طول عمر، ارتفاع، قطر و ... و برخی از متدهای آن نیز عبارتند

از: غذا ساختن، سبز شدن، خشک شدن، رشد کردن، ... .

اما این شی گرایی چه گرهی از کار برنام هنویسان می گشاید؟ برنام هنویسی شی گرا

بر سه ستون استوار است:

الف. بسته بندی 6: یعنی این که داده های مرتبط، با هم ترکیب شوند و جزییات

پیاده سازی مخفی شود. وقتی داده های مرتبط در کنار هم باشند، استقلال کد و پیمانه ای

1 – Object orienting 2 – Class 3 – Object

4 – Attribute 5 – Method 6 – Encapsulation

mohsen_mahyar@yahoo.com

mo-mah.persianblog.ir

 

302 برنامه سازی پیشرفته

کردن برنامه راح تتر صورت می گیرد و تغییر در یک بخش از برنامه، سایر بخش ها را

نیز می گویند « تجرید 1 » دچار اختلال نمی کند. مخفی کردن جزییات پیاده سازی که به آن

سبب می شود که امنیت کد حفظ شود و بخش های بی اهمیت یک فرایند از دید

استفاده کنندۀ آن مخفی باشد. به بیان ساد هتر، هر بخش از برنامه تنها می تواند اطلاعات

مورد نیاز را ببیند و نمی تواند به اطلاعات نامربوط دسترسی داشته باشد و آ نها را

به جای « محصورسازی » یا « کپسوله کردن » دست کاری کند. در برخی از کتا بها از واژۀ

بسته بندی استفاده شده.

ب. وراثت 2: در دنیای واقعی، وراثت به این معناست که یک شی وقتی متولد

می شود، خصوصیات و ویژگی هایی را از والد خود به همراه دارد هرچند که این شیء

جدید با والدش در برخی از جزییات تفاوت دارد. در برنامه نویسی نیز وراثت به همین

معنا به کار می رود. یعنی از روی یک شیء موجود، شیء جدیدی ساخته شود که

صفات و متدهای شیء والدش را دارا بوده والبته صفات و متدهای خاص خود را نیز

داشته باشد. امتیاز وراثت در این است که از کدهای مشترک استفاده می شود و علاوه

بر این که می توان از کدهای قبلی استفاده مجدد کرد، در زمان نیز صرفه جویی شده و

استحکام منطقی برنامه هم افزایش می یابد.

ج. چند ریختی 3: که به آن چندشکلی هم می گویند به معنای یک چیز بودن و

چند شکل داشتن است. چندریختی بیشتر در وراثت معنا پیدا می کند. برای مثال گرچه

هر فرزندی مثل والدش اثر انگشت دارد، ولی اثر انگشت هر شخص با والدش یا هر

شخص دیگر متفاوت است. پس اثر انگشت در انسان ها چندشکلی دارد.

در ادامه به شکل عملی خواهیم دید که چگونه می توانیم مفاهیم فوق را در قالب

برنامه پیاده سازی کنیم.

در برنام هنویسی، یک کلاس را می توان آرایه ای تصور کرد که اعضای آن از انوع

مختلف و متفاوتی هستند و همچنین توابع نیز می توانند عضوی از آن آرایه باشند. یک

شی نیز متغیری است که از نوع یک کلاس است. به طور کلی یک شی را می توان

موجودیت مستقلی تصور کرد که داده های خاص خودش را نگهداری می کند و توابع

1 – Abstraction 2 – Inheritance 3 – Polymorphism

mohsen_mahyar@yahoo.com

mo-mah.persianblog.ir

 

فصلم / شی گرایی 303

خاص خودش را دارد. تعاریف کلاس مشخص می کند شیئی که از روی آن کلاس

ساخته می شود چه رفتاری دارد. واضح است که به منظور استفاده از شی گرایی، ابتدا

باید کلاس های مورد نیاز را مشخص و تعریف کنیم . سپس می توانیم در برنامۀ اصلی،

اشیایی از نوع این کلاس ها اعلان نماییم. بقیۀ برنامه را این اشیا پیش می برند.

9 اعلان کلاس ها ‐2

کد زیر اعلان یک کلاس را نشان می دهد. اشیایی که از روی این کلاس ساخته

می شوند، اعداد کسری (گویا) هستند:

class Ratio

{ public:

/ 0 نظر / 142 بازدید