نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی پرتال اطلاعاتی
  • خانه
  • امنیت
  • نمونه داده انتزاعی نوع c. نوع داده چکیده درخت جستجوی دودویی

نمونه داده انتزاعی نوع c. نوع داده چکیده درخت جستجوی دودویی

1.2. انواع داده های انتزاعی

اکثر مفاهیم معرفی شده در قسمت قبل معمولاً در دوره برنامه نویسی مبتدی معرفی می شوند و باید برای شما آشنا باشند. فقط انواع داده های انتزاعی می توانند جدید باشند، بنابراین اجازه دهید ابتدا نقش آنها را در فرآیند توسعه برنامه مورد بحث قرار دهیم. اول از همه، بیایید یک نوع داده انتزاعی را با یک مفهوم آشنا به عنوان یک رویه مقایسه کنیم.

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

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

تعریف نوع انتزاعیداده ها

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

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

برای نشان دادن ایده‌های اساسی پشت ایجاد یک ADT، روال حریصه را از بخش قبل در نظر بگیرید (فهرست 1.3)، که از عملگرهای داده ساده در نوع داده LIST (فهرست اعداد صحیح) استفاده می‌کند. این عملگرها باید اقدامات زیر را روی متغیر newclr از نوع LIST انجام دهند.

1. لیست را خالی کنید.

2. اولین عنصر لیست را انتخاب کنید و در صورت خالی بودن لیست، مقدار را برگردانید خالی.

3. مورد بعدی را در لیست انتخاب کنید و مقدار را برگردانید خالی،اگر مورد بعدینه

4. یک عدد صحیح را در لیست قرار دهید.

این امکان وجود دارد که از ساختارهای داده مختلفی استفاده کنید که با آنها بتوانید اقدامات توصیف شده را به طور موثر انجام دهید. (ساختارهای داده به تفصیل در مبحث 2 مورد بحث قرار خواهند گرفت.) اگر در لیست 1.3 عملگرهای مربوطه را با عبارات جایگزین کنید.

MAKENULL (newcJr)؛

w: = FIRST (newcJr)؛

w: = بعدی (newcfr)؛

INSERT (v، newclr);

سپس یکی از جنبه های اصلی (و مزایای) انواع داده های انتزاعی درک خواهد شد. شما می توانید یک نوع داده را به هر طریقی پیاده سازی کنید، و برنامه هایی که از اشیایی از این نوع استفاده می کنند به نحوه اجرای نوع بستگی ندارند - رویه هایی که عملگرهای این نوع داده را پیاده سازی می کنند مسئول این هستند.

بازگشت به نوع انتزاعی داده های GRAPH(گراف). اشیاء از این نوع به عملگرهایی نیاز دارند که اقدامات زیر را انجام دهند.

1. اولین راس رنگ نشده انتخاب می شود.

2. بررسی کنید که آیا یک لبه بین دو راس وجود دارد یا خیر.

3. راس را با رنگ مشخص کنید.

4. راس بدون رنگ بعدی را انتخاب کنید.

بدیهی است که عملگرهای دیگر دور از چشم روند حریصانه باقی می مانند، مانند قرار دادن رئوس و یال ها در نمودار یا علامت گذاری تمام رئوس نمودار به عنوان باز. سازه های مختلفداده های پشتیبانی کننده از این نوع داده در مبحث 6 و 7 مورد بحث قرار خواهند گرفت.

لازم به ذکر است که تعداد عملگرهای اعمال شده برای اشیاء این مدل ریاضی محدود نیست. هر مجموعه ای از عملگرها یک ADT جداگانه تعریف می کنند. در اینجا نمونه هایی از عملگرهایی هستند که می توانید برای نوع داده انتزاعی SET (Set) تعریف کنید.

1. MAKENULL (A)، این روش مجموعه A را خالی می کند.

2. اتحاد (A, B, C). این رویه دارای دو آرگومان «ورودی» است، مجموعه‌های A و B، و اتحاد این مجموعه‌ها را به آرگومان «خروجی» مجموعه C اختصاص می‌دهد.

