تبليغاتX
آموزش کامپیوتر و برنامه نویسی
این وبلاگ جهت آموزش کامپیوتر و برنامه نویسی ایجاد شده است.

به نام خدا

 سلام !

  13 نکته ی جالب در مورد بیل گیتس

1- کتاب های زیادی در مورد بیل گیتس نوشته شده است، آمازون 137,632 نتیجه در این مورد ارائه می دهد.

2- اولین شرکتی که او تاسیس کرده است شرکت Traf-O-Data می باشد.

3- جد بزرگ او یک قانونگذار و شهردار، پدربزرگش رئیس بانک ملی، و پدرش یک وکیل موفق بود.

4- در سال 1968 اولین کامپیوترها در آکادمی Lakeside نصب شدند، که در نتیجه نمرات او افت کردند چرا که او روزها و شب ها را بر سر یادگیری این دستگاه جدید می گذراند.

5- گیتس، پال آلن و دوستانشان به علت فعالیت روی کارهای Hack باعث Crash کردن کامپیوترها در آکادمی Lakeside شدند.

6- وقتی جوان بود عادت داشت که به عقب و جلو تکان بخورد. البته هنوز هم وقتی عمیقا در فکر است این کار را انجام می دهد.

7- در هاروارد احساس کسالت و بی حوصلگی می کرد و بیشتر وقت خود را با برنامه نویسی و بازی پوکر می گذراند.

8- گیتس به اساتید خود در دانشگاه گفته بود که او حدود 30 سالگی یک میلیونر خواهد بود.

9- گیتس در 31 سالگی به یک میلیونر تبدیل شد یعنی یک سال دیرتر از آنچه خود پیش بینی کرده بود.

10- یکی از اساتید او درباره او می گوید: " بیل یک برنامه نویس متحیرکننده بود، اما در عین حال یک فرد منزجر کننده".

11- زندگی همراه با بی اعتنایی او در هاروارد او را در طول تابستان 1974 بیمار ساخت و او تحصیلاتش را رها کرد.

12- اولین کار برنامه نویسی او در دبیرستان برای ساخت برنامه ای بود که یک جدول زمان بندی مناسب را سازماندهی می کرد. بیل از آن برای ثبت نام در کلاس هایی که بهترین و تحریک کننده ترین دختران و نیز جمعه های کم کاری را داشت، استفاده می کرد. اینجا باید گفت که آقای گیتس شما هم؟؟!!

13- گیتس با همسرش، ملیندا، در ژانویه 1994 در جزیره ای در هاوایی که برای مراسم جشن عروسی اجاره کرده بود، ازدواج کرد.

بعضی از این نکات رو بر اساس حرفهایی که جدیدا گیتس در اسرائیل گفته است نوشتم. اگر شما هم نکاتی از این دست دارید در نظرات بنویسید تا اضافه کنم. البته عمدا 13 نکته نوشتم تا بگویم کمی نحس است.
+ نوشته شده در  یکشنبه یکم اردیبهشت 1387ساعت 8:12 بعد از ظهر  توسط مسعود لپه چی  | 

به نام خدا

 سلام !!!

 

چرا بررسي شطرنج كامپيوتري؟

ممكن است بپرسيد بررسي آناتومي يك برنامه شطرنج اصلاً چه فايده‌اي دارد؟ پاسخ را در دو سه نكته مي‌توانم خلاصه كنم. در وهله نخست، بررسي آناتومي يك بازي شطرنج از لحاظ تئوري هوش‌مصنوعي مي‌تواند نمونه بسيار جالبي از كاربرد اين علم تلقي شود. در بسياري مواقع وقتي گفته مي‌شود هوش مصنوعي، براي بسياري از مردم واقعاً سؤال است كه اين هوش از كجا مي‌آيد و چگونه شكل مي‌گيرد. شطرنج يكي از جاهايي است كه مي‌توانيد ببينيد چگونه يك سري معادلات رياضي كه ظاهري ساده، اما باطني پيچيده دارند، به تدريج در پيچ و خم پردازش‌هاي بعدي مبناي هوشمندي ماشين1 را فراهم مي‌كنند.

گذشته از اين، بررسي مكانيزم شطرنج‌بازيِ كامپيوتر يك موضوع تأمل‌برانگيز است و به شما نوعي بينش شبه فلسفي درباره تفاوت رويكرد انسان و ماشين نسبت به نوع خاصي از معماها مي‌دهد. ضمن اين‌كه، دريچه ذهن شما را به روي برخي اشتباهات رايج ذهن انسان بازمي‌كند كه منجر به تصميم‌گيري‌هاي اشتباه و در نتيجه پيامدهاي نامطلوب مي‌شوند. از اين رهيافت مي‌توانيد ببينيد كه از ديدگاه علمي يكي از نظريه‌هاي مربوط به مبناي اشتباه‌كردن انسان هنگام تصميم‌گيري ميان گزينه‌هاي مختلف چيست.

آگاهي از اين مسئله مي‌تواند براي هركارشناس كامپيوتر، آن هم در دنيايي كه يك اشتباه كوچك مي‌تواند به مدد شبكه جهاني اطلاعات در عرض چند ثانيه سراسر كره زمين را درنوردد و همچون ويروس‌هاي مخرب كامپيوتري، پيامدهاي وخيمي را ايجاد كند، مهم و آموزنده باشد.

اين موضوع نكته ديگري را نيز روشن مي‌كند و آن اين‌كه، چگونه برنامه‌نويسان باهوشي كه توسعه‌دهنده مدل برنامه‌نويسي شطرنج بوده‌اند، به منطق اين اشتباهات پي‌برده‌اند و سعي كرده‌اند به كامپيوتر ياد دهند با پيش‌بيني اين اشتباهات، از انسان پيش‌دستي كند. جالب اينجاست كه در مدل برنامه‌نويسي شطرنج، دغدغه كامپيوتر نه سرمايه‌گذاري روي اشتباهات حريف، بلكه چاره‌جويي در مورد اشتباهات احتمالي خودش است! از آن جالب‌تر اين‌كه، بازي شطرنج جزء بازي‌هاي اصطلاحاً <با اطلاعات كامل> طبقه‌بندي مي‌شود. بازي‌هايي كه هر دو طرف دستشان براي يكديگر رو شده است.

بنابراين، وقتي مي‌فهميم كه به‌رغم اطلا‌ع طرفين از وضعيت مهره‌هاي يكديگر، اين همه پيچيدگي در تجزيه ‌و تحليل وضعيت‌هاي پيش رو وجود دارد، مي‌توانيد حدس بزنيد علت اين همه ناكامي آدميزاد در پيش‌بيني سرنوشت بسياري از تحولات چيست؛ آن هم هنگامي كه دست حريف برايش رو نيست.

در نهايت، مطالعه و بررسي مدل برنامه‌نويسي شطرنج يك تمرين فكري خوب و آموزنده براي همه برنامه‌نويسان ماجراجوست و مي تواند ذهن كاوشگر آنان را بيش از پيش ورزيده كند. به قول معروف، هم فال است و هم تماشا!

اثر افق‌

كالبد يك نرم‌افزار شطرنج از قسمت‌هاي مختلفي تشكيل شده است كه كمي جلوتر خواهم گفت، اما اجازه بدهيد براي ورود به بحث، شما را با يكي از چالش‌هاي هميشگي برنامه‌نويسان شطرنج آشنا كنم تا ببينيد كامپيوتر براي موفقيت در يك بازي شطرنج، با چه معماهاي غامضي دست و پنجه نرم‌ مي‌كند.

لابد شنيده‌ايد كه كامپيوتر هنگام شطرنج بازي تا چند مرحله جلوتر را در ذهن خودش مرور مي‌كند و پيامدهاي هر يك از حركت‌هاي فرضي را در هر مرحله ارزيابي مي‌كند. واقعاً هم همين‌طور است.

حالا فرض كنيد يك نرم‌افزار طوري برنامه‌ريزي شده است كه تا هفت مرحله جلوتر را مي‌تواند محاسبه و ارزيابي كند. تصور كنيد يك كامپيوتر با استفاده از چنين الگويي ناگهان متوجه ‌شود كه ممكن است در پنج نوبت ديگر مُهرهِ وزيرِ خودش را از دست بدهد و حتماً مي‌دانيد مهره وزير چقدر مهم است.

بنابراين، بايد جايي در منطق نرم‌افزارِ شطرنج، به كامپيوتر گفته شده باشد كه در تصميم‌سازي براي حركت بعدي خودت <به وضعيت مهره وزير اولويت بده.> البته از لحاظ تئوريِ مدرن شطرنج، مي‌توان پرسيد كه آيا واقعاً ارزش يك مهره وزير در سراسر يك بازي يكسان است؟ و آيا بايد يك شطرنج باز در هر شرايطي به حفظ جان اين مهره بيش از هر مهره ديگر اهميت بدهد؟

اگر پاسخ منفي باشد، وضعيت خيلي پيچيده‌تر خواهد شد، ولي فعلاً بياييد براي ساده شدن صورت مسئله، فكر كنيم كه منطق تصميم‌سازي كامپيوتر چنين باشد. در آن صورت نتيجه بديهي اين منطق اين خواهد بود كه كامپيوتر شروع به بررسي سناريوهاي مختلف نجات جان وزير در پنج نوبت ديگر كند و در اين ميان به اين نتيجه برسد كه بهترين گزينه اين است كه مهره اسب خود را در همين نوبت قرباني كند تا با افزودن فلان حركت در نوبت سوم، دستيابي حريف به اين هدف را دست كم تا نوبت هشتم به تعويق بيندازد. اما مشكل اينجاست كه اين كامپيوتر مي‌تواند تا هفت نوبت جلوتر را محاسبه‌ كند. بنابراين، عملاً تا يك دست ديگر بازي نكند، نمي‌تواند پيش‌بيني كند در نوبت هشتم چه اتفاقي خواهد افتاد.

