2-2-2- نام درس: برنامهسازي پيشرفته
1401/09/21 12:50فصل قبل
سرفصل: توابع (Functions)
مطلب درسي: توابع خوداتکاء (Recursive)
به زبان ساده ميتوان گفت توابع خوداتکاء (که از سر مسامحه در بعضي از متون به «توابع بازگشتي» ترجمه شدهاند) توابعي هستند که براي حل مسئلهاي که به آنها داده ميشود به طور خوداتکاء از قابليتهاي خودشان استفاده ميکنند.[1] به زبان ديگر اين توابع متکي به نفس بوده و به قابليتهاي دروني خويش بازگشت ميکنند! اين توابع عليرغم مسائل پيچيدهاي که حل ميکنند، به نسبت توابع مشابه تکرارشونده (Iterative) ، غالباً حجمي کم، اما پيچيدگي (هزينه) اجرايي بيشتري دارند.
به دليل همين خصوصيات، مهندسين کامپيوتري که آگاه و توانمند هستند در مواقعي که حل يک مسئله به صورت عادي (تکرارشونده) مستلزم هزينههاي تحليل و پيادهسازي زيادي است، به سراغ روشهاي خوداتکاء ميروند.
در جامعه جهاني نيز ملتها و کشورهاي آگاه و توانمند، داراي روحيه اتکاي به نفس و استقلال طلب نسبت به جوامع ديگر هستند. اين کشورها در مواقعي که به هر دليل تعامل عادي با ساير کشورها برايشان هزينههاي زيادي داشته باشد، با بهرهگيري از روشهاي خوداتکاء سعي در حفظ و تضمين استقلال، عزت و موفقيتهاي پايدار و درازمدت خود ميکنند.
نمونهاي از شرايطي اينچنين را ميتوان در وضعيت تحريمهاي ظالمانهاي که نظام استکبار جهاني بر عليه ملتها و کشورهاي مستقل وضع ميکند مشاهده نمود. اگر ملت و کشور ما ميخواهد در جميع جهات موفق و سربلند بوده و پايه تمدن جديد اسلامي را بنيان نهد، بايد در عين حال که در شرايط عادي اهل تعامل و ارتباط با ساير ملل و کشورها است، آمادگي آن را داشته باشد که در شرايط خاص با روشهاي خوداتکاء حربههاي تحريم و نفوذ را از دست دشمنانش خارج کند.
ضمن آنکه از حل مسائل به شکل خوداتکاء اين موضوع را هم ياد ميگيريم که در بسياري از مواقع به جاي حل يک مسئله بزرگ، بهتر است آن را به دو يا چند مسئله کوچکتر شکسته و به حل آنها بپردازيم که در نهايت به احتمال زياد به حل مسئله اصلي منجر خواهد شد.
سرفصل: برنامهنويسي پيمانهاي (Modular)
مطلب درسي: معني پيمانه (Module)
پيمانه (Module) به بخشهاي به نسبت مستقلي از برنامه گفته ميشود که هرکدام وظيفه مشخصي داشته و در کنار يکديگر يک برنامه کامل را شکل ميدهند. پيمانهاي کردن برنامهها فوايد زيادي دارد. از جمله فوايد آن آساني مديريت و تقسيم کار است.[2]
فرهنگ کار گروهي و جمعي از ضرورت هاي پيشرفت است، چرا که موجب تمرکز هر کسي بر حيطه وظيفه خود مي شود، اما در مقابل بر عهده گرفتن کارهاي متعدد و متفاوت موجب کاسته شدن از کيفيت کار و نهايتا شکست خواهد شد همانطور که اميرالمومنينg ميفرمايند: «هر کسي که به کارهاي متفاوت بپردازد چاره سازي هايش ثمر بخش نبوده و موجب شکست او خواهد شد.»[3]
و نيز در خطبه اي چنين مي فرمايند: «کار هر کدام از خدمت کارانت را معين کن که او را در برابر آن کار مسئول بداني، اين کار سبب ميشود کارها را به يکديگر وانگذارند [و در خدمت سستي نکنند]»[4]
در سيره رسول خدا a نقل شده است که با تقسيم کارها موافقت ميکرد وخودش هم قسمتي از کار را برعهده ميگرفت. از آن حضرت روايت شده که در سفري، اصحاب خود را به ذبح گوسفندي امر فرمودند. يکي از آنها گفت کشتنش با من، ديگري گفت پوست کندنش با من، و شخص ديگري گفت تيکه تيکه کردن به عهده من، و فرد ديگري گفت پختنش با من. پس رسول خدا a بر من است که برايتان هيزم جمع کنم. [5]
سرفصل: مديريت حافظه (Memory Management)
مطلب درسي: آشغال جمع کن (Garbage Collector)[6]
در زبانهاي برنامهنويسي غير شيءگرا غالبا برنامهنويس مکلف است که پس از استفاده از حافظه تخصيص يافته (Allocated) ، آن را آزاد کند. به حافظه هائي که هيچگونه دسترسي به آنها وجود ندارد، «آشغال» يا Garbage گفته ميشود.
در زبانهاي برنامهنويسي شيءگرا غالبا از يک عامل نرمافزاري به نام «آشغال جمع کن» (Garbage Collector) استفاده ميشود که چند ثانيه يک بار به شکل خودکار فعال شده و اقدام به آزاد کردن اينگونه بخشهاي حافظه ميکند.
اگر آشغالهاي حافظه (چه توسط برنامهنويس و چه توسط آشغال جمع کن) جمع آوري نشوند، چه مشکلي پيش ميآيد؟ پاسخ بديهي است: فضاي اجراي برنامهها به تدريج محدود و محدودتر ميشود تا جائي که عملا سيستم بلااستفاده خواهد شد. همين وضعيت را در فضاي خانه، شهر و محيط زيست هم داريم. چقدر بي فکري است که در اين محيطها (خصوصا فضاهائي که مأموران نظافت شهري هم نيستند، همچون کوه و جنگل و جاده) آشغالها را به حال خود رها کنيم!
آشغال فقط فيزيکي نيست، بلکه گناه و معصيت نيز زباله هاي قلب و دل انسان هستند که کم کم قلب را تسخير مي کنند، همانطور که در روايات آمده است که پيامبر a در بياباني خشک و بي آب و علف به اصحابش دستور داد مقداري هيزم جمع کنند، اصحاب عرض کردند: در اين بيابان هيزمي وجود ندارد! حضرت فرمودند: جستجو کنيد؛ هر مقدار يافتيد و لو اندک کافي است. اصحاب پراکنده شدند و هر يک پس از لحظاتي هيزم مختصري جمع کردند، وقتي هيزم هاي کم، يک جا جمع شد؛ چشمگير و قابل ملاحظه شد. سپس حضرت فرمودند: گناهان نيز اين گونه- همانند اين هيزمها- جمع مي شوند! از گناهان کوچکي که به چشم نمي آيند بپرهيزيد.[7]
اگر انسان از اين زباله هاي جزئي غفلت کند رفته رفته تمام قلب او را اشغال احاطه مي کنند و او را به ورطه نابودي مي کشانند، همانطور که قرآن کريم مي فرمايد: «مَنْ كَسَبَ سَيِّئَةً وَ أَحاطَتْ بِهِ خَطيئَتُهُ فَأُولئِكَ أَصْحابُ النَّارِ»؛ كسانى كه كسب گناه كنند، و گناه، سراسر وجودشان را بپوشاند، آنها اهل آتشند.[8]
به نظرتان جالب نيست که در آفرينش هستي نيز پروردگار متعال آشغال جمع کنهاي بسيار کارآمدي قرار داده است؟! کافي است نگاهي به اطراف انداخته و لشکر انبوه باکتريهاي مفيد، موجودات ذره بيني، حشرات، حيوانات لاشخور و لجن خوار و ديگر موارد مشابه را مشاهده کرد. اگر ماهيهاي لجن خوار وجود نداشتند، وضعيت درياها و اقيانوسها (حتي آکواريوم ساخته دست بشر) چه ميشد؟! اگر خيل عظيم مورچگان در سراسر عالم از امروز اعتصاب کنند با اين همه ريخت و پاش موجود در عالم چه پيش خواهد آمد؟! ! جالب است که خداوند مورچگان را به گونهاي قرار داده است که بسياري از مواردي را که جمع آوري ميکنند بيش از ميزان نياز فعليشان است! موضوع جالب ديگر آنست که مواد زائد هرچه فسادپذيرتر باشند بيشتر مورد توجه آشغال جمع کنهاي نظام الهي عالم قرار ميگيرند! به عنوان مثال عکس العمل اين موجودات را نسبت به يک قطعه گوشت که زودتر فاسد ميشود و بر زمين افتاده با تکهاي نان مقايسه کنيد. در حالت اول مورچگان يا ساير موجودات آشغال جمع کن به آن هجوم ميآورند، در حالي که در مورد دوم رفتاري کندتر نشان ميدهند. جاي آن دارد که انسان از عمق جان بگويد «فَتَبَارَک اللَّهُ أَحْسَنُ الْخَالِقِينَ[9]»
[1]. برنامه نويسي به زبان ++C ص 77.
[2]. برنامه سازي پيشرفته C، صص 102 - 103
[3]. « مَنْ أَوْمَأَ إِلَى مُتَفَاوِتٍ خَذَلَتْهُ الْحِيَل»؛ (نهج البلاغه، جملات قصار، ش403)
[4]. اجْعَلْ لِكُلِ إِنْسَانٍ مِنْ خَدَمِكَ عَمَلًا تَأْخُذُهُ بِهِ فَإِنَّ ذَلِكَ أَحْرَى أَنْ لَا يَتَوَاكَلُوا فِي خِدْمَتِك»(نهج البلاغه، خطبه31، ص405.
[5]. روي عَن النَّبِيّ a اَنَّهُ اَمَرَ اَصْحابَهُ بِذِبْحِ شاةٍ فِي سَفَرٍ فَقَالَ رَجُلٌ مِنَ الْقَوْمِ عَلَيَّ ذِبْحُها وَقالَ الاْآخَرُ عَلَيَّ سَلْخُها وَقالَ آخَرُ عَلَيَّ قَطْعُها وَقالَ آخَرُ عَلَيَّ طَبْخُها فَقالَ رَسُولُ اللّهِ a عَلَيَّ اَنْ الْقَطَ لَکُمْ الْحَطَبَ (بحار الأنوار، ج 76، ص 273، ح 31).
[6]. چگونه با سي پلاس پلاس برنامه نويسي کنيم، صص 247-249.
[7]. «إِنَّ رَسُولَ اللَّهِ ص نَزَلَ بِأَرْضٍ قَرْعَاءَ فَقَالَ لِأَصْحَابِهِ ائْتُوا بِحَطَبٍ فَقَالُوا يَا رَسُولَ اللَّهِ نَحْنُ بِأَرْضٍ قَرْعَاءَ مَا بِهَا مِنْ حَطَبٍ قَالَ فَلْيَأْتِ كُلُّ إِنْسَانٍ بِمَا قَدَرَ عَلَيْهِ فَجَاءُوا بِهِ حَتَّى رَمَوْا بَيْنَ يَدَيْهِ بَعْضَهُ عَلَى بَعْضٍ فَقَالَ رَسُولُ اللَّهِ ص هَكَذَا تَجْتَمِعُ الذُّنُوبُ ثُمَّ قَالَ إِيَّاكُمْ وَ الْمُحَقَّرَاتِ مِنَ الذُّنُوب» (الکافي، ج2، ص288).
[8]. بقره:81.
[9]. -سوره مومنون آيه 14.