3. اندازه (A). این تابع دارای یک آرگومان مجموعه ای A است و یک شی از نوع عدد صحیح برابر با تعداد عناصر مجموعه A برمی گرداند. اصطلاح پیاده سازی ADT به موارد زیر اشاره دارد: ترجمه اعلان هایی که متغیرهای این نوع داده انتزاعی را در دستورات زبان برنامه نویسی تعریف می کنند، به علاوه رویه هایی برای هر عملگر بر روی اشیاء ADT اجرا می شود. اجرا بستگی دارد ساختارهای داده،نماینده ADT هر ساختار داده بر اساس انواع داده های اصلی زبان برنامه نویسی مورد استفاده با استفاده از ابزارهای ساختار داده موجود در این زبان ساخته شده است. ساختارهای آرایه و رکورد دو ابزار مهم ساختاردهی داده در پاسکال هستند. به عنوان مثال، یکی از پیاده سازی های ممکنمتغیر S از نوع SET می تواند یک آرایه حاوی عناصر مجموعه باشد اس.

یکی از دلایل اصلی برای تعریف دو ADT مختلف در یک مدل این است که اقدامات متفاوتی باید روی اشیاء این ADT ها انجام شود. عملگرها را تعریف کنید انواع متفاوت... این خلاصه تنها چند مورد اصلی را پوشش می دهد مدل های ریاضیمانند نظریه مجموعه ها و نظریه گراف، اما برای پیاده سازی های مختلف بر اساس این مدل ها، ADT های خاصی ساخته خواهد شد. مجموعه های مختلفاپراتورها

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

نوع داده بسیاری از اشیاء با ویژگی های مشابه را توصیف می کند. همه زبان های برنامه نویسی سنتی از مجموعه ای از انواع داده های اصلی (واقعی، عدد صحیح، رشته ای، کاراکتر) استفاده می کنند. انواع داده های پایه از مجموعه ای از عملیات از پیش تعریف شده پیروی می کنند. به عنوان مثال، عدد صحیح نوع داده پایه به شما امکان می دهد عملیات هایی مانند جمع، تفریق، ضرب، تقسیم را انجام دهید.

زبان های برنامه نویسی سنتی شامل سازنده های نوع هستند که رایج ترین آنها سازنده رکورد است. به عنوان مثال، برای رکوردی از نوع CUSTOMER، می توانید فیلدهای داده را تعریف کنید. سابقه CUSTOMER خواهد بود نوع جدیدداده هایی که اطلاعات مشتری را ذخیره می کنند، می توانید مستقیماً با ارجاع به نام فیلدها به این ساختار داده دسترسی داشته باشید. عملیاتی مانند WRITE، READ، DELETE، UPDATE را می توان روی یک رکورد انجام داد. شما نمی توانید عملیات جدیدی را برای انواع داده های پایه تعریف کنید.

مانند انواع داده های پایه، انواع داده های انتزاعی (ATD) بسیاری از اشیاء مشابه را توصیف می کنند. تفاوت هایی بین ATD و نوع سنتیداده ها:

· عملیات تحت ATD توسط کاربر تعریف می شود.

· ATD ها اجازه دسترسی مستقیم به نمایش داده های داخلی و اجرای روش ها را نمی دهند.

در برخی از سیستم های OO (به عنوان مثال، اسمال تاک)، انواع داده های پایه به صورت انتزاعی پیاده سازی می شوند.

برای ایجاد یک نوع داده انتزاعی، باید ارائه دهید:

· نام را تایپ کنید؛

· نمایش داده یا متغیرهای یک نمونه از یک شی متعلق به ATD. هر متغیر نمونه دارای یک نوع داده است که می تواند یکی باشد نوع پایه، یا ATD دیگر؛

· عملیات و محدودیت های ATD با استفاده از روش ها اجرا می شوند.

تعریف ATD تعریف کلاس را بازسازی می کند. برخی از سیستم‌های OO از کلمه کلیدی type برای تمایز بین کلاس‌ها و انواع هنگام ارجاع به ساختارهای داده و متدهای یک کلاس و هنگام مراجعه به مجموعه‌ای از نمونه‌های شی استفاده می‌کنند - کلمه کلیدیکلاس Type یک مفهوم ثابت تر است، در حالی که کلاس بیشتر به زمان اجرا مربوط می شود. تفاوت بین کلاس OO و نوع OO را می توان با یک مثال نشان داد. فرض کنید شما یک قالب برای یک سازنده دارید. این الگو با توضیحاتی در مورد ساختار آن و همچنین دستورالعمل استفاده از آن همراه است. این الگو تعریف نوع است. مجموعه ای از محصولات واقعی ساخته شده با استفاده از یک الگو، که هر کدام دارای یک شماره (یا OID) منحصر به فرد هستند، یک کلاس (کلاس) را تشکیل می دهند.