از ديدگاه كامپيوتر، عدم روِيت يك معضل در افق ديدش به معني نبودن آن معضل است. بنابراين، وقتي با انجام‌دادن يك حركت مي‌توان آن معضل را تا عمق هفت مرحله از ميدان ديد خارج كرد، شايد به اين معني باشد كه مشكل حل شده است، ولي چنين نيست. چون در همان گام اول يك اسب فدا مي‌شود، يك نوبت بازي انجام مي‌شود و دوباره همان مشكل (تهديد شدن وزير) در افق ديد كامپيوتر ظاهر مي‌شود. پس مشكل حل نشد و كامپيوتر اشتباه كرد.

<اثر افق> در شطرنج كامپيوتري كه اولين بار توسط هانس برلينر مطرح شد، از اين جهت جالب است كه به‌گونه طنزآميزي تبلور ماهيت بعضي از خطاهاي انساني نيز هست. به راستي خيلي از ما آدم‌ها دقيقاً به دليل همين كوته‌بيني، اشتباه مي‌كنيم. يعني بارها در زندگي تصور مي‌كنيم وقتي مشكلي در افق ديدمان نيست، يعني آن مشكل وجود ندارد؛ در حالي كه مشكل وجود دارد و كافي است يك گام به جلو برداريم تا آن را ببينيم، ولي تا آن گام را برنداريم، از ديدنش ناتوان هستيم. درست مثل زماني كه يك بطري نوشابه گازدار را ناگهان بدون حضورذهن باز مي‌كنيم و تازه وقتي آن را باز كرديم و گازش بيرون جهيد و پيراهنمان را كثيف كرد، يادمان مي‌افتد كه بايد در بطري را آرام باز مي‌كرديم.

اولين درسي كه از اثر افق مي‌توان گرفت اين است كه پيدا كردن وضعيتي كه نرم‌افزار بتواند قدرت نسبي نيروها را در وضعيت كنوني سبك و سنگين كند، اصلاً خيلي مهم نيست؛ زيرا اين ارزيابي ماهيت پويا بودن نيروها را در طول زمان درنظر نگرفته است. ارزيابي كنوني به درد آرايش كنوني مي‌خورد، ولي چون لحظه بعد آرايش نيروها عوض مي‌شود، ارزيابي كنوني شايد به كلي بيهوده باشد!!

به زبان رياضيات مهندسي، مي‌توان گفت كه وقتي شرايط اوليه يك معادله رياضي ثابت باشد، يك كامپيوتر مي‌تواند اين معادله را هرچند هم پيچيده باشد، به سادگي حل كند. اما اگر بلافاصله در ثانيه بعدي شرايط اوليه تغيير كند، آن هم تغييري كه خودش تابعي از چگونگي اولين برخورد شما با معادله است، در آن صورت حل اين معادله ممكن است از لحاظ نظري تا بي‌نهايت به تعويق بيفتد.

درس ديگري كه از اين پديده مي‌توان گرفت اين است كه دنبال كردن خط سير تحولات در هرجهت تا عمق x مرحله كار بيهوده‌اي است. بعضي از مسيرها مهم‌ترند. اين مسيرها را بايد تا عمق مثلاً ده يا پانزده نوبت بازي دنبال كرد و بعضي ديگر را بايد تا عمق پنج مرحله دنبال و بعد از آن را رها كرد. اشتباه است اگر همه مسيرها را تا عمق مثلاً هفت نوبت دنبال كنيم. در اين صورت چگونه بايد تشخيص دهيم كدام مسير اهميت استراتژيك بيشتري دارد و كدام‌يك از مسيرها كم اهميت‌تر هستند؟

اين چيزي است كه يك انسان هوشمند گاهي به صورت خودآگاه و گاهي ناخودآگاه انجام مي دهد. به همين دليل وقتي مثلاً شيئي را در اتاقمان گم مي‌كنيم، تمام اتاق را به شعاع سه متر زير و رو نمي‌كنيم. اين كار نادرست است. پس با خود مي‌گوييم كجاها را بايد دقيق‌تر بگرديم؟ كجاها را بايد يك نگاه سطحي بيندازيم؟ شما از كجا مي‌فهميد برخي مناطق داخل اتاقتان اهميت بيشتري براي پيدا كردن يك شي گمشده دارد؟

نوعي از هوش مصنوعي در بازي شطرنج به همين ترتيب شكل مي‌گيرد. در واقع اين هوش مصنوعي بيشتر معطوف به هوشمندي در انتخاب مسيرهاي مهم‌تر براي دنبال كردن تحولات هستند. خوشبختانه چندين الگوريتم رياضي جالب تاكنون عرضه شده‌اند تا بتوان اثر افق را شكست داد و ماوراي آن را ديد. بسط‌هاي ويژه Deep Blue از جمله همين الگوريتم‌ها هستند. (احتمالاً بلافاصله مي توانيد حدس بزنيد چرا كامپيوتر Deep Blue سرانجام توانست كاسپاروف، قهرمان جهاني شطرنج، را شكست دهد.) آناتومي يك نرم‌افزار شطرنج‌

اثر افق يك موضوع مهم در معماري فكري يك نرم‌افزار شطرنج است، ولي تمامِ مسئله‌اي نيست كه كامپيوتر بايد حل كند. اثر افق فقط يك جنبه از مشكلات تكنيك‌هاي جست‌وجو است و تكنيك‌هاي جست‌وجو يكي از چهار ستون اصلي هر نرم‌افزار شطرنج هستند. كامپيوتر بايد به حل سه مسئله محوري ديگر نيز فكر كند: چيدمان مهره‌ها، توليد حركت، و ارزيابي، به ترتيب سه موضوع مهم ديگري است كه هر نرم‌افزار شطرنج بايد به آن فكر كند و در ادامه نيز به بررسي اين چهار ركن مي‌پردازیمچيدمان مهره‌هچيدمان مهره‌ها، عبارت است از تصويرسازي كامپيوتر از صفحه بازي. كامپيوتر چگونه بايد صفحه بازي را <ببيند>؟ چگونه بايد بفهمد اين مهره‌ها كجا هستند؟

چگونه بايد فهميد الان پنج مهره سياه، هفت مهره سفيد را تهديد مي‌كنند؟ نرم‌افزارهاي شطرنج عمدتاً از تكنيكي به نام bitboard براي ديدن صفحه بازي استفاده مي‌كنند.

بيت بورد كه ظاهراً اختراع شطرنج بازان شوروي سابق است، متشكل از يك آرايه 64 بيتي است كه متناظر با 64 خانه شطرنج درنظرگرفته شده‌اند.

نرم‌افزارهاي امروزي شطرنج از تعداد بسيار زيادي بيت‌بورد براي به تصوير كشيدن وضعيت مهره‌ها در ذهن خود استفاده مي‌كنند. هر بيت از اين آرايه ممكن است صفر يا يك باشد. وضعيت <يك> به معني اشغال بودن خانه و وضعيت <صفر> به معني خالي بودن خانه متناظر در صفحه شطرنج است. مثلاً يك بيت‌بورد ممكن است مربوط به خانه‌هايي باشد كه توسط فيل سياه اشغال شده‌اند. يك بيت بورد ديگر ممكن است مربوط به خانه‌هايي باشد كه مهره‌هاي سفيد،‌ مهره‌هاي سياه را مورد حمله قرار داده‌اند و يك بيت بورد ديگر نشان دهد اسبي كه در خانه 4e قرار دارد، كدام خانه‌ها را زير نفوذ خود داردتوليد حركت‌

<توليد حركت> قسمت ديگري از وظيفه نرم‌افزار است و منظور از آن اين است كه هنگامي كه نوبت بازي به كامپيوتر مي‌رسد، قبل از اين كه تصميم بگيرد چه كار كند، بايد بداند حركت‌هاي مجاز او كدامند. در وهله نخست ممكن است به نظر برسد اين كار آسان است، ولي به ياد بياوريد كه هر مهره شطرنج قوانين حركتي خاصي دارد. مثلاً شاهي كه در حالت كيش است، قابل حركت دادن نيست.

همچنين فيل به صورت قطري حركت مي‌كند. اسب به صورت حرف ‌L مانور مي‌دهد. رخ حركت‌هاي عمودي و افقي دارد و وزير تركيبي از قدرت حركتي رخ و فيل را به صورت همزمان در اختيار دارد، اما از شيوه حركتي منحصر به فرد اسب بي‌بهره است. بنابراين تركيب قوانين حركتي اين مهره‌ها - آن هم با درنظر گرفتن اين واقعيت كه برخي خانه‌ها هم‌اكنون اشغال هستند - وضعيت پيچيده‌اي را ايجاد مي‌كند كه محاسبه همه حالت‌هاي مجاز، به شدت توان پردازشي كامپيوتر را طلب مي‌كند.

خوشبختانه در مدل نرم‌افزاري شطرنج از قوانين اين بازي چندين ساختار يا آرايش داده‌اي مختلف استخراج شده است كه مي‌توانيد آن‌ها را نوعي از <محاسبات قبلاً انجام شده> بناميد. اين‌ها در واقع الگوهاي آرايشي خاصي هستند كه مي‌توانند مسير محاسبه براي به دست آوردن تمام حركت‌هاي مجاز بعدي را كوتاه كنند. تكنيك‌هاي جست‌وجو

