انتزاع داده (Data Abstraction) در ++C
اجازه دهید با یک مثال از زندگی واقعی ادامه دهیم، یک تلویزیون را تصور کنید که میتوان آن را روشن یا خاموش کرد، کانال را عوض کرد، صدا را تنظیم کرده و اجزای خارجی مانند بلندگو، VCR و پخش کننده DVD را به آن متصل کرد، اما شما از جزئیات درونی آن هیچ اطلاعی ندارید، یعنی اطلاع ندارید که چگونه سیگنالها را از کابل یا هوا دریافت کرده، چگونه این سیگنالها را منتقل میکند و در نهایت بر روی صفحه نمایش میدهد. بنابراین، میتوان گفت که تلویزیون به وضوح پیادهسازی داخلیاش را از رابط خروجیاش جدا کرده و شما قادر هستید از رابط آن مانند دکمه روش/خاموش، عوض کردن کانال و کنترل صدا، بدون هیچ دانشی از جزئیات درونیاش استفاده کنید.
این کلاسها توابع عمومی کافی را برای دنیای خارج از خود فراهم کرده تا قابلیتهای اشیا نمایان شده و امکان دستکاری دادههای شی مثل وضعیت (state)، بدون اطلاع از نحوهی پیادهسازی درونی کلاس فراهم گردد. در حقیقت، پیادهسازی پشت پرده این تابع مرتبساز، با انتشار نسخههای کتابخانه آن ممکن است تغییر کند، اما تا زمانیکه رابط آن ثابت بماند، فراخوانی تابع شما کماکان کار میکند. منظور از چکیدهسازی داده فراهم کردن حداقل اطلاعات برای دنیای خارج و مخفیسازی جزئیات پس زمینه است، یعنی اطلاعات مورد نیاز بدون ارائه جزئیات نمایش داده میشود. بنابراین هنگام طراحی اجزا، باید رابط را از پیادهسازی مستقل نگه دارید تا اگر تغییری در پیادهسازی ایجاد شد، رابط کماکان سالم باقی ماند.
چکیدهسازی داده یک تکنیک برنامهنویسی و طراحی است که مبتنی بر جداسازی رابط میانجی (interface) از پیادهسازی (implementation) میباشد. تنها چیزی که باید بدانید رابط عمومی آن است و بنابراین هیچ محدودتی برای تغییر در پیادهسازی پشت پرده cout بوجود نمیآید. در چنین شرایطی، برنامههایی که از رابط استفاده میکنند متاثر از تغییر نخواهند شد و تنها نیازمند یک کامپایل مجدد هستند. اعضای عمومی، addNum و getTotal رابطهای میانجی به دنیای خارج از کلاس بوده و کاربر برای استفاده از کلاس باید با آنها آشنا شود. برای مثال، برنامه شما میتواند برای مرتبسازی، تابع ()sort را بدون اطلاع از الگوریتم به کار رفته در آن فراخوانی کند.
زبان برنامه نویسی Objective-C
هدف اصلی از طراحی و تولید زبان برنامه سازی Objective C اضافه کردن مفهوم شئ گرایی به زبان C بوده است و کلاس ها ویژگی اصلی زبان Objective C می باشند که از آن ها با نام نوع داده انتزاعی نام برده می شود. به موارد و رفتارهای مشترک (در این مثال دانشگاه) کلاس (Class) و به هر مورد مشترک در یک class یک فیلد(field) یا data member و به هر رفتار مشترک، تابع عضو کلاس یا Method member گویند. در مثال بالا همان طور که مشخص است وجه مشترک تمام دانشجویان، دانشگاه است و هر دانشجو به طور جداگانه از امکانات آن استفاده می کند. در این زبان تمام کلاس ها از کلاس NSObject به ارث برده می شوند که درون آن توابع ابتدایی لازم مانند مدیریت حافظه موجود می باشد.
در این پست قصد داریم تا به بیان مفاهیم نوع داده انتزاعی، طرز ایجاد و استفاده از آن ها در دو زبان Objective C و ++C بپردازیم. تعریف کلاس در این زبان با عبارت @interface به همراه نام کلاس و بدنه آن که درون دو براکت قرار خواهند گرفت انجام می شود. انواع داده انتزاعی در این دو زبان توسط کلاس پیاده سازی می شوند پس لازم است در ابتدا به آن بپردازیم. شما پس از قبولی در این دانشگاه می توانید وارد این دانشگاه شوید و از امکانات آن استفاده نمایید. همچنین به هر چیز یا شی ای که از class استفاده می کند(در این مثال دانشجو) یک شی (Object) می گویند. از طرفی دیگر در این دانشگاه قوانینی وجود دارد که شما باید تابع آن قوانین باشید.
فرض کنید شما دانش آموزی هستید که کنکور داده اید و می خواهید وارد دانشگاه شوید. در این زبان تمام ویژگی های اشیاء یک کلاس به طور مستقیم به وسیله عملگر دسترسی (. در کلاس ها همان طور که گفته شد به یک سری data member و یک سری method member نیاز داریم. یک کلاس برای مشخص کردن ویژگی های یک شئ به همراه رفتار های آن به کار می رود. داده های عمومی (public) اشیاء یک کلاس به صورت مستقیم توسط عملگر دسترسی (. مثل کلاس های درس، زمین ورزش، سلف غذاخوری، فضای سبز، ادارات و. به طور مثال ما کلاس Box را در این زبان به صورت زیر بیان می کنیم. این خصوصیت به خاطر امکان پیاده سازی شی گرایی در آن می باشد. زبان هایی مثل ++C به عنوان زبان های شی گراء شناخته می شوند.
نوع داده های انتزاعی در زبان پایتون به چه معناست ؟
چرا این نوع دادهای مفید است؟ · اگر بتوانید عملیاتی که نیاز دارید را مشخص نمایید، بدون اینکـه مجبـور باشـید در مـورد نحوة اجرای عملیات در همان زمان فکر کنید این نوع دادهای وظیفۀ تعیین الگـوریتم را سـاده میسازد.
· ADTهای مشهور نظیر پشته در این فصل معمولاً در کتابخانههای اسـتاندارد پیـادهسـازی شده اند، بنابراین میتوانند یک بار نوشته شوند و توسط برنامهنویسان زیادی مورد استفاده قرار گیرند.
· از آنجا که معمولاً راههای زیادی جهت پیـادهسـازی یـک ADT وجـود دارد، ممکـن اسـت نوشتن یک الگوریتم که بتواند با تمام اجراهای ممکن استفاده شود، مفید باشد. یک نوع دادهای انتزاعی یا ADT) Type Data Abstract) مجموعهای از عملیـات و مفهـوم عملیات (اینکه چه کاری انجام میدهند) را مشخص میکند اما پیادهسازی عملیات را نشان نمیدهنـد.
نوع داده های انتزاعی
اسلاید 16: پیاده سازی ADTبرای پیاده سازی ADT باید:یک نمایش داده انتخاب کنیداین نوع نمایش باید قادر به نمایش تمامی مقادیر ممکن باشدباید private (خصوصی) باشدالگوریتمی برای هر کدام از عملیات انتخاب کنیداین الگوریتم باید با نحوه نمایش انتخاب شده سازگار باشدتمامی عملیاتی که بعنوان عملیات کمکی استفاده می شوند، باید privateتعریف شوند. اسلاید 8: توصیف رسمی ADTتوصیف رسمی: توصیف دقیق و بدون ابهامنوع داده هاعملیات : ورودی و خروجی عملیات، الگوریتمشبه کد pseudo codeروشی بیان رسمی ADT با زبانی شبیه یکی زبانهای برنامه نویسیابهام زبان طبیعی را نداردنسبت به فلوچارت انعطاف بیشتری داردپیاده سازی آن راحت تر و سریعتر استدر این درس از شبه کد JAVA استفاده می کنیم.
اسلاید 9: کلاس های جاواکلاس در جاوا یک “نوع داده است”مجموعه مقادیر ممکن، اشیائی(Object) از جنس کلاس هستند نمایش داخلی کلاس با استفاده از یک reference به بلوک حافظه کلاس انجام می گیرددر C++ از Pointer استفاده می کنیمساختار بلوک حافظه با ویژگیهای کلاس تعیین می شوداعمال روی اشیا با متدها (Methods) معرفی می شوند. }, {true, false}با تعیین نوع داده برخی از زبانها می توانند خطاهای استفاده از آنها در برنامه را کشف کنند:Type checkingبرخی از اعمال تنها روی انواع خاصی از داده ها قابل استفاده هستندتعیین نوع داده، نحوه نمایش داخلی آن را نیز تعیین می کند:میزان و نحوه مدیریت حافظه مورد استفاده نوع String با نوع Boolean متفاوت است.
اسلاید 17: خلاصهیک نوع داده، مقادیر، نحوه نمایش و عملیات روی آنها را توصیف می کندنوع داده انتزاعی ADT مقادیر و عملیات روی آنها را توصیف می کند و کاری به نحوه نمایش ندارد توصیف رسمی یک ADT با شبه کد یک زبان برنامه نویسی صورت می گیرد. اسلاید 5: نوع داده های اولیه در جاواجاوا 8 نوع داده اولیه دارد:booleanchar, byte, short, int, longfloat, doubleهر نوع داده اولیه:مجموعه مقادیری داردنحوه نمایشی داردمجموعه عملیاتی داردبرنامه نویس نمی تواند این مشخصات را تغییر دهد. عمل جمع اعداد مختلط چنین تعریف می شوند:) a1 + ib1( + (a2 + ib2) = (a1 +a2) + i (b1 + b2 ) ;عمل ضرب چنین تعریف می شود:(a1 + ib1) * (a2 + ib2) = (a1a2 - b1b2) + i (a1b2+ a2b1)بفرستید Subjectایمیل گروه ریاضی : [ds-math-assign02] Subjectایمیل گروه کامپیوتر : [ds-cs-assign02].
- ۰۰/۱۰/۲۱