ATD، همراه با وراثت، به شما امکان ایجاد اشیاء پیچیده را می دهد. یک شی پیچیده از ترکیب اشیاء دیگر که در روابط پیچیده با یکدیگر هستند تشکیل می شود. مثال شی پیچیدهرا می توان در سیستم های امنیتی که در آن انواع مختلفداده ها:

1. داده های استاندارد (جدولی) در مورد کارمند (نام کامل، شماره برگه و غیره)؛

2. بیت مپ برای ذخیره عکس کارمند.

توانایی مدیریت چنین محیط داده پیچیده با سهولت نسبی، ارزش سیستم های OO را در بازار پایگاه داده امروزی افزایش می دهد.

نوع داده چکیده داده ها نوع داده کلی چکیده مقررات عمومیمشخصات، ارائه، اجرا 1

داده چیست؟ مجموعه ای از مختلف اشیاء اطلاعاتیکه اعمال خاصی توسط اپراتورهای برنامه انجام می شود داده نامیده می شود. داده یکی از ویژگی های ضروری هر برنامه است. آنها می توانند: - بیت های جداگانه; - دنباله ای از بیت های مستقل؛ - اعداد در اشکال مختلف ارائه. -بایت ها و گروه هایی از بایت های مستقل. -آرایه های اعداد؛ لیست های مرتبط -فایل های جداگانهو سیستم های فایل 2

نمایش جهانی این تنوع داده ها دشوار و غیر عملی است. توصیه می شود آنها را به انواع 3 تقسیم کنید.

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

نمونه های نوع داده انواع عدد صحیح نوع واقعی نوع بولینوع کاراکتر نوع برشماری شده نوع فاصله اشاره گرها 5

انواع عدد صحیح پنج نوع عدد صحیح از پیش تعریف شده وجود دارد: Shortint، Integer، Longint، Byte و Word. هر نوع زیر مجموعه خاصی از اعداد صحیح را نشان می دهد. مقدار یک نوع عدد صحیح را می توان به طور صریح با ریخته گری به نوع صحیح دیگری تبدیل کرد. 6

نوع واقعی نوع واقعی زیرمجموعه ای از اعداد است که در قالب ممیز شناور با تعداد ثابتی از ارقام نمایش داده می شوند. نوشتن یک مقدار ممیز شناور معمولاً شامل سه مقدار - m، b و e است - به طوری که m * b ^ e = n، که b همیشه 2 است و m و e مقادیر صحیح در محدوده واقعی هستند. این مقادیر m و e بیشتر محدوده نمایش و دقت نوع واقعی را مشخص می کند. مثال: 0. 143 E + 22، که در آن m - 0. 143; b = 2 (ضمنی)، e = 22. پنج نوع وجود دارد انواع واقعی: واقعی (Real)، با دقت تک (Single)، با دقت مضاعف (Double)، با دقت افزایش یافته (Extended) و پیچیده (Comp). 7

نوع بولی 4 نوع بولی از پیش تعریف شده وجود دارد: Boolean، Byte. بول، ورد. بول و لانگ. بول. مقادیر بولی با شناسه های ثابت داخلی False و True نشان داده می شوند. از متغیرهای بولی می توان برای ذخیره نتایج هر محاسبات منطقی استفاده کرد. برای متغیرهای بولی فقط 2 عملیات مقایسه "=" (برابر) و "" (نه برابر) مجاز است. هشت

نوع کاراکتر مجموعه مقادیر این نوع کاراکترهایی هستند که بر اساس مجموعه کاراکترهای ASCII توسعه یافته مرتب شده اند. این حروف ["الف" هستند. ... ... "ز"، "الف". ... ... "z"]، ارقام ["0". ... ... "9"]، علائم نگارشی و کاراکترهای خاص. یک متغیر از این نوع یک بایت در حافظه اشغال می کند. نه

نوع Enumerated انواع Enumerated مجموعه های مرتب شده ای از مقادیر را با برشمردن شناسه هایی که آن مقادیر را نشان می دهند، تعریف می کنند. ترتیب مجموعه ها با توجه به ترتیبی که در آن شناسه ها فهرست شده اند انجام می شود. نوع هفته = (دوشنبه، سه شنبه، چهارشنبه، پنجشنبه، جمعه، شنبه، یکشنبه); ده