<تكنيك‌هاي جست‌وجو> قلب هر نرم‌افزار شطرنج هستند. منظور از <جست‌وجو> يافتن حركت‌هاي خوب و مجاز بعدي است. مجاز بودنشان در مرحله توليد حركت شناسايي شده است و ارزيابي ميزان خوب يا بد بودن اين حركت‌ها و سرانجام انتخاب يكي از آن‌ها مي‌ماند. اين كار به واقع مشكل است. چنان كه ديديد، اثر افق يكي از مسائلي است كه بايد حل شود. جست‌وجو در پايه‌اي‌ترين شكل آن با معادله‌اي به صورت b به توان n توصيف مي‌شود كه در آن b اصطلاحاً فاكتور انشعاب و n عمق حركت است.

فاكتور انشعاب تعداد حركت‌هاي مجاز از سوي هر دو حريف در هر نوبت بازي است و عمق عبارت از تعداد نوبت‌هايي است كه قرار است به ارزيابي حركت‌هاي طرفين بپردازيم. بنابراين، نتيجه اين معادله يك منحني نمايي است كه به سرعت رشد مي‌كند و تنوع فوق‌العاده زيادي را در انواع حالت‌هاي ممكن به وجود مي‌آورد. خوشبختانه الگوريتم‌هاي خيلي خوبي براي محاسبه انواع حالت‌هاي پيش رو ابداع شده‌اند.

البته اين الگوريتم‌ها براي رويارويي با مقولاتي مانند اثر افق طراحي نشده‌اند، بلكه صرفاً مسير ارزيابي حالت‌هاي مختلف سود و زيان انجام دادن انواع حركت‌هاي مجاز را كوتاه مي‌كنند. از جمله الگوريتم‌هاي موفق مي‌توان به الگوريتم نگا اسكوت، الگوريتم MTD)f) و الگورتيم تكرارشونده آلفابتا اشاره كرد.

اما علاوه بر الگوريتم‌هاي اصلي، در محاسبه حركت‌هاي بعدي بايد به فكر راهكارهايي براي مقابله با اثر افق نيز بود. مثلاً تيم توسعه كامپيوتر Deep Blue مفهوم <بسط‌هاي ويژه> يا Singular Extensions را توسعه دادند. اين تكنيك مي‌گويد: واضح است كه در بازي شطرنج بعضي حركت‌ها خيلي مؤثرتر و مهم‌تر از حركت‌هاي ديگرند و نبايد خيلي وقت تلف كرد تا به درست بودن آن ها پي برد.

به تعبير خودمان، نبايد در مورد انتخاب اين حركت‌ها زياد تأمل كرد. مثلاً ممكن است به اين نتيجه برسيد كه با دو حركت ديگر مي‌توانيد وزير حريف را بگيريد. تئوري بسط‌هاي ويژه مي‌گويد وقتي به چنين موقعيت‌هايي برخورد مي‌كنيد، هوشمندانه‌تر اين است كه وقت بيشتري بگذاريد و تا چند نوبت، بيشتر از مقدار پيش فرض خودتان براي محاسبه حركت‌هاي بعدي، اين مسير را دنبال كنيد؛ مبادا دام يا اشتباهي در كار باشد! اين كار بهتر از اين است كه ماشين وار همه مسيرها را به يك اندازه دنبال كنيد. ارزيابي‌

سرانجام مسئله چهارم ديگري كه بايد كامپيوتر در فكر آن باشد، مسئله <ارزيابي> وضعيت كلي بازي است. چگونه كامپيوتر بايد بفهمد كه الان از حريفش جلو است يا عقب؟ آيا در شرف پيروزي است يا شكست؟ بايد براي نجات از شكست يا به تعويق انداختن آن برنامه‌ريزي كند يا به فكر تسريع پيروزي قريب‌الوقوع خود باشد؟ معماي <ارزيابي بازي> از جمله مهم‌ترين مسائل پيش روي برنامه‌نويسان شطرنج است. مسئله <تكنيك‌هاي جست‌وجو> حتي در پيچيده‌ترين شكلش در سرتاسر ساختار بازي شطرنج تابع يك سري قواعد عمومي است: اگرعمل A اتفاق بيفتد و سپس واكنش B روي دهد، آن‌گاه احتمال وقوع حالت C وجود دارد.

اين مسير ممكن است دوباره پس از دو نوبت بازيِ طرفين تكرار شود. در حالي كه مسئله <ارزيابي> يك مسئله راهبردي و خاص هر مورد بازي شطرنج است و امكان ندارد آرايش كنوني بازي، تعداد مهره‌هاي طرفين و وضعيت قوت و ضعف آن‌ها پس از يك نوبت بازي طرفين مانند نوبت قبلي باشد. <ارزيابي> در ساده‌ترين شكلش شامل بررسي اين واقعيت است كه هر يك از دو حريف در هر مقطعي از بازي چند مهره دارند و اين مهره‌ها صرف نظر از چيدمانشان چه ارزشي دارند. اين در حقيقت نوعي ارزيابي كمّي از وضعيت بازي است.

