سیمولا
از ویکیپدیا، دانشنامهٔ آزاد
سيمولا نامي برای دو زبان برنامه نويسي است، سيمولا1 و سيمولا67، در دهه 1960 در مرکز محاسبه نروژی در آلسو، به طور مشترک توسط اله يوهان دال و کريستن نيگارد ايجاد شد، مجموعه ای عالي و نسبتا وفادار از الگول60 است. سيمولا67 اشياء، زيرکلاسها ، متدهای مجازی، دستورالعمل ها، پيشامد گسسته شبيه سازي و ويژگي های پاک کردن خانه های بلااستفاده حافظه آزاد شده را معرفي کرد. سيمولا اولين زبان برنامه نويسي شي گرای مطرح شده است. همانطور که از نامش بر مي آيد سيمولا برای شبيه سازي طراحي شد، و نياز های آن دامنه، چارچوبي را برای بسياری از ويژگي های زبانهای شي گرای امروزی فراهم کرده است. سيمولا در محدوده وسيعي از کاربردهای شبيه سازی مانند طراحي های مجتمع سازی در مقياس بزرگ(وي ال اس آی)، پردازش ها، پروتکل ها، الگوريتمها و ساير کاربردها مانند تايپ چيني، گرافيک های کامپيوتری و آموزش و پرورش، مورد استفاده قرار گرفت. از زماني که نوع اشياء سيمولا در سي ++، جاوا و سي شارپ دوباره توليد شد، اغلب تاثير سيمولا دست کم گرفته شده است. سازنده سي ++، تصديق کرده است که سيمولا بزرکترين تاثير را بر وي در ايجاد سي ++ ، رساندن نوعي از بهره وری توسعه سخت افزاری و نرم افزاری پيشنهاد شده توسط سيمولا به سرعت خام انجام توسط الگوريتم های پيشنهاد شده زبانهای سطح پايين تر مانند بي سي پي ال، داشته است.
سيمولا
شی گرا :مدل
1967 :پديدار شده در
توليد يکپارچه سيستم عامل کامپيوتر :کاربرد عمده
الگول60 :تاثير گرفته از
زبانهای برنامه نويسي شي گرا :تاثير گذار بر
فهرست مندرجات |
[ویرایش] تاريخچه
کريستن نيگارد نوشتن برنامه های شبيه سازی کامپيوتر را در 1957 آغاز کرد. نيگارد دريافت که نيازمند راه بهتری برای توصيف عملکرد سيستم های ناهماهنگ است.برای پيشروی با ايده هايش برای توصيف يِک سيستم با زبان صوری کامپيوتر، نيگارد دريافت که نيازمند فردی با مهارتهای برنامه نويسي بيشتری نسبت به خود است. اله يوهان دال در ژانويه 1962 به کار او پيوست. تصميم پيوند اين زبان به الگول60 مدت کمي پس از آن گرفته شد.در مي 1962 مفهوم اصلي زبان شبيه سازی تنظيم شد. "سيمولا1" برای هدف خاصي از زبان برنامه نويسي برای شبيه سازی سيستم های رويدادهای گسسته به وجود آمد.
کريستن نيگارد اواخر مي 1962 در ارتباط با بازاريابي کامپيوتر جديدشان 1107 UNIVAC به Univac دعوت شد.در آن ملاقات نيگارد ايده های سيمولا را به رابرت بمر مدير سيستم های برنامه نويسي در Univac عرضه کرد. بمر که يک طرفدار شناخته شده الگول بود دريافت که پروژه سيمولا تاثيرگذار است. بمر همچنين در یک جلسه در دومين کنفرانس بين المللي درباره پردازش اطلاعات به ميزباني فدراسيون بين المللي اطلاعات شرکت داشت. او نيگارد را دعوت کرد، کسي که مقاله "سيمولا—توسعه يافته الگول برای شرح شبکه های رويداد گسسته را ارايه کرد.
مرکز کامپيوتری نروژی يک UNIVAC 1107 در آگوست 1963 با تخفيفي قابل توجه خريد به علت اينکه دال تحت قرارداد با Univac سيمولا1 را تکميل کرد. تکامل بر پايه کامپايلر الگول60 UNIVAC استوار بود . سيمولا1 در ژانويه 1975 روی UNIVAC 1107 به طور کامل قابل اجرا شد.در دو سال بعدی دال و نيگارد زمان زيادی را صرف آموزش سيمولا نمودند. سيمولا در کشورهای مختلفي در سراسر جهان گسترش يافت و سيمولا1 بعدها روی کامپيوترهای Burroughs B5500 و کامپيوتر URAL-16 روسيه ای اجرا شد.
در 1966 C.A.R Hoare مفهوم ساختن رکورد کلاس را معرفي کرد، که دال و نيگارد تعميم داده بودند با مفهوم پيشوندی و ساير ترکيب ها برای رفع نيازشان برای مفهوم پردازش کلي. دال و نيگارد در مي 1967 در السو مقاله خود راجع به اعلان کلاس و زير کلاسها در کنفرانس طرزکار زبانهای شبيه سازی فدراسيون بين المللي پردازش اطلاعات ارايه کردند.اين مقاله اولين تعريف قراردادی از سيمولا67 شد. درژوين 1967 کنفرانسي به منظور استانداردسازی و آغاز چند پياده سازی برگزار شد. دال پيشنهاد يکي کردن مفهوم نوع و کلاس را مطرح کرد. اين باعث بحثهايي جدی شد و پيشنهاد توسط هييت مديره رد شد. سيمولا67 در فوريه 1968 در اولين ملاقات گروه استاندار سيمولا به طور رسمي استانداردسازی شد.
سيمولا در ايجاد اسمالتاک و بعدها زبانهای برنامه نويسي شی گرا تاثير گذار بود. همچنين به الهام بخشيدن به مدل نقش بيروني محاسبه همزمان کمک کرد با اينکه سيمولا فقط دستورالعمل ها را حمايت مي کند نه دقيقا همزماني را.
در اواخر دهه شصت و اوايل دهه هفتاد چهار پياده سازی اصلي از سيمولا وجود داشت: -UNIVAC 1107 توسط NCC - سيستم360 و سيستم 370 توسط موسسه تحقيقاتي سويدی برای دفاع ملي - CDC 3000 توسط دانشگاه السو نصب کامپيتر مشترک بر Kjeller -TOPS-10 توسط ENEA AB اين پياده سازی ها به محدوده وسيعي از طرح های زيربنايي متصل بود.tops_10 مفهوم های عمومي، حفاظت شده و متغيرهای عضو خصوصي را پياده سازی کرد که بعدها در سيمولا87 جمع شد. سيمولا87 آخرين استاندارد است و به محدوده وسيعي از طرح های زيربنايي متصل است. سه نوع توسعه يافته اصلي وجود دارد: -سيمولا AS -سيمولا لاند -توليد يکپارچه سيستم عامل کامپيوتر در نوامبر 2001 دال و نيگارد" به خاطر معرفي مفاهيم زير مجموعه برنامه نويسي شی گرا در حين طراحي و توسعه سيمولا67" مدال جان ون نيومن IEEE را از موسسه مهندسان الکتريکط و الکترونيکي دريافت کردند، آنها در فوريه 2002 جايزه ای ام تورينگ( A.M.turing) را برای رابط برای ماشين های کامپيوتری با تاکيد بر "ايده های فوق العاده اساسي برنامه نويسي شي گرا در حين طراحي زبانهای یرنامه نويسي سيمولا1 و سيمولا67" دريافت کردند. متاسفانه نه دال ونه نيگارد هيچ يک نتوانستند در سخنراني جايزه ACM Turing ارايه دهند که زمان بندی شده بود تا به کنفرانس OOPSLA 2002 در سياتل تحويل داده شود چون هردوی آنها در فاصله حدود دو ماه از يکدکر به ترتيب در ژوين و آگوست درگذشتند. آزمايشگاه تحقيقات سيمولا يک موسسه تحقيقات است که بعد از زبان سيمولا نامگذاری شده است. نيگارد از زمان بازگشايي آن در سال 2001 مدت زماني را در آنجا گذارنده است.
[ویرایش] کد نمونه
[ویرایش] برنامه کوچک
يک فايل خالي در کامپيوتر يک برنامه کوچک در سيمولا است که به وسيله اندازه کد مبدا اندازه گيری شده است.تنها از يک چيز تشکيل شده است: يک دستور مجازی هر چند برنامه کوچک راحت تر با يک قالب تهي ارايه ميشود
Begin
End;
اين شروع به اجرا مي کند و به سرعت برنامه پايان مي يابد. اين زبان هيچ مقدار بازگشتي از خود برنامه ندارد.
[ویرایش] Hello world قديمي
تذکر! سيمولا حساس به حروف نيست. يک مثال از برنامه 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;
مثال بالا يک سوپرکلاس با دو زيرکلاس دارد_يک متد مجازی با دو اجرا وجود دارد. اجرا با اجرای برنامه اصلي شروع مي شود. سيمولا از زماني که کلاسها با متدهای مجازی خالص نمونه سازی مي شوند مفهوم کلاسهای انتزاعي را ندارند. اين بدان معني ست که در مثال بالا همه کلاسها ميتوانند نمونه سازی شوند.فراخواني يک متد مجازی خالص ممکن است يک خطای زمان اجرا به وجود آورد.
[ویرایش] فراخواني با اسم
سيمولا فراخواني با اسم را پشتيباني مي کند به همين دليل سيستم Jensen به راحتي مي تواند اجرا شود. هر چند حالت پيش فرض ارسال برای پارامتر ساده در الگول فراخواني با اسم است ولي در سيمولا فراخواني با مقدار است. کد مبدا در سيستم Jensen بايد فراخواني با نام را برای پارامترها هنگامي که به وسيله يک کامپايلر سيمولا کامپايل مي شوند مشخص کند. يک مثال بسيار ساده تر تابع جمع است ميتواند همانند ادامه توليد شود.
Real Procedure Sigma (l, m, n, u); Name l, u; Integer l, m, n; Real u; Begin Real s; l:= m; While l <= n Do Begin s:= s + u; l:= l + 1; End; Sigma:= s; End;
کد بالا فراخواني با نام را برای کنترل متغير l و عبارت u استفاده مي کند اين ، اين اجازه را مي دهد که متغير کنترلي در عبارات استفاده شوند. تذکر که استاندارد سيمولا به متغير کنترلط در حلقه for اجازه ی داشتن محدوده ای خاص را مي دهد.کد بالا سپس از يک حلقه while برای قابليت انتقال بيشتر استفاده مي کند. ادامه:

که به صورت ادامه ميتواند بسط يابد:
Z:= Sigma (i, 1, 100, 1 / (i + a) ** 2);
[ویرایش] شبيه سازی
سيمولا برنامه آماده برای انجام شبيه سازیهای رويدادهای گسسته را دارد .اين برنامه آماده شبيه سازی بر پايه امکانات شي گرای سيمولا و مفهوم دستورالعمل های آن استوار است. سام سالي و اندی در حال خريد لباس هستند. آنها بايد از يک اتاق پرو استفاده کنند.هر کدام از آنها حدود 12 دقيقه در جستجوی لباس است و سپس اتاق پرو را به طور انحصاری استفاده مي کند، هر کدام از يک توزيع نرمال پيروی ميکند. يک شبيه سازی از آزمايش اتاق پرو آنها به شکل زير است:
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;
کد اصلي با عبارت شبيه سازی برای انجام شبيه سازی شروع شده است. برنامه آماده ميتواند در هر قطعه ای استفاده شود و شبيه سازی ها هنگامي که فرد شبيه ساز شبيه سازی را انجام ميدهد حتی مي توانند تودرتو شوند. شي اتاق پرو از يک صف برای دستيابي به اتاق پرو استفاده مي کند. هنگامي که کسي اتاق پرو را نياز داشته باشد و اتاق پر باشد بايد در صف منتظر بماند. هنگامي که شخصي اتاق پرو را ترک ميکند اولي از صف خارج مي شود و بنابراين از صف در پاک مي شود. شخص قسمتي از کلاس پردازش است و کار آن توصيف استفاده ( زمان مورد نياز برای جستجوی فروشگاه و زماني که در اتاق پرو ميگذرد) و فراخواني متدها در شي اتاق پرو برای درخواست و ترک اتاق پرو است. برنامه اصلي همه اشياء را ميسازد و همه اشياء اشخاص را برای قرار دادن آنها در صف فعال مي کند. برنامه اصلي برای 100 دقيقه از زمان شبيه سازی قبل از اتمام برنامه متوقف مي شود.
[ویرایش] اينها را هم ببينيد
- Object-oriented programming
- BETA programming language (a modern successor to Simula)
- Simulation language
- ALGOL 60
[ویرایش] منبع
- Compiling Simula Early history of the development of Simula by Jan Rune Holmevik
- IBM System 360/370 Compiler and Historical Documentation The Simula Standard and other historical documentation by Peter Sylvester
[ویرایش] لينکهای اضافه
- Introduction to OOP in Simula – By J.Sklenar, based on the 1997 seminar "30 Years of Object Oriented Programming (OOP)" at the University of Malta
- How Object-Oriented Programming Started – By Dahl and Nygaard, abbrev. version of an encyclopedia article; on Nygaards home page
- Simula at the Université de Montréal Includes tutorials, documentation, and links in English and in French
- An Introduction to Programming in Simula A textbook by Rob Pooley now available as HTML