نوع بازه‌ای یک نوع فاصله، محدوده‌ای از مقادیر از یک نوع ترتیبی است. تعریف نوع بازه ای شامل کوچکترین و بزرگترین ارزشدر زیر محدوده نوع فاصله = 0.. ... 1000; این اعلان نوع به کامپایلر می گوید که فقط اعداد در محدوده مشخص شده برای متغیرهایی از این نوع معتبر هستند. بنابراین، برنامه می تواند به طور خودکار بررسی ها را برای صحت عملیات تخصیص برای این متغیرها سازماندهی کند. یازده

مشترک در انواع داده ها هر یک از انواع داده ها مربوط به یک مجموعه است عملیات ساده... عملیات صحیح +، -، *، div، mod REAL - عملیات +، -، *، / BOOLEAN- عملیات - پیوند (و)، تفکیک V (یا)، نفی (نه) CHAR-عملیات ORD (c) -N: (C در ASCII)، CHR (I) نویسه اول در ASCII با افزایش حجم و پیچیدگی ارائه اطلاعات، نیاز به اشکال راحت ارائه، ذخیره سازی و پردازش آن وجود دارد. 12

تعریف یک نوع داده انتزاعی (ADT یا نوع داده انتزاعی یا ADT) مجموعه ای از اشیاء انتزاعی است که عناصر داده را نشان می دهد و مجموعه ای از عملیات را بر روی آن تعریف می کند که می تواند بر روی عناصر این مجموعه انجام شود. 13

ADT - تعمیم انواع داده ها انواع داده های انتزاعی (ADT) را می توان به عنوان وسیله ای برای گسترش زبان های برنامه نویسی در نظر گرفت. بیایید یک نوع داده انتزاعی را با یک مفهوم آشنا به عنوان یک رویه مقایسه کنیم. یک رویه را می توان به عنوان یک مفهوم تعمیم یافته از یک اپراتور در نظر گرفت. دو ویژگی مشخصه رویه ها، تعمیم و کپسوله سازی، انواع داده های انتزاعی را کاملا مشخص می کند. یک ADT را می توان به عنوان تعمیم انواع داده های ساده (عدد صحیح، واقعی و غیره) مشاهده کرد، همانطور که یک رویه تعمیم عملگرهای ساده (+، -، و غیره) است.

مزایای چکیده ATDساختارهای داده برای ذخیره سازی راحتو دسترسی به اطلاعات فراهم می کنند رابط کاربر پسندبرای عملیات رایج بر روی اشیاء ذخیره شده، پنهان کردن جزئیات پیاده سازی از کاربر. البته، این بسیار راحت است و به شما امکان می دهد به ماژولار برنامه بیشتر برسید. 15

مثال برای کنترل خودکاردما در اتاق های مختلف یک ساختمان بزرگ، یک ATD مفید ترموستات خواهد بود. این برنامه می تواند شامل بسیاری از موارد باشد متغیرهای نوعترموستات مربوط به ترموستات های واقعی در اتاق های مختلف ساختمان. یک ADT را می توان با نام، مجموعه ای از مقادیر و عملیات معتبر مانند هر نوع داده دیگری توصیف کرد. توضیحات برای نوع ترموستات: - نوع داده: THERMOSTAT - محدوده مقادیر: دما را می توان در محدوده 0 تا 50 درجه (سانتیگراد) تغییر داد. - عملیات: بالاتر، پایین تر، تنظیم، بررسی، زنگ هشدار. (شما می توانید به بسیاری از عملیات مفید فکر کنید، اما تعداد زیادی از آنها انتزاع را کاهش می دهند) 16

Levels of Abstraction سطوح Abstraction مانند لایه ها هستند نرم افزار... سطوح بالاتر انتزاع منعکس کننده ایده کاربر برای حل یک مشکل است. سطوح پایین ترانتزاعات - قابلیت های زبان برنامه نویسی. 17

مثال انتزاعی در سطح کاربر یک معمار یک خانه را به صورت دیوارها، کف، پنجره ها، درها و غیره نشان می دهد.در این مورد، نوع داده Drawing است. درها می توانند نوع انتزاعی خوبی باشند. نوع داده: شکل. درها عملیات: قرعه کشی. در را پاک کن قرعه کشی درب. دو برابر. در، درب ……. طراحی. درها انتزاعی هستند سطح بالامنعکس کننده دیدگاه کاربر از مشکل 18