تئوري شطرنج براي هر نوع مهره وزن مخصوصي قائل است. مثلاً مي‌گويند وزير نُه امتياز مي‌ارزد، رخ پنج، فيل چهار، اسب سه و پياده يك امتياز. به اين ترتيب نرم افزار مي‌تواند از فرمول (Sum (Ni * Vi استفاده كند كه در آن مجموعِ حاصل‌ضرب Ni در Vi ‌به ازاي هر نوع مهره براي يك حريف محاسبه مي‌شود. در اينجا Ni تعداد مهره‌هايي از يك نوع و Vi ارزش هر نوع مهره است.

اما ارزيابي كمّي كافي نيست. بايد ديد اين مهره‌ها از نظر عملي چقدر كارآمد هستند. شايد يك وزير كه بالقوه مي‌تواند خطر بزرگي باشد، به جهت آچمز شدن در شرايطي كه او را ناگزير از پاسباني از جان شاه كرده است، عملاً در مراحل مياني يا پاياني بازي كارايي محدودي داشته باشد. به هرحال براي ارزيابي بازي معادلات مختلفي نوشته شده است كه در هر نرم‌افزار از بعضي از آن‌ها استفاده مي‌شود. طبيعي است كه هرچه اين معادلات جامع‌نگرتر باشند، دقت نرم‌افزار بيشتر مي‌شود. خود تكنيك ارزيابي چند ركن دارد: توازن كمي قوا، قدرت مانور و ميزان نفوذ مهره‌ها روي خانه‌هاي مختلف صفحه بازي، توسعه بازي، آرايش پياده نظام، و امنيت شاه، از جمله مهم‌ترين اركان ارزيابي هستند.

به عنوان مثال، تئوري كلاسيك شطرنج تأكيد دارد كه مهره‌هاي ضعيف‌تر بازي مثل فيل و اسب بايد هرچه سريع‌تر به وسط معركه آورده شوند. شاه خوب است كه هرچه سريع‌تر به فكر رفتن به قلعه باشد و مهره‌هاي رخ و وزير بهتر است در جاي خود آرام بنشينند تا بازي به لحظات استراتژيك و سرنوشت‌ساز خود نزديك شود. در تئوري مدرن شطرنج به جنبه‌هاي پيشرفته‌تري از بازي نيز انديشيده مي‌‌شود.

مثلاً اين‌كه مهرهايي مانند اسب و فيل بايد سريعاً در فكر فتح مركز باشند تا هم از حملات وزير حمايت كنند و هم فضا را براي مانور دادن رخ‌ها باز كنند. معادلات و تكنيك‌هاي ارزيابي در حقيقت مي‌توانند به اين مسئله پاسخ دهند كه اگر كامپيوتر بخواهد از يك استراتژي معين براي پيروزي استفاده كند (مثلاً فتح مركز)، چگونه بايد ميزان تحقق اين اهداف مياني را ارزيابي و بررسي كند. تكنيك‌هاي ارزيابي همچنين مي‌توانند به اين مسئله فكر كنند كه آرايش پياده نظام چگونه است؟ مثلاً تا چه اندازه نزديك بودن پياده‌ها به يكديگر شعاع عمل آن‌ها را محدود يا باز كرده است. چقدر شانس پيروزي براي وزير شدن يك پياده وجود دارد و مواردي از اين قبيل. جمع بندي‌

به اين ترتيب مي‌توان مدل هوشمند مصنوعي در يك نرم‌افزار شطرنج را چنين خلاصه كرد: اين هوشمندي چهار ركن دارد:

يكم: <بينايي> نرم‌افزار

دوم: آگاهي از قوانين بازي‌

سوم: هوشمندي در جست‌وجو براي يافتن بهترين حركت بعدي

چهارم: هوشمندي در سنجش وضعيت كنوني و ارزيابي ميزان تحقق استراتژي انتخاب شده براي رسيدن به پيروزي نهايي يا دستيابي به اهداف مياني پي نوشت‌

لا‌زم به ذكر است كه تلقي هوشمندانه بودن محاسبات نرم‌افزارهاي شطرنج‌باز، محل بحث فراوان است و عده‌اي عقيده دارند كه چنين نرم‌افزارهايي را نبايد هوشمند به حساب آورد. در نتيجه در اين نوشتار، هوشمند بودن نرم‌افزار شطرنج‌باز، نظر شخصي نويسنده است .

+ نوشته شده در  یکشنبه یکم اردیبهشت 1387ساعت 7:30 بعد از ظهر  توسط مسعود لپه چی  | 

به نام خدا

 سلام !!!!!

 

قابلیت تایپ فارسی در فتوشاپ

طراحی گرافیکی امروزه به عنوان یکی از پردرآمدترین شغل‌ها محسوب می‌شود. گرافیست‌های حرفه‌ای امروزه با انجام طراحی‌های مختلف به اشکال و عناوین مختلف برای خود کسب درآمد می‌کنند. این طراحان از نرم‌افزارها و ابزارهای متعددی برای این منظور استفاده می‌کنند.

در میان این نرم‌افزارها می‌توان به نرم‌افزارهای بسیاری برخورد کرد که در میان کاربران و طراحان از محبوبیت خاصی برخوردار هستند اما در تمامی این نرم‌افزار همیشه نرم‌افزاری برتر و محبوب‌تر از دیگر نرم‌افزارها نیز می‌توان یافت و در این مورد می‌توان به شاهکار شرکت Adobe اشاره کرد . نرم‌افزار Photoshop ، نرم‌افزاری که تمامی کاربران کامپیوتر با نام آن آشنا هستند و بسیاری از کاربران، حتی در سطوح مبتدی نیز از این نرم‌افزاری برای رفع نیازهای مختلف خود استفاده می‌کنند.

Adobe Photoshop CS3 Extended

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

معرفی برخی از ویژگی‌های جدید نرم‌افزار Adobe Photoshop CS3 Extended 10.0 Middle East

 

- قابلیت تایپ مستقیم فارسی و سایر زبان‌های آسیایی: قابلیت منحصر به فردی که تنها در نسخه‌های Middle East فتوشاپ قرار دارد که کاربران فارسی زبان بدون نیاز به نرم‌افزار کمکی (فارسی‌ساز و...) می‌توانند فارسی تایپ کنند!

 

- قابلیت منحصر به فرد ویرایش و خلق سه بعدی تصاویر و متون با پشتیبانی کامل از فرمت‌های نرم‌افزارهای برتر سه بعدی ساز دنیا همچون 3D Studio Max و...

 

- قابلیت منحصر به فرد ویرایش فیلم‌ها و فرمت‌های ویدئویی! اکنون شما قادر به ویرایش فریم‌های فایل‌های ویدئویی خود از داخل محیط Adobe Photoshop CS3 Extended خواهید بود! با قابلیت پشتیبانی از فرمت‌های MPEG, MOV AVI, MPEG- 4, FLV, 3G, FLC و...

 

- قابلیت منحصر به فرد Smart Filters: قابلیت‌ جدید کار با فیلترها که به شما در اضافه کردن، ویراستن و حذف فیلترها از تصاویر به صورت آنی و لحظه‌‌ای کمک می‌کند کیفیت تصاویر حاصله را تا حداکثر ممکن بالا نگاه می‌دارد.

 

- ابزار قدرتمند Refine Edge tool: قابلیت انتخاب و برش آیتم‌ها در تصاویر بسیار آسان‌تر در قیاس با نسخه‌های پیشین، میزان خطای بسیار پایین‌تر در برش، اتوماسیون بسیار بالاتر و هوشمندتر شدن نرم‌افزار در این زمینه و کیفیت بسیار بالای تصویر حاصله در قیاس با نسخه‌های پیشین.

 

- محیطی راحت‌تر و کاراتر برای کار با نرم‌افزار: استفاده از حداکثر فضای مانیتور برای بسط و ویرایش تصاویر بزرگ همراه با حفظ تمامی ابزارهای فتوشاپ در کنار محیط.

 

-ویرایش و پردازش سریع و بهتر تصاویر RAW: پشتیبانی کامل و بسیار سریع‌تر از این فرمت رایج و قدرتمند دوربین‌های دیجیتالی توسط پلاگین جدید و درونی نسخه CS3 تحت عنوان Adobe Photoshop Camera Raw Plug- in.

 

- مدیریت سریع‌تر و انعطاف‌پذیرتر بر پروژه‌های طراحی خود توسط نرم‌افزار قدرتمند Adobe Bridge CS3!

+ نوشته شده در  جمعه سی ام فروردین 1387ساعت 7:0 قبل از ظهر  توسط مسعود لپه چی  | 

به نام خدا

 GUI چیست ؟

 GUI مخفف عبارت Graphical user interface یا رابط گرافیكی كاربر می باشد . GUI در حقیقت نوعی رابط كاربری می باشد كه به كاربر كامپیوتر امكان برقراری ارتباط بصورت گرافیكی و بسیار بهینه شده و قابل فهم و نمایش را می دهد . رابط گرافیكی با استفاده از سمبل ها و تصاویر گرافیكی سعی در ایجاد عناصری با معنی خاص می باشد كه كار با كامپیوتر را بسیار راحتتر می كند .

در حقیقت رابط گرافیكی تلاشی برای فرار از محیط های متنی می باشد . قبل از ایجاد GUI تمامی كاربران كامپیوتر ها مجبور بودند تمامی دستورات و در حقیقت ورود و خروج داده را از طریق متنی انجام دهند . حتما اكثر شما با صفحات سیاه داس یا ترمینال لینوكس آشنایی دارید . البته این محیط های متنی هنوز هم طرفداران بسیاری دارد و مخصوصا در سرور ها یا كاربرد هایی خاص بسیار بهینه تر و مناسب تر می باشد . اما اكثرا كاربران و مخصوصا كاربران خانگی كار با این محیط متنی را بسیار سخت و وقت گیر می دانند ! پس تلاشی برای ایجاد عناصر گرافیكی (widget) كه هر یك مفهوم و كاربرد خاصی داشتند آغاز شد . اكثر عناصر در سیستم و حتی سخت افزار ها حالتی ترسیمی و نمایشی پیدا كردند و كاربر می توانست با دستگاه ماوس در محیطی گرافیكی حركت كرده ، عناصر مختلف را انتخاب و یا وارد بخش های مختلفی شود .

هم اكنون تقریبا تمامی كاربران كامپوتر با این رابط های گرافیكی آشنایی كامل دارند و حداقل با یك یا چند نمونه از این محیط ها كار كرده اند .

+ نوشته شده در  دوشنبه بیست و ششم فروردین 1387ساعت 5:20 بعد از ظهر  توسط مسعود لپه چی  | 

به نام خدا

 سلام !

با استفاده از این ترفند يكي از قابليت هاي ويندوز XP مي توانيد برنامه هاي نصب شده بر روي سيستم خود را به شكل سريع تر اجرا كنيد. به عنوان مثال در نرم افزارهايي مثل Photoshop و  Corel Draw كه باز شدن آنها مقداري طول مي كشد، مي توانيد اين برنامه ها را سريع تر باز كنيد.

براي اين كار روي Shortcut برنامه مورد نظر راست كليك كنيد، سپس Properties را برگزينيد.

سپس به تب Shortcut برويد.

اكنون در قسمت Target به پايان آدرس فايل برويد.

سپس بعد از علامت پاياني يك Space بزنيد و دستور 1:/prefetch را تايپ كنيد. در پايان OK را بزنيد و خارج شويد. دقت کنید که این کد باید از از راست به چپ در محل کپی کردن در آید.

+ نوشته شده در  دوشنبه بیست و ششم فروردین 1387ساعت 5:13 بعد از ظهر  توسط مسعود لپه چی  | 

به نام خدا

 سلام !!!

 

این فایل یک فایل متنی با پسوند .ini می باشد که تنظیمات دو فایل،Scanreg.exe  scanregw.exe از این فایل نشات می گیرد. که مهمترین این تنظیمات شامل موارد زیر می باشد:

1-با تایپ دستور Backup=1 ،ویندوز به طور خودکار در هنگام بوت شدن از رجیستری نسخه ی پشتیبان تهییه می کند وبا تایپ0= Backupاین کار انجام نخواهد شد (پیش فرض مقدار 1 میباشد )

 با تایپ دستور Max backup Copies = 0-99 و اختصاص دادن یک عدد بین 0تا99 می توان تعداد فایل های (cab را که به عنوان نسخه ی پشتیبان در نظرگرفته می شودرا تغییر داد. پیش مقدار 5می باشد).

2- راه دوم برای آنکه از رجیستری نسخه ی پشتیبان تهییه کردآن است که از دو فایل System.dat  User.dat   در مسیری غیر از مسیر Copy Windows تهییه کنید و آن رادر هنگام آسیب دیدن رجیسری جایگزین فایل های آسیب دیده کنید .

3-سومین روش برای تهییه ی نسخه ی پشتیبان از رجیستری بدین صورت است که برنامه اجرایی Regedit.exeرا در ویندوز اجرا کرده واز files منوی Export registry را انتخاب کنید در این حالت پنجره ای با عنوان فایل     Export  registry  files باز خواهد شد ،در این پنجره ابتدا نام فایل را مشخص کرده ودر فریم Export rangeگذینه ی Allرا انتخاب کنید. با زدن دکمه ی Saveفایل مورد نظر با پسوند reg در مسیر مشخص شده ساخته می شود . ودر نهایت برای آنکه بتوان از این نسخه برای تعمیر رجیستری استفاده کرد این است که از منوی File ، گزینه یImport Registy File را انتخاب کنید و با باز شدن پنجره ی مربوطه نام فایلی را که قبلا مشخص کردید ،انتخاب کنید . ویا اینکه دوی این فایل دوباره کلیک کرده وبعد دکمه yes فشار دهید تا نسخه ی پشتیبان جایگزین رجیستری آسیب دیده شود

4- آخرین راه برای تعمیر رجیستری آسیب دیده آن است که فایل مخفی و سیستمی System . Ist را به جای فایل ُSystem .dat جایگذین کنید.

 

هنگامی که سیستم عامل ویندوز را روی سیستم خود نصب می کنیم و ویندوز برای اولین بار با موفقیت بوت می شود یک فایل مخفی و سیستمی System.1st در درایوی که ویندوز در آن نصب شده است C:\ ساخته می شود که این فایل یک نسخه پشتیبان بسیار کوچک از رجیستری اولیه می باشد که با کپی و جایگزین کردن این فایل به جای فایل System.dat می توان رجیستری را طبق مراحل زیر به حالت اولیه برگرداند:

1-     سیستم را مجددا راه اندازی کرده و وارد داس شوید.

2-     فرمان زیر را برای کپی و جایگزین کردن فایل System.1st به جای System.dat در خط فرمان صادر کنید:

XCopy     c:\System.1st     c:\Windows\System.dat/H/R

3-     سیستم را دوباره راه اندازی کنید.

 

توجه: این نسخه پشتیبان از رجیستری (System.1st) مربوط به تنظیمات و رجیستری اولین بوت ویندوز می باشد و تنظیمات سخت افزارهای نصب شده و برنامه های کاربردی را شامل نمی شود (برنامه های کاربردی و سخت افزارهای نصب شده دیگر عمل نخواهند کرد) و در حقسقت این راه به عنوان آخرین راه برای تعمیر رجیستری و حفظ سیستم عامل، استفاده خواهد شد.

+ نوشته شده در  دوشنبه بیست و ششم فروردین 1387ساعت 5:8 بعد از ظهر  توسط مسعود لپه چی  | 

به نام خدا

 سلام !

 در مورد اسم شرکت ها:

Adobe:
اسم رودخانه اي كه از پشت منزل مؤسس آن جان وارناك عبور مي كند.

Apple:
ميوه مورد علاقه استيو جابز مؤسس و بنيانگذار شركت اپل سيب بود و
بنابراين اسم شركتش را نيز اپل (به معني سيب ) گذاشت.

Cisco:
مخفف شده كلمه سان فرانسيسكو (San Francisco) است كه يكي از
بزرگترين شهرهاي امريكا است.

Google:
گوگل در رياضي نام عدد بزرگي است كه تشكيل شده است از عدد يك با
صد تا صفر جلوي آن . مؤسسين سايت و موتور جستجوي گوگل به شوخي
ادعا مي كنند كه اين موتور جستجو مي تواند اين تعداد اطلاعات
(يعني يك گوگل اطلاعات ) را مورد پردازش قرار دهد.

Hotmail:
اين سايت يكي از سرويس دهندگان پست الكترونيكي به وسيله صفحات
وب است. هنگامي كه مدير پروژه برنامه مي خواست نامي براي اين سايت
انتخاب كند علاقه مند بود تا نام انتخاب شده اولاً مانند ساير سرويس دهندگان
پست الكترونيك به mail ختم شده و دوماً برروي وبي بودن آن نيز تأكيد شود.
بنابراين نام Hotmail را انتخاب كرد. در كلمه Hotmail حروف Html به ترتيب
پشت سر هم قرار گرفته اند.

HP:
شركت معظم HP توسط دو نفر بنام هاي بيل هيولت و ديو پاكارد تأسيس شد.
اين دو نفر براي اينكه شركت هيولد پاكارد يا پاكارد هيولت ناميده شود مجبور به
استفاده از روش قديمي شير – خط شدند و نتيجه هيولد پاكارد از آب در آمد.

Intel:
از آنجاييكه اين شركت از بدو تأسيس با تأكيد روي ساخت مدارات مجتمع ايجاد
شد. نام آن را INTegrated Electronics يا به طور مختصر INTEL نهادند.

Lotus:
ميچ كاپور مؤسس شركت كه هندي الاصل بود از حالت لوتوس كه يك اصطلاح
مديتيشن متعالي (T.M.) مي باشد براي نامگذازي شركتش استفاده كرد.

Mirosoft:
نام شركت ابتدا به صورت Micro-soft نوشته مي شد ولي به مرور زمان به
صورت فعلي در آمد. Microsoftمخفف MICROcomputer SOFTware است.
و دليل نامگذاري شركت به اين اسم نيز آن است كه بيل گيتس مؤسس
شركت آن را با هدف نوشتن و توسعه نرم افزارهاي ميكروكامپيوتر ها تأسيس كرد.

Motorola:
شركت موتورولا با هدف درست كردن بي سيم و راديوي خودرو كار خود
را آغاز كرد. از آنجاييكه مشهورترين سازنده بي سيم و راديو هاي اتومبيل
در آن زمان شركت Victrola بود. مؤسس اين شركت يعني آقاي پال كالوين
نيز اسم شركتش را موتورولا گذاشت تا علاوه بر داشتن مشابهت اسمي
كلمه موتور نيز به نوعي در اسم شركتش وجود داشته باشد.

Oracle:
مؤسس شركت اوراكل يعني لري اليسون و باب اوتس قبل از تأسيس
شركت روي پروژه اي براي CIA كارمي كردند . اين پروژه كه اوراكل نام
داشت بنا بود تا با داشتن مقادير زيادي اطلاعات بتواند تا جواب تمام
سؤال هاي پرسيده شده توسط اپراتور را با مراجعه به مخزن اطلاعات
بدهد. ( اوراكل در اساطير يوناني الهه الهام است. ) اين دو نفر پس از
پايان اين پروژه شركتي تأسيس كرده و آن را به همين اسم نامگذاري كردند.

Red Hat:
مؤسس شركت آقاي مارك اوينگ در دوران جواني از پدربزرگش كلاهي
با نوارهاي قرمز و سفيد دريافت كرده بود ولي در دوران دانشگاه آن را
گم كرد . زماني كه اولين نسخة اين سيستم عامل آماده شد مارك
اوينگ آن را همراه با راهنماي كاربري نرم افزار در اختيار دوستان و هم
دانشگاهيش قرار دارد. اولين جمله اين راهنماي كاربري
« درخواست براي تحويل كلاه قرمز گم شده » بود.

Sony:
Sony از كلمه لاتين Sonus به معناي صدا مشتق شده است .

SUN:
اين شركت معظم توسط چهار تن از فارغ التحصيلان دانشگاه استانفورد
تأسيس شد.Sun مخفف عبارت Standford Univercity Network مي باشد .

Xerox:
كلمه Xer در زبان يوناني به معناي خشك است و اين براي تكنولوژي
كپي كردن خشك در زماني كه اكترا كپي كردن به روشهاي فتوشيميايي
انجام مي گرفت فوق العاده حائز اهميت بود.

Yahoo:
اين كلمه براي اولين بار در كتاب سفر هاي گاليور مورد استفاده قرار
گرفته و به معني شخصي است كه داراي ظاهر و رفتاري زننده است .
مؤسسين سايت Yahoo جري يانگ و ديويد فيلو نام سايتشان
را Yahoo گذاشتند چون فكر مي كردند خودشان هم Yahoo هستند.

+ نوشته شده در  دوشنبه بیست و ششم فروردین 1387ساعت 4:55 بعد از ظهر  توسط مسعود لپه چی  | 

به نام خدا

 

در ساليان اخير ، متدولوژی های متفاوتی بمنظور طراحی برنامه ، پياده سازی و در اختيار طراحان برنامه های کامپيوتری قرار گرفته شده  است . برخی از اين متدلوژی ها ی طراحی، پيچيده  و برخی ديگر ساده می باشند . در تمامی حالات ، هدف يکی است : کمک به برنامه نويسان در جهت نوشتن برنامه ها ئی که  بسادگی نوشته ، اشکال زدائی  و در نهايت نگهداری گردند .
در اين مقاله به بررسی مسائل مرتبط با طراحی برنامه پرداخته و در اين راستا در ابتدا  با يک متدولوژی ساده  آشنا خواهيم شد. متدلوژی استفاده شده با اينکه بسيار مقدماتی می باشد ولی اهداف ما را در جهت نحوه طراحی يک برنامه بخوبی تامين خواهد کرد .در اين مقاله ، به بررسی الگوريتم و مراحل پنج گانه برنامه نويسی خواهيم پرداخت .  پس از آشنائی با متدولوژی ارائه شده در اين مقاله ، در بخش دوم مقاله ،  با متدولوژی UML)Unified Modeling Language ) آشنا خواهيم شد. UML ، يک متدولوژی  رايج بمنظور طراحی  برنامه های کامپيوتری خصوصا برنامه نويسی شی گراء است .

