سؤال

أنا على دراية وجوه المنحى العمارة ، بما في ذلك استخدام تصميم أنماط الطبقة المخططات التصور ، وأنا أعرف من service-oriented architecture مع العقود البروتوكول الارتباطات ، ولكن هل هناك أي شيء مميز عن هندسة البرمجيات لنظام كتب في البرمجة الوظيفية اللغة ؟

وأنا أعلم أن FP وقد استخدمت متوسطة الحجم إلى مشاريع واسعة النطاق.غراهام بول كتب أول تجسيد ياهو!متجر في Common Lisp.بعض اللثغة تطوير أنظمة معقدة.الذكاء الاصطناعي والنظم المالية كتب في اللغات الوظيفية يمكن الحصول على كبيرة جدا.أنهم جميعا لديهم على الأقل نوع من الملازمة العمارة, رغم أن, أنا أتساءل عما إذا كان لديهم أي شيء مشترك ؟

ما بنية على أساس تقييم التعبيرات تبدو وكأنها ؟ هي FP أبنية أكثر composable?

تحديث: كايل ذكرتني SICP مورد جيد عن هذا الموضوع.

تحديث 2: لقد وجدت وظيفة جيدة حول هذا الموضوع: كيف البرمجة الوظيفية تؤثر على بنية الرمز ؟

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

المحلول

القاسم المشترك في "العمارة" من المشاريع التي تستخدم اللغات الوظيفية هو أنها تميل إلى أن تكون فصل في طبقات الجبر بدلا من النظم الفرعية في النظم التقليدية العمارة المعنى.

كبيرة ومن الأمثلة على هذه المشاريع تحقق XMonad, يي, ، جديد.إذا كنت تدرس كيف يتم منظم ، ستجد أنها تتكون من طبقات بعملية هيكل مع بعض combinator الغراء في بين.

ننظر أيضا في سكالا التجربة الورق الذي يحدد بنية حيث نظام يتكون من مكونات مجردة على تبعيات.

نصائح أخرى

أنا أعمل حاليا على كتاب "العمارة والتصميم في البرمجة الوظيفية".ويصف العديد من أنماط التصميم والنهج التي توجد في نقي FP العالم (الابتدائي لغة هاسكل), ولكن ليس فقط.كتاب يعلمك كيفية بناء الكبيرة التطبيق من الصفر مع الطاهرة و النجسة الدولة خاصية تعدد, الشبكة, بيانات, واجهة المستخدم الرسومية, كيفية تقسيمه إلى طبقات الحصول على البساطة.لكنه يظهر أيضا كيف أن نموذج المجالات و اللغات كيفية تنظيم و تصف بنية التطبيق كيفية اختبار و حتى أكثر من ذلك.

قائمة من الموضوعات تشمل:

  • نهج العمارة النمذجة باستخدام الرسوم البيانية;
  • متطلبات التحليل ؛
  • جزءا لا يتجزأ من DSL المجال والنمذجة.
  • الخارجية DSL التصميم والتنفيذ ؛
  • Monads كما الفرعية مع الآثار ؛
  • مجانا monads وظيفية واجهات;
  • Arrowised eDSLs;
  • انعكاس التحكم باستخدام مجانا بعملية eDSLs;
  • برنامج المعاملات الذاكرة ؛
  • العدسات.
  • الدولة, القارئ, الكاتب, RW, ST monads;
  • نجس الدولة:IORef, MVar, STM;
  • خاصية تعدد و المتزامنة المجال والنمذجة.
  • واجهة المستخدم الرسومية;
  • سريان التيار techiques والنهج مثل UML, صلب, فهم ؛
  • التفاعل مع نجس الفرعية.

الكتاب يستند إلى هاسكل المشاريع أنا البحث ، خصوصا SCADA التطبيق أندروميدا.رمز لهذا الكتاب متوفر هنا.بينما الكتاب هو قيد التطوير (سيتم القيام به حتى في عام 2017), يمكنني أن أوصي لكم للتعرف على مقالتي "العمارة والتصميم في FP" هنا (Rus).

التحديث

أنا مشترك كتابي على الانترنت (أول 5 فصول). انظر ما بعد رديت على

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

هنا مثال بسيط جدا.هذه ليست وظيفية بحتة كما أنه لا تغيير الدولة, لكنه شائع بما فيه الكفاية:

(define (make-counter)
  (let ((count 0))
    (lambda ()
      (set! count (+ count 1))
      count)))

(define x (make-counter))

(x) returns 1

(x) returns 2

...etc...

لذلك لدينا وظيفة ، جعل مكافحة هذا يعود آخر وظيفة له الدولة من مواجهة الداخل.يمكننا الاتصال التي تم إنشاؤها حديثا مكافحة ومراقبة التغيير في الداخل.

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

لقد عملت مع بعض إلى حد كبير المشاريع الفنية.وعادة ما تقع في معسكرين (على الأقل تلك التي كنت قد استخدمت):

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

لقد طبعت وبدا أكثر أنماط التصميم في Ocaml, و أنها تستخدم وحدات functors (والأشياء) لإعادة طبيعية أنماط التصميم تعودنا على.انها مثيرة للاهتمام, ولكن أعتقد أنها تستخدم الكائنات أيضا كثيرا أرى فائدة من اللغات الوظيفية.FP جدا composable جزء من الطبيعة.أعتقد أن الجواب القصير هو استخدام وحدات و functors.

مشروعي الحالي هو كبير جدا ، ونحن فصل كل وحدة من الملفات --ضمنا في ocaml.كنت أبحث عن مورد شامل كذلك قد يكون بعض وجهات نظر بديلة أو بعض الأفكار حول ناجحة حقا التصميم التي خرجت من المشروع.

نأمل أن لا يفوت عرضية, ولكن ربما للاهتمام لأي شخص تصفح الإجابة على هذا السؤال هو هذا العرض أنماط التصميم في البرمجة الديناميكية بواسطة بيتر نورفيج.

أعتقد أن هذا يمكن أن تساعد ؛

بعض أنماط تختفي-أن أنها المدعومة مباشرة من قبل ميزات لغة بعض أنماط أبسط أو تركيز مختلف ، بعض هي أساسا دون تغيير.

[الهدف-2002-005] جريجوري ت.سوليفان ، البرمجة المتقدمة ميزات اللغة قابل للتنفيذ أنماط التصميم "أفضل أنماط من خلال التفكير

22 مارس 2002

تصميم أنماط الكتاب [GOF95] يعرض 24 مرة-اختبار أنماط دائما تظهر في تصميم نظم البرمجيات.كل نمط قدمت مع وصف مشكلة تصميم نمط عناوين ، فضلا عن عينة تنفيذ التعليمات البرمجية و اعتبارات التصميم.هذه الورقة يستكشف كيف أنماط من "عصابة الأربعة" ، أو "صندوق القناص" الكتاب ، كما وغالبا ما تسمى تظهر عندما مماثلة يتم معالجة المشاكل باستخدام ودينامية, العليا, وجوه المنحى لغة البرمجة.بعض أنماط تختفي -- أنها المدعومة مباشرة من قبل اللغة ميزات بعض أنماط هي أبسط أو يكون تركيز مختلف ، أساسا دون تغيير.

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