PC2st
پنج شنبه 07 مرداد 1389, 13:20 عصر
این گفتگو برای روشن شدن موضوع زیر است:
. ++C بیش از شیئگرائی به Generic Programming اهمیت میدهد اكثر زبان generic رو پشتيباني مي كنند يعني چي اهميت مي دهد اونم مثل زبانهاي ديگه رفتار ميكنه.برنامهنویسی شیئگرا به چه میگویند؟
به برنامهای که abstraction و encapsulation و inheritance و polymorphism رعایت شده باشد.
دوستان عزیز، توجه داشته باشید که در صورت استفاده از templateها ما لازم نیست که حتماً تمام قواعدی که در روش شیئگرا گفته شده را رعایت کنیم. در STL قواعد شیئگرا رعایت نشده، چون polymorphism ای که در مفهوم oop است، رعایت نشده... در STL از ترکیب برنامهنویسی generic بعلاوهٔ abstraction و encapsulation و inheritance استفاده شده... متاسفانه بعضیها فکر میکنند که اگر در برنامهای abstraction و encapsulation و inheritance استفاده شده، پس آن برنامه OOP است، در حالیکه اینطور نیست و شرایط OOP کاملا ارضا نشده (فاقد polymorphism).
چرا اصلاً oop به polymorphgism اهمیت میدهد؟ در روش oop همهٔ کلاسها باید دارای یک تابع مخرب مجازی (virtual) باشند و چون اکثر افراد دلیل آنرا میدانند پس نیازی نیست تا توضیح بیشتری بدهم.
کافی است به STL نگاه بیاندازید. نکتهٔ آخر اینکه، همهٔ containerهای stl مثل vector و list و string و ... بخاطر ارثبری طراحی نشدند، بخاطر همین نبود virtual destructor در کلاس... پس همانطور که میبینید شیئگرا نیستند. حالا فکر کنم منظور من را از «به Generic Programming اهمیت میدهد» را متوجه شده باشید.
این موارد off-topic است ولی برای دفاع از خود، مجبورم اینجا بنویسم (ای کاش آن تاپیک قفل نمیشد):
چرا شلوغش مي كنيد اينا كه معجزه نيست اون بنده خدا فكر ميكنه اينا چي هست.
مثلاً توابع inline چيز خاصي داره كه يادگيريش بخاد واسه يادگيرنده وقت گيره باشه.آن دوست عزیز گفته بودند که مگر فقط OOP نیست؟ من هم گفتم نه.
و در ادامهٔ آن هم توضیح دادم که توابع inline کاملا ضد قواعد OOP هستند.
حالا میشود بپرسم در کجای کار من شلوغ کردهام؟ اصلا چه چیزی را؟
در ضمن علاوه بر oop، روش template metaprogramming هم در ++C است.
همچین functional programming که در C# و بخصوص #F میتواند استفاده قرار گیرد. یا روش reflective programming ...
پس باز هم میگویم، برنامهنویسی فقط OOP نیست.
حالا از شما میپرسم که چرا این پاسخ من شلوغ کاری است؟! من از این حرف شما تعجب میکنم.
. ++C بیش از شیئگرائی به Generic Programming اهمیت میدهد اكثر زبان generic رو پشتيباني مي كنند يعني چي اهميت مي دهد اونم مثل زبانهاي ديگه رفتار ميكنه.برنامهنویسی شیئگرا به چه میگویند؟
به برنامهای که abstraction و encapsulation و inheritance و polymorphism رعایت شده باشد.
دوستان عزیز، توجه داشته باشید که در صورت استفاده از templateها ما لازم نیست که حتماً تمام قواعدی که در روش شیئگرا گفته شده را رعایت کنیم. در STL قواعد شیئگرا رعایت نشده، چون polymorphism ای که در مفهوم oop است، رعایت نشده... در STL از ترکیب برنامهنویسی generic بعلاوهٔ abstraction و encapsulation و inheritance استفاده شده... متاسفانه بعضیها فکر میکنند که اگر در برنامهای abstraction و encapsulation و inheritance استفاده شده، پس آن برنامه OOP است، در حالیکه اینطور نیست و شرایط OOP کاملا ارضا نشده (فاقد polymorphism).
چرا اصلاً oop به polymorphgism اهمیت میدهد؟ در روش oop همهٔ کلاسها باید دارای یک تابع مخرب مجازی (virtual) باشند و چون اکثر افراد دلیل آنرا میدانند پس نیازی نیست تا توضیح بیشتری بدهم.
کافی است به STL نگاه بیاندازید. نکتهٔ آخر اینکه، همهٔ containerهای stl مثل vector و list و string و ... بخاطر ارثبری طراحی نشدند، بخاطر همین نبود virtual destructor در کلاس... پس همانطور که میبینید شیئگرا نیستند. حالا فکر کنم منظور من را از «به Generic Programming اهمیت میدهد» را متوجه شده باشید.
این موارد off-topic است ولی برای دفاع از خود، مجبورم اینجا بنویسم (ای کاش آن تاپیک قفل نمیشد):
چرا شلوغش مي كنيد اينا كه معجزه نيست اون بنده خدا فكر ميكنه اينا چي هست.
مثلاً توابع inline چيز خاصي داره كه يادگيريش بخاد واسه يادگيرنده وقت گيره باشه.آن دوست عزیز گفته بودند که مگر فقط OOP نیست؟ من هم گفتم نه.
و در ادامهٔ آن هم توضیح دادم که توابع inline کاملا ضد قواعد OOP هستند.
حالا میشود بپرسم در کجای کار من شلوغ کردهام؟ اصلا چه چیزی را؟
در ضمن علاوه بر oop، روش template metaprogramming هم در ++C است.
همچین functional programming که در C# و بخصوص #F میتواند استفاده قرار گیرد. یا روش reflective programming ...
پس باز هم میگویم، برنامهنویسی فقط OOP نیست.
حالا از شما میپرسم که چرا این پاسخ من شلوغ کاری است؟! من از این حرف شما تعجب میکنم.