اهميت طراحی برنامه
فرض کنيد يک مسئله را برای تعدادی دانشجو تعريف و از آنان خواسته شده است که برنامه ای بمنظور حل مسئله مورد نظر ، طراحی و پياد ه سازی نمايند. پس از صرف چند ثانيه ، بلافاصله دانشجويان شروع به تايپ کد مورد نظر خود بمنظور حل مسئله می نمايند . در بين دانشجويان ، دانشجوئی وجود دارد که کاغذی را بر می دارد  و شروع به نوشتن موضوع می نمايد. دقايقی سپری می گردد ، اما همچنان دانشجويان مشغول تايپ برنامه  خود ويا احتمالا" اشکال زدائی! آن هستند .تقريبا" بدون استثناء ،  دانشجوئی که ديرتر از ديگران آغاز نموده است ، با سرعت بيشتری تکليف خود را به پايان رسانده و حتی  راه حل ارائه شده توسط وی ، نيز از ساير دانشجويان بمراتب بهتر است .چرا؟ در صورتيکه به کاغذی که در اختيار دانشجو قرار داده شده ، دقت نمائيد ،  يک طرح مناسب بمنظور طراحی برنامه را برای مسئله،  مشاهده خواهيد کرد . برخی از دانشجويان نيز ممکن است چندين کاغذ را تکميل و يک طراحی پيچيده را انجام داده باشند. نکته مهم در اين رابطه اين است که اين دانشجويان ( چه آنانی که يک طراحی ساده را انجام داده اند و چه آنانی که يک طراحی پيچيده را دنبال نموده اند )  دارای يک الگو( طرح )  برای  برنامه خود ، می باشند .

الگوريتم
هر برنامه، می بايست دارای يک طرح و يا الگو  بوده تا برنامه نويس بر اساس آن عمليات خود را دنبال نمايد.از ديدگاه برنامه نويسان ، هر برنامه نيازمند يک الگوريتم است . بعبارت ساده ، الگوريتم ، بيانه ای روشمند بمنظور حل يک مسئله بخصوص است . از منظر برنامه نويسان ،الگوريتم بمنزله يک طرح کلی و يا مجموعه دستورالعمل هائی است که با دنبال نمودن آنان ، برنامه ای  توليد می گردد.

