انواع داده انتزاعی
تکامل مفهوم نوع داده
مفهوم اولیه نوع داده نوع را به صورت مجموعه ای از مقادیر تعریف می کند که یک متغیر می تواند آنها را بپذیرد.
نمایش حافظه مربوط به مقادیر حقیقی و صحیح کالماً بسته بندی شده است یعنی از برنامه نویس پنهان است.
برنامه نویس بدون اینکه از جزئیات نمایش حافظه و از نوع عملیات این انواع اطلاع داشته باشد از اشیای داده آنها استفاده می کند.
برنامه نویس فقط نام نوع و عملیاتی را برای دستکاری آن نوع فراهم می بیند
1
iausari.ramezani@gmail.com
طراحی پیاده سازی زبانهای برنامه سازی
انواع داده انتزاعی
تکامل مفهوم نوع داده
در برنامه های بزرگ برنامه نویس با طراحی و پیاده سازی انواع داده جدید سروکار دارد.
برای نوشتن برنامه پایگاه داده آمار ایران
اصلاعات هر فرد باید ذخیره گردد.( نام سرپرست، تعداد، شماره شناسنامه و..)
اینها صفات نوع داده بخش هستند. هر بخش لیستی از خانوار است
یک شی داده از این نوع یک کلاس را نشان میدهد. که عملیات خاصی روی آن شی داده انجام میدهد.
ایجاد ، اضافه کردن فرزند، حذف دارایی و .. این فعالیتها را میتوان مشخصات این نوع داده در نظر گرفت
2
iausari.ramezani@gmail.com
طراحی پیاده سازی زبانهای برنامه سازی
انواع داده انتزاعی
تکامل مفهوم نوع داده
برای ایجاد داده جدید و عملیات بر روی آن
زیربرنامه
می توان زیربرنامه هایی ایجاد کرد که عملکرد خاصی برای یک نوع داده جدید داشته باشد.
اعلان نوع
زبانهایی مثل C و ادا ، میتوان داده های جدید با عملکرد جدید ایجاد کرد
وراثت
در فصل بعدی.
3
iausari.ramezani@gmail.com
طراحی پیاده سازی زبانهای برنامه سازی
انواع داده انتزاعی
انواع داده انتزاعی:
در زبانهای اولیه( فرترن و کوبول) انواع جدید فقط توسط زیربرنامه تولید میشد، اما زبانهای بعدی انواع کاملی را ارائه دادند:
Package در ادا
Class در C++
4
iausari.ramezani@gmail.com
طراحی پیاده سازی زبانهای برنامه سازی
انواع داده انتزاعی(ادامه)
تکامل مفهوم نوع داده
انتزاع داده ها
نوع داده انتزاعی :
مجموعه ای از اشیای داده (معمولاً با استفاده از یک یا چند تعریف نوع)
مجموعه ای از عملیات انتزاعی (بر روی آن انواع داده)
بسته بندی (تمام آنهابه طوری که کاربر نوع جدید نتواند اشیای داده ای از آن نوع را به جز از طریق عملیاتی که برای آن تعریف شده است دستکاری کند)
5
iausari.ramezani@gmail.com
طراحی پیاده سازی زبانهای برنامه سازی
انواع داده انتزاعی (ادامه)
پنهان سازی اطلاعات
برای نوشتن برنامه بزرگ باید از استراتژی تقسیم و حل استفاده کرد.
برنامه ها به قطعاتی به نام ماژول تقسیم می شوند.
هر ماژول مجموعه ای محدود از عملیات روی داده های محدود
طراحی ماژول معمولاً به دوروش انجام می شود:
ماژولهای تجزیه تابعی ( 1960)
ماژولهای تجزیه داده ای
6
iausari.ramezani@gmail.com
طراحی پیاده سازی زبانهای برنامه سازی
انواع داده انتزاعی (ادامه)
پنهان سازی اطلاعات(ادامه)
زبان برنامه سازی انتزاع را به دو روش پشتیبانی می کند:
با تدارک کامپیوتر مجازی که کاربرد آن ساده تر و قدرت آن بیش از کامپیوتر سخت افزار است.
زبان امکاناتی را فراهم می کند که برنامه نویس می تواند انتزاعها را به وجود آورد. مثل زیربرنامه، کلاس و پکیچ.
بسته بندی اصلاح برنامه را آن می کند.
زیربرنامه ها مکانیزم بسته بندی را شکل می دهند که تقریباً در هر زبانی وجود دارد.
7
iausari.ramezani@gmail.com
طراحی پیاده سازی زبانهای برنامه سازی
انواع داده انتزاعی (ادامه)
پنهان سازی اطلاعات(ادامه)
پنهان سازی اطلاعات، اصطلاح مهمی در طراحی انتزاعهای برنامه نویسی است.
هر قطعه باید تا آنجا که ممکن است اطلاعات را از کاربر پنهان کند.
مثال: تابع جذر یک عدد: زیرا الگوریتم محاسبه را از کاربر پنهان کرده
نوع داده تعریف شده در صورتی موفق است که الگوریتم هایی که توسط عملیات استفاده میشود خوب پنهان باشند.
8
iausari.ramezani@gmail.com
طراحی پیاده سازی زبانهای برنامه سازی
انواع داده انتزاعی (ادامه)
پنهان سازی اطلاعات(ادامه)
وقتی اطلاعات در یک انتزاع بسته بندی شد:
لازم نیست کاربر از اطلاعات مخفی اطلاع داشته باشد
در صورت لزوم نمی تواند مستقیما آن اطلاعات را دست کاری کند.
مثل: نوع داده صحیح(در پاسکال)
نه تنها جزئیات نمایش پنهان هستند برنامه نویس نمی تواند بیتهای عدد را دستکاری کند.
9
iausari.ramezani@gmail.com
طراحی پیاده سازی زبانهای برنامه سازی
بسته بندی با زیربرنامه ها
زیربرنامه یک عملیات انتزاعی است که توسط برنامه نویس تعریف میشود. و عناصر تشکیل دهنده بنامه ها هستند.
دو دیدگاه از زیربرنامه در اینجا مهم است:
در سطح طراحی برنامه ( عملیاتی که برنامه نویس طراحی می کند)
در سطح طراحی زبان ( امکاناتی که برای تعریف وفراخوانی زیربرنامه ها)
10
iausari.ramezani@gmail.com
طراحی پیاده سازی زبانهای برنامه سازی
بسته بندی با زیربرنامه ها(ادامه)
همانند عملیات اولیه زیربرنامه 2 بخش دارد( مشخصات – پیاده سازی)
مشخصات زیربرنامه:
نام
امضای زیربرنامه(تعداد آرگومان ، ترتیب، نوع آنها وخروجی)
فعالیتی که توسط زیربرنامه انجام می شود.
پیاده سازی زیربرنامه شامل:
پیاده سازی توسط بدنه زیربرنامه تعریف می شود که متشکل از اعلان داده های محلی است
دستوراتی که عملکرد زیربرنامه را مشخص می کند.
11
iausari.ramezani@gmail.com
طراحی پیاده سازی زبانهای برنامه سازی
Float FN(float x, int y);
FN: real*int -> real;
بسته بندی با زیربرنامه ها (ادامه)
تعریف و فراخوانی زیربرنامه
تعریف زیربرنامه خاصیت ایستای یک برنامه است.
درحین اجرای برنامه اگر زیربرنامه ای فراخوانی شود سابقه فعالیتی از آن زیربرنامه ایجاد می شود.
تعریف زیربرنامه قالبی برای ایجاد سابقه فعالیت در حین اجرا است.
12
iausari.ramezani@gmail.com
طراحی پیاده سازی زبانهای برنامه سازی
پیاده سازی تعریف و فراخوانی:
بستگی به زبان های مختلف
(پاسکال ، C ، فرترن ، …)
بسته بندی با زیربرنامه ها (ادامه)
تعریف و فراخوانی زیربرنامه(ادامه)
پیاده سازی تعریف و فراخوانی زیربرنامه
الگو به دو بخش تقسیم می شود:
بخش ایستا که سگمنت کد نام دارد و حاوی ثوابت و کد اجرایی است.
دستورات ، زیربرنامه های داخلی و …
بخش پویا که رکورد فعالیت نام دارد
نوع داده نتیجه ، پارامتر ها و داده های محلی و ..
13
iausari.ramezani@gmail.com
طراحی پیاده سازی زبانهای برنامه سازی
بسته بندی با زیربرنامه ها (ادامه)
زیر برنامه های کلی:
مشخصات زیر برنامه، تعداد، ترتیب ، و نوع آرگمانها را مشخص می کند
زیر برنامه کلی ( generic subprogram)
یک نام با چندین امضا
14
iausari.ramezani@gmail.com
طراحی پیاده سازی زبانهای برنامه سازی
Python:
from peak.rules import abstract, when
@abstract
def collide(a, b):
"Process collision of two objects"
@when(collide, (Asteroid, Asteroid))
def collide_asteroids(asteroid1, asteroid2):
pass
@when(collide, (Spaceship, Asteroid))
def collide_spaceship_with_asteroid(spaceship, asteroid):
pass
@when(collide, (Asteroid, Spaceship))
def collide_asteroid_with_spaceship(asteroid, spaceship):
return collide_spaceship_with_asteroid(spaceship, asteroid)
# etc…
بسته بندی با زیربرنامه ها (ادامه)
تعریف زیربرنامه به عنوان اشیای داده
در C و پاسکال و.. تعریف زیربرنامه مستقل از اجراست.
ترجمه عملیاتی است که تعریف زیربرنامه را به شکل رشته کاراکتری گرفته شی داده زمان اجرا را تولید می کند که این تعریف را نمایش می دهد.
اجرا عملیاتی است که تعریفی به شکل زمان اجرا را گرفته سابقه فعالیتی را از آن ایجاد می کند و آن سابقه فعالیت را اجرا می نماید.( صدا زده میشود)
15
iausari.ramezani@gmail.com
طراحی پیاده سازی زبانهای برنامه سازی
تعریف نوع
مکانیزمی برای توصیف دسته ای از اشیاء داده به همراه عملیات آنها.
در تعریف :
نام نوع
ساختار
عملیات آن نوع
تعیین میگردد
تعریف نوع به عنوان الگویی برای ساخت اشیاء در حین اجرای برنامه میباشد.
16
iausari.ramezani@gmail.com
طراحی پیاده سازی زبانهای برنامه سازی
تعریف نوع(ادامه)
هم ارزی نوع
نوع داده: بتوانیم آن را به طور ایستا تعیین کنیم
یک موضوع معنایی در تعین مقدار راست شی داده
تساوی نوع
هم ارزی نام
معایب:
هر شی که در انتساب بکار می رود باید دارای نام باشد
یک تعریف نوع باید در سراسر برنامه یا بخش بزرگی از برنامه قابل استفاده باشد
17
iausari.ramezani@gmail.com
طراحی پیاده سازی زبانهای برنامه سازی
تعریف نوع(ادامه)
هم ارزی نوع(ادامه)
هم ارزی ساختاری
معایب
آیا ترتیب فیلدها باید یکی باشد …
دو متغیر ممکن است به طور تصادفی از نظر ساختاری یکسان باشند
تعیین هم ارزی ساختاری در مورد انواع پیچیده هزینه ترجمه دارد.
تساوی اشیای داده
تساوی پشته
تساوی مجموعه
18
iausari.ramezani@gmail.com
طراحی پیاده سازی زبانهای برنامه سازی
تعریف نوع با پارامتر ها
تعریف انواعی که پارامتردارند
پیاده سازی: تعریف نوع پارامتردار به عنوان الگویی در زمان ترجمه منظور می شود با این تفاوت که وقتی کامپایلر اعلان یک متغیر را با لیست پارامترهایی که بعد از نام نوع می آید را ترجمه می کند.
19
iausari.ramezani@gmail.com
طراحی پیاده سازی زبانهای برنامه سازی