نمونه ای از انتزاع در سطح برنامه نویس برنامه نویس ممکن است سطح دیگری از انتزاع را برای این اشیا پیشنهاد کند، مانند یک مستطیل. نوع داده: مستطیل عملیات: رسم. پاک کردن مستطیل تقسیم مستطیل. مستطیل. بر. قطعات ……. مستطیل - انتزاع بیشتر سطح پایینچون به اجرا نزدیکتر است. 19

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

توصیه هایی برای انتخاب عملیات نوع داده انتزاعی توصیه می شود شامل عملیات زیر باشد: - عملیات سازنده، - عملیات بررسی، - عملیات تبدیل نوع، - عملیات I/O، - عملیات کپی، - عملیات انتخابگر. سعی کنید تعداد عملیات را به حداقل برسانید. یک ADT ساده قابل درک است. ارتباط عملیات را با نوع انتزاعی انتخاب شده حفظ کنید. 21

عملیات سازنده اولیه که مقادیر ADT جدید را بدون توجه به مقدار قبلی آنها ایجاد می کنند، سازنده اولیه نامیده می شوند. هر ADT شامل حداقل یک سازنده اولیه است: بدون آن، تولید یک مقدار اولیه غیرممکن است. 22

استفاده از انواع مخفی انواع داده های انتزاعی بهتر است به عنوان انواع مخفی اعلام شوند. این به شما امکان می دهد تا توضیحات ساختار داده را به ماژول پیاده سازی منتقل کنید، جایی که در ابتدا از آن استفاده می شود. آنها همچنین توانایی پیشگیری را فراهم می کنند دسترسی مستقیمبه کامپوننت های نوع از طرف واردکننده. از آنجایی که یک نوع پنهان همیشه با استفاده از یک اشاره گر پیاده سازی می شود، سه عملیات باید در ADT گنجانده شود. - Create - عملیاتی که یک گره از ساختار مربوطه را ایجاد می کند. - Destroy - عملیات آزادسازی حافظه گره نوع پنهان... - تخصیص - عملیات کپی کردن فیلدهای ساختار پویا یک گره نوع پنهان. 23

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

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

اجزای مشخصات برنامه نویسی، به عنوان یک فرآیند، با بیان مسئله (تعریف آن)، یا مشخصات مسئله آغاز می شود. علاوه بر این، در سراسر متن، از مشخصات استفاده شده است که شامل شش جزء است: - نام - نام مشکل در حال حل. - توضیحات - چندین جمله که ماهیت کار را توصیف می کند. - ورود - توصیف همراه با جزئیاتشکل مورد انتظار داده های ورودی؛ - خروجی - شرح مفصلی از شکل مورد انتظار داده های خروجی. - خطاها - لیست دقیقموقعیت های ناشی از داده های ورودی نادرست؛ - مثال - نمونه ای از اجرا بر حسب ورودی-خروجی. 26

نمونه ای از مشخصات یک نوع داده انتزاعی STEK، که یک ساختار داده شناخته شده را پیاده سازی می کند، که با این واقعیت مشخص می شود که می توان عنصری را در آن "قرار داد" و عنصری را که در آنجا قرار داده شده است "انتخاب" کرد. اخیرا. بخش نحوی از مشخصات نوع داده STEK است نوع مشاهدهمشخصات STACK CREATE است: تابع () return (@); INSERT: تابع (عدد صحیح؛ @) return (@); DELETE: تابع (@) بازگشت (@)؛ TOP: تابع (@) بازگشت (عدد صحیح)؛ EMPTY: تابع (@) بازگشت (بولی)؛ مشخصات پایانی؛ در اینجا عملیات CREATE یک پشته خالی در نتیجه ایجاد می کند، INSERT - یک پشته با عنصر اضافه شده به "بالا"، DELETE - یک پشته با عنصر "بالا" حذف شده، TOP - مقدار عنصر پشته "بالا" , EMPTY - نشانه پشته خالی است. در اینجا فقط اعداد صحیح می توانند عناصر پشته باشند. 27

پیاده سازی نوع داده انتزاعی پیاده سازی با استفاده از زبان های برنامه نویسی شی گرا، مانند C ++ یا جاوا، که در آن انواع داده های انتزاعی با استفاده از کلاس ها پشتیبانی می شوند، راحت تر است. پیاده سازی ADT شامل توصیف مشخصی از اشیا از نوع موجود است. تعریف شده و اجرای عملیات از آن نوع. این بدان معنی است که اشیاء یا به عنوان انواع داده های ساده یا به عنوان آرایه ها، رکوردها یا اتحادیه ها توصیف می شوند. علاوه بر این، از انواع داده های از پیش تعریف شده یا ADT هایی که قبلا تعریف شده بودند استفاده می شود. اجرای عملیات شامل شرح زیربرنامه هایی است که انجام می دهند اقدامات لازمبا اشیاء مشخص شده به عنوان مثال، عملیات +، *، =. ... و غیره، اما در عین حال اجرای این عملیات پنهان است. 28