الگوريتم های ميکرو در مقابل ماکرو
الگوريتم ها دارای ويژگی های متفاوتی می باشند . ما می توانيم در رابطه با  الگوريتم  استفاده شده  به منظور نوشتن يک برنامه مشخص صحبت نمائيم . از اين زاويه  ، ما  صرفا" در رابطه با الگوريتم  در سطح ماکرو(macro level)  ، صحبت نموده ايم . در چنين مواردی ، الگوريتم ارائه شده ، سعی در بدست آوردن جنبه های عمومی برنامه از طريق يک مرور کلی به برنامه در مقابل درگير شدن در جزئيات را  دارد.ما می توانيم در رابطه با الگوريتم ها ، از سطح "ميکرو" صحبت نمائيم . از اين زاويه ، به سطوح پايين تر رفته و به عوامل اساسی ونگهدارنده ای  که يک جنبه خاص از برنامه را با  يکديگر مرتبط می نمايد، صحبت کرد.  مثلا" در صورتيکه شما دارای داده هائی هستيد که می بايست قبل از استفاده  مرتب گردند ،الگوريتم های مرتب سازی متعددی در اين زمينه وجود داشته و  می توان يکی از آنها را بمنظور تامين اهداف مورد نظر خود انتخاب نمود. انتخاب يک الگوريتم مرتب سازی  ، صرفا" باعث حل شدن يکی از جنبه های متفاوت برنامه می گردد . پس از مرتب سازی داده ها ،می بايست از يک الگوريتم ميکرو ديگر بمنظور نمايش  داده  ها ی مرتب شده استفاده  گردد .
همانگونه که احتمالا" حدس زده ايد ، ما می توانيم تمام الگوريتم های ميکرو را بمنظور ايجاد يک الگوريتم ماکرو ، جمع آوری نمائيم . اگر ما با الگوريتم های ميکرو ، آغاز نمائيم ، و حرکت خود را بسمت نمايش ماکروی يک برنامه ، پيش ببريم ، کاری را انجام داده ايم که موسوم به طراحی " پايين به بالا" (buttom-up)  ، است . اگر ما فعاليت خود را با يک الگوريتم ماکرو آعاز و حرکت خود را بسمت پائين و الگوريتم های ميکرو ، ادامه دهيم ، طراحی از نوع " بالا به پايين " (top-down)  را انجام داده ايم .
شايد اين سوال مطرح گردد که  کدام روش بهتر است ؟ اگر شما تمام مقالاتی را که تاکنون در اين زمينه نوشته شده اند را  دنبال نمائيد ، هرگز به يک نتيجه قابل قبول دست نخواهيد يافت . هر رويکرد، دارای نکات مثبت و منفی مربوط به خود است . صرفنظر از رويکرد طراحی استفاده شده ، می بايست دارای الگوئی (طرحی) مناسب برای برنامه باشيم .حداقل، نيازمند يک اعلاميه از مسئله برنامه نويسی و يک طرح ( الگو) برای برخورد با مسئله ، خواهيم بود . پس از شناخت مسئله ، می توان  نحوه حل مسئله را  ترسيم کرد.  شناخت عميق و مناسب نسبت به  مسئله ای که قصد حل آن را داريم ، شرط اساسی و ضروری برای طراحی يک برنامه است .
با توجه به اينکه اين اعتقاد وجود دارد که شناخت جامع و کلی از مسئله ای که حل آن را داريم ، بخشی ضروری در اولين مرحله برنامه نويسی است ، ما در ادامه از رويکرد "بالا - پايين "، تبعيـت می نمائيم . فراموش نکنيم که  رويکرد فوق ، امکان مشاهده مجازی از هر مسئله برنامه نويسی را فراهم خواهد نمود.

مراحل پنج گانه
هر برنامه را صرفنظر از ميزان پيچيدگی آن ، می توان  به  پنج مرحله اساسی تجزيه کرد :

  • مقدار دهی اوليه

  • ورودی

  • پردازش

  • خروجی

  • پاکسازی

در ادامه به بررسی هريک از مراحل فوق ، خواهيم پرداخت .

مرحله مقداردهی اوليه
مرحله مقداردهی اوليه ، اولين مرحله ای است که می بايست در زمان طراحی يک برنامه  در رابطه با آن فکر کرد . مرحله فوق ، شامل تمامی عمليات مورد نيازی  است که برنامه می بايست قبل ازبرقراری ارتباط  با کاربر ، انجام دهد . در ابتدا ممکن است اين موضوع که عملياتی را قبل از برقراری  ارتباط با کاربر می بايست انجام داد ، تا اندازه ای عجيب بنظر رسد ولی احتمالا" برنامه های زيادی را مشاهده نموده ايد که در اين راستا عمليات مشابهی را انجام می دهند. مثلا" ،  در زمان استفاده از برنامه هائی نظير Word ، Excel و يا برنامه های مشابه ديگر ، با چنين مواردی برخورد نموده ايم . مثلا"  با انتخاب  گزينه منو File ، می توان  ليستی از فايل هائی را که با آنها کار کرده ايم در بخش انتهائی منوفوق ، مشاهده کرد. ( مشاهده آخرين فايل های  استفاده شده در يک برنامه خاص ، با استفاده از جادو! ميسر نشده است ) . برنامه مورد نظر شايد ، ليست فايل های اخير را از ديسک خوانده و آنها را به ليست مربوطه در منوی File ، اضافه کرده باشد . با توجه به اينکه ليست فايل های فوق ، می بايست  قبل از اينکه برنامه هر چيز ديگر را برای کاربر نمايش دهد ، خوانده و نمايش داده شوند ، می توان انجام عمليات فوق را نمونه ای از مرحله مقداردهی اوليه، در نظر گرفت.
يکی ديگر از عمليات متداول که به اين مرحله مرتبط می باشد ، خواندن فايل های Setup است . چنين فايل هائی ممکن است حاوی اطلاعاتی در رابطه با نام مسيرهائی باشند که بانک ها ی اطلاعاتی خاصی و يا فايل های  ذخيره شده  ديگری را  بر روی ديسک را مشخص می نمايند . با توجه به نوع برنامه ای که اجراء می گردد ، فايل های Setup می توانند شامل اطلاعاتی در رابطه با فونت های نمايش ، نام و محل چاپگر ، رنگ های زمينه و رويه ، وضوح تصوير صفحه نمايشگر و اطلاعات مشابهی ديگر باشند . ساير برنامه ها ممکن است مستلزم خواندن اطلاعاتی در رابطه با اتصالات شبکه ، مجوزهای امنيتی و دستيابی به اينترنت ، رمزهای عبور و ساير اطلاعات حساس ديگر باشند . در چنين مواردی فايل های Setup دارای نقشی مهم خواهند بود.
در زمان طراحی يک برنامه ، همواره  می بايست در رابطه با اطلاعاتی که يک برنامه قبل  آغاز خدمات و عمليات خود  به آنها نيازمند است ، انديشيد و برای آنان در مرحله مقداردهی اوليه راهکار مناسب را انتخاب کرد . مرحله مقداردهی اوليه احتمالا" جائی است که می بايست از طريق آن اقدام به ارائه راهکار مناسب در جهت پاسخ به نيازهای فوق ، کرد.

مرحله ورودی
مرحله ورودی ، در حقيقت چيزی است که انتظار داريد باشد! مرحله فوق ،  شامل اخذ ( جمع آوری ) هر آنچيزی است که يک برنامه برای انجام فعاليت های خود به آنها  نياز خواهد داشت . دراکثر موارد، اگر استنباط مناسبی از عملياتی را که يک برنامه قصد انجام آنان  را دارد ، حاصل گردد، مشخص نمودن ليستی از ورودی ها ، کاری ساده خواهد بود. مثلا" اگر شما قصد نوشتن يک برنامه  وام را داريد ، می دانيد که می بايست از کاربر ميزان وام درخواستی ، بهره موردنظر و مدت  زمان وام ، درخواست گردد.
در حالات ديگر، لازم است در رابطه با نوع  ورودی هائی  که می بايست از کاربر اخذ گردد، بررسی لازم و مبتنی بر انديشه را دنبال نمود. مثلا" در صورتيکه قصدنوشتن يک برنامه دفترچه آدرس را داريد ، آيا می خواهيد نام فايل حاوی  دفترچه تلفن و محل ذخيره فايل مربوطه را در هر مرتبه که برنامه اجراء می گردد ، از کاربر درخواست نمائيد ؟ بعبارت ديگر برخی از مراحل ورودی می توانند و شايد می بايست ، توسط مرحله مقدار دهی انجام شوند. ماهيت واقعی ميزان اطلاعاتی که  می توان آنها را  در مرحله مقداردهی  خواند ، بستگی به رفتار  برنامه دارد. بعنوان يک قانون عمومی می توان به اين مورد اشاره داشت که اکثر کاربران تمايل دارند که اطلاعات تکراری در يک فايل  Setup و يا مقداردهی اوليه ذخيره گردد (در مقابل اينکه هر مرتبه که برنامه اجراء می گردد ، مجبور به ورود اطلاعات تکرای باشند ) .
فايل های Setup بسيار مناسب بوده و در هرموردی که امکان بخدمت گرفتن آنان منطقی بنظر می آيد ، می بايست از آنان استفاده گردد . برخی ديگر از اطلاعات اوليه دارای ماهيت خاص خود بوده و تا زمانيکه کاربر آنها را تايپ ننمايد ، شناخته نمی گردند .  در مثال وام اشاره شده  ،  می توان از TextBox های متعددی بمنظور احذ اطلاعات از کاربر و استفاده  از آنان در برنامه ، کمک گرفت . با توجه به اينکه کاربر می بايست با اين TextBox ها مرتبط تا اطلاعات موردنياز برنامه را وارد نمايد ، روشی را  که شما بمنظور ارائه  Textbox ,Labels ,Menus و ساير عناصر برنامه ، استفاده  می نمائيد ، يکی از بخش های مهم يک برنامه يعنی رابط کاربر ( user interface ) را مشخص خواهد کرد . فراموش نکنيم يکی از عوامل موفقيت هر نرم افزار ، بخش رابط کاربر آن  است . طراحی مناسب بخش فوق ، امروزه بعنوان تخصصی خاص در طراحی و پياد ه سازی نرم افزار مطرح و دارای جايگاه خاص خود است .

مرحله پردازش
مرحله پردازش ، شامل انجام عمليات  بر روی ورودی (ورودی ها ) ، بمنظور توليد نتايج مورد نظر برای برنامه است . در مثال وام ، برنامه پس از دريافت ورودی های مورد نظر ( ميزان وام ، درصد بهره و زمان وام ) آنها را از طريق يک معادله مالی بيکديگر مرتبط و پس از حل معادله ، نتيجه  مورد نظر حاصل خواهد شد( ميزان پرداخت ماهانه ) . بعبارت ديگر ، مرحله پردازش قادر به دريافت ورودی ، برخورد با آنها و توليد  پاسخ  مناسب به مسئله است . توجه داشته باشيد که مرحله پردازش همواره باعث نمايش چيزی بر روی نمايشگر نخواهد شد. هدف ، عمل ( عمليات )  برروی داده ( داده ها )  بمنظور توليد يک نتيجه ( نتايج )  است . در اين رابطه هيچگونه استثنائی وجود ندارد . در صورتيکه در برنامه ای از قبل می دانيم که مرحله پردازش زمان زيادی طول خواهد کشيد ، منطقی است  که فيدبک های لازم  بمنظور آگاهی کاربر از ميزان و درصد انجام پردازش ( پردازش ها )  در اختيار وی گذاشته شود ( در زمانيکه برنامه در حال اجراء است )  . در اين رابطه می توان از روش های متعددی استفاده کرد . ( ارائه يک ميله پيشرفت ، برآورد زمان تقريبی بمنظور اتمام عمليات ) .

مرحله خروجی
 مرحله فوق ، پاسخ ( پاسخ ها ی) مناسب و مورد انتظار را به کاربران مبنی بر حل مسئله مورد نظر ، ارائه می نمايد. تعداد زيادی ازبرنامه ها ، پاسخ  نهائی ( نتيجه ) خود را از طريق  يک Textbox ، نمايش و در اختيار کاربر قرار می دهند . ، مثلا" اگر برنامه ای نوشته شده است که قصد محاسبه و نمايش ميزان پرداخت ماهيانه يک وام دريافتی را داشته باشد ، می توان نتيجه بدست آمده (پرداخت ماهانه) را از طريق  يک textbox ، ارائه تا  پاسخی مناسب در ارتباط با  مرحله خروجی يک برنامه، داده شده باشد . ساير برنامه ها ممکن است دارای وضعيتی بمراتب پيچيده تر باشند .مثلا" می توان برنامه ای را در نظر گرفت که  نام ، آدرس ، شماره تلفن و ساير اقلام اطلاعاتی را از بانک اطلاعاتی خوانده و در ادامه آنها را بر روی صفحه نمايشگر ، نشان دهد. برنامه هائی اينچنين ، نيازمند شکل مناسبتری از نمايش خروجی بوده و نمی توان با استفاده از چند textbox به خواسته خود دست يافت ( ارائه يک خروجی مطلوب و انعطاف پذير) در اينگونه موارد می بايست از راهکارهای مناسبتری استفاده گردد . مثلا" می توان از جداول خاصی بمنظور نمايش اطلاعات مورد نظر استفاده کرد .( استفاده از grid و يا List box  که برنامه در صورت ضرورت آنان را تکميل نمايد ) . نکته مهمی که می بايست در رابطه با مرحله خروجی رعايت گردد ، آگاهی از اين موضوع است که با توجه به نمايش نتايج خروجی برای کاربر، بخش فوق را می توان جزئی از بخش رابط کاربر يک نرم افزار در نظر گرفت . در زمان ورود اطلاعات ( مرحله ورودی )  از عناصر متفاوتی بمنظور اخذ اطلاعات توسط کاربر در بخش رابط استفاده می گردد ، در مرحله خروجی ، بخش رابط کاربر با کاربر بگونه ای  ديگر مرتبط خواهد شد ( ارتباطی بمراتب غير فعالتر نسبت به مرحله ورود اطلاعات  ) .

مرحله پاکسازی  ( Cleanup )
مرحله پاکسازی ، بمنظور خاتمه بخشيدن مودبانه يک برنامه، پس از تکميل عمليات مربوطه است. می توان اين مرحله را بعنوان مکمل مرحله مقداردهی اوليه در نظر گرفت .با اينکه تعداد زيادی از برنامه های ساده قادرند بسادگی و بدون انجام عمليات تکميلی توسط برنامه نويس ، خاتمه يابند ولی برنامه های پيچيده زيادی نيازمند برخی کمک ها در اين زمينه می باشند. مثلا" اگر برنامه ای يک فايل Setup را بمنظور مقداردهی برخی از متغيرها در زمان مرحله مقداردهی اوليه ، خوانده باشد ، مرحله پاکسازی می تواند شامل بهنگام سازی آندسته از متغيرهای موجود در فايل Setup باشد که نشاندهنده  آخرين اطلاعات کاربر است . مرحله پاکسازی ، اغلب شامل بستن فايل ها ( فايل های Setup و بانک اطلاعاتی)  است . برخی برنامه ها ميزان استفاده از برنامه توسط کاربران  را ثبت و اطلاعات مربوطه را در مکانهائی  که Log file ناميده می شوند ، ذخيره می نمايند( ثبت مشخصات افراديکه برنامه را اجراء نموده  بهمراه ساير اطلاعات مرتبط نظير  تاريخ و زمان آغاز و توقف برنامه ، در خيلی از برنامه ها به امری ضروری تبديل شده است ) .
يکی ديگر از انواع فايل های Log به  فايل های ثبت خطاء برمی گردد( error log file ) . هدف اين نوع از فايل ها ، ثبت اطلاعاتی در رابطه با هر نوع خطائی است که ممکن است در مدت زمان اجرای يک برنامه ، محقق گردد. برنامه نويسان با استفاده از محتويات اين نوع فايل ها ، قادر به اشکال زدائی برنامه خواهند بود .
عمليات واقعی و مورد نظری که می بايست در مرحله پاکسازی ، انجام گردد ، به نيازهای يک برنامه بستگی خواهد داشت . معمولا" اگر در برخی برنامه ها عمليات خاصی را در مرحله مقدار دهی اوليه انجام می هيم ، می بايست برخی از عمليات متناظر با آنان را  در مرحله پاکسازی انجام داد . باز نمودن و بستن فايل های مورد نياز در يک برنامه ، نمونه ای متداول از دو مرحله فوق می باشد .

آيا هر برنامه شامل پنج مرحله گفته شده است؟
در پاسخ به سوال فوق می بايست با صراحت پاسخ منفی داده شود. در اين راستا ، برنامه های متعددی وجود دارد که مثلا" به مراحل مقداردهی اوليه و يا پاکسازی ، نياز نخواهند داشت . مراحل مقداردهی اوليه و پاکسازی در مرحله طراحی برنامه های پيچيده مورد توجه جدی قرار خواهند گرفت. بموازات افزايش تجربه در نوشتن برنامه ، شناخت مناسبی در اين رابطه  بوجود می آيد(  کدام برنامه به تمام مراحل پنج گانه نياز و کداميک نياز ندارند).طراحان می بايست همواره يک مسئله  برنامه نويسی را با فرض وجود پنج مرحله ياد شده ،دنبال نمائيد . قطعا" حذف يک مرحله در  زمان طراحی بمراتب ساده تر از ناديده گرفتن ! اوليه آن خواهد بود.

پالايش يک طرفه   (  Sideways Refinement )
همانگونه که قبلا" اشاره گرديد ، ما علاقه مند به طراحی بالا به پايين می باشيم .( الگوريتم ماکرو بعنوان يک نقطه شروع در فرآيند طراحی برنامه) . پس از انتخاب رويکرد فوق  ، می بايست شناخت مناسبی نسبت به مسئله ای که قصد حل آن وجود دارد ، ايجاد گردد. تا رسيدن به  سطح ميکرو( ارائه الگوريتم های ميکرو) بمنظور حل مسئله مورد نظر راه زيادی را در پيش خواهيم داشت. بموازات حرکت از سطح مرور کلی برنامه به خصوصيات و ويژگی های يک برنامه ، می بايست دانش خود را نسبت به جرئيات مربوطه افزايش داد .
از پنج مرحله گفته شده ، می توان بمنظور نقطه شروع ديد ماکرو خود در زمان فرآيند طراحی استفاده کرد. درادامه ، می توان هر يک از مراحل را بدقت بررسی تا  جزئيات بيشتری در رابطه با مرحله مورد نظر ، مشخص گردد ( استخراج جزئيات لازم در رابطه با تحقق هر مرحله ) .  فرآيند  فوق ، " پالايش يک طرفه " ، ناميده می شود . در ادامه ، بمنظور شناخت مناسب فرآيند پالايش يک طرفه  ، به بررسی يک نمونه می پردازيم .
فرض کنيد ، کاربری دارای  يک فايل بانک اطلاعاتی است که در آن تمام قرار ملاقات های وی ، ذخيره شده اند . قرار ملاقات ها در بانک اطلاعاتی با نظم و ترتيب خاص ( تاريخ قرار ملاقات ) ذخيره شده اند . کاربر ، می خواهد قادر به مشاهده قرار ملاقات های خود بر اساس حروف الفبائی و بر اساس نام خانوادگی اشخاص مورد نظری که قصد ملاقات با  وی را دارند ، باشد. چگونه می توان از پالايش يک طرفه ، بمنظور طراحی يک را ه حل استفاده کرد؟

