هل يمكن أن توضح الفرق بين البرمجة الإجرائية و OOP؟


الاجابه 1:

السؤال الأصلي:

هل يمكن أن توضح الفرق بين البرمجة الإجرائية و OOP؟

إجابة:

أولاً وقبل كل شيء ، دعونا نحدد معنى البرمجة الإجرائية والموجهة نحو الكائنات.

التعريف - ماذا تعني اللغة الإجرائية؟ اللغة الإجرائية هي نوع من لغات برمجة الكمبيوتر التي تحدد سلسلة من الخطوات والإجراءات جيدة التنظيم ضمن سياق البرمجة الخاص بها لإنشاء برنامج. أنه يحتوي على ترتيب منهجي للبيانات والوظائف والأوامر لإكمال مهمة أو برنامج حسابي. تُعرف اللغة السابقة أيضًا باسم اللغة الأساسية. تشرح توبيكوبيديا اللغة الإجرائية لغة إجرائية ، كما يوحي الاسم ، وتعتمد على إجراءات محددة مسبقًا ومنظمة جيدًا ، وظائف أو إجراءات فرعية في بنية البرنامج من خلال تحديد جميع الخطوات التي يجب على الكمبيوتر اتخاذها للوصول إلى الحالة أو المخرجات المطلوبة. تفصل اللغة الإجرائية بين برنامج ضمن المتغيرات والوظائف والبيانات والمشغلين الشرطيين. يتم تنفيذ الإجراءات أو الوظائف على البيانات والمتغيرات لأداء المهمة. يمكن استدعاء / استدعاء هذه الإجراءات في أي مكان بين التسلسل الهرمي للبرنامج ، والإجراءات الأخرى كذلك. يحتوي البرنامج المكتوب بلغة إجرائية على إجراء واحد أو أكثر. تعد اللغة الاحترافية واحدة من أكثر أنواع لغات البرمجة المستخدمة شيوعًا ، مع لغات بارزة مثل C / C ++ و Java و ColdFusion و PASCAL.

الآن ، دعنا نعرّف البرمجة الموجهة للكائنات.

التعريف - ماذا تعني البرمجة الموجهة للكائنات (OOP)؟ البرمجة الموجهة للكائنات (OOP) هي نموذج برمجة برمجي مبني حول الكائنات. يقوم هذا النموذج بتقسيم البيانات إلى كائنات (حقول البيانات) ويصف محتويات السلوك وسلوكه من خلال إعلان الفئات (الأساليب). تتضمن ميزات OOP ما يلي: التغليف: هذا يجعل بنية البرنامج أسهل في الإدارة لأن تنفيذ كل كائن والحالة مخفية خلفه حدود واضحة المعالم. تعدد الأشكال: هذا يعني أن الكيانات المجردة يتم تنفيذها بطرق متعددة. الوراثة: يشير هذا إلى الترتيب الهرمي لشظايا التنفيذ. البرمجة الموجهة للبرامج تتيح برمجة مبسطة. تشمل فوائده إعادة الاستخدام ، إعادة التوسعة ، القابلية للتوسعة ، الصيانة والكفاءة. تيكوبيديا تشرح البرمجة الموجهة للكائنات (OOP) لقد كان OOP نموذج البرمجة المفضل للعقد الماضي أو أكثر. يمكّن التصميم المعياري لـ OOP المبرمجين من إنشاء برامج في مجموعات يمكن التحكم فيها بدلاً من الكميات الكبيرة من الكود المتسلسل. أحد مزايا OOP الكبيرة هو قابلية التوسع ، مع عدم وجود قيود محددة على الكائنات والتعاريف. كما أن فصل البيانات عن الطريقة يمنع حدوث مشكلة شائعة في لغات البرامج الخطية الأقدم. إذا ظهر خطأ في رمز خطي ، فيمكن ترجمته من خلال نظام وإنشاء كتل من الأخطاء يصعب تتبعها. وعلى العكس من ذلك ، فإن برنامج OOP ، بفصله عن الطريقة والبيانات ، غير معرض لمثل هذه الأخطاء المنتشرة. وتشمل لغات OOP الشعبية Java ، ومجموعة C من اللغات ، و VB.NET Shop ، و Python.So التي يطلق عليها لغات OOP "البحتة". تشمل سكالا وروبي وإيفيل وجادي و سمولتك وإيميرالد.

مصدر التعاريف يأتي من ما هو البرمجة الشيئية (OOP)؟ - التعريف من Techopedia وما هي اللغة الإجرائية؟ - التعريف من Techopedia

الآن. دعونا ننظر في تنفيذ الاختلاف الحكيم.

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

قررت استخدام البرنامج التعليمي light Blinking كأساس لأنه أحد التطبيقات الأساسية.