توسعه مدل های انتزاعی برای داده ها و نحوه پردازش آن داده ها است جزء ضروریدر فرآیند حل مشکلات با استفاده از کامپیوتر. ما نمونه هایی از این را هم در سطح پایین در برنامه نویسی روزمره می بینیم (مثلاً هنگام استفاده از آرایه ها و لیست های پیوندی که در آن بحث شد)، و هم در سطح بالا هنگام حل وظایف کاربردی(مانند حل مشکل اتصال با استفاده از جنگل جستجوی پیوستن در «مقدمه»). این سخنرانی انواع داده های انتزاعی (از این پس ADT) را مورد بحث قرار می دهد که به شما امکان می دهد برنامه هایی را با استفاده از انتزاعات سطح بالا ایجاد کنید. انواع داده‌های انتزاعی به شما امکان می‌دهند تا تبدیل‌های انتزاعی (مفهومی) را که برنامه‌ها روی داده‌ها انجام می‌دهند از هر نمایش خاصی از یک ساختار داده یا هر پیاده‌سازی خاصی از یک الگوریتم جدا کنید.

همه چيز سیستم های محاسباتیبر اساس سطوح انتزاع: خواص فیزیکی خاصی از سیلیکون و مواد دیگر اجازه می دهد تا یک مدل انتزاعی از یک بیت اتخاذ شود که می تواند مقادیر باینری 0-1 را بگیرد. سپس یک مدل انتزاعی از ماشین بر اساس ویژگی های دینامیکی مقادیر مجموعه خاصی از بیت ها ساخته می شود. علاوه بر این، بر اساس اصل عملکرد ماشین تحت کنترل یک برنامه در زبان ماشینیک مدل انتزاعی از زبان برنامه نویسی در حال ساخت است. و در نهایت یک مفهوم انتزاعی از یک الگوریتم ساخته می شود که به عنوان یک برنامه در زبان C ++ پیاده سازی می شود. انواع داده‌های انتزاعی ادامه این فرآیند را امکان‌پذیر می‌سازد و مکانیسم‌های انتزاعی را برای وظایف محاسباتی خاص در سطحی بالاتر از آنچه توسط سیستم C ++ ارائه می‌شود، توسعه می‌دهد، مکانیسم‌های انتزاعی متمرکز بر برنامه های کاربردی خاصو برای حل مسائل در زمینه های کاربردی متعدد و همچنین ایجاد مکانیسم های انتزاعی سطح بالاتری که از این ساختارهای اساسی استفاده می کنند، مناسب هستند. انواع داده های انتزاعی مجموعه ای بی نهایت قابل گسترش را در اختیار ما قرار می دهند ابزاربرای حل بیشتر و بیشتر مشکلات جدید.

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

برای ایجاد سطح جدیدی از انتزاع، باید (1) اشیاء انتزاعی را که باید دستکاری شوند و عملیاتی که باید روی آنها انجام شود را تعریف کنید. (2) نمایش داده ها در برخی از ساختار داده ها و اجرای عملیات. (3) و (مهمتر از همه) برای اطمینان از اینکه این اشیا برای حل مسائل کاربردی مناسب هستند. این نکات برای انواع سادهداده‌ها، بنابراین مکانیسم‌های اساسی برای پشتیبانی از انواع داده‌ها که در «ساختارهای داده اتمی» مورد بحث قرار گرفتند، می‌توانند برای اهداف ما تطبیق داده شوند. با این حال، زبان C ++ پیشنهاد می کند پسوند مهممکانیزم ساختاری به نام کلاس. کلاس ها برای ایجاد سطوح انتزاع بسیار مفید هستند و بنابراین ابزار اصلی مورد استفاده برای این منظور در طول باقی مانده این کتاب در نظر گرفته می شوند.

تعریف 4.1.نوع داده انتزاعی (ADT) یک نوع داده (مجموعه ای از مقادیر و مجموعه ای از عملیات برای آن مقادیر) است که فقط از طریق یک رابط قابل دسترسی است. برنامه ای که از ADT استفاده می کند کلاینت نامیده می شود و برنامه ای که حاوی مشخصاتی از این نوع داده باشد پیاده سازی نامیده می شود.

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

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

