وبلاگ تفریحی

دانلود آهنگ، دانلود فیلم، دانلود عکس، اس ام اس

وبلاگ تفریحی

دانلود آهنگ، دانلود فیلم، دانلود عکس، اس ام اس

نظریه ی صلح و جنگ منطقه ای

نظریه ی صلح و جنگ منطقه ای

ترجمه بهرام عباسی

 

در این قسمت من نظریه ام را با جزئیات بیش تری معرفی خواهم کرد. در اینجا، متغیرهای وابسته و مستقل و همچنین ارتباطات بین این دو نوع متغیر را مشخص می سازم. ارکان و قسمت های مختلف نظریه در بخش های قبل توضیح داده شده بود. در مقدمه همان طور که مشاهده کردیم سنخ شناسی این نظریه را با توجه به سه دیدگاه نظری لیبرالیسم، واقع گرایی و جامعه ی بین الملل و هم چنین دو سطح تحلیل یعنی سطح تحلیل جهانی و سطح تحلیل منطقه ای را معرفی کردیم و گفتیم که اگرچه این سه دیدگاه نظری مفیدند اما هیچ کدام به تنهایی قادر به توضیح پراکندگی پدیده ها و متغیر ها نیستتند. بنابراین در این جا من تلاش می کنم تا نظریه ام را به عنوان یک تعریف و تفسیر منسجم واحد از صلح و جنگ منطقه ای معرفی کنم.

 

Closure چیست؟

اگر برنامه نویس C# باشید حتما به یاد دارید که Anonymous Method ها یا متد های بی نام یکی از ویژگی هایی بود که در نسخه دوم سی شارپ معرفی شد و همینطور در نسخه سوم عبارت های Lambda شکل بهتری به متد های بی نام دادند. مسلما بسیاری از ما کدی یا کد هایی مشابه زیر نوشته ایم:

1
2
3
4
5
6
7
static void Main(string[] args)
{
    int x = 0;
    Action action = delegate { Console.WriteLine(x); };
    x = 1;
    action();
}

یا به فرم ساده تر:

1
2
3
4
5
6
7
static void Main(string[] args)
{
    int x = 0;
    Action action = () => Console.WriteLine(x);
    x = 1;
    action();
}

در ابتدا ممکن است فکر کنید عدد صفر نمایش داده می شود، اما با اجرای برنامه خواهید دید جواب 1 است. اما چطور این اتفاق می افتد؟ در واقع سوال این است که متد های بی نام یا عبارات لامبدا چطور هنگام فراخوانی به پارامتر x و حتی مقدار آپدیت شده ی آن دسترسی پیدا می کنند؟

جواب این سوال ها وجود مفهومی است به نام Closure در پس این سینتکس ساده و روان.

Closure چیست؟

به بیان ساده Closure رفرنسی به یک تابع است، در عین حال که به scop ای که در آن تعریف شده است نیز اشاره دارد. بنابراین می توان عبارت های لامبدا و متد های بی نام را یک Closure دانست.

برای درک این تعریف لازم است چگونگی کار Closure ها را بررسی کنیم:

کامپایلر C# هنگام کامپایل برای هر متد بی نام یک کلاس تولید می کند و متغیر های قابل دسترس در آن scop را نیز به عنوان فیلد هایی از آن کلاس در نظر می گیرد، مثلا برای متد بی نام کد مثال اول، کلاسی مشابه زیر تولید می شود:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[CompilerGenerated]
private sealed class <>c__DisplayClass1
{
   public int x;
 
   public void
b__0()
   {
       Console.WriteLine(this.x);
   }
}
 
private static void Main(string[] args)
{
   <>c__DisplayClass1 class2 = new <>c__DisplayClass1();
   class2.x = 0;
   Action action = new Action(class2.
b__0);
   class2.x = 1;
   action();
}

همانطور که می بینید کلاس تولید شده فیلدی به نام x و متدی با بدنه متد بی نام را دارا می باشد که در تابع Main یک آبجکت از این کلاس ساخته شده و فیلد x مقدار دهی شده است و سپس متد موجود در این کلاس به عنوان متد بی نام به Action اختصاص یافته و در انتها مجددا مقدار x به 1 تغییر داده شده است.

در واقع با این مکانیزم است که یک Anonymous Method به کلیه مقادیر و فیلد ها، به خصوص مقادیر آپدیت شده متغیر ها دسترسی دارد.

بد نیست برای کامل تر شدن بحث مثال دیگری را نیز بررسی کنیم.

کد زیر را ببینید:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
namespace Closure
{
    class Program
    {
        static Action[] actionArr = new Action[10];
 
        static void FillActions(int count)
        {
            for (int i = 0; i < count; i++)
            {
                actionArr[i] = delegate()
                {
                    Console.WriteLine("{0} ", i);
                };
            }
        }
 
        static void Main(string[] args)
        {
            FillActions(actionArr.Length);
 
            for (int i = 0; i < actionArr.Length; i++)
            {
                actionArr[i]();
            }
        }
    }
}

در نگاه اول احتمالا خواهید گفت که عدد 1 تا 10 نمایش داده خواهد شد، اما خروجی به صورت می باشد:

10 10 10 10 10 10 10 10 10 10

