این مقاله ممکن است برای مطابقت با استانداردهای کیفی ویکیپدیا نیازمند بازنویسی باشد. |
این مقاله نیازمند ویکیسازی است. لطفاً با توجه به راهنمای ویرایش و شیوهنامه، محتوای آن را بهبود بخشید. |
پارادایمهای برنامهنویسی | پارادایم برنامهنویسی: برنامهنویسی رویهای، برنامهنویسی دستوری، برنامهنویسی ساختیافته، برنامهنویسی شیءگرا |
---|---|
خانواده | الگول |
طراحی شده توسط | اوله-یوهان دال |
توسعهدهنده | کریستین نیگارد |
ظهوریافته در | ۱۹۶۲ |
انتشار پایدار | Simula 67, Simula I
|
سیستم نوع، سیستم نوع نامی | |
دامنه | دامنه (علوم رایانه) |
زبان پیادهسازی | الگول ۶۰ (primarily; some components Simscript) |
سیستمعامل | شبهیونیکس، ویندوز، زد/اواس، TOPS-10, ذخیره مجازی چندگانه |
وبگاه | |
متأثر از | |
الگول ۶۰, Simscript | |
تأثیر گذاشته بر | |
Object-oriented programming languages |
سیمولا یک نام برای دو زبان برنامهنویسی، سیمولا ۱ و سیمولا ۶۷ است، که در ۱۹۶۰ در مرکز محاسبات نروژی در اسلو، توسط اوله-یوهان دال و کریستین نیگارد توسعه یافت. نحوی، آن ابر مجموعه نسبتاً وفادار از الگول ۶۰ است.
سیمولا ۶۷ اشیاء، کلاسها، زیر کلاسها، متدهای مجازی، همروال، شبیهسازی رویداد گسسته و ویژگیهای جمعآوری زباله را معرفی کرد.
سیمولا اولین زبان برنامهنویسی شی گرا در نظر گرفته شدهاست. همانطور که از نام آن پیداست، سیمولا برای انجام شبیهسازی، طراحی شدهاست و نیاز آن دامنه، چارچوبی برای بسیاری از ویژگیهای زبانهای شی گرا امروز تهیه کردهاست.
سیمولا در طیف وسیعی از کاربردها مانند شبیهسازی طرحهای VLSI، مدلسازی فرایند، پروتکلها، الگوریتمها و برنامههای کاربردی دیگر مانند حروفچینی، گرافیک کامپیوتری، و آموزش و پرورش استفاده شدهاست. از آنجا که اشیاء سیمولا گونه در ++C، جاوا و #C دوباره استفاده میشود، نفوذ سیمولا اغلب کم بیان میشود. خالق ++C، بییارنه استراستروپ، اذعان کردهاست که سیمولا ۶۷ بود بیشترین اثر را در او برای توسعه ++C داشت، که نوع بهبودهای بهرهوری را که سیمولا به سرعت خام محاسبات ارائه داده شده توسط زبانهای سطح پایین مثل BCPL را ارمغان آورد.
سیمولا هنوز هم برای انواع مختلف از درسهای دانشگاه استفاده میشود، به عنوان مثال جارک لنار سیمولارا به دانشجویان در دانشگاه مالت میآموزد.
این زبان برای کاربردهای طراحی و شبیهسازی ایجاد شد. اهمیت زبان سیمولا به دلیل مطرح شدن ایدههای شیء گرایی در این زبان بود. ایدهٔ کلاس مهمترین ایدهٔ مطرح شده در این زبان است. در یک کلاس تعدادی داده به همراه توابع مورد نیاز تعریف میشوند. ایده مهم دیگری که در این زبان استفاده میشد توابع همروند (به انگلیسی: Co-routine) بود. توابع همروند برای انجام یک وظیفه توسط چند روال با هم دیگر هم کاری داشتند که باید حالت هر کدام حفظ شوند. این توابع در عمل باید برای اجرا به نوبت فراخوانی و اجرا شوند و حافظه باید ماندگار باشد و اجرا از محل قبلی ادامه یابد. سیمولا بر پایهٔ زبان الگول نوشته شدهاست.
کریستین نیگارد شروع به نوشتن برنامههای شبیهسازی کامپیوتر در سال ۱۹۵۷ کرد. نیگارد نیاز به یک راه بهتر برای توصیف عدم تجانس و عملکرد یک سیستم را دید. برای رفتن بیشتر با ایدههای خود بر روی یک زبان رسمی کامپیوتر برای توصیف سیستم، متوجه شد که او کسی را با مهارت بیشتر برنامهنویسی از کسی که داشته نیاز دارد. اوله - یوهان دال به او در کارش از ژانویه ۱۹۶۲ پیوست. این تصمیم برای ارتباط زبان الگول ۶۰ در مدت کوتاهی پس ازآن گرفته شد. تا قبل از مه ۱۹۶۲ مفاهیم اصلی زبان شبیهسازی تعیین شد. "سیمولا ۱" متولد شد، یک زبان برنامهنویسی با هدف ویژه برای شبیهسازی سیستمهای رویداد گسسته. کریستن نیگارد به یونیوک اواخر ماه مه ۱۹۶۲ در ارتباط با بازاریابی کامپیوتر جدید یونیوک ۱۱۰۷ دعوت شد. در آن دیدار نیگارد ایدههای سیمولا به رابرت بمر، مدیر برنامهنویسی سیستم در یونیوک ارائه داد. بمر یک هواخواه سوگند یاد کرده الگول بود و متوجه شد پروژه سیمولا الزامآور است. بمر همچنین رئیس یک جلسه در دومین همایش بینالمللی پردازش اطلاعات میزبانی شده توسط IFIP بود. او نیگارد را که مقاله "سیمولا -- فرمتی از الگول به شرح شبکههای رویداد- گسسته" را ارائه بود، دعوت کرد. مرکز محاسبات نروژی یونیوک ۱۱۰۷ را دراوت ۱۹۶۳ با تخفیف قابل توجهی گرفت، که در آن دال سیمولا۱ را تحت قرارداد با یونیوک پیاده میکرد. پیادهسازی بر مبنای یونیوک الگول ۶۰ کامپایلر استوار بود. سیمولا ۱ در یونیوک ۱۱۰۷ از ژانویه ۱۹۶۵ بهطور کامل عملیاتی بود. در چند سال بعدی دال و نیگارد زمان زیادی را صرف آموزش سیمولاکردند. سیمولا به چندین کشور در سراسر جهان گسترش یافت و سیمولا ۱ بعداً در کامپیوترهای بوروقس B5500 و کامپیوتر اورال - ۱۶ روسی پیاده شد.
در سال 1966 C.A.R.Hoare مفهوم ساخت کلاس رکورد را معرفی کرد، که دال و نیگارد آن را با مفهوم پیشوندی و ویژگیهای دیگری برای برآورده کردن نیازهای خود برای مفهوم فرایند تعمیم داده شده گسترش دادند. دال و نیگارد مقاله خود در اعلانهای کلاسها و زیر کلاسها در کنفرانس کاری IFIP روی زبانهای شبیهسازی در اسلو، در مه ۱۹۶۷ ارائه دادند. این مقاله اولین تعریف رسمی از سیمولا ۶۷ شد. در ژوئن ۱۹۶۷ کنفرانسی برای استاندارد کردن زبان و آغاز تعدادی از پیادهسازیها برگزار شد. دال پیشنهادی برای متحد کردن نوع و مفهوم کلاس داد. این به بحثهای جدی منجر شد، و پیشنهاد توسط هیئت مدیره رد شد. سیمولا ۶۷ بود بهطور رسمی در اولین جلسه از گروه استانداردهای سیمولا (SSG) در ماه فوریه ۱۹۶۸ استاندارد شد.
سیمولا تأثیرگذار در توسعه صحبت کوتاه و بعد زبانهای برنامهنویسی شی گرا بود. آن همچنین کمک به الهام بخشی مدل عملگر از محاسبات همزمان کرد، هر چند سیمولا تنها پشتیبانی از همکاری- روال و نه همزمانی درست میکند.
در اواخر دهه شصت و اوایل دهه هفتاد چهار پیادهسازی اصلی از سیمولا وجود داشت:
این پیادهسازی به طیف گستردهای از زبانهای برنامهنویسی منتقل شدند. تاپس - ۱۰ مفهوم متغیرها و روشهای عضو عمومی، محافظت شده و خصوصی، که بعداً با سیمولا ۸۷ یکپارچه شد را پیاده کرد. سیمولا ۸۷ آخرین استاندارد است و به طیف گستردهای از زبانهای برنامهنویسی منتقل شدهاست. عمدتاً سه پیادهسازی شده وجود دارد:
در نوامبر ۲۰۰۱ دال و نیگارد مدال IEEE جان فون نویمان توسط مؤسسه مهندسان برق و الکترونیک را "برای معرفی مفاهیم برنامهنویسی شی گرا از طریق طراحی و پیادهسازی سیمولا ۶۷" دریافت کردند. آنها در ماه فوریه ۲۰۰۲، جایزه A.M.2001 تورینگ توسط انجمن ماشینها محاسبهٔ (ACM) را، با نقل قول: "برای ایدههای اساسی برای ظهور برنامهنویسی شیء گرا، از طریق طراحی شان با زبانهای برنامهنویسی سیمولا ۱ و سیمولا ۶۷" دریافت کردند. متأسفانه نه دال و نه نیگارد نتوانستند خود را به سخنرانی جایزه ACM تورینگ که برنامهریزی شده برای ارائه در کنفرانس OOPSLA 2002 در شهر سیاتل شده بود، برسانند، چرا که آنها هر دو در عرض دو ماه از یکدیگر در ماه ژوئن و آگوست به ترتیب، از دنیا رفتند.
آزمایشگاه تحقیقات سیمولا یک مؤسسه تحقیقاتی است که بخاطر زبان سیمولا نامگذاری شدهاست، و نیگارد یک موقعیت کاری پاره وقت از سال بازگشایی در۲۰۰۱ آنجا داشت.
فایل کامپیوتر خالی یک برنامه حداقل در سیمولا است، که توسط حجم برنامه منبع اندازهگیری شدهاست. آن را از فقط یک چیز تشکیل شدهاست: بیان گنگ.
با این حال، برنامه حداقل به صورت مناسب تری به عنوان یک بلوک خالی جلوه داده میشود:
Begin
End;
آن اجرای برنامه را آغاز و بلافاصله خاتمه میدهد. زبان هیچ مقدار برگردانده شده از خود برنامه ندارد.
توجه داشته باشید که در سیمولا بزرگی و کوچکی حروف مطرح نیست. نمونهای از یک برنامه Hello World در سیمولا:
Begin
OutText ("Hello World!"); Outimage;
End;
مثال واقعی تر با استفاده از کلاسها، زیرکلاسها و روشهای مجازی:
Begin
Class Glyph; Virtual: Procedure print Is Procedure print;; Begin End;
Glyph Class Char (c); Character c; Begin Procedure print; OutChar(c); End;
Glyph Class Line (elements); Ref (Glyph) Array elements; Begin Procedure print; Begin Integer i; For i:= 1 Step 1 Until UpperBound (elements, 1) Do elements (i).print; OutImage; End; End;
Ref (Glyph) rg; Ref (Glyph) Array rgs (1: 4);
! Main program;
rgs (1):- New Char ('A'); rgs (2):- New Char ('b'); rgs (3):- New Char ('b'); rgs (4):- New Char ('a'); rg:- New Line (rgs); rg.print;
End;
مثال بالا یک کلاس بزرگ (گلیف) با دو زیرکلاسها (کاراکتر و خط) دارد. یک روش مجازی با دو پیادهسازی وجود دارد. اجرای برنامه با اجرای برنامه اصلی شروع میشود. سیمولا نشانی از مفهوم کلاسهای انتزاعی ندارد زیرا کلاسها با روشهای مجازی خالص میتواند مثالی شود. این به این معنی است که در مثال بالا همه کلاسها میتوانند مثالی شوند. فراخواندن یک روش مجازی خالص هرچند خطای زمان اجرا تولید میکند.
سیمولا از فراخوانی با نام پشتیبانی میکند، بنابراین ابزار جنسن به راحتی میتواند پیاده شود. با این حال، حالت انتقال پیشفرض برای پارامتر ساده با مقدار فراخوانده میشود، بر خلاف زبان الگول که فراخوانی با نام را استفاده میکند. برنامه منبع برای ابزار جنسن به همین خاطر باید فراخوانی با نام را برای پارامترها هنگامی که توسط یک گردآور سیمولا گردآوری شده را مشخص کند.
مثال بسیار سادهتر دیگر تابع جمع است (Σ) که میتواند به شرح زیر پیاده شود:
Real Procedure Sigma (k, m, n, u);
Name k, u; Integer k, m, n; Real u;
Begin
Real s; k:= m; While k <= n Do Begin s:= s + u; k:= k + 1; End; Sigma:= s;
End;
برنامه بالا فراخوانی با نام را برای کنترل متغیر (k) و بیان (u) استفاده میکند. این اجازه میدهد تا متغیر کنترلکننده در بیان استفاده شود. توجه داشته باشید که استاندارد سیمولا محدودیتهای خاصی بر متغیر کنترلکننده در حلقه for اجازه میدهد؛ بنابراین برنامه بالا از حلقه while برای حداکثر قابلیت حمل استفاده میکند. به شرح زیر:
که پس از آن میتواند به شرح زیر پیاده شود:
Z:= Sigma (i, 1, 100, 1 / (i + a) ** 2);
سیمولا شامل یک بسته شبیهسازی برای انجام شبیهسازی رویداد گسستهاست. این بسته شبیهسازی بر مبنای ویژگیهای شی گرا سیمولا و مفهوم همروال آن است. سام، سالی و اندی در حال خرید لباس هستند. آنها باید از یک اتاق پرو اشتراکی استفاده کنند. هر کدام از آنها در حال گشتن در فروشگاه به مدت ۱۲ دقیقه هستند و سپس از اتاق پرو بهطور انحصاری به مدت سه دقیقه استفاده میکنند، هر یک از یک توزیع نرمال پیروی میکنند. یک شبیهسازی از تجربه اتاق پرو آنها به شرح زیر است:
Simulation Begin
Class FittingRoom; Begin Ref (Head) door; Boolean inUse; Procedure request; Begin If inUse Then Begin Wait (door); door.First.Out; End; inUse:= True; End; Procedure leave; Begin inUse:= False; Activate door.First; End; door:- New Head; End;
Procedure report (message); Text message; Begin OutFix (Time, 2, 0); OutText (": " & message); OutImage; End;
Process Class Person (pname); Text pname; Begin While True Do Begin Hold (Normal (12, 4, u)); report (pname & " is requesting the fitting room"); fittingroom1.request; report (pname & " has entered the fitting room"); Hold (Normal (3, 1, u)); fittingroom1.leave; report (pname & " has left the fitting room"); End; End;
Integer u; Ref (FittingRoom) fittingRoom1;
fittingRoom1:- New FittingRoom; Activate New Person ("Sam"); Activate New Person ("Sally"); Activate New Person ("Andy"); Hold (100);
End;
بلوک اصلی با شبیهسازی برای قادر کردن شبیهسازی پیشوند دار شدهاست. بسته شبیهسازی میتواند در هر بلوک استفاده میشود و شبیهسازیها حتی میتوانند داخل هم جا داده شوند وقتی که کسی که شبیهسازی میکند را شبیهسازی میکند. شی اتاق پرو یک صف (درب) را برای دسترسی به اتاق پرو استفاده میکند. هنگامی که کسی درخواست اتاق پرو میکند و آن اشغال است، آنها را باید در این صف منتظر (صبر (درب)) بمانند. وقتی کسی اتاق پرو را ترک میکند اولین کس (در صورت وجود) از صف (درفعال. اولین) جدا میشود و بر این اساس از صف در (در. اولین. بیرون) برداشته میشود. شخص زیر کلاسی از فرایند است و فعالیت او با استفاده از نگه داشتن (زمان برای دیدن فروشگاه و زمان حضور در اتاق پرو) و و روشهای فراخوانی در شی اتاق پرو برای درخواست و ترک اتاق پرو شرح داده شدهاست. برنامه اصلی همه اشیاء را ایجاد وهمه اشیاء فردی را فعال برای قرار دادن آنها در صف رویداد میکند. برنامه اصلی برای ۱۰۰ دقیقه از زمان شبیهسازی میماند قبل ازاینکه برنامه پایان یابد.
۱. ^ a b c d e f g h i j k l m n Ole-Johan Dahl, Bjørm Myhrhaug, and Kristen Nygaard (1970),:[1], Common Base Language, Norwegian Computing Center ۲. ^ http://staff.um.edu.mt/jskl1/ ۳. ^ Holmevik, Jan Rune (1994). "Compiling Simula: A historical study of technological genesis". IEEE Annals in the History of Computing 16 (4): 25–37. http://www.idi.ntnu.no/grupper/su/publ/simula/holmevik-simula-ieeeannals94.pdf بایگانیشده در ۳۰ اوت ۲۰۱۷ توسط Wayback Machine. Retrieved 12 May 2010. ۴. ^ Jan Rune [2], Compiling Simula, Institute for Studies in Research and Higher Education, Oslo, Norway مآخذ