سؤال

وهناك العديد من الطرق لتمثيل بنية البرنامج (مثل الرسوم البيانية فئة UML الخ). أنا مهتم في حالة وجود اتفاقية التي تصف البرامج في طريقة رياضية صارمة. أنا مهتم خصوصا في استخدام الرموز الرياضية لهذا الغرض.

على مثال : لتمثيل فئات كما مجموعات (الحقول، والخصائص) وظائف (التي تعمل على عناصر من مجموعات). وهناك فئة الأم الحقول هي مجموعة فرعية من الطبقة الطفل. وصفت وظائف في شبة الكود الذي يجب أن تبدو وكأنها هذا وذاك ...

هل كانت مفيدة؟

المحلول

وأنا أعرف أن Z تدوين وقد استخدمت إلى حد ما في التحقق رسميا من البرامج، مثل <وأ href = "http://www.adacore.com/home/products/sparkpro/tokeneer/" يختلط = " نوفولو noreferrer "> المشروع Tokeneer .

Z تدوين

دليل Z المرجعي

نصائح أخرى

نعم، هناك، فلويد -Hoare المنطق .

وهناك الكثير من وسيلة، ولكن أعتقد أن معظمهم من غير مريح للتعبير عن هيكل منذ هيكل في كثير من الأحيان لا expressable في المفاهيم الرياضية الافتراضية. والاستثناء الرئيسي هو بالطبع لغات برمجة وظيفية. التفكير في طيات (catamorphisme)، والجماعات، والجبر وغيرها.

لبرمجة حتمية أعرف من وجود Z، والذي يستخدم (نقية وممتدة) نظرية مجموعة امدا حساب التفاضل والتكامل و(الدرجة الأولى) المنطق المسند. ومع ذلك، لا أعتقد أنها مريحة جدا. الاتجاه الصاعد الوحيد من استخدام الرياضيات للتعبير عن الهيكل هو حقيقة أن كنت تستطيع أن تثبت الأشياء حول هذا الموضوع. ولكن إذا كنت تريد أن تفعل ذلك، نلقي نظرة على JML، المواصفات # أو ايفل.

ويعتمد على ما كنت تحاول إنجاز، ولكن السير في هذا الطريق مع لغات معينة يمكن ان تحصل في ورطة.

وعلى سبيل المثال، راجع الدائرة القطع الناقص مناقشة على C ++ التعليمات لايت.

<اقتباس فقرة>   

وهذا الكتاب يطبق طريقة استنتاجي   لبرمجة برامج الانتساب   مع مجردة الرياضية   النظريات التي تمكنهم من العمل. [...]

وأعتقد أن عناصر البرمجة عن طريق الكسندر ستيبانوف وبول McJones، جميلة قريبة من ما كنت تبحث عنه.

<اقتباس فقرة>   

المفاهيم

     

ومفهوم هو وصف ل   متطلبات على واحد أو أكثر من أنواع   ذكر من حيث وجود و   خصائص الإجراءات، نوع   الصفات، ونوع الوظائف المحددة   على أنواع.

وZ، والذي سبق ذكره، هو الى حد كبير ما تصفون. هناك بعض المتغيرات منه لنمذجة وجوه المنحى، ولكن أعتقد أنك يمكن أن تحصل بعيدا جدا مع "Z في مستوى" المخططات إذا كنت ترغب في نموذج الطبقات.

وهناك أيضا سبيكة ، وهو أحدث ومستوحاة من Z. تدوين منه هو ربما أقرب قليلا إلى كائن -اتجاه. بل هو أيضا analysable، أي يمكنك التحقق من النماذج التي خلق ما إذا كانت تتوفر فيهم شروط معينة، ولكن لا يمكن إثبات أن خصائص الانتظار، مجرد محاولة لدحض ضمن نطاق محدود.

البرمجيات يمكن الاعتماد عليها من خلال تصميم هو مقدمة لطيفة إلى سبيكة وأمثالها، جنبا إلى جنب مع جدول أدوات مماثلة المتاحة.

أنت تبحث عن البرمجة الوظيفية. هناك عدة لغات البرمجة الوظيفية، وهم وكلها ترتكز على نظرية رياضية أساسية تسمى امدا حساب التفاضل والتكامل . البرامج المكتوبة بلغة البرمجة الوظيفية مثل LISP هي التمثيل الرياضي لأنفسهم. ؛ -)

وهناك اللغة الرياضية التي تصف الواقع برنامج أو بالأحرى انها عمليات. كنت تأخذ الحالة الأولية ومن ثم تحويل هذه الدولة حتى تصل إلى الهدف المنشود الدولة. التحولات تسفر رمز البرنامج الذي يجب أن يتم تنفيذ.

وانظر rel="nofollow مقالة ويكيبيديا عن هور المنطق .

والفكرة الأساسية هي أن لكل وظيفة (بغض النظر إذا كنت وضعت ذلك في فئة أو إلى وظيفة النمط القديم)، لديك ما قبل وبعد حالة. على سبيل المثال، يمكن أن يكون شرطا مسبقا أن لديك صفيف الذي يحتوي على عناصر >= 0. ما بعد الشرط هو أن كل عنصر [أنا] يجب كتبها <= عنصر [ي] لكل I <= ي.

والوصف المعتاد ستكون "وظيفة يفرز مجموعة". ولكن مصطلحات رياضية تسمح لك لتحويل المدخلات (والتي يجب أن تطابق مسبق) في الإخراج (التي يجب أن تطابق postcondition).

وانها قليلا غير عملي للاستخدام، خاصة بالنسبة للبرامج أكثر تعقيدا ولكن بعض الأمثلة هي جميلة رائعة. في كثير من الأحيان، وتحصل على كود المدمجة حقا نتيجة التي تبدو معقدة جدا ولكنها تعمل في المحاولة الأولى.

وأود أن أقترح <م> الجبر البرمجة . إنها مقاربة حسابية لبرامج، وذلك باستخدام الجبر العلائقي ، و <لأ href = "HTTP: // en.wikipedia.org/wiki/Galois_connection "يختلط =" نوفولو "> اتصالات جالويس .

إذا كان لديك مزيد من الفائدة حول هذا الموضوع، يمكنك العثور على ورقة مذهلة، <وأ href = "http://www.iis.sinica.edu.tw/~scm/2010/programming-from-galois-connections / "يختلط =" نوفولو "> هنا ، عن طريق شين تشنغ مو، وخوسيه نونو أوليفيرا (<لأ href =" http://www3.di.uminho.pt/~jno/ps/wg21-65a -sl.pdf "يختلط =" نوفولو "> الشرائح ).

وعن طريق الجبر العلائقي والمنطق الأولى، وأيضا تضافر الجهود لطيفة مع سبيكة و البرمجة الوظيفية، و تصميم بالعقود (تطبق بسهولة إلى كائن المنحى البرمجة).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top