سيمولا (لغة برمجة)

برنامج الحد الأدنى

أن ملف الحاسب الفارغ computer file يكون برنامج الحد الأدنى في سيمولا. مقاس عن طريق الحجم للكود مصدريsource code انه يتألف من شيء واحد فقط وهو بيان (statement) الدمية.
وعلى كل حال برنامج الحد الأدنى بشكل مريح يمثل بكتلة فارغة:
BeginEnd;
يبدأ تنفيذ وينهي فورا , اللغة لايكون لها أي عائد (return value) من البرنامج نفسة.

كلمة مرحباً الكلاسيكية

ملحوظة ان سيمولا حساس لحالة الأحرفcase-insensitive. مثال لبرنامج مرحباً
ياعالم (Hello world program) في سيمولا:
Begin
   OutText ("Hello World!");
   Outimage;
End;

الطبقات ، والفئات الفرعية وطرق الظاهرية

مثال أكثر واقعية للفئات[1]:1.3.3, 2, والفئات الفرعية [1]:2.2.1 والطرق الظاهرية [1]:2.2.3:
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;
المثال أعلاه يملك واحداً من الفئة العظمىsuper class (الشكل المنقوش) مع اثنين من الفئات الفرعية (subclasses) (شار والخط). وهناك طريق ظاهرية واحدة مع اثنين من التطبيقات implementations. التنفيذ يبدأ تنفيذ البرنامج الرئيسي. سيمولا ليس لديه مفهوم فئات مجردة الطبقات abstract classesمع أساليب الظاهرية البحتة pure virtual methodsيمكن تمثيلة instantiated. وهذا يعني أنه في المثال أعلاه جميع الطبقات يمكن تمثيلها. وسوف يدعو الطريقة الظاهري الصرفة (pure virtual method) ولكن على اية حال سوف ينتج خطأrun-time error.

نداء بالاسم

يدعم سيمولاالنداء بالاسم call by name[1]:8.2.3 ولذلك يمكن بسهولة لجهاز جينسن Jensen's Device ان ينفذ.على اية حال , طور الانتقال الافتراضي لأجل المحيط البسيط يكون هو النداء بالقيمة call by value ,وهو عكس ALGOL الذي يستخدم النداء بالاسم (call by name). الكود المصدري لجهاز جينسنز Jensen's Device يوجب نداء بالاسم دعوة المحيط عندما يطلبها مترجم سيمولا.
مثال اخر ابسط بكثير وهو للوظيفة الحسابية(summation function∑) الذي يمكن تطبيقه كما يلي :
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;
المثال بالأعلى يستخدم نداء بالاسم call by name للتحكم بالمتغير (K) والمعبر U)). وهذا يسمح بالتحكم بالمتغير عن طريق المعبر.
ملحوظة معايير سيمولا تسمح لقيود محددة في التحكم بالمتغير في حلقة واحدة (for loop).الكود الذي بالأعلى عندما تكون الحلقة في أقصى قابلية لها.
ما يلي :
يمكن تنفيذه كالتالي :
Z = Sigma (i, 1, 100, 1 / (i + a) ** 2);

المحاكاة

يتضمن سيمولامجموعة من المحاكات لفعل محاكاة منفصلة الحدث (discrete event simulations). هذه المجموعة مبنية على مفهوم ميزات والروتين البرمجة كائنية التوجه (object oriented) التابع لسيمولا.
سام، سالي، واندي يتسوقون لشراء الملابس. يجب عليهم التشارك في غرفة واحدة لقياس الملابس. كل واحد منهم يستعرض المتجر لمدة 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;
وتعد الكتلة الرئيسية الغير مسبوقة للمحاكاة هي تمكين المحاكاة. ويمكن استخدام.وحزمة المحاكاة يمكن استخدامها في الكتلة والمحاكاة ويمكنأنتتداخلحتىعندمانحاكيشخصيعمل المحاكاة.
العقبة الرئيسية للمحاكاة هي تمكين المحاكاة.وحزمة المحاكاة يمكن استخدامها في الكتلة والمحاكاة ويمكن أن تتداخل حتى عندما نحاكي شخص يعمل المحاكاة.
الكائن هو غرفة القياس يستخدم قائمة الانتظار(door) للسماح له بالدخول إلى غرفة القياس. عندما يطلب شخص ما غرفة القياس وتكون مشغولة يجب أن ينتظر في قائمة الانتظار هذه (Wait (door)). وعندما يقوم شخص ما بالخروج من غرفة القياس الأول (اذا وجد) يتم تحريرها من قائمة الانتظار (Activate door.first) وإزالتها من قائمة الانتظار وفقا لذلك الباب (door.First.Out).
الشخص هوفئة فرعية من عملية ونشاطها يوصف بهانتظر(الوقت المتسغرق في استعراض المتجر والقت الذي قضي في غرفة قياس الملابس) ويستعد يأساليب الكائن المستخدم لغرفة القياس لطلب وترك غرفة القياس.
البرنامج الرئيسي يخلق كل الكائنات وينشط جميع كائنات الشخص لوضعها في قائمة الانتظارالحدث. البرنامج الرئيسي ينتظر100 دقيقة من الوقت قبل أنهاء برنامج المحاكاة.