/ / تعمل وظيفة الإعداد مرة واحدة عندما تضغط على إعادة التعيين أو تشغل لوحة الإعداد الفارغة () {// تهيئة دبوس رقمي LED_BUILTIN كإخراج. pinMode (LED_BUILTIN ، OUTPUT) ؛ } // يتم تشغيل وظيفة الحلقة مرارًا وتكرارًا إلى الأبد حلقة باطلة () {digitalWrite (LED_BUILTIN، HIGH)؛ // تشغيل مصباح LED (ارتفاع مستوى الجهد) تأخير (1000) ؛ // انتظر كتابة رقمية ثانية (LED_BUILTIN، LOW)؛ / / أطفئ مصباح LED بجعل الجهد المنخفض (1000) ؛ // الانتظار لثانية واحدة }

الآن ، اسمحوا لي أن أشرح رمز أفضل قليلا. لديك وظيفتين الإعداد وحلقة. يتم استدعاء الحلقة مرارًا وتكرارًا ويتم استدعاء الإعداد مرة واحدة فقط. يمكنك إرسال أمر digitalWrite إلى مؤشر LED لوضع تصنيف الطاقة في الأعلى والمنخفض على التوالي. التأخير هو مدة بقاء الضوء أو إيقافه ، في هذه الحالة ، 1000 مللي ثانية أو حوالي ثانية واحدة. جميلة إلى الأمام إلى الأمام ، ولكن هذا يدل على أنك أساسيات البرمجة الإجرائية. تكتب إجراء أو تعليمة ويتكرر ذلك حتى ينتهي. لا يوجد أي تعقيد إضافي للرمز المطلوب.

C # و OOP سبيل المثال الوقت.

باستخدام النظام ؛ باستخدام System.Collections.Generic. باستخدام System.Linq. باستخدام System.Text. مساحة الاسم oops {public class customer {// Member Variables public int CustID؛ اسم السلسلة العامة؛ عنوان السلسلة العامة ؛ // constuctor لتهيئة الحقول customer () {CustID = 1101؛ اسم = "توم". عنوان = "USA". } // طريقة عرض سجلات العملاء (وظائف) عرض void displayData () {Console.WriteLine ("Customer =" + CustID)؛ Console.WriteLine ( "اسم =" + اسم)؛ Console.WriteLine ( "عنوان =" + عنوان)؛ } // رمز نقطة الدخول}} برنامج الفصل الدراسي {static void Main (السلسلة [] args) {// object instantiation customer obj = new customer ()؛ // استدعاء الأسلوب obj.displayData () ؛ // الحقول التي تستدعي Console.WriteLine (obj.CustID) ؛ Console.WriteLine (obj.Name)؛ Console.WriteLine (obj.Address)؛ }}}

هنا مثال كلاسيكي على OOP. لديك فئة عميل تعرّف كل الكائنات المتاحة لك. لا يزال لديك وظائف / طرق للكتابة. لكن الفرق الأساسي هو أنك تريد تقسيم كل طريقة / وظيفة حسب ما يفترض القيام به. من هناك ، طريقتك الرئيسية هي نقطة دخول البرنامج ، وبالتالي يجب أن يكون لديك رمز حرج هنا.


الاجابه 2:

مفهوم OOPS في جاوة

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


الاجابه 3:

البرمجة الإجرائية هي البرمجة مع الإجراءات كآلية التجريد الأولية. هوه.

ما هو الإجراء؟ إنه عبارة عن كتلة برمجية محددة يمكن استدعاءها بالاسم ، وتتلقى القيم والمراجع من السياق الذي يتم الاحتجاج به ، والمعلمات ، وقد تُرجع القيم والمراجع إلى هذا السياق بعد القيام ببعض الأعمال.

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

ليس من الضروري تمامًا بالنسبة للنموذج ، لكن لا يمكنني التفكير في لغة تستخدم الإجراءات كآلية تجريد مبدئية لا تحتوي أيضًا على تدفق للتحكم باستخدام نفس المجموعة شبه السحرية المعروفة اشياء مثل:

إذا (شرط) {doThisThing ()} آخر {doThatThing ()}

و

بينما (شرط) {keepOnDoingThisThing ()}

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

اختيار البدائل

  • إذا كان الأمر كذلك (خياران ، استنادًا إلى الحالة المنطقية) أو المفتاح (العديد من الخيارات ، استنادًا إلى أي مجموعة)

تكرار

مع حدود معروفة:

  • للحلقات (عادةً ما يكون عدد معين من التكرارات) حلقات foreach (تتكرر عدة مرات مثل حجم بعض المجموعات ، وربما على الأعضاء أنفسهم)

بحدود مخصصة:

  • بينما تفعل (0 أو أكثر من التكرارات) تفعل بينما (تكرار واحد أو أكثر)

و للأسف لا تحظى بشعبية:

  • حلقة الخروج عند

الذي ينفذ الكود قبل الخروج مرة واحدة على الأقل ، والكود بعد الخروج صفر أو أكثر.

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

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

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

برمجة الكائنات الموجهة هي البرمجة مع الكائنات كآلية التجريد الأساسية. هوه.

ما هو الكائن؟ إنه كيان حسابي طويل الأمد يمكن أن يُطلب منه القيام بشيء ما. نموذج أصلي ومثال على البرمجة الموجهة للكائنات هو Smalltalk. في Smalltalk ، كل قيمة هي كائن (أو على الأقل ، يتم إنشاء القيم القليلة للغاية التي ليست كائنات لتبدو كما لو كانت). تتم عملية الحساب عن طريق الكائنات التي ترسل رسائل إلى بعضها البعض. تختلف تطبيقات Smalltalk إلى حد ما ، لكن هذه هي الفكرة العامة:

كائنات مجموعة حولها في الذاكرة. عندما يريد كائن من كائن آخر أن يفعل شيئًا ما ، فإنه ينشئ رسالة تطالب بذلك ، ويرسلها إلى الكائن المقصود. الرسائل كائنات. الكائنات هي المسؤولة عن الحفاظ على الحالة ، أي أنها تحتوي على متغيرات. أنها لا تعمل رمز. عندما يستلم كائن رسالة ، ينقلها إلى فئتها. الطبقات هي كائنات. الفصول مسؤولة عن إنشاء وإدارة الكائنات ، فهي لا تعمل على تشغيل التعليمات البرمجية. ينقل الفصل الرسالة إلى ملف التعريف الخاص بها. Metaclasses هي الكائنات. Metaclasses هي المسؤولة عن إدارة الأساليب. تبحث metaclass في أساليبها وتجد الطريقة المناسبة للرسالة. طرق الكائنات. على طول الطريق ، تم تزيين كائن الرسالة بمجموعة متنوعة من المعلومات الإضافية ، بما في ذلك إشارة إلى الكائن الذي تلقى الرسالة. الطريقة مسؤولة عن تشغيل التعليمات البرمجية ، وتستخدم أي وسيطات تم تمريرها في الرسالة الأصلية للقيام بذلك. تقوم الطريقة بتشغيل التعليمات البرمجية الخاصة بها في سياق الكائن الذي تلقى الرسالة. رمز الطريقة هو مجرد برنامج نصي لرسائل لإنشاء وإرسالها إلى كائنات أخرى. إذا لم تتمكن metaclass من العثور على طريقة لمطابقة الرسالة ، فسيبدأ البحث في البحث عن metaclasses للفئات الرئيسية لفئة الكائن. وهذا ما يسمى "الميراث".

قد يكون تطبيق أو آخر يحتوي على أساليب معينة مضمنة للتنفيذ لأسباب الكفاءة ، ولكن من حيث المبدأ يمكن لنظام Smalltalk بأكمله أن يعمل بهذه الطريقة.

تعني البرمجة ، في Smalltalk ، مزيجًا من رسائل البرمجة النصية التي يتم إرسالها لتذهب في الأساليب ، وإنشاء فئات جديدة (مع metaclasses) لأساليب العيش فيها ، وهذا ينطبق على ما يعادل تدفق التحكم كما هو الحال في أي شيء آخر.

في لغة إجرائية ، يمكنك اتخاذ بعض الإجراءات على كل عضو في مجموعة برمز يشبه هذا الرمز الزائف:

foreach (theThing in aCollection) doThisActionOn (theThing)

في Smalltalk النموذجي ، قد يبدو النص المكافئ لإرسال الرسائل كما يلي:

aCollection do: [aThing | aThing takeThisAction].

هنا ، takeThisAction هي رسالة يتم إرسالها إلى كل كائن aThing في المجموعة aCollection. (بالمناسبة ، الكود الموجود داخل الأقواس المربعة عبارة عن كتلة ، وهو ما يسميه Smalltalk lambda. إنه كائن.) إذا قارنا الاثنين ، يمكننا أن نرى بعض الخصائص الحيوية للبرمجة الموجهة للكائنات على عكس الإجراءات الإجرائية:

  • في الكود الإجرائي ، نختار كيفية اجتياز أعضاء المجموعة ، نختار آلية التوقع. في التعليمة البرمجية للكائن الموجه ، نطلب من المجموعة إجراء عملية اجتياز ، لا نعرف كيف تفعل ذلك. مجرد رمز. لا نعرف كيف ستفسره الكائنات الموجودة داخل المجموعة.

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