به عنوان مثال، رابط نوع داده را برای نقاط (برنامه 3.3) از بخش 3.1 "ساختارهای داده اولیه" در نظر بگیرید. این واسط به صراحت اعلام می کند که نقاط به صورت ساختارهایی متشکل از یک جفت اعداد ممیز شناور، با x و y نمایش داده می شوند. این استفاده از انواع داده رایج است سیستم های بزرگنرم‌افزار: مجموعه‌ای از قراردادهای ارائه داده را توسعه می‌دهیم (و همچنین تعدادی عملیات مرتبط را تعریف می‌کنیم) و این قوانین را از طریق یک رابط در دسترس قرار می‌دهیم تا بتوانند توسط برنامه‌های مشتری موجود در آن استفاده شوند. سیستم بزرگ... نوع داده تضمین می کند که تمام بخش های سیستم با نمایش ساختارهای داده زیربنایی در سراسر سیستم سازگار است. به همان اندازه که این استراتژی خوب است، یک نقص دارد: اگر نیاز به تغییر دارید ارائه داده ها، سپس همه برنامه های مشتری باید تغییر کنند. برنامه 3.3 مجدداً یک مثال ساده به ما می دهد: یکی از دلایل توسعه این نوع داده ها، راحتی برنامه های کلاینت با نقاط است و ما انتظار داریم کلاینت ها در صورت نیاز به مختصات نقطه های جداگانه دسترسی داشته باشند. اما ما نمی‌توانیم به یک نمایش داده متفاوت (مثلا مختصات قطبی، یا مختصات سه‌بعدی، یا حتی انواع داده‌های مختلف برای مختصات فردی) بدون تغییر همه برنامه‌های مشتری حرکت کنیم.

در مقابل، برنامه 4.1 شامل اجرای یک نوع داده انتزاعی مربوط به نوع داده برنامه 3.3 است، اما با استفاده از کلاس C ++ که بلافاصله هم داده ها و هم عملیات مرتبط با آن را تعریف می کند. برنامه 4.2 است برنامه مشتریکار با این نوع داده این دو برنامه همان محاسبات برنامه های 3.3 و 3.8 را انجام می دهند. آنها برخی از ویژگی های اصلی کلاس ها را نشان می دهند که اکنون به آنها نگاه خواهیم کرد.

وقتی تعریفی مانند int i در یک برنامه می نویسیم، به سیستم می گوییم که یک ناحیه حافظه برای داده ها (داخلی) رزرو کند. از نوع intکه توسط i قابل دسترسی است. در زبان ++C برای چنین موجوداتی اصطلاح شی وجود دارد. وقتی تعریفی مانند POINT p را در یک برنامه می نویسید، گفته می شود که یک شی از کلاس POINT ایجاد می کنید که با نام p قابل دسترسی است. در مثال ما، هر شی شامل دو آیتم داده به نام‌های x و y است. همانطور که در مورد ساختارها، آنها را می توان با نام هایی مانند p.y ارجاع داد.

اعضای داده x و y اعضای داده کلاس نامیده می شوند. یک کلاس همچنین می تواند توابع عضوی را تعریف کند که عملیات مربوط به آن نوع داده را اجرا می کند. به عنوان مثال، کلاس تعریف شده در برنامه 4.1 دارای دو تابع عضو به نام های POINT و فاصله است.

برنامه های سرویس گیرنده، مانند برنامه 4.2، می توانند توابع عضو مرتبط با یک شی را فراخوانی کنند و نام آنها را به همان روشی که نام داده های موجود در برخی ساختارها مشخص می شود، مشخص کنند. برای مثال عبارت p.distance (q) فاصله بین نقاط p و q را محاسبه می کند (همان فاصله باید با فراخوانی q.distance (p) برگردانده شود). تابع POINT () که اولین مورد در برنامه 4.1 است، یک تابع عضو ویژه به نام سازنده است: این تابع همنام یک کلاس است و زمانی فراخوانی می شود که یک شی از آن کلاس باید ایجاد شود.

برنامه 4.1. اجرای کلاس POINT (نقطه)

