رفتن به مطلب
برنامه نویسی من
Mostafa

آموزش انتزاع داده (Data Abstraction) در ++C

پست های پیشنهاد شده

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

چکیده‌سازی داده یک تکنیک برنامه‌نویسی و طراحی است که مبتنی بر جداسازی رابط میانجی (interface) از پیاده‌سازی (implementation) می‌باشد.

اجازه دهید با یک مثال از زندگی واقعی ادامه دهیم، یک تلویزیون را تصور کنید که می‌توان آن را روشن یا خاموش کرد، کانال را عوض کرد، صدا را تنظیم کرده و اجزای خارجی مانند بلندگو، VCR و پخش کننده DVD را به آن متصل کرد، اما شما از جزئیات درونی آن هیچ اطلاعی ندارید، یعنی اطلاع ندارید که چگونه سیگنال‌ها را از کابل یا هوا دریافت کرده، چگونه این سیگنال‌ها را منتقل می‌کند و در نهایت بر روی صفحه نمایش می‌دهد.

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

در ++C، کلاس‌ها سطح بالایی از چکیده‌سازی داده را فراهم می‌کنند. این کلاس‌ها توابع عمومی‌ کافی را برای دنیای خارج از خود فراهم کرده تا قابلیت‌های اشیا نمایان شده و امکان دستکاری داده‌های شی مثل وضعیت (state)، بدون اطلاع از نحوه‌ی پیاده‌سازی درونی کلاس فراهم گردد.

برای مثال، برنامه شما می‌تواند برای مرتب‌سازی، تابع ()sort را بدون اطلاع از الگوریتم به کار رفته در آن فراخوانی کند. در حقیقت، پیاده‌سازی پشت پرده این تابع مرتب‌ساز، با انتشار نسخه‌های کتابخانه آن ممکن است تغییر کند، اما تا زمانی‌که رابط آن ثابت بماند، فراخوانی تابع شما کماکان کار می‌کند.

در ++C از کلاس‌ها  برای تعریف چکیده‌سازی نوع داده (Abstract Data Type- ADT) استفاده می‌شود. می‌توان از شی cout از کلاس ostream برای استریم کردن داده به خروجی استاندارد استفاده کرد، مانند مثال زیر:

مخفی

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

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

برچسب‌های دسترسی (Access Label) منجر به چکیده‌سازی می‌شود

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

  • اعضای تعریف شده در یک کلاس با برچسب عمومی ‌از همه بخش‌های برنامه قابل دسترسی هستند. نمای چکیده شده یک نوع داده از طریق اعضای عمومی‌اش تعریف می‌شود.
  • اعضای تعریف شده در یک کلاس با برچسب خصوصی، برای کدهای استفاده کننده قابل دسترسی نیستند. بخش‌های خصوصی کلاس، پیاده‌سازی آن را از دید کاربران مخفی می‌کند.

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

مزایای چکیده‌سازی داده

چکیده‌سازی داده دو مزیت مهم مهیا می‌سازد.

  • بخش‌های درونی کلاس را از اشتباهات سهوی کاربر، که منجر به خراب کردن وضعیت شی شود در امان نگه می‌دارد.
  • پیاده‌سازی تابع در طول زمان و در پاسخ به مقتضیات یا گزارش خرابی‌ها ممکن است تکامل پیدا کند.

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

مثال چکیده‌سازی داده

هر برنامه ++Cای که یک کلاس را با اعضای خصوصی و عمومی ‌پیاده‌سازی کند، نمونه ای از چکیده‌سازی داده می‌باشد. مثال زیر را ملاحظه کنید.

مخفی

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

با اجرای کد فوق، خروجی زیر حاصل می‌شود.

مخفی

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

 کلاس بالا دو عدد را باهم جمع کرده و حاصل جمع را برمی‌گرداند. اعضای عمومی، addNum و getTotal رابط‌های میانجی به دنیای خارج از کلاس بوده و کاربر برای استفاده از کلاس باید با آنها آشنا شود. عضو خصوصی total چیزی است که کاربر نیازی به آشنایی با آن ندارد، اما برای عملکرد صحیح کلاس ضروری است.

استراتژی طراحی

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

در چنین شرایطی، برنامه‌هایی که از رابط استفاده می‌کنند متاثر از تغییر نخواهند شد و تنها نیازمند یک کامپایل مجدد هستند.

 

 

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای ارسال دیدگاه یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید دیدگاهی ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در سایت ما ثبت نام کنید. عضویت خیلی ساده است !

ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید

ورود به حساب کاربری

×
×
  • اضافه کردن...