همانطور که گفته شد یک Closure رفرنسی به کلیه متغیر ها و خصوصیات قابل مشاهده در آن scop را در خود نگه می دارد. در این مثال حوزه فعالیت متغیر i درون حلقه for بوده و مقدار آن تا 10 افزایش میابد، دقت کنید که scop متغیر i تغییری نمی کند و یا پایان نپذیرفته و متغییر جدیدی ایجاد نمی شود، به همین دلیل است که کلیه متد ها به مقدار نهایی متغییر i اشاره دارند.

فکر می کنم نگاهی به کد تولید شده توسط کامپایلر موضوع را روشن تر کند:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private static void FillActions(int count)
{
   Action action = null;
   <>c__DisplayClass2 class2 = new <>c__DisplayClass2();
   class2.i = 0;
   while (class2.i < count)
   {
       if (action == null)
       {
           action = new Action(class2.b__0);
       }
       actionArr[class2.i] = action;
       class2.i++;
   }
}

در واقع به دلیل داشتن یک scop ثابت برای متغیر i، تنها یک شی از کلاس <>c__DisplayClass2  ایجاد شده و بین کلیه action ها به اشتراک گذاشته شده است.

حال فرض کنید حلقه for را به صورت زیر تغییر دهیم:

1
2
3
4
5
6
7
8
for (int i = 0; i < count; i++)
{
    int j = i;
    actionArr[i] = delegate()
    {
        Console.WriteLine("{0} ", j);
    };
}

اینبار مشاهده خواهید کرد که اعداد 1 تا 10 نمایش داده می شود، چرا که scop متعیر j در هر بار اجرای حلقه پایان پذیرفته و مجددا ایجاد خواهد شد، بنابراین کامپایلر برای پیاده سازی درست مفهوم Closure که لازم است هر متد به scop خود اشاره کند، کدی مشابه زیر تولید خواهد کرد:

1
2
3
4
5
6
7
8
9
private static void FillActions(int count)
{
   for (int i = 0; i < count; i++)
   {
       <>c__DisplayClass2 class2 = new <>c__DisplayClass2();
       class2.j = i;
       actionArr[i] = new Action(class2.b__0);
   }
}

مشاهده می کنید که در هر حلقه یک شی جدید تولید شده و متغیر j مقدار دهی می شود.

پ.ن: بد نیست بدانید Closure یکی از مباحث پر کاربرد در زبان های functional محسوب می شود و ایده اولیه آن نیز از همین زبان های نشات گرفته شده و برای اولین بار پیاده سازی آن در زبان Scheme انجام شد.

                             


 

دانلود کتاب هیدرولیک کانالهای باز دکتر ابریشمی - دکتر حسینی

http://www.jaheshbook.com/media/catalog/product/cache/1/thumbnail/248x330/9df78eab33525d08d6e5fb8d27136e95/f/i/file_1_165.jpg

خوب این کتاب که برای همه دانشجویان مهندسی عمران شناخته شده هست حالا شما میتوانید این کتاب را بصورت خلاصه وار و در فایل پاورپوینت از سایت جامع دانشجویان و مهندسین عمران دریافت کنید  در کتب اصلی استاد این مباحث را میبینید: قوانین اساسی حاکم بر جریانهای آزاد ، جریانهای دائمی در کانالهای باز ، هیدرولیک سازه های مرتبط با جریانهای آزاد و جریانهای غیر دائمی در کانالهای باز را شامل می شوند بخش اول در برگیرنده فصول کلیات و مفاهیم اولیه ، اصل انرژی در کانالهای باز و اصل اندازه حرکت در کانالهای باز می باشد . بخش دوم از فصول جریانهای یکنواخت ، تئوری جریانهای متغیر تدریجی ، محاسبات جریانهای متغیر تدریجی و جریانهای متغیر مکانی تشکیل شده است . بخش سوم شامل چهار فصل سرریزها ، تبدیلها ، سازه های کنترل کننده جریان و متغیر هیدرولیکی و کنترل آمن می باشد . بخش چهارم متشکل از فصول دوازدهم و سیزدهم در مورد در مورد جریانهای غیر دائمی در کانالهای باز و روندیابی سیل به بحث می پردازد .

 

روش داده های تابلویی یا پانل دیتا (Panel Data)

انواع داده­هایی که عموماً برای تحلیل­های تجربی به کار برده می­شوند، در سه گروه مورد بحث و بررسی قرار می­گیرند:

داده­های سری زمانی[1]

داده­های مقطعی[2]

داده­های تلفیقی سری زمانی و مقطعی[3]

در داده­های سری زمانی مقادیر یک یا چند متغیر را طی یک دوره زمانی مشاهده می­کنیم (برای مثال GDP طی چند فصل یا چند سال). در داده­های مقطعی، مقادیر یک یا چند متغیر برای چند واحد یا مورد نمونه­ای در یک زمان یکسان جمع­­آوری می­شود (برای مثال نرخ­های جرم و جنایت برای  سی استان ایران  در در یک سال معین).

ادامه مطلب

برای مشاهده مطالب بیشتر به سایت گروه آماردانان ایران زمین مراجعه کنید.

www.amardanan.ir