این کلاس یک نوع داده را تعریف می کند که شامل مجموعه ای از مقادیر است که "جفت های نقطه شناور" هستند (با فرض اینکه آنها به عنوان نقاط در صفحه دکارتی تفسیر شوند) و دو تابع عضو تعریف شده برای همه نمونه های کلاس POINT: تابع POINT. () که سازنده ای است که مختصات را به مقادیر تصادفی از 0 تا 1 مقداردهی می کند و تابع فاصله (POINT) است که فاصله تا نقطه دیگر را محاسبه می کند. ارائه داده هاخصوصی است و فقط توابع اعضا می توانند به آن دسترسی داشته باشند یا آن را تغییر دهند. توابع عضو خود عمومی هستند و در دسترس هر مشتری هستند. کد را می توان به عنوان مثال در فایلی با نام POINT .cxx ذخیره کرد.

#عبارتند از کلاس POINT (خصوصی: شناور x, y؛ عمومی: POINT () (x = 1.0 * رند () / RAND_MAX؛ y = 1.0 * رند () / RAND_MAX؛) فاصله شناور (POINT a) (شناور dx = xa.x , dy = ya.y؛ بازگشت sqrt (dx * dx + dy * dy);));

برنامه 4.2. برنامه مشتری برای کلاس POINT (پیدا کردن نزدیکترین نقطه)

این نسخه از برنامه 3.8 یک کلاینت است که از POINT ADT تعریف شده در برنامه 4.3 استفاده می کند. عملیات جدیدآرایه ای از اشیاء POINT ایجاد می کند (با فراخوانی سازنده POINT () برای مقداردهی اولیه هر شی با مختصات تصادفی). عبارت a [i] .distance (a [j]) شی a [i] تابع عضو فاصله را با آرگومان a [j] فرا می خواند.

#عبارتند از #عبارتند از #include "POINT.cxx" int main (int argc, char * argv) (float d = atof (argv)؛ int i, cnt = 0, N = atoi (argv)؛ POINT * a = new POINT [N]; برای (i = 0; i< N; i++) for (int j = i+1; j < N; j++) if (a[i].distance(a[j]) < d) cnt+ + ; cout << cnt << " пар в радиусе " << d << endl; }

تعریف POINT p در برنامه کلاینت منجر به تخصیص یک ناحیه حافظه برای یک شی جدید و سپس (با استفاده از تابع POINT ()) می شود تا به هر یک از دو مورد داده آن یک مقدار تصادفی در محدوده 0 تا 1 اختصاص دهیم.

این سبک از برنامه نویسی که گاهی از آن به عنوان برنامه نویسی شی گرا یاد می شود، به طور کامل توسط ساختار کلاس C ++ پشتیبانی می شود. یک کلاس را می توان گسترش مفهوم ساختار در نظر گرفت، که در آن نه تنها داده ها ترکیب می شوند، بلکه عملیات با این داده ها نیز تعریف می شوند. ممکن است اشیاء مختلف زیادی متعلق به یک کلاس وجود داشته باشد، اما همه آنها شبیه به هم هستند زیرا اعضای داده آنها می توانند مجموعه ای از مقادیر یکسان را بگیرند، و مجموعه عملیات مشابهی را می توان روی این اعضای داده انجام داد - به طور کلی، آنها نمونه هایی هستند. از همان نوع داده در برنامه نویسی شی گرا، اشیا برای پردازش داده های اعضای خود طراحی می شوند (در مقابل استفاده از توابع مستقل برای پردازش داده های ذخیره شده در اشیاء).

ما به مثال کلاس کوچک توضیح داده شده در بالا نگاه می کنیم تا با ویژگی های اصلی کلاس ها آشنا شویم. بنابراین تا کامل شدن فاصله زیادی دارد. در کد واقعی برای کلاس نقطه، عملیات بسیار بیشتری خواهیم داشت. به عنوان مثال، برنامه 4.1 حتی عملیاتی ندارد که به شما امکان می دهد مقادیر مختصات x و y را پیدا کنید. همانطور که خواهیم دید، افزودن این عملیات و سایر عملیات ها کار نسبتاً ساده ای است. در قسمت 5، نگاهی دقیق‌تر به کلاس‌های نقطه و دیگر انتزاعات هندسی مانند خطوط و چندضلعی‌ها خواهیم داشت.

در C ++ (اما نه C)، ساختارها همچنین می توانند توابعی مرتبط با آنها داشته باشند. تفاوت اصلی بین کلاس ها و ساختارها مربوط به دسترسی به اطلاعات است که با کلمات کلیدی مشخص می شود.

مقالات مرتبط برتر