پالايش يک طرفه مرحله مقدار دهی اوليه
می دانيم که کاربر دارای يک بانک اطلاعاتی شامل قرار ملاقات ها ، می باشد. ما همچنين می دانيم که کاربر می خواهد ليستی از قرار ملاقات های خود را بصورت مرتب شده و بر اساس نام خانوادگی مشاهده نمايد . موارد فوق ، ديد ماکروی ما از الگوريتم است . بنابراين ، در مرحله مقداردهی اوليه چه عملياتی می بايست انجام داد ؟ واضح است که ما نيازمند باز نمودن بانک اطلاعاتی قرار ملاقات ها می باشيم . ما همچنين نيازمند يک فرم ( مثلا" يک فرم مبتنی بر VB.NET و يا فرم وب ) بمنظور نمايش نتايج پس از مرتب سازی قرار ملاقات ها ، خواهيم بود. ( فرض می شود از مکان  بانک اطلاعاتی بر روی شبکه  آگاهی داريم ، و می توان نام و رمز عبور کاربر را از بانک اطلاعاتی مربوطه  بمحض آغاز اجرای برنامه توسط کاربر ، مشخص کرد) . با استفاده از اطلاعات فوق، اولين "پالايش يک طرفه " ، بصورت زير خواهد بود :

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

شبه کد ( Pseudo Code )
عمليات پالايش را می توان در رابطه با هر مرحله  با استفاده از "شبه - کد " ، دنبال کرد. شبه کد ،الگوريتمی برای بيان عملياتی است که می بايست  توسط يک روتين محقق گردد . در اين راستا از يک گرامر مشابه انگليسی ، استفاده می گردد . مثلا"  شبه کد ، روتين IsValidUser بصورت زير خواهد بود:

شبه کد روتين IsvalidUser

Is ValidUser()
  If  CurrentUserName Not in ValidUserList
        Display Invalid User Error Message
        Terminate Program
  Else
       Return ValidUserIDNumber
End

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

در بخش دوم اين مقاله ،  با متدولوژی UML)Unified Modeling Language ) آشنا خواهيم شد. UML ، يک متدولوژی  طراحی  متداول خصوصا" در زمينه  برنامه نويسی شی گراء است .

UML ،  يک متدولوژی  طراحی   خصوصا" در زمينه  برنامه نويسی شی گراء است .

UML چيست ؟
مراحل پنج گانه برنامه نويسی ، نقطه شروع مناسبی برای  طراحی يک برنامه است ( اولين فاز). در ادامه با استفاده از پالايش ( بهسازی ) يکطرفه  مراحل پنج گانه برنامه نويسی ، فاز دوم طراحی يک برنامه انجام خواهد شد . استفاده از شبه کد بمنظور ارائه جزئيات پالايش ، کمک قابل توجه و مفيدی در ارتباط با طراحی برنامه را بدنبال خواهد داشت . رويکرد فوق ( مراحل پنج گانه برنامه نويسی ) ، روشی مفيد بمنظور طراحی يک برنامه است . در اين راستا برخی از طراحان برنامه های کامپيوتری ترجيح می دهند که از يک روش دقيق تر و موشکافانه تر استفاده نمايند . UML(Unified Modeling Language) مبتنی بر چنين رويکردی است .
UML ،زبانی استاندارد بمنظور مشخص نمودن ، پيش بينی ، ايجاد و مستند سازی توليدات نرم افزاری است . UML ، مجموعه ای از بهترين امکانات مهندسی را بمنظور استفاده در مدل سازی سيستم های بزرگ و پيچيده ارائه که کارآئی آنان به اثبات رسيده است . UML يک متدولوژی رسمی برای پياده سازی نرم افزار است .

روند شکل گيری UML
برنامه نويسی شی گراء ( OOP ) ، از اوايل  سال 1960 مطرح  گرديد . برنامه نويسی شی گراء با اينکه  بعنوان يک ايده جديد مطرح شده بود ولی بسرعت زبان های مدل سازی شی گراء برای پوشش ايده فوق ، مطرح و پياده سازی گرديدند. در فاصله سال های 1970 تا اواخر 1980 چندين زبان مدل سازی شی گراء پياده سازی گرديد . تعداد زبان ها ی مدل سازی شی گراء در سال 1995 به بيش از پنجاه نمونه رسيده بود .
از افراد فعال و پيشرو در اين زمينه می توان به  Jim Rumbaugh ( شرکت جنرال الکتريک )، Grady Booch  ( شرکت Rational software  )  و  Ivar Jacobson  ( شرکت  Objectory )  اشاره نمود. هر يک از افراد فوق ، تلاش گسترده ای  را در جهت مدل سازی زبان برنامه نويسی انجام داده بودند . در سال 1994 ، Rumbaugh شرکت جنرال الکتريک را ترک و به Booch در شرکت Rational Software ملحق گرديد. يک سال بعد ، شرکت Rational Software ، شرکت Objectory را خريداری و افراد ياد شده همکاری  خود را با يکديگر و در يک شرکت مشترک آغاز نمودند. ماحصل همکاری فوق ، ارائه  اولين نسخه UML 0.9 توسط شرکت Rational software  در سال 1996 بود .
در ساليان بعد ، OMG)Object Management Group) ،  تلاش های گسترده ای را بمنظور ارتقاء و  بهسازی UML آغاز نمود. در اواسط سال 2001 ، اعضاء OMG ، کار خود را بمنظور ارتقاء به UML 2.0 آغاز نمودند. در حا ل حاضر ، UML شامل مدل سازی ويژوال ، شبيه سازی و امکانات پياده سازی است . تعداد زيادی از ابزارهای UML طراحی و در اختيار علاقه مندان قرار گرفتند .  Rational Rose 2002  از شرکت Rational Software  ، نرم افزار Describe Enterprise از شرکت Embarcadero Technologies و Visio 2002  از شرکت مايکروسافت . نمونه هائی از ابزارهای UML می باشند .

دياگرام های UML
UML يک ابزار ويژوال بوده و از انواع متفاوتی دياگرام استفاده می نمايد . هر يک از دياگرام های  UML ، امکان مشاهده يک سيستم نرم افزاری را از ديدگاههای متفاوت و با توجه به درجات متفاوت Abstraction در اختيار پياده کنندگان قرار می دهد. برخی از دياگرام های UML عبارتند از :

  • Class Diagram
  • State Diagram
  • Sequence Diagram
  • Collaboration Diagram
  • Activity Diagram
  • Component Diagram
  • Deployment Diagram
     

آناليز شی گراء  (OOA)
آناليز شی گراء  و يا OOA ، يک متدولوژی قدرتمند برای تجزيه و تحليل  فرآيند پياده سازی نرم افزار است . در زمان استفاده از OOA ،  هر چيز در فرآيند پياده سازی نرم افزار بمنزله کلاس در نظر گرفته خواهد شد ( اين طرز تفکر می بايست محور آناليز سيستم قرار گيرد ) . مثلا" در يک بيمارستان هر يک از عناصر موجود نظير : دکتر ، پرستار ، بيمار و ملاقات کننده ، بمنزله يک کلاس در نظر گرفته می شوند . هر نسخه جديدی که از يک کلاس ايجاد می گردد ، بمنزله يک نمونه ( Instance ) از کلاس در نظر گرفته خواهد شد . محوريت فرآيند آناليز شی گراء ، تاکيد بر ايجاد کلاس های مورد نياز سيستم است .
مهمترين و اصلی ترين رويکرد OOA ،يافتن پاسخ مناسب برای سوالاتی است که با What شروع و در  فرآيند پياده سازی نرم افزار حضوری موثر دارند . نمونه سوالات OOA در اين زمينه عبارتند از : " چه کلاس هائی در برنامه وجود دارد؟"  . " چه چيزی را برنامه انجام خواهد داد ؟"  " هر يک از کلاس ها در برنامه چه عملياتی را بمنظور حل مسئله انجام خواهند داد ؟"  " مسئوليت هر کلاس در برنامه چيست ؟" در  OOA ، تاکيد بر آناليز اشياء ، فعاليت ها و مسئوليت های سيستم نرم افزاری است .

طراحی شی گراء ( OOD )
نکته اساسی  در طراحی شی گراء ، تاکيد و سرو کار داشتن با سوالاتی است که با  How  شروع و در فرآيند پياده سازی  نرم افزار حضوری فعال و موثر خواهند داشت . " چگونه اين کلاس داده را جمع آوری می کند ؟" . " چگونه اين کلاس گزارش را چاپ می نمايد ؟"  ، نمونه سوالاتی در اين زمينه می باشند .در نمونه مثال بيمارستان، وضعيت فوق  به خصلت ها ، صفات و متدهای يک کلاس  مرتبط می گردد .
بنابراين OOA ، کلاس های مورد نظر و ضروری  بمنظور نيل به اهداف نرم افزار را مشخص می نمايد و محور عمليات بر جستجو و تبين جايگاه يک کلاس در برنامه متمرکز است . در OOD ، تاکيد بر پياده سازی  کلاس ها ، صفات و خصايصی است   که بمنزله هسته يک کلاس مطرح می گردند . ترکيب  هر يک از فعاليت های فوق ( آناليز شی گراء و طراحی شی گراء ) بهمراه پياده سازی لينک هائی که با کلاس ها سروکار دارند جملگی بعنوان  بخشی از فرآيند OOP ( برنامه نويسی شی گراء ) محسوب می گردند.

دي