با سلام.
من ديروز تمام وقت خود را روي ساختن برنامه مركزي شطرنج باز اختصاص دادم.
مسابقات شطرنج
و متوجه چيزهاي جالبي شدم كه عرض مي كنم.
من يك لحظه خود را جاي طراح ويژوال سي احساس كردم.
من كدهايي نوشتم كه اسكلت برنامه را تشكيل مي داد و بايستي اين كدهاي من پذيراي كدهاي شركت كننده ها در مسابقه مي بود.
دو چيز مهم بود:
اول اينكه استفاده كننده از برنامه من بايد كدهايش را كجا وارد مي كرد
و دوم اينكه با ساير قسمتهاي برنامه چطور ارتباط برقرار مي كرد.
و اين قضيه دقيقا در ويژوال سي هم مطرح است.
طراح ويژوال سي ، آمده براي راهنمايي ما ، كامنت هايي وسطهاي برنامه گذاشته كه محل درج را نشان بدهد.
و شايد بخاطر كمك بيشتر آمده class wizard را هم محيا كرده براي همين كار .
در پستهاي قبلي با استفاده از كلاس ويزارد آمديم براي يك دكمه ، محل كدش را پيدا كرديم.
و همچنين مواقعي هست كه چند جا بايد كد درج بشود كه كلاس ويزارد اين كار را براي ما مي كند.
اما اين كدهاي خود ويژوال سي چيه را در اين تاپيك نمي خواهيم واردش بشويم و در تاپيك ((ويژوال سي – مفاهيم )) بحث مي كنيم.
منظور همان كدهايي است كه در شروع ساخت پروژه app wizard مي سازد.
نكته ديگر در آن برنامه شطرنج ، روش ارتباط با ديگر قسمتها بود.
من ابتدا با ارسال ورودي و دريافت return از تابعي كه بازيكن نوشته بود كار كردم.
ولي بعدش كل برنامه را تغيير دادم. و ورودي و خروجي بازيكن را مقاديري گلوبال تعيين كردم.
علتش اين بود كه ارسال مقادير به تابع بازيكن برايم مشكل بود و كدها حجمش خيلي بيشتر مي شد.
و چيزي كه الان در تاپيك ((مسابقات شطرنج)) است ، همان حالت گلوبال است. و حدود 10 تا 20 خط را با اين تغيير توانستم پاك كنم.
پس در ويژوال سي هم اول محل نشستن كدهاي ما مهم است و بعد طريقه ارتباط برقرار كردن برنامه ما با ديگر قسمتهاي برنامه.
كه ايجاد مسيج ها براي همين ارتباط است.
= == = = = = = == = = = = = = =
از ديگر نكات يك برنامه خوب ، تقسيم بندي به قطعاتي است كه كه هر يك كار مشخصي انجام مي دهد.
در آن برنامه شطرنج من تابع هاي ((نمايش)) و ((مخزن)) را داشتم . و 4 تابع ديگر كه دو تا بازيكن سفيد و سياه بود و دو تابع ((چك كننده حركات سفيد )) و (( چك كننده حركات سياه)) .
من طوري طراحي كردم اين تابع ها را كه از هم مستقل عمل كنند و بعدا بشه راحت تغييرشان داد بي آنكه از شركت كنندگان در مسابقه بخواهيم كد خود را عوض كنند.
در ويژوال سي هم كلاس ((داكيومنت )) و كلاس (( view )) را داريم.
من هنوز به وظيفه آنها مسلط نيستم ولي مثلا يكي براي ذخيره در ديسك است و يكي براي نمايش.
شما وقتي نمي خواهيد چيزي را ذخيره كنيد در ديسك با كلاس داكيومنت كاري نداريد و بيشتر با كلاس view كار مي كنيد كه براي نمايش است.
در برنامه شطرنج من ، تابع (( مخزن)) در حقيقت يك كلاس است . چون يك آرايه را نگهداري مي كند و تابع هاي مستقلي را با دستور switch ، وابسته به ورودي تابع ، صدا مي زند. ولي من نخواستم كلاس تعريف كنم . چون گفتم شايد كسي كلاس بلد نباشد و فكر كند چيز بزرگي است.
در ويژوال سي هم كلاسهاي زيادي وجود دارد كه من در msdn ليست بزرگي از آنها را شامل تابع هاي آنها و ديگر متعلقاتي كه يك كلاس دارد را دارم.
اگر ما بدانيم يك كلاس چه امكاناتي براي ما فراهم مي آورد ، ديگه ترسي ندارد و انگار خودمان آن را نوشته ايم.
باز در برنامه شطرنج خود من مي توانم قسمت نمايش را با ويژوال بيسيك يا ويژوال سي بسازم و هيچ ضربه اي به ديگر قسمتهاي برنامه نمي زند.
و اين براي من خيلي مهم بود كه من فردا به بازيكن ها نگويم كه بايد كد خود را عوض كنيد.
حالا با اين بحث ديد بهتري نسبت به كلاسهايي كه هر يك در ويژوال سي كاري را براي ما انجام مي دهد پيدا كرديم.
در ويژوال سي هر كار ، مثلا نمايش را ، به يك كلاس سپرده اند. و هر كلاس در يك فايل هدر معرفي و در فايل cpp همطراز خود تعريف ميشه.
بعدا با شناخت بيشتر اين كلاسها ، به طرز استفاده آنها بيشتر مسلط مي شويم.
يكسري ابزار هم داريم كه باز كلاس است و ما مدام از آنها استفاده مي كنيم.
در آن عكس بزرگي كه من از توابع mfc گذاشته ام ، يك نوع طبقه بندي نموداري اين كلاسها را مي بينيد.
= == = = = == = == = = = == =
من سعي مي كنم بعد هر برنامه كه در پستهاي بعدي كار كرديم،
به نكات زير بپردازم.
اول قبل شروع كار ما ، چه كدهايي app wizard به ما داده بود و بعد ساختن برنامه امان چه كدهايي لابلاي اين كدها اضافه شد.
دوم: برنامه ما با چه مسيج هايي با ديگر قسمتهاي برنامه ارتباط برقرار مي كند.
سوم : از چه كلاسهايي استفاده كرديم و آن كلاس چه اعضايي دارد و كمي آن اعضا را